Selaa lähdekoodia

Merge branch 'refs/heads/feature-test-lihb-20250822' into test-merge

# Conflicts:
#	blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/ArchiveFileClient.java
#	blade-service/blade-business/src/main/java/org/springblade/business/feignClient/ArchiveFileClientImpl.java
#	blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.java
#	blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.xml
LHB 2 viikkoa sitten
vanhempi
commit
13be78d6bd

+ 3 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/ArchiveFileClient.java

@@ -175,4 +175,7 @@ public interface ArchiveFileClient {
 
     @PostMapping(API_PREFIX + "/getAllArchiveFileByIds")
     List<ArchiveFile> getAllArchiveFileByIds(@RequestBody List<String> strList);
+
+    @PostMapping(API_PREFIX + "/selectMaxSortByContractId")
+    Integer selectMaxSortByContractId(@RequestParam Long contractId);
 }

+ 3 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveSyncTrialVO.java

@@ -41,4 +41,7 @@ public class ArchiveSyncTrialVO {
 
     @ApiModelProperty(value = "排序")
     private Integer sort;
+
+    @ApiModelProperty(value = "父节点id")
+    private Long pId;
 }

+ 4 - 0
blade-service/blade-business/src/main/java/org/springblade/business/feignClient/ArchiveFileClientImpl.java

@@ -455,4 +455,8 @@ public class ArchiveFileClientImpl implements ArchiveFileClient {
         return fileMapper.getAllArchiveFileByIds(strList);
     }
 
+    @Override
+    public Integer selectMaxSortByContractId(Long contractId) {
+        return iArchiveFileService.selectMaxSortByContractId(contractId);
+    }
 }

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

@@ -122,4 +122,6 @@ public interface ArchiveFileMapper extends BaseMapper<ArchiveFile> {
     Map<String, BigDecimal> getAllArchiveAutoByContractTypeSummary(@Param("projectId") Long projectId);
 
     List<ArchiveFile> getAllArchiveFileByIds(@Param("strList") List<String> strList);
+
+    Integer selectMaxSortByContractId(@Param("contractId") Long contractId);
 }

+ 3 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.xml

@@ -564,4 +564,7 @@
             </foreach>
         </if>
     </select>
+    <select id="selectMaxSortByContractId" resultType="java.lang.Integer">
+        select max(sort) from u_archive_file where contract_id = #{contractId}
+    </select>
 </mapper>

+ 2 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/IArchiveFileService.java

@@ -76,4 +76,6 @@ public interface IArchiveFileService extends BaseService<ArchiveFile> {
     public void updateArchiveFileEx(List<ArchiveFile> files);
 
     boolean sortByFileTime(Long nodeId);
+
+    Integer selectMaxSortByContractId(Long contractId);
 }

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

@@ -353,4 +353,8 @@ public class ArchiveFileServiceImpl extends BaseServiceImpl<ArchiveFileMapper, A
         }
     }
 
+    @Override
+    public Integer selectMaxSortByContractId(Long contractId) {
+        return baseMapper.selectMaxSortByContractId(contractId);
+    }
 }

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

@@ -968,7 +968,7 @@
         select * from blade_dict_biz where parent_id != 0 and code = 'contract_log_type' and is_deleted = 0
     </select>
     <select id="getAllTrialNode" resultType="org.springblade.manager.vo.ArchiveSyncTrialVO">
-        select p_key_id,id,parent_id,node_name,full_name,node_type,sort
+        select p_key_id,id,parent_id,node_name,full_name,node_type,sort,p_id
         from m_wbs_tree_private
         where wbs_type = 2 and project_id = #{projectId} and `type` = 1 and is_deleted = 0
           and node_type in (51,52,53)
@@ -977,7 +977,7 @@
     <select id="getAllTrialRecord" resultType="org.springblade.business.entity.TrialSelfInspectionRecord">
         select *
         from u_trial_self_inspection_record
-        where contract_id = #{contractId} and is_deleted = 0 and task_status = '已审批'
+        where contract_id = #{contractId} and is_deleted = 0 and task_status = '已审批' order by sort
     </select>
     <select id="getAllTrialRecordFile"
             resultType="org.springblade.business.vo.TrialSelfInspectionRecordFileVO">

+ 36 - 13
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractSyncImpl.java

@@ -1,5 +1,6 @@
 package org.springblade.manager.service.impl;
 
+import cn.hutool.core.lang.mutable.MutableInt;
 import com.alibaba.nacos.common.utils.DateFormatUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
