chenr 5 månader sedan
förälder
incheckning
2d3c243594

+ 98 - 69
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -63,6 +63,7 @@ import java.util.function.BiPredicate;
 import java.util.function.BinaryOperator;
 import java.util.function.Function;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @Service
 @AllArgsConstructor
@@ -87,14 +88,21 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     @Override
     public List<WbsTreePrivateVO> tree(String wbsId, String projectId) {
         WbsInfo wbsInfo = wbsInfoMapper.selectOne(Wrappers.<WbsInfo>query().lambda().eq(WbsInfo::getId, wbsId));
+        String sql="select * from m_project_info where id="+projectId;
+        ProjectInfo projectInfo = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(ProjectInfo.class));
+        Integer parentId = null;
+        if(projectInfo.getTemplateType()!=null&&projectInfo.getTemplateType()==2){
+            parentId=1;
+        }
         if (wbsInfo != null) {
+            List<WbsTreePrivateVO> tree = baseMapper.tree(wbsId, projectId, wbsInfo.getWbsType(),parentId);
             //公有引用
-            return ForestNodeMerger.merge(baseMapper.tree(wbsId, projectId, wbsInfo.getWbsType()));
+            return ForestNodeMerger.merge(tree);
         } else {
             //私有引用`
             WbsTreePrivate nodeRoot = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getWbsId, wbsId).eq(WbsTreePrivate::getProjectId, projectId).eq(WbsTreePrivate::getParentId, 0L));
             if (nodeRoot != null) {
-                return ForestNodeMerger.merge(baseMapper.tree(wbsId, projectId, Integer.valueOf(nodeRoot.getWbsType())));
+                return ForestNodeMerger.merge(baseMapper.tree(wbsId, projectId, Integer.valueOf(nodeRoot.getWbsType()),parentId));
             }
         }
         return null;
@@ -1530,9 +1538,14 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                 if (("public").equals(projectInfo.getReferenceWbsTemplateType())) {
                     /*-------------------------------------质检公有引用同步--------------------------------------------*/
                     //获取当前节点对应的公有引用树下的元素表
-                    WbsTree wbsTree = wbsTreeMapper.selectOne(Wrappers.<WbsTree>lambdaQuery().select(WbsTree::getAncestors, WbsTree::getWbsId, WbsTree::getId).eq(WbsTree::getId, wbsTreePrivate.getId()));
-
+                    List<WbsTree> wbsTrees = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery()
+                        .select(WbsTree::getAncestors, WbsTree::getWbsId, WbsTree::getId)
+                        .and(wq -> wq.eq(WbsTree::getId, wbsTreePrivate.getId())
+                            .or()
+                            .eq(WbsTree::getId, wbsTreePrivate.getTreePId()))
+                    );
                     List<WbsTree> wbsTreesPublicTables;
+                    WbsTree wbsTree = wbsTrees.get(0);
                     if (wbsTree.getAncestors().equals("0")) {
                         //根节点
                         wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda()
@@ -1551,7 +1564,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
 
                     //获取当前项目树下的元素表 节点
                     List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
-                                    .select(WbsTreePrivate::getType, WbsTreePrivate::getId, WbsTreePrivate::getAncestors)
+                                    .select(WbsTreePrivate::getType, WbsTreePrivate::getId, WbsTreePrivate::getAncestors,WbsTreePrivate::getTreePId)
                                     .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
                                     .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
                             /*.eq(WbsTreePrivate::getStatus, 1)*/
@@ -1567,9 +1580,15 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                     }
 
                     //获取新增的公有元素表addPublicTable
-                    List<WbsTree> addPublicTable = wbsTreesPublicTables.stream().filter(f ->
-                            !wbsTreePrivatesProjectTables.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).contains(f.getId())).collect(Collectors.toList());
-
+//                    List<WbsTree> addPublicTable = wbsTreesPublicTables.stream().filter(f ->
+//                            !wbsTreePrivatesProjectTables.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).contains(f.getId())).collect(Collectors.toList());
+                    Set<Long> privateIdsAndPids = wbsTreePrivatesProjectTables.stream()
+                        .flatMap(p -> Stream.of(p.getId(), p.getTreePId()))
+                        .collect(Collectors.toSet());
+                      // 过滤 wbsTreesPublicTables
+                    List<WbsTree> addPublicTable = wbsTreesPublicTables.stream()
+                        .filter(f -> !privateIdsAndPids.contains(f.getId()))
+                        .collect(Collectors.toList());
                     //判断当前新增的表在项目的wbs树中是否存在上级节点,存在表示可以新增,不存在表示不新增
                     List<WbsTree> addPublicTables = addPublicTable.stream().filter(node ->
                             wbsTreePrivatesProjectNodes.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).contains(node.getParentId())).collect(Collectors.toList());
