Quellcode durchsuchen

bug

Signed-off-by: liuyc <56808083@qq.com>
liuyc vor 1 Jahr
Ursprung
Commit
f2f59b3ba2

+ 169 - 31
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -221,30 +221,30 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
 
     @Override
     public IPage<TreeNodeVOByTabType> tabTypeLazyTreeAll(IPage<TreeNodeVOByTabType> page, Long parentId, String titleName, Boolean hasPartFormula) {
-        boolean base=false;
-        if(hasPartFormula==null){
-            hasPartFormula=true;
+        boolean base = false;
+        if (hasPartFormula == null) {
+            hasPartFormula = true;
         }
         if ((parentId + "").equals("12345678910")) {
             page.setSize(100);
-            base=true;
+            base = true;
         }
-        List<TreeNodeVOByTabType>data ;
-        if(SelectorModel.ID.equals(parentId)){
-             data =this.baseList();
-        }else{
-             data= baseMapper.tabTypeLazyTreeAll(page, parentId, titleName);
+        List<TreeNodeVOByTabType> data;
+        if (SelectorModel.ID.equals(parentId)) {
+            data = this.baseList();
+        } else {
+            data = baseMapper.tabTypeLazyTreeAll(page, parentId, titleName);
         }
-        addBase(data,base);
-        if(base&&!hasPartFormula){
-            data.removeIf(e->e.getId()!=20&&!e.getId().equals(SelectorModel.ID));
+        addBase(data, base);
+        if (base && !hasPartFormula) {
+            data.removeIf(e -> e.getId() != 20 && !e.getId().equals(SelectorModel.ID));
         }
         return page.setRecords(data);
     }
 
 
-    public void addBase(List<TreeNodeVOByTabType> data,Boolean base){
-        if(base){
+    public void addBase(List<TreeNodeVOByTabType> data, Boolean base) {
+        if (base) {
             TreeNodeVOByTabType baseInfo = new TreeNodeVOByTabType();
             baseInfo.setTitle(SelectorModel.NODE_NAME);
             /*baseInfo.setPrimaryKeyId("BASIN");*/
@@ -254,11 +254,12 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             data.add(baseInfo);
         }
     }
-    public  List<TreeNodeVOByTabType> baseList(){
-        Map<String,String[]> titleMap = new HashMap<>();
-        titleMap.put(BaseInfo.TBN_CH,new String[]{BaseInfo.TBN,BaseInfo.ID});
-        titleMap.put(MeterPeriodInfo.TBN_CH,new String[]{MeterPeriodInfo.TBN,MeterPeriodInfo.ID});
-        return titleMap.entrySet().stream().map(kv->{
+
+    public List<TreeNodeVOByTabType> baseList() {
+        Map<String, String[]> titleMap = new HashMap<>();
+        titleMap.put(BaseInfo.TBN_CH, new String[]{BaseInfo.TBN, BaseInfo.ID});
+        titleMap.put(MeterPeriodInfo.TBN_CH, new String[]{MeterPeriodInfo.TBN, MeterPeriodInfo.ID});
+        return titleMap.entrySet().stream().map(kv -> {
             TreeNodeVOByTabType tn = new TreeNodeVOByTabType();
             tn.setTitle(kv.getKey());
             tn.setTabType(SelectorModel.NODE_NAME);
@@ -1415,16 +1416,17 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             //获取当前节点对应节点信息
             WbsTreePrivate wbsTreePrivate = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, primaryKeyId));
             //获取项目信息
-            ProjectInfo projectInfo = projectInfoMapper.selectOne(Wrappers.<ProjectInfo>lambdaQuery().select(ProjectInfo::getReferenceWbsTemplateType, ProjectInfo::getReferenceWbsTemplateTypeTrial).eq(ProjectInfo::getId, wbsTreePrivate.getProjectId()));
+            ProjectInfo projectInfo = projectInfoMapper.selectOne(Wrappers.<ProjectInfo>lambdaQuery().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())) {
-                    /*TODO-------------------------------------质检公有引用同步--------------------------------------------*/
+                    /*-------------------------------------质检公有引用同步--------------------------------------------*/
                     //获取当前节点对应的公有引用树下的元素表
                     WbsTree wbsTree = wbsTreeMapper.selectOne(Wrappers.<WbsTree>lambdaQuery().select(WbsTree::getAncestors, WbsTree::getWbsId, WbsTree::getId).eq(WbsTree::getId, wbsTreePrivate.getId()));
+
                     List<WbsTree> wbsTreesPublicTables;
                     if (wbsTree.getAncestors().equals("0")) {
                         //根节点
@@ -1485,11 +1487,10 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                     }
 
                 } else if (("private").equals(projectInfo.getReferenceWbsTemplateType())) {
-                    /*TODO-------------------------------------质检私有引用同步--------------------------------------------*/
+                    /*-------------------------------------质检私有引用同步--------------------------------------------*/
                     //根据wbsTreePrivate的wbsId=私有引用的pKeyId来获取引用树根节点
-                    WbsTreePrivate wbsTreePrivateRoot = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery()
-                            .select(WbsTreePrivate::getWbsId, WbsTreePrivate::getProjectId)
-                            .eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getWbsId()));
+                    WbsTreePrivate wbsTreePrivateRoot = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getWbsId()));
+
                     //获取当前私有引用树的元素表信息
                     List<WbsTreePrivate> wbsTreePrivateRootTables;
                     if (wbsTreePrivate.getAncestors().equals("0")) {
@@ -1549,12 +1550,14 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                     }
                 }
             }
+
             if (("2").equals(wbsTreePrivate.getWbsType())) {
                 if (("public").equals(projectInfo.getReferenceWbsTemplateTypeTrial())) {
-                    /*TODO-------------------------------------试验公有引用同步--------------------------------------------*/
+                    /*-------------------------------------试验公有引用同步--------------------------------------------*/
                     //获取当前节点对应的公有引用树下的元素表
                     WbsTree wbsTree = wbsTreeMapper.selectOne(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getId, wbsTreePrivate.getId()));
                     List<WbsTree> wbsTreesPublicTables;
+
                     if (wbsTree.getAncestors().equals("0")) {
                         //根节点
                         wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery()
@@ -1613,9 +1616,10 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                     }
 
                 } else if (("private").equals(projectInfo.getReferenceWbsTemplateTypeTrial())) {
-                    /*TODO-------------------------------------试验私有引用同步--------------------------------------------*/
+                    /*-------------------------------------试验私有引用同步--------------------------------------------*/
                     //根据wbsTreePrivate的wbsId=私有引用的pKeyId来获取引用树根节点
                     WbsTreePrivate wbsTreePrivateRoot = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getWbsId()));
+
                     //获取当前私有引用树的元素表信息
                     List<WbsTreePrivate> wbsTreePrivateRootTables;
                     if (wbsTreePrivate.getAncestors().equals("0")) {
@@ -1676,6 +1680,134 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                 }
             }
 
+            if (("3").equals(wbsTreePrivate.getWbsType())) {
+                if (("public").equals(projectInfo.getReferenceWbsTemplateTypeMeter())) {
+                    /*-------------------------------------计量公有引用同步--------------------------------------------*/
+                    //获取当前节点对应的公有引用树下的元素表
+                    WbsTree wbsTree = wbsTreeMapper.selectOne(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getId, wbsTreePrivate.getId()));
+                    List<WbsTree> wbsTreesPublicTables;
+                    if (wbsTree.getAncestors().equals("0")) {
+                        //根节点
+                        wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda()
+                                        .select(WbsTree::getId, WbsTree::getParentId)
+                                        .eq(WbsTree::getWbsId, wbsTree.getWbsId()).eq(WbsTree::getType, 2)
+                                /*.eq(WbsTree::getStatus,1)*/
+                        );
+                    } else {
+                        wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda()
+                                .select(WbsTree::getId, WbsTree::getParentId)
+                                .eq(WbsTree::getWbsId, wbsTree.getWbsId()).eq(WbsTree::getType, 2)
+                                /*.eq(WbsTree::getStatus,1)*/
+                                .like(WbsTree::getAncestors, wbsTree.getId()));
+                    }
+
+                    //获取当前项目树下的元素表 节点
+                    List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                                    .select(WbsTreePrivate::getType, WbsTreePrivate::getId, WbsTreePrivate::getAncestors)
+                                    .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
+                                    .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
+                            /*.eq(WbsTreePrivate::getStatus, 1)*/
+                    );
+                    List<WbsTreePrivate> wbsTreePrivatesProjectNodes = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(1)).collect(Collectors.toList());
+
+                    List<WbsTreePrivate> wbsTreePrivatesProjectTables;
+                    if (wbsTreePrivate.getAncestors().equals("0")) {
+                        //根节点
+                        wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2)).collect(Collectors.toList());
+                    } else {
+                        wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2) && f.getAncestors().contains(String.valueOf(wbsTreePrivate.getId()))).collect(Collectors.toList());
+                    }
+
+                    //获取新增的公有元素表addPublicTable
+                    List<WbsTree> addPublicTable = wbsTreesPublicTables.stream().filter(f ->
+                            !wbsTreePrivatesProjectTables.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).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());
+
+                    //构造
+                    List<Long> ids = addPublicTables.stream().map(WbsTree::getId).collect(Collectors.toList());
+                    if (ids.size() > 0) {
+                        List<WbsTree> resultDataList = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery().in(WbsTree::getId, ids));
+                        for (WbsTree tree : resultDataList) {
+                            WbsTreePrivate dataPrivate = BeanUtil.copyProperties(tree, WbsTreePrivate.class);
+                            if (dataPrivate != null) {
+                                dataPrivate.setPKeyId(SnowFlakeUtil.getId());
+                                dataPrivate.setWbsType(wbsTreePrivate.getWbsType());
+                                dataPrivate.setProjectId(wbsTreePrivate.getProjectId());
+                                dataPrivate.setFullName(dataPrivate.getNodeName());
+                                dataPrivate.setInitTableId(tree.getInitTableId().toString());
+                                insertDataPrivateList.add(dataPrivate);//新增
+                            }
+                        }
+                    }
+
+                } else if (("private").equals(projectInfo.getReferenceWbsTemplateTypeMeter())) {
+                    /*-------------------------------------计量私有引用同步--------------------------------------------*/
+                    //根据wbsTreePrivate的wbsId=私有引用的pKeyId来获取引用树根节点
+                    WbsTreePrivate wbsTreePrivateRoot = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getWbsId()));
+
+                    //获取当前私有引用树的元素表信息
+                    List<WbsTreePrivate> wbsTreePrivateRootTables;
+                    if (wbsTreePrivate.getAncestors().equals("0")) {
+                        //根节点
+                        wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
+                                        .select(WbsTreePrivate::getId, WbsTreePrivate::getParentId, WbsTreePrivate::getPKeyId)
+                                        .eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2)
+                                /*.eq(WbsTreePrivate::getStatus, 1)*/
+                        );
+                    } else {
+                        wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
+                                .select(WbsTreePrivate::getId, WbsTreePrivate::getParentId, WbsTreePrivate::getPKeyId)
+                                .eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2)
+                                /*.eq(WbsTreePrivate::getStatus, 1)*/
+                                .like(WbsTreePrivate::getAncestors, wbsTreePrivate.getId()));
+                    }
+
+                    //获取当前项目选择的节点下的所有元素表 节点
+                    List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
+                                    .select(WbsTreePrivate::getType, WbsTreePrivate::getId, WbsTreePrivate::getAncestors)
+                                    .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
+                            /*.eq(WbsTreePrivate::getStatus, 1)*/
+                    );
+
+                    List<WbsTreePrivate> wbsTreePrivatesProjectNodes = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(1)).collect(Collectors.toList());
+                    List<WbsTreePrivate> wbsTreePrivatesProjectTables;
+                    if (wbsTreePrivate.getAncestors().equals("0")) {
+                        //根节点
+                        wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2)).collect(Collectors.toList());
+                    } else {
+                        wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2) && f.getAncestors().contains(String.valueOf(wbsTreePrivate.getId()))).collect(Collectors.toList());
+                    }
+
+                    //获取新增的私有元素表addPrivateTable
+                    List<WbsTreePrivate> addPrivateTable = wbsTreePrivateRootTables.stream().filter(f ->
+                            !wbsTreePrivatesProjectTables.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).contains(f.getId())).collect(Collectors.toList());
+
+                    //判断当前新增的表在私有wbs中是否存在上级节点,存在表示可以新增,不存在表示不新增
+                    List<WbsTreePrivate> addPrivateTables = addPrivateTable.stream().filter(node ->
+                            wbsTreePrivatesProjectNodes.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).contains(node.getParentId())).collect(Collectors.toList());
+
+                    //构造
+                    List<Long> ids = addPrivateTables.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
+                    if (ids.size() > 0) {
+                        List<WbsTreePrivate> resultDataList = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().in(WbsTreePrivate::getPKeyId, ids));
+                        for (WbsTreePrivate tree : resultDataList) {
+                            WbsTreePrivate dataPrivate = BeanUtil.copyProperties(tree, WbsTreePrivate.class);
+                            if (dataPrivate != null) {
+                                dataPrivate.setPKeyId(SnowFlakeUtil.getId());
+                                dataPrivate.setWbsId(wbsTreePrivate.getWbsId());
+                                dataPrivate.setWbsType(tree.getWbsType());
+                                dataPrivate.setProjectId(wbsTreePrivate.getProjectId());
+                                dataPrivate.setInitTableId(tree.getInitTableId());
+                                insertDataPrivateList.add(dataPrivate);
+                            }
+                        }
+                    }
+                }
+            }
+
             //新增同步到项目
             if (!insertDataPrivateList.isEmpty()) {
                 List<List<WbsTreePrivate>> partition = Lists.partition(insertDataPrivateList, 1000);
@@ -1706,6 +1838,9 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                                 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());
@@ -1721,6 +1856,9 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                                 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());
@@ -2422,10 +2560,10 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         return true;
     }
 
-    public Boolean hasPart(String id){
-        if(Func.isNotBlank(id)) {
-            List<Map<String,Object>> mapList =this.jdbcTemplate.queryForList("select a.id from m_wbs_tree a join m_wbs_info b on a.wbs_id=b.id where a.id="+id+"  and b.wbs_type=3  union  select p_key_id from m_wbs_tree_private where p_key_id ="+id+" and wbs_type =3");
-            return mapList.size()==0;
+    public Boolean hasPart(String id) {
+        if (Func.isNotBlank(id)) {
+            List<Map<String, Object>> mapList = this.jdbcTemplate.queryForList("select a.id from m_wbs_tree a join m_wbs_info b on a.wbs_id=b.id where a.id=" + id + "  and b.wbs_type=3  union  select p_key_id from m_wbs_tree_private where p_key_id =" + id + " and wbs_type =3");
+            return mapList.size() == 0;
         }
         return true;
     }