@@ -1032,6 +1033,17 @@ public class ArchiveTreeContractSyncImpl {
         Map<Long, List<TrialSelfInspectionRecord>> recordsMap = records.stream().collect(Collectors.groupingBy(TrialSelfInspectionRecord::getNodeId));
         List<ArchiveTreeContract> addNode = new ArrayList<>();
         List<ArchiveFile> addFile = new ArrayList<>();
+        //试验节点id 添加到档案的节点id映射关系 用与父节点创建
+        HashMap<Long, Long> map = new HashMap<>();
+        for (ArchiveSyncTrialVO trial : trials) {
+            map.put(trial.getPKeyId(),SnowFlakeUtil.getId());
+        }
+
+        //获取文档文件最大 sort
+        Integer sort = archiveFileClient.selectMaxSortByContractId(contractInfo.getId());
+        MutableInt mutableInt = new MutableInt();
+        mutableInt.set(sort);
+
         /**循环指定试验类型 */
         for (Integer type : TrialType) {
             //根据类型获取试验节点
@@ -1042,7 +1054,7 @@ public class ArchiveTreeContractSyncImpl {
             //循环试验节点
             for (ArchiveSyncTrialVO vo : trialVOS) {
                 //把节点转换为档案节点,挂载到同步节点下
-                ArchiveTreeContract trialNode = createTypeNode(vo.getNodeName(),vo.getSort(), archiveTreeContract);
+                ArchiveTreeContract trialNode = createTypeNode(vo.getNodeName(), vo.getSort(), vo.getPKeyId(), vo.getPId(), archiveTreeContract, map);
                 addNode.add(trialNode);
                 //获取出节点下面的报告,并转换为档案文件
                 List<TrialSelfInspectionRecord> files = recordsMap.get(vo.getPKeyId());
@@ -1051,7 +1063,7 @@ public class ArchiveTreeContractSyncImpl {
                 }
                 //挂载到子节点下
                 List<ArchiveFile> newArchiveFileList = files.stream().map(file -> {
-                    ArchiveFile archiveFile = trialFileCovertArchiveFile(file, trialNode, contractInfo);
+                    ArchiveFile archiveFile = trialFileCovertArchiveFile(file, trialNode, contractInfo, mutableInt);
                     return archiveFile;
                 }).collect(Collectors.toList());
                 addFile.addAll(newArchiveFileList);
@@ -1066,10 +1078,17 @@ public class ArchiveTreeContractSyncImpl {
             List<TrialDetectionData> dataList = archiveTreeContractMapper.getAllTrialTestRecord(contractId);
             //检测报告,按照节点分组
             Map<Long, List<TrialDetectionData>> dataMap = dataList.stream().collect(Collectors.groupingBy(l -> l.getNodeId()));
+
+            //试验节点id 添加到档案的节点id映射关系 用与父节点创建
+            HashMap<Long, Long> map2 = new HashMap<>();
+            for (TrialClassificationConfiguration configuration : threeTestNodes) {
+                map2.put(configuration.getId(),SnowFlakeUtil.getId());
+            }
+
             //循环所有节点
             for (TrialClassificationConfiguration vo : threeTestNodes) {
                 //把节点转换为档案节点,挂载到同步节点下
-                ArchiveTreeContract trialNode = createTypeNode(vo.getNodeName(),vo.getNodeType() == 1 ?  vo.getSort() : vo.getSort() + 100, archiveTreeContract);
+                ArchiveTreeContract trialNode = createTypeNode(vo.getNodeName(), vo.getNodeType() == 1 ? vo.getSort() : vo.getSort() + 100, vo.getId(), vo.getParentId(), archiveTreeContract, map2);
                 addNode.add(trialNode);
                 //获取出节点下面的报告,并转换为档案文件
                 List<TrialDetectionData> files = dataMap.get(vo.getId());
@@ -1078,7 +1097,7 @@ public class ArchiveTreeContractSyncImpl {
                 }
                 //挂载到子节点下
                 List<ArchiveFile> newArchiveFileList = files.stream().map(file -> {
-                    ArchiveFile archiveFile = trialTestFileCovertArchiveFile(file, trialNode);
+                    ArchiveFile archiveFile = trialTestFileCovertArchiveFile(file, trialNode, mutableInt);
                     return archiveFile;
                 }).collect(Collectors.toList());
                 addFile.addAll(newArchiveFileList);
@@ -1200,6 +1219,7 @@ public class ArchiveTreeContractSyncImpl {
         if (CollectionUtil.isEmpty(logs)){
             throw new ServiceException("当前合同段下没有日志资料");
         }
+        HashMap<Long, Long> map = new HashMap<>();
         //日志按照类型分组
         Map<Integer, List<ArchiveSyncLogVO>> logMap = logs.stream().collect(Collectors.groupingBy(ArchiveSyncLogVO::getLogType));
         //循环选择的日志类型
@@ -1209,7 +1229,7 @@ public class ArchiveTreeContractSyncImpl {
                 throw new ServiceException("日志存在字典中未配置的类型,请检查后再同步");
             }
             //生成子节点
-            ArchiveTreeContract logNode = createTypeNode(typeName, 0,archiveTreeContract);
+            ArchiveTreeContract logNode = createTypeNode(typeName, 0, null, null, archiveTreeContract, map);
             /** 如果到时候修改需求,只显示有日志的,则下面文件存在再add*/
             addNode.add(logNode);
             //然后再从分组中获取,如果存在值则转换为档案文件
@@ -1288,10 +1308,11 @@ public class ArchiveTreeContractSyncImpl {
 
         List<ArchiveTreeContract> addNode = new ArrayList<>();
         List<ArchiveFile> addFile = new ArrayList<>();
+        HashMap<Long, Long> map = new HashMap<>();
         //循环下级节点
         for (ImageClassificationConfig imageType : imageTypes) {
             //把分类生成为影像资料的下级节点
-            ArchiveTreeContract imageNode = createTypeNode(imageType.getClassfName(), 0, archiveTreeContract);
+            ArchiveTreeContract imageNode = createTypeNode(imageType.getClassfName(), 0, null, null, archiveTreeContract, map);
             addNode.add(imageNode);
             //如果当前分类下存在文件,则根据类型生成树,还是日期
 //            List<ImageClassificationFileDTO> files = imageMap.get(imageType.getId());
@@ -1564,7 +1585,7 @@ public class ArchiveTreeContractSyncImpl {
     /**
      * 质检试验检测资料 转换为 档案文件
      */
-    private ArchiveFile trialTestFileCovertArchiveFile(TrialDetectionData vo,ArchiveTreeContract parentNode)
+    private ArchiveFile trialTestFileCovertArchiveFile(TrialDetectionData vo,ArchiveTreeContract parentNode, MutableInt sort)
     {
         ArchiveFile archiveFile = new ArchiveFile();
         archiveFile.setId(SnowFlakeUtil.getId());
@@ -1607,7 +1628,8 @@ public class ArchiveTreeContractSyncImpl {
                 .toLocalDateTime();
         archiveFile.setFtime(localDateTime);
         archiveFile.setUtime(localDateTime);
-        archiveFile.setSort(0);
+        sort.set(sort.get() + 1);
+        archiveFile.setSort(sort.get());
         archiveFile.setPageNum("1");
         archiveFile.setSourceType(1);
         archiveFile.setIsElement(0);
@@ -1619,7 +1641,7 @@ public class ArchiveTreeContractSyncImpl {
     /**
      * 质检试验资料 转换为 档案文件
      */
-    private ArchiveFile trialFileCovertArchiveFile(TrialSelfInspectionRecord vo,ArchiveTreeContract parentNode, ContractInfo contractInfo)
+    private ArchiveFile trialFileCovertArchiveFile(TrialSelfInspectionRecord vo,ArchiveTreeContract parentNode, ContractInfo contractInfo, MutableInt sort )
     {
         ArchiveFile archiveFile = new ArchiveFile();
         archiveFile.setId(SnowFlakeUtil.getId());
@@ -1663,7 +1685,8 @@ public class ArchiveTreeContractSyncImpl {
                 .toLocalDateTime();
         archiveFile.setFtime(localDateTime);
         archiveFile.setUtime(localDateTime);
-        archiveFile.setSort(0);
+        sort.set(sort.get() + 1);
+        archiveFile.setSort(sort.get());
         archiveFile.setPageNum("1");
         archiveFile.setSourceType(1);
         archiveFile.setIsElement(0);
@@ -1755,14 +1778,14 @@ public class ArchiveTreeContractSyncImpl {
      * 档案同步质检影像资料时,为影像资料-日志资料   节点下级创建分类节点
      * 传入分类名称
      */
-    public ArchiveTreeContract createTypeNode(String nodeName, Integer sort,ArchiveTreeContract archiveTreeContract){
+    public ArchiveTreeContract createTypeNode(String nodeName, Integer sort,Long pKeyId, Long pId,ArchiveTreeContract archiveTreeContract, HashMap<Long, Long> map){
         ArchiveTreeContract archiveTreeContractTemp = new ArchiveTreeContract();
         //设置基本信息
-        archiveTreeContractTemp.setId(SnowFlakeUtil.getId());
+        archiveTreeContractTemp.setId(map.get(pKeyId) == null ? SnowFlakeUtil.getId() : map.get(pKeyId));
         archiveTreeContractTemp.setTenantId(AuthUtil.getTenantId());
         archiveTreeContractTemp.setProjectId(archiveTreeContract.getProjectId());
         archiveTreeContractTemp.setContractId(archiveTreeContract.getContractId());
-        archiveTreeContractTemp.setParentId(archiveTreeContract.getId());
+        archiveTreeContractTemp.setParentId(pId == null || map == null || map.get(pId) == null ? archiveTreeContract.getId() : map.get(pId));
         archiveTreeContractTemp.setAncestors(archiveTreeContract.getAncestors()+","+archiveTreeContract.getId());
         archiveTreeContractTemp.setNodeName(nodeName);
         archiveTreeContractTemp.setNodeType(1);