@@ -1952,66 +1971,66 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                 }
             }
 
-            //同步到合同段(合同段中可能不存在原始节点(那么分配wsb处就同步不成功),但合同段存在新增、复制的节点,所以单独处理)
-            if (!insertDataPrivateList.isEmpty()) {
-                Map<Long, List<WbsTreePrivate>> tabParentNodesGroup = insertDataPrivateList.stream().collect(Collectors.groupingBy(WbsTreePrivate::getParentId));
-                Set<Long> longs = tabParentNodesGroup.keySet();
-                //获取当前项目下合同段 新增、复制、原始节点
-                List<WbsTreeContract> addOrCopyOrYsNodes = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
-                        .select(WbsTreeContract::getId, WbsTreeContract::getContractId, WbsTreeContract::getOldId)
-                        .eq(WbsTreeContract::getProjectId, wbsTreePrivate.getProjectId())
-                        .and(obj -> obj.in(WbsTreeContract::getOldId, longs).or().in(WbsTreeContract::getId, longs))
-                );
-                List<WbsTreeContract> newAddOrCopyOrYsNodes = addOrCopyOrYsNodes.stream().distinct().collect(Collectors.toList());
-                for (WbsTreeContract addOrCopyOrYsNode : newAddOrCopyOrYsNodes) {
-                    if (StringUtils.isNotEmpty(addOrCopyOrYsNode.getOldId())) {
-                        //复制、新增节点
-                        //合同段节点的oldId=当前表的parentId,也就是说当前表的父级节点=合同段复制、新增出来节点
-                        List<WbsTreePrivate> tabs = tabParentNodesGroup.get(Long.parseLong(addOrCopyOrYsNode.getOldId()));
-                        if (tabs.size() > 0) {
-                            List<WbsTreeContract> wbsTreeContractList = BeanUtil.copyProperties(tabs, WbsTreeContract.class);
-                            for (WbsTreeContract wbsTreeContract : wbsTreeContractList) {
-                                wbsTreeContract.setIsBussShow(1);
-                                wbsTreeContract.setIsDeleted(0);
-                                wbsTreeContract.setStatus(1);
-
-                                wbsTreeContract.setIsTypePrivatePid(wbsTreeContract.getPKeyId()); //记录原始表的pKeyId
-
-                                wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
-                                wbsTreeContract.setParentId(addOrCopyOrYsNode.getId());
-                                wbsTreeContract.setContractId(addOrCopyOrYsNode.getContractId());
-                            }
-                            insertDataContractList.addAll(wbsTreeContractList);
-                        }
-                    } else {
-                        //原始节点id=表parentId
-                        List<WbsTreePrivate> tabs = tabParentNodesGroup.get((addOrCopyOrYsNode.getId()));
-                        if (tabs.size() > 0) {
-                            List<WbsTreeContract> wbsTreeContractList = BeanUtil.copyProperties(tabs, WbsTreeContract.class);
-                            for (WbsTreeContract wbsTreeContract : wbsTreeContractList) {
-                                wbsTreeContract.setIsBussShow(1);
-                                wbsTreeContract.setIsDeleted(0);
-                                wbsTreeContract.setStatus(1);
-
-                                wbsTreeContract.setIsTypePrivatePid(wbsTreeContract.getPKeyId()); //记录原始表的pKeyId
-
-                                wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
-                                wbsTreeContract.setParentId(addOrCopyOrYsNode.getId());
-                                wbsTreeContract.setContractId(addOrCopyOrYsNode.getContractId());
-                            }
-                            insertDataContractList.addAll(wbsTreeContractList);
-                        }
-                    }
-                }
-            }
-
-            //新增同步到合同段
-            if (!insertDataContractList.isEmpty()) {
-                List<List<WbsTreeContract>> partition = Lists.partition(insertDataContractList, 1000);
-                for (List<WbsTreeContract> wbsTreeContracts : partition) {
-                    wbsTreeContractService.insertBatch(wbsTreeContracts, 1000);
-                }
-            }
+//            //同步到合同段(合同段中可能不存在原始节点(那么分配wsb处就同步不成功),但合同段存在新增、复制的节点,所以单独处理)
+//            if (!insertDataPrivateList.isEmpty()) {
+//                Map<Long, List<WbsTreePrivate>> tabParentNodesGroup = insertDataPrivateList.stream().collect(Collectors.groupingBy(WbsTreePrivate::getParentId));
+//                Set<Long> longs = tabParentNodesGroup.keySet();
+//                //获取当前项目下合同段 新增、复制、原始节点
+//                List<WbsTreeContract> addOrCopyOrYsNodes = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
+//                        .select(WbsTreeContract::getId, WbsTreeContract::getContractId, WbsTreeContract::getOldId)
+//                        .eq(WbsTreeContract::getProjectId, wbsTreePrivate.getProjectId())
+//                        .and(obj -> obj.in(WbsTreeContract::getOldId, longs).or().in(WbsTreeContract::getId, longs))
+//                );
+//                List<WbsTreeContract> newAddOrCopyOrYsNodes = addOrCopyOrYsNodes.stream().distinct().collect(Collectors.toList());
+//                for (WbsTreeContract addOrCopyOrYsNode : newAddOrCopyOrYsNodes) {
+//                    if (StringUtils.isNotEmpty(addOrCopyOrYsNode.getOldId())) {
+//                        //复制、新增节点
+//                        //合同段节点的oldId=当前表的parentId,也就是说当前表的父级节点=合同段复制、新增出来节点
+//                        List<WbsTreePrivate> tabs = tabParentNodesGroup.get(Long.parseLong(addOrCopyOrYsNode.getOldId()));
+//                        if (tabs.size() > 0) {
+//                            List<WbsTreeContract> wbsTreeContractList = BeanUtil.copyProperties(tabs, WbsTreeContract.class);
+//                            for (WbsTreeContract wbsTreeContract : wbsTreeContractList) {
+//                                wbsTreeContract.setIsBussShow(1);
+//                                wbsTreeContract.setIsDeleted(0);
+//                                wbsTreeContract.setStatus(1);
+//
+//                                wbsTreeContract.setIsTypePrivatePid(wbsTreeContract.getPKeyId()); //记录原始表的pKeyId
+//
+//                                wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
+//                                wbsTreeContract.setParentId(addOrCopyOrYsNode.getId());
+//                                wbsTreeContract.setContractId(addOrCopyOrYsNode.getContractId());
+//                            }
+//                            insertDataContractList.addAll(wbsTreeContractList);
+//                        }
+//                    } else {
+//                        //原始节点id=表parentId
+//                        List<WbsTreePrivate> tabs = tabParentNodesGroup.get((addOrCopyOrYsNode.getId()));
+//                        if (tabs.size() > 0) {
+//                            List<WbsTreeContract> wbsTreeContractList = BeanUtil.copyProperties(tabs, WbsTreeContract.class);
+//                            for (WbsTreeContract wbsTreeContract : wbsTreeContractList) {
+//                                wbsTreeContract.setIsBussShow(1);
+//                                wbsTreeContract.setIsDeleted(0);
+//                                wbsTreeContract.setStatus(1);
+//
+//                                wbsTreeContract.setIsTypePrivatePid(wbsTreeContract.getPKeyId()); //记录原始表的pKeyId
+//
+//                                wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
+//                                wbsTreeContract.setParentId(addOrCopyOrYsNode.getId());
+//                                wbsTreeContract.setContractId(addOrCopyOrYsNode.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;
@@ -3006,9 +3025,19 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             }
         }
         System.out.println(Colour.RED.getCode()+"第"+i+"次递归完成======================================================================================="+Colour.RESET.getCode());
+    }
 
-
+    @Override
+    public WbsTreePrivateVO tree3(String wbsId, String projectId) {
+        WbsInfo wbsInfo = wbsInfoMapper.selectOne(Wrappers.<WbsInfo>query().lambda().eq(WbsInfo::getId, wbsId));
+        WbsTreePrivateVO vo=new WbsTreePrivateVO();
+        vo.setId(wbsInfo.getId());
+        vo.setHasChildren(false);
+        vo.setProjectName(wbsInfo.getWbsName());
+        vo.setWbsType(wbsInfo.getWbsType()+"");
+        return vo;
     }
+
     public  List<WbsTreePrivate> findAllContract(WbsTreePrivate wbsTreePrivate){
         QueryWrapper<WbsTreePrivate> wbsTreeContractQueryWrapper = new QueryWrapper<>();
         wbsTreeContractQueryWrapper.select("p_key_id","id","p_id","wbs_id","project_id","parent_id","ancestors");