cr 2 týždňov pred
rodič
commit
2b9e4ee100

+ 72 - 14
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/ArchiveFile.java

@@ -17,6 +17,7 @@
 package org.springblade.business.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import org.springblade.archive.trans.ArchiveFileVo;
 import org.springblade.archive.trans.ArchiveTreeVo;
@@ -387,25 +388,31 @@ public class ArchiveFile extends BaseEntity {
             LocalDateTime dateTime = null;
 
             try {
-                // 首先尝试完整日期时间格式:yyyy-MM-dd HH:mm:ss
-                DateTimeFormatter fullFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-                dateTime = LocalDateTime.parse(upTimeStr, fullFormatter);
+                // 首先尝试带有T分隔符的ISO格式:yyyy-MM-dd'T'HH:mm:ss
+                DateTimeFormatter isoFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
+                dateTime = LocalDateTime.parse(upTimeStr, isoFormatter);
             } catch (DateTimeParseException e1) {
                 try {
-                    // 其次尝试纯日期格式:yyyy-MM-dd
-                    LocalDate date = LocalDate.parse(upTimeStr, DateTimeFormatter.ISO_LOCAL_DATE);
-                    dateTime = date.atStartOfDay(); // 时间设为00:00:00
+                    // 其次尝试完整日期时间格式:yyyy-MM-dd HH:mm:ss
+                    DateTimeFormatter fullFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+                    dateTime = LocalDateTime.parse(upTimeStr, fullFormatter);
                 } catch (DateTimeParseException e2) {
                     try {
-                        // 最后尝试紧凑日期格式:yyyyMMdd(8位数字)
-                        if (upTimeStr.matches("\\d{8}")) {
-                            DateTimeFormatter compactFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
-                            LocalDate date = LocalDate.parse(upTimeStr, compactFormatter);
-                            dateTime = date.atStartOfDay();
-                        }
+                        // 再尝试纯日期格式:yyyy-MM-dd
+                        LocalDate date = LocalDate.parse(upTimeStr, DateTimeFormatter.ISO_LOCAL_DATE);
+                        dateTime = date.atStartOfDay(); // 时间设为00:00:00
                     } catch (DateTimeParseException e3) {
-                        // 所有格式尝试失败
-                        System.out.println("无法解析的日期时间格式: " + upTimeStr);
+                        try {
+                            // 最后尝试紧凑日期格式:yyyyMMdd(8位数字)
+                            if (upTimeStr.matches("\\d{8}")) {
+                                DateTimeFormatter compactFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+                                LocalDate date = LocalDate.parse(upTimeStr, compactFormatter);
+                                dateTime = date.atStartOfDay();
+                            }
+                        } catch (DateTimeParseException e4) {
+                            // 所有格式尝试失败
+                            System.out.println("无法解析的日期时间格式: " + upTimeStr);
+                        }
                     }
                 }
             }
@@ -450,6 +457,57 @@ public class ArchiveFile extends BaseEntity {
 
     }
 
+    /**
+     * 解析多种格式的日期时间字符串为 LocalDateTime
+    * @param dateTimeStr 日期时间字符串
+    * @return LocalDateTime 对象
+    */
+    private LocalDateTime parseLocalDateTime(String dateTimeStr) {
+        if (dateTimeStr == null || dateTimeStr.trim().isEmpty()) {
+            return null;
+        }
+
+        String trimmedStr = dateTimeStr.trim();
+        LocalDateTime dateTime = null;
+
+        // 定义可能的日期时间格式
+        DateTimeFormatter[] formatters = {
+                DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"), // ISO 格式
+                DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"),   // 标准格式
+                DateTimeFormatter.ISO_LOCAL_DATE_TIME,                // ISO 标准格式
+                DateTimeFormatter.ISO_LOCAL_DATE                     // 只有日期的格式
+        };
+
+        for (DateTimeFormatter formatter : formatters) {
+            try {
+                if (formatter.equals(DateTimeFormatter.ISO_LOCAL_DATE)) {
+                    // 如果是日期格式,转换为 LocalDateTime(时间部分为 00:00:00)
+                    LocalDate date = LocalDate.parse(trimmedStr, formatter);
+                    return date.atStartOfDay();
+                } else {
+                    return LocalDateTime.parse(trimmedStr, formatter);
+                }
+            } catch (DateTimeParseException e) {
+                // 继续尝试下一个格式
+            }
+        }
+
+        // 尝试匹配 yyyyMMdd 格式
+        if (trimmedStr.matches("\\d{8}")) {
+            try {
+                DateTimeFormatter compactFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+                LocalDate date = LocalDate.parse(trimmedStr, compactFormatter);
+                return date.atStartOfDay();
+            } catch (DateTimeParseException e) {
+                // 忽略异常,继续执行
+            }
+        }
+
+        // 所有格式尝试失败
+        System.out.println("无法解析的日期时间格式: " + dateTimeStr);
+        return null;
+    }
+
     public void setFileTime(String fileTime) {
         if (fileTime == null || fileTime.equals("null") ) {
             this.fileTime = "";

+ 42 - 40
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java

@@ -628,54 +628,56 @@ public class ArchivesAutoController extends BladeController {
 	public R reCreateArchiveAuto(@ApiParam(value = "主键集合", required = true) @RequestParam String ids,@ApiParam(value = "合并后的文件题目", required = true)String name){
 		//先查出勾选的案卷
 		List<ArchivesAuto> archivesAutoList=archivesAutoService.listByIds(Func.toLongList(ids));
-		if(archivesAutoList.size()<=1){
-			return R.fail("请选择多个案卷进行合并");
-		}
-		archivesAutoList.sort(Comparator.comparingInt(a -> {
-			String fileNumber = a.getFileNumber();
-			if (fileNumber == null || fileNumber.isEmpty()) {
-				return Integer.MAX_VALUE;
-			}
-			String[] parts;
-			if (fileNumber.indexOf("_") > 0) {
-				parts = fileNumber.split("_");
-			} else if (fileNumber.indexOf("-") > 0) {
-				parts = fileNumber.split("-");
-			} else {
-				return Integer.MAX_VALUE;
-			}
-			if (parts.length > 0) {
-				try {
-					return Integer.parseInt(parts[parts.length - 1]);
-				} catch (NumberFormatException e) {
-					return Integer.MAX_VALUE;
-				}
-			}
-			return Integer.MAX_VALUE;
-		}));
-		//根据档号后缀排序 拿到第一个
-		ArchivesAuto auto = archivesAutoList.get(0);
+//		if(archivesAutoList.size()<=1){
+//			return R.fail("请选择多个案卷进行合并");
+//		}
 		//查出所有案卷文件
 		List<ArchiveFile>archiveFileList=new ArrayList<>();
 		List<Long> longList = Func.toLongList(ids);
 		for (Long id : longList) {
 			archiveFileList.addAll(archiveFileClient.getArchiveFileByArchiveIds(id+""));
 		}
-		//将除第一个以外的案卷文件archiveId 设置成第一个的id
-		List<ArchiveFile>updateArchiveFileList=new ArrayList<>();
-		int i=1;
-		for (ArchiveFile file : archiveFileList) {
-			if (!file.getArchiveId().equals(auto.getId())) {
-				file.setArchiveId(auto.getId());
+		//根据档号后缀排序 拿到第一个
+		ArchivesAuto auto = archivesAutoList.get(0);
+		if(longList.size()>1){
+			archivesAutoList.sort(Comparator.comparingInt(a -> {
+				String fileNumber = a.getFileNumber();
+				if (fileNumber == null || fileNumber.isEmpty()) {
+					return Integer.MAX_VALUE;
+				}
+				String[] parts;
+				if (fileNumber.indexOf("_") > 0) {
+					parts = fileNumber.split("_");
+				} else if (fileNumber.indexOf("-") > 0) {
+					parts = fileNumber.split("-");
+				} else {
+					return Integer.MAX_VALUE;
+				}
+				if (parts.length > 0) {
+					try {
+						return Integer.parseInt(parts[parts.length - 1]);
+					} catch (NumberFormatException e) {
+						return Integer.MAX_VALUE;
+					}
+				}
+				return Integer.MAX_VALUE;
+			}));
+			//将除第一个以外的案卷文件archiveId 设置成第一个的id
+			List<ArchiveFile>updateArchiveFileList=new ArrayList<>();
+			int i=1;
+			for (ArchiveFile file : archiveFileList) {
+				if (!file.getArchiveId().equals(auto.getId())) {
+					file.setArchiveId(auto.getId());
+				}
+				file.setArchiveSort(i++);
+				updateArchiveFileList.add(file);
 			}
-			file.setArchiveSort(i++);
-			updateArchiveFileList.add(file);
+			archiveFileClient.updateArchiveFile(updateArchiveFileList);
+			auto.setName(name);
+			//删除其他案卷
+			archivesAutoList.remove(auto);
+			archivesAutoService.deleteLogic(archivesAutoList.stream().map(o->o.getId()).collect(Collectors.toList()));
 		}
-		archiveFileClient.updateArchiveFile(updateArchiveFileList);
-		auto.setName(name);
-		//删除其他案卷
-		archivesAutoList.remove(auto);
-		archivesAutoService.deleteLogic(archivesAutoList.stream().map(o->o.getId()).collect(Collectors.toList()));
 		//设置案卷页码和四要素
 		archivesAutoService.reCreateArchiveAuto(auto, archiveFileList);
 		return R.status(true);

+ 3 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -102,6 +102,7 @@ import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.zip.Deflater;
 import java.util.zip.ZipEntry;
@@ -4652,7 +4653,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 				if (StringUtils.isNotEmpty(dto.getQuery())) {
 					String name = archivesAuto.getName();
 					if (StringUtils.isNotEmpty(name) && name.contains(dto.getQuery())) {
-						String newName = name.replaceAll(dto.getQuery(), "");
+						String escapedQuery = Pattern.quote(dto.getQuery());
+						String newName = name.replaceAll(escapedQuery, "");
 						archivesAuto.setName(newName);
 						auto.setId(archivesAuto.getId());
 						auto.setName(archivesAuto.getName());

+ 2 - 1
blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.xml

@@ -156,7 +156,8 @@
     </select>
 
     <select id="selectArchiveFilePage" resultMap="archiveFileResultMap">
-        select u.* from u_archive_file u
+        select u.id,u.project_id,u.contract_id,u.node_id,u.file_number,u.file_name,u.file_time,u.file_url,u.pdf_file_url,u.file_page,u.is_approval,u.is_certification,u.is_need_certification,u.duty_user,u.create_user,u.create_dept,u.create_time,u.update_user,u.update_time,u.status,u.is_deleted,u.sheet_type,u.sheet_source,u.drawing_no,u.cite_change_number,u.certification_time,u.e_visa_file,u.node_ext_id,u.file_type,u.archive_id,u.origin_id,u.filming_time,u.filmingor_time,u.tag_id,u.pic_code,u.refer_code,u.film_code,u.width,u.height,u.ftime,u.del_time,u.sort,u.box_name,u.box_number,u.is_auto_file,u.is_archive,u.page_num,u.file_size,u.source_type,u.is_element,u.pdf_page_url,u.fid,u.rectification,u.classify,u.m_wbs_tree_contract_p_key_id,u.u_image_classification_file_id,u.archive_file_storage_type,u.node_tree_structure,u.date_name,u.archive_file_stroage_type,u.out_id,u.sort_num,u.is_lock,u.archive_sort,u.remark,u.m_album_id
+        from u_archive_file u
         <if test="vo.nodeIds != null and vo.nodeIds != ''">
             left join m_archive_tree_contract t on t.id = u.node_id and t.is_deleted= 0
             <if test="vo.extType != null">

+ 1 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/ArchiveFileServiceImpl.java

@@ -143,6 +143,7 @@ public class ArchiveFileServiceImpl extends BaseServiceImpl<ArchiveFileMapper, A
         for (int i = 0; i < list.size(); i++) {
             ids2.append(list.get(i).getId() + ",");
             list.get(i).setSort(listInt.get(i));
+            list.get(i).setArchiveSort(i);
             if (list.get(i).getIsUpdateUrl() != null && list.get(i).getIsUpdateUrl() == 1) {
                 ids.append(list.get(i).getId() + ",");
                 if (list.get(i).getRectification() != null && list.get(i).getRectification() == 1) {