浏览代码

同步元素表到合同段

liuyc 2 年之前
父节点
当前提交
2a599be74c

+ 36 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -1332,6 +1332,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             ProjectInfo projectInfo = projectInfoMapper.selectOne(Wrappers.<ProjectInfo>lambdaQuery().select(ProjectInfo::getReferenceWbsTemplateType, ProjectInfo::getReferenceWbsTemplateTypeTrial).eq(ProjectInfo::getId, wbsTreePrivate.getProjectId()));
             //结果集
             List<WbsTreePrivate> insertDataPrivateList = new ArrayList<>();
+            List<WbsTreeContract> insertDataContractList = new ArrayList<>();
 
             if (("1").equals(wbsTreePrivate.getWbsType())) {
                 if (("public").equals(projectInfo.getReferenceWbsTemplateType())) {
@@ -1558,13 +1559,47 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                 }
             }
 
-            //新增
+            //新增同步到项目
             if (!insertDataPrivateList.isEmpty()) {
                 List<List<WbsTreePrivate>> partition = Lists.partition(insertDataPrivateList, 1000);
                 for (List<WbsTreePrivate> wbsTreePrivates : partition) {
                     this.insertBatch(wbsTreePrivates, 1000);
                 }
             }
+
+            //同步到合同段(合同段中可能不存在原始节点(那么分配wsb处就同步不成功),但合同段存在新增、复制的节点,所以单独处理)
+            if (!insertDataPrivateList.isEmpty()) {
+                Map<Long, List<WbsTreePrivate>> tabParentNodesGroup = insertDataPrivateList.stream().collect(Collectors.groupingBy(WbsTreePrivate::getParentId));
+                Set<Long> longs = tabParentNodesGroup.keySet();
+                //获取当前项目下合同段新增或者复制的节点
+                List<WbsTreeContract> addOrCopyNodes = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
+                        .select(WbsTreeContract::getId, WbsTreeContract::getContractId, WbsTreeContract::getOldId)
+                        .in(WbsTreeContract::getOldId, longs).eq(WbsTreeContract::getProjectId, wbsTreePrivate.getProjectId()));
+                List<WbsTreeContract> newAddOrCopyNodes = addOrCopyNodes.stream().distinct().collect(Collectors.toList());
+                for (WbsTreeContract addOrCopyNode : newAddOrCopyNodes) {
+                    //合同段节点的oldId=当前表的parentId,也就是说当前表的父级节点=合同段复制、新增出来节点
+                    List<WbsTreePrivate> tabs = tabParentNodesGroup.get(Long.parseLong(addOrCopyNode.getOldId()));
+                    if (tabs.size() > 0) {
+                        List<WbsTreeContract> wbsTreeContractList = BeanUtil.copyProperties(tabs, WbsTreeContract.class);
+                        for (WbsTreeContract wbsTreeContract : wbsTreeContractList) {
+                            wbsTreeContract.setIsDeleted(0);
+                            wbsTreeContract.setStatus(1);
+                            wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
+                            wbsTreeContract.setParentId(addOrCopyNode.getId());
+                            wbsTreeContract.setContractId(addOrCopyNode.getContractId());
+                        }
+                        insertDataContractList.addAll(wbsTreeContractList);
+                    }
+                }
+            }
+
+            //新增同步到合同段
+            if (!insertDataContractList.isEmpty()) {
+                List<List<WbsTreeContract>> partition = Lists.partition(insertDataContractList, 1000);
+                for (List<WbsTreeContract> wbsTreeContracts : partition) {
+                    wbsTreeContractService.insertBatch(wbsTreeContracts, 1000);
+                }
+            }
             return true;
         }
         return false;