Răsfoiți Sursa

关联原生电子文件到归档

huangtf 2 ani în urmă
părinte
comite
1ac6f6e80b

+ 3 - 3
blade-common/src/main/java/org/springblade/common/utils/INodeEx.java

@@ -12,13 +12,13 @@ public interface INodeEx<T> extends Serializable {
 
     List<T> getChildren();
 
-    Long getFromId();
+    default Long getFromId() {return 0L;};
 
     String getAncestors();
 
     Integer getSort();
 
-    String getTreeSort();
+    default String getTreeSort() {return "";};
 
     Long getValue();
 
@@ -26,7 +26,7 @@ public interface INodeEx<T> extends Serializable {
 
     void setParentId(Long parentId);
 
-    void setFromId(Long fromId);
+    default void setFromId(Long fromId) {};
 
     void setAncestors(String ancestors);
 

+ 2 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -1021,13 +1021,13 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
         ArchiveFile archiveFile = new ArchiveFile();
         archiveFile.setNodeId(nodeId.toString());
         archiveFile.setNodeExtId(keyId);
+        archiveFile.setProjectId(query.getProjectId() == null?"":query.getProjectId().toString());
         archiveFile.setContractId(query.getContractId().toString());
         archiveFile.setStatus(2); // 这里是新增归档文件,所以状态为1(已完成)
         //TODO 文件题名规则,待补充
         fillFileNameAndTime(archiveFile,query);
-
-        archiveFile.setProjectId(query.getProjectId() == null?"":query.getProjectId().toString());
         archiveFile.setSourceType(1);
+        archiveFile.setIsArchive(0);
 
         //责任人怎么取
         archiveFile.setDutyUser(unit);

+ 9 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.java

@@ -19,7 +19,10 @@ package org.springblade.manager.mapper;
 
 import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Param;
+import org.springblade.business.entity.ArchiveFile;
+import org.springblade.business.entity.InformationQuery;
 import org.springblade.manager.entity.ArchiveTreeContract;
+import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.vo.ArchiveTreeContractVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -110,4 +113,10 @@ public interface ArchiveTreeContractMapper extends BaseMapper<ArchiveTreeContrac
     ArchiveTreeContract getArchiveTreeContractByContractId(@Param("contractId") Long contractId);
 
     int updateByNodeName(@Param("contractName") String contractName,@Param("name") String name,@Param("id") Long id);
+
+    void updateBatchFileSortById(@Param("list") List<ArchiveFile> archiveFiles);
+
+     List<ArchiveFile> getListByContractId(@Param("contractId") Long contractId);
+
+    List<InformationQuery> getInformationByContractId(@Param("contractId") Long contractId);
 }

+ 35 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml

@@ -507,4 +507,39 @@
         where node_name = #{contractName} and contract_id = #{id}
     </update>
 
+    <update id="updateBatchFileSortById">
+        <foreach collection="list" item="item" index="index" separator=";">
+            update u_archive_file
+            <set>
+                sort = #{item.sort}
+            </set>
+            where id = #{item.Id}
+        </foreach>
+    </update>
+
+    <select id="getListByContractId" resultType="org.springblade.business.entity.ArchiveFile">
+        select id,
+               project_id   as projectId,
+               node_id      as nodeId,
+               node_ext_id  as nodeExtId,
+               file_name    as fileName,
+               pdf_file_url as pdfFileUrl,
+               sort
+        from u_archive_file
+        where contract_id = #{contractId} and is_deleted = 0;
+    </select>
+
+    <select id="getInformationByContractId" resultMap="org.springblade.business.entity.InformationQuery">
+        id,
+        wbs_id as wbsId,
+        name,
+        e_visa_pdf_url as eVisaPdfUrl,
+        business_time as businessTime,
+        e_visa_pdf_page as eVisaPdfPage,
+        e_visa_pdf_size as eVisaPdfSize
+        from u_information_query
+        where is_deleted = 0
+          and contract_id = #{contractId} and is_deleted = 0;
+    </select>
+
 </mapper>

+ 90 - 30
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractSyncImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import org.springblade.business.entity.ArchiveFile;
 import org.springblade.business.entity.InformationQuery;
+import org.springblade.business.feign.ArchiveFileClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.manager.entity.ArchiveTreeContract;
 import org.springblade.manager.entity.ContractInfo;
@@ -36,6 +37,8 @@ public class ArchiveTreeContractSyncImpl {
 
     private final IContractInfoService contractInfoService;
 
+    private final ArchiveFileClient archiveFileClient;
+
 
 
 
@@ -227,6 +230,11 @@ public class ArchiveTreeContractSyncImpl {
     }
 
 
+    /**
+     * 同步某个合同段的质检资料到归档
+     * @param projectId
+     * @param contractId
+     */
     public void  syncBusinessData(Long projectId,Long contractId) {
 
         //检查是否有配置关联质检的节点
@@ -277,17 +285,45 @@ public class ArchiveTreeContractSyncImpl {
             archiveTreeContractIdMap.put(ar.getExtKeyId(),ar.getId());
         }
 
+        //获取合同段wbs划分树,用来组织树
+        List<WbsTreeContractVO6> wbsTrees = contractInfoService.tree8(lWbsId.toString(), projectId.toString(), contractId.toString());
+        if (wbsTrees == null || wbsTrees.size() == 0) {
+            return ;
+        }
+
+        //将树转换成list
+        List<WbsTreeContractVO6> wbsTreeContractVO6s = new ArrayList<>();
+        ForestNodeMerger.getTreeList(wbsTrees.get(0), wbsTreeContractVO6s);
+
+        Integer i = 0;
+        //id 到 wbs节点的映射
+        Map<Long,WbsTreeContractVO6> wbsTreeContractVO6Map = new HashMap<>();
+        // keyid 到id的映射
+        Map<Long,Long> wbsTreeKeyToIdMap = new HashMap<>();
+        Map<Long,Integer> wbsTreeKeyToSortMap = new HashMap<>();
+        for (WbsTreeContractVO6 wbsTreeContractVO6 : wbsTreeContractVO6s) {
+            i++;
+            wbsTreeKeyToSortMap.put(wbsTreeContractVO6.getPKeyId(),i);
+            wbsTreeContractVO6Map.put(wbsTreeContractVO6.getId(),wbsTreeContractVO6);
+            wbsTreeKeyToIdMap.put(wbsTreeContractVO6.getPKeyId(),wbsTreeContractVO6.getId());
+        }
+
         //遍历,所有已归档文件
         for (InformationQuery info: informationQueryList) {
 
             if (info.getWbsId() != null) {
                 ArchiveFile archiveFile = archiveKeyIdMap.get(info.getWbsId());
+                Integer sort = wbsTreeKeyToSortMap.get(info.getWbsId());
 
                 //归档文件里没有则新增
                 if ( archiveFile == null) {
+                    if (sort!= null) {
+                        info.setSort(sort);
+                    }
                     newInformationQueryList.add(info);
-                }//文件不同,则说明重签过,需要更新
-                else if (!archiveFile.getPdfFileUrl().equals(info.getEVisaPdfUrl())) {
+                }//文件不同,则说明重签过,需要更新,顺序不同也更新
+                else if (!archiveFile.getPdfFileUrl().equals(info.getEVisaPdfUrl())
+                || (sort!= null && sort != archiveFile.getSort()) ) {
 
                     //需要更新的
                     //todo 后续需增加判断已组件或者锁定的不要更新?
@@ -295,32 +331,12 @@ public class ArchiveTreeContractSyncImpl {
                     archiveFile.setEVisaFile(info.getEVisaPdfUrl());
                     archiveFile.setFilePage(info.getEVisaPdfPage());
                     archiveFile.setFileSize(info.getEVisaPdfSize());
+                    archiveFile.setSort(sort);
                     updateArchiveFiles.add(archiveFile);
                 }
             }
         }
 
-
-        //获取合同段wbs划分树,用来组织树
-        List<WbsTreeContractVO6> wbsTrees = contractInfoService.tree8(lWbsId.toString(), projectId.toString(), contractId.toString());
-        if (wbsTrees == null || wbsTrees.size() == 0) {
-            return ;
-        }
-
-        //将树转换成list
-        List<WbsTreeContractVO6> wbsTreeContractVO6s = new ArrayList<>();
-        ForestNodeMerger.getTreeList(wbsTrees.get(0), wbsTreeContractVO6s);
-
-        //id 到 wbs节点的映射
-        Map<Long,WbsTreeContractVO6> wbsTreeContractVO6Map = new HashMap<>();
-        // keyid 到id的映射
-        Map<Long,Long> wbsTreeKeyToIdMap = new HashMap<>();
-        for (WbsTreeContractVO6 wbsTreeContractVO6 : wbsTreeContractVO6s) {
-            wbsTreeContractVO6Map.put(wbsTreeContractVO6.getId(),wbsTreeContractVO6);
-            wbsTreeKeyToIdMap.put(wbsTreeContractVO6.getPKeyId(),wbsTreeContractVO6.getId());
-        }
-
-
         for (InformationQuery info: newInformationQueryList) {
 
             Long keyId = info.getWbsId();
@@ -339,16 +355,37 @@ public class ArchiveTreeContractSyncImpl {
             newArchiveFiles.add(archiveFile);
         }
 
-        //生成map,对于对于newInformationQueryList,递归找nodeId,找到则设置到archiveFileList
+        //刷新文件
+        handleAddandUpdateFiles(newArchiveFiles,updateArchiveFiles);
+    }
+
+    /**
+     * 刷新文件
+     * @param newArchiveFiles
+     * @param updateArchiveFiles
+     */
+    void handleAddandUpdateFiles(List<ArchiveFile> newArchiveFiles,List<ArchiveFile> updateArchiveFiles) {
+        if (newArchiveFiles.size() > 0) {
+            List<List<ArchiveFile>> files = groupFiles(newArchiveFiles);
+            for (List<ArchiveFile> fileList: files) {
+                archiveFileClient.addArchiveFile(fileList);
+            }
+        }
+
+        if (updateArchiveFiles.size() > 0) {
+            List<List<ArchiveFile>> files = groupFiles(updateArchiveFiles);
+            for (List<ArchiveFile> fileList: files) {
+                archiveTreeContractMapper.updateBatchFileSortById(fileList);
+            }
+        }
 
-        //对于updateInformationQueryList,需要找出更新文件和文件大小
 
-        //根据归档树,刷新排序
     }
 
+
     public List<InformationQuery>  getInformationQuerys(Long contractId) {
         //获取某个合同段所有的电签完成的文件题名,取 id wbsid name,eVisaPdfUrl
-        List<InformationQuery> informationQueryList = new ArrayList<>();
+        List<InformationQuery> informationQueryList = archiveTreeContractMapper.getInformationByContractId(contractId);
         return informationQueryList;
 
         //互殴去
@@ -356,10 +393,8 @@ public class ArchiveTreeContractSyncImpl {
 
     public List<ArchiveFile>  getArchiveFiles(Long contractId) {
 
-        List<ArchiveFile> archiveFiles = new ArrayList<>();
+        List<ArchiveFile> archiveFiles = archiveTreeContractMapper.getListByContractId(contractId);
         return archiveFiles;
-
-        //互殴去
     }
 
     public List<ArchiveTreeContract>  getArchiveTreeContractsWbs(Long contractId) {
@@ -390,6 +425,8 @@ public class ArchiveTreeContractSyncImpl {
         ArchiveFile archiveFile = new ArchiveFile();
         archiveFile.setNodeId(nodeId.toString());
         archiveFile.setNodeExtId(keyId);
+
+        archiveFile.setProjectId(query.getProjectId() == null?"":query.getProjectId().toString());
         archiveFile.setContractId(query.getContractId().toString());
         archiveFile.setStatus(2); // 这里是新增归档文件,所以状态为1(已完成)
         //TODO 文件题名规则,待补充
@@ -397,6 +434,7 @@ public class ArchiveTreeContractSyncImpl {
         archiveFile.setFileTime(query.getBusinessTime());
 
         archiveFile.setSourceType(1);
+        archiveFile.setIsArchive(0);
 
         //责任人怎么取
         archiveFile.setDutyUser(unit);
@@ -408,6 +446,7 @@ public class ArchiveTreeContractSyncImpl {
         //
         archiveFile.setEVisaFile(query.getEVisaPdfUrl());
         archiveFile.setPdfFileUrl(query.getEVisaPdfUrl());
+        archiveFile.setSort(query.getSort());
         return archiveFile;
     }
 
@@ -418,4 +457,25 @@ public class ArchiveTreeContractSyncImpl {
                 .eq(ArchiveTreeContract::getContractId, contractId)
                 .eq(ArchiveTreeContract::getStorageType, 4));
     }
+
+    /**
+     * 分组
+     * @param newArchiveFiles
+     * @return
+     */
+    public  List<List<ArchiveFile>> groupFiles(List<ArchiveFile> newArchiveFiles) {
+        List<List<ArchiveFile>> groupedFiles = new ArrayList<>();
+        int size = newArchiveFiles.size();
+        int index = 0;
+
+        while (index < size) {
+            int endIndex = Math.min(index + 100, size);
+            List<ArchiveFile> group = newArchiveFiles.subList(index, endIndex);
+            groupedFiles.add(group);
+            index += 100;
+        }
+        return groupedFiles;
+    }
+
+
 }