Browse Source

平天路推送

huangtf 5 months ago
parent
commit
13261744da

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

@@ -194,6 +194,7 @@ public class ExternalDataArchiveAutoService {
                     // 合并更新字段(示例:更新 outUrl)
                     localArchive.setOutUrl(externalArchive.getOutUrl());
                     localArchive.setName(externalArchive.getName());
+                    localArchive.setFileNumber(externalArchive.getFileNumber());
                     upArchives.add(localArchive);
                 }
             }
@@ -204,7 +205,8 @@ public class ExternalDataArchiveAutoService {
     private boolean needUpdate(ArchivesAuto external, ArchivesAuto local) {
         // 检查关键字段差异
         return !Objects.equals(external.getOutUrl(), local.getOutUrl())
-                || !Objects.equals(external.getName(), local.getName());
+                || !Objects.equals(external.getName(), local.getName())
+                || !Objects.equals(external.getFileNumber(), local.getFileNumber());
 
         // 扩展检查示例(如需其他字段比较,可追加条件):
         // || !Objects.equals(external.getFileNumber(), local.getFileNumber())

+ 15 - 4
blade-service/blade-archive/src/main/java/org/springblade/archive/external/impl/ExternalDataArchiveFileService.java

@@ -3,6 +3,7 @@ package org.springblade.archive.external.impl;
 import lombok.AllArgsConstructor;
 import org.springblade.archive.entity.ArchivesAuto;
 import org.springblade.archive.external.bean.ExternalDataInfo;
+import org.springblade.archive.external.utils.TransUtil;
 import org.springblade.archive.mapper.ArchivesAutoMapper;
 import org.springblade.archive.trans.ArchiveAutoVo;
 import org.springblade.archive.trans.ArchiveFileVo;
@@ -160,10 +161,19 @@ public class ExternalDataArchiveFileService {
 
     // 辅助方法:判断是否需要更新
     private boolean needUpdate(ArchiveFile external, ArchiveFile local) {
-        // 示例:检查关键字段是否变化
-        return !Objects.equals(external.getFileUrl(), local.getFileUrl())
-                || !Objects.equals(external.getPdfPageUrl(), local.getPdfPageUrl())
-                || !Objects.equals(external.getFileSize(), local.getFileSize());
+        String extUtimeStr = formatTime(external.getUtime());
+        String localUtimeStr = formatTime(local.getUtime());
+
+        // 字符串严格比较:格式或内容不同即视为不一致
+        return !Objects.equals(extUtimeStr, localUtimeStr)
+                || !Objects.equals(external.getPdfPageUrl(), local.getPdfPageUrl());
+    }
+
+    /**
+     * 将时间统一格式化为字符串(精确到秒)
+     */
+    private String formatTime(LocalDateTime time) {
+        return time != null ? time.format(TransUtil.FORMATTER) : null;
     }
 
     // 辅助方法:更新本地文件字段
@@ -173,6 +183,7 @@ public class ExternalDataArchiveFileService {
         local.setPdfPageUrl(external.getPdfPageUrl());
         local.setFilePage(external.getFilePage());
         local.setFileSize(external.getFileSize());
+        local.setUtime(external.getUtime());
     }
 
 

+ 3 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/external/utils/TransUtil.java

@@ -5,12 +5,15 @@ import org.springblade.business.entity.MetadataClassification;
 import org.springblade.common.utils.SnowFlakeUtil;
 
 import java.text.SimpleDateFormat;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
 public class TransUtil {
 
+    public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
     private static final ConcurrentMap<Long, ExternalDataInfo> dataMap = new ConcurrentHashMap<>();
 
     public static final Map<String, Long> EXTERNAL_TO_INTERNAL_NODE_ID_MAP = new LinkedHashMap<String, Long>() {{

+ 3 - 2
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml

@@ -1358,9 +1358,10 @@
 
 
     <select id="getOutArchiveFilesByOutIds" resultMap="archiveFileResultMap1">
-        select  *
+        select  id,utime,out_id,pdf_page_url
         from u_archive_file
-        where
+
+        where project_id = #{projectId} and is_deleted = 0 and
         out_id in
         <foreach collection="ids" item="id" open="(" separator="," close=")">
             #{id}

+ 46 - 1
blade-service/blade-business/src/main/java/org/springblade/business/feignClient/ArchiveFileClientImpl.java

@@ -23,6 +23,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 
 @RestController
@@ -353,7 +355,50 @@ public class ArchiveFileClientImpl implements ArchiveFileClient {
 
     @Override
     public void updateArchiveFileEx(List<ArchiveFile> files) {
-        iArchiveFileService.updateBatchById(files);
+        // 1. 提取传入文件列表中的所有ID(过滤空值)
+        List<Long> ids = files.stream()
+                .map(ArchiveFile::getId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toList());
+
+        if (ids.isEmpty()) {
+            return;
+        }
+
+        // 2. 根据ID批量查询现有记录
+        LambdaQueryWrapper<ArchiveFile> wrapper = Wrappers.lambdaQuery();
+        wrapper.in(ArchiveFile::getId, ids);
+        List<ArchiveFile> existFiles = iArchiveFileService.list(wrapper);
+
+        // 3. 将传入文件列表转换为Map<ID, 文件对象>便于查找
+        Map<Long, ArchiveFile> externalFileMap = files.stream()
+                .collect(Collectors.toMap(
+                        ArchiveFile::getId,
+                        Function.identity(),
+                        (existing, replacement) -> existing // 处理重复ID,保留第一个
+                ));
+
+        // 4. 更新需要同步的字段
+        List<ArchiveFile> updateList = existFiles.stream()
+                .map(local -> {
+                    ArchiveFile external = externalFileMap.get(local.getId());
+                    if (external != null) {
+                        // 仅更新指定字段(根据业务需求调整)
+                        local.setFileUrl(external.getFileUrl());
+                        local.setEVisaFile(external.getEVisaFile());
+                        local.setPdfPageUrl(external.getPdfPageUrl());
+                        local.setFilePage(external.getFilePage());
+                        local.setFileSize(external.getFileSize());
+                        local.setUtime(external.getUtime());
+                    }
+                    return local;
+                })
+                .collect(Collectors.toList());
+
+        // 5. 批量更新(建议分批处理,如每500条一次)
+        if (!updateList.isEmpty()) {
+            iArchiveFileService.updateBatchById(updateList);
+        }
     }
 
 }