liuyc 2 gadi atpakaļ
vecāks
revīzija
6e307385ae

+ 57 - 34
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -1328,6 +1328,18 @@ public class InformationWriteQueryController extends BladeController {
     @ApiOperationSupport(order = 15)
     @ApiOperationSupport(order = 15)
     @ApiOperation(value = "复制节点(新)")
     @ApiOperation(value = "复制节点(新)")
     public R<Boolean> copyContractTreeNode(@RequestBody CopyContractTreeNodeVO vo) {
     public R<Boolean> copyContractTreeNode(@RequestBody CopyContractTreeNodeVO vo) {
+        //表单所属方
+        String tabOwner = "";
+        if (("1,2").equals(vo.getClassifyType()) || ("2,1").equals(vo.getClassifyType())) {
+            tabOwner = "1,2,3,4,5,6";
+        } else if (("1").equals(vo.getClassifyType())) {
+            tabOwner = "1,2,3";
+        } else if (("2").equals(vo.getClassifyType())) {
+            tabOwner = "4,5,6";
+        } else if (vo.getIsCopyData() == 0) {
+            tabOwner = "1,2,3,4,5,6"; //如果选择的是否复制数据=0(否),默认所属方123456
+        }
+
         //TODO 单份复制
         //TODO 单份复制
         if (("1").equals(vo.getCopyType())) {
         if (("1").equals(vo.getCopyType())) {
             //首先查询需要复制的节点及其下级所有子节点的信息
             //首先查询需要复制的节点及其下级所有子节点的信息
@@ -1356,6 +1368,7 @@ public class InformationWriteQueryController extends BladeController {
                     nodeMap.put(node.getId().toString(), node);
                     nodeMap.put(node.getId().toString(), node);
                 });
                 });
 
 
+                String finalTabOwner1 = tabOwner;
                 nodeChildAll.forEach(node -> {
                 nodeChildAll.forEach(node -> {
                     WbsTreeContract newData = new WbsTreeContract();
                     WbsTreeContract newData = new WbsTreeContract();
                     BeanUtils.copyProperties(node, newData);
                     BeanUtils.copyProperties(node, newData);
@@ -1405,29 +1418,31 @@ public class InformationWriteQueryController extends BladeController {
                         //生成施工日志
                         //生成施工日志
                         this.createLedger(newData, saveLedger, nodeMap, null);
                         this.createLedger(newData, saveLedger, nodeMap, null);
                     }
                     }
-
+                    //表单所属方,只有勾选了对应的所属方权限才复制数据;勾选了复制数据才能复制,否则只是创建节点、表
                     // 组织复制值Sql
                     // 组织复制值Sql
-                    if (nodeTabColsMap != null && node.getType() == 2 && StringUtils.isNotEmpty(newData.getInitTableName())) {
+                    if (node.getType() == 2 && StringUtils.isNotEmpty(newData.getInitTableName()) && finalTabOwner1.contains(node.getTableOwner()) && vo.getIsCopyData() == 1) {
                         String tableName = newData.getInitTableName();
                         String tableName = newData.getInitTableName();
                         String col = nodeTabColsMap.get(tableName);
                         String col = nodeTabColsMap.get(tableName);
                         String colVal = nodeTabColsMap.get(tableName);
                         String colVal = nodeTabColsMap.get(tableName);
                         colVal = colVal.replaceAll("id,p_key_id,", "'" + SnowFlakeUtil.getId() + "' as id,'" + newData.getPKeyId() + "' as p_key_id,");
                         colVal = colVal.replaceAll("id,p_key_id,", "'" + SnowFlakeUtil.getId() + "' as id,'" + newData.getPKeyId() + "' as p_key_id,");
-                        copeSql.append("insert into " + tableName + "  (" + col + ") select " + colVal + " from " + tableName + " where p_key_id='" + node.getPKeyId() + "' ;");
+                        //delete SQL (先删除旧数据,再新增)
+                        String delSql = "delete from " + tableName + " where p_key_id = " + newData.getPKeyId() + " ; ";
+                        //insert into SQL
+                        copeSql.append(delSql).append("insert into ").append(tableName).append("  (").append(col).append(") select ").append(colVal).append(" from ").append(tableName).append(" where p_key_id='").append(node.getPKeyId()).append("' ;");
                     }
                     }
                 });
                 });
             }
             }
             //保存节点信息
             //保存节点信息
             R<Boolean> booleanR = this.saveOrCopyNodeTree(saveList, saveLedger, 32, needCopyNode);
             R<Boolean> booleanR = this.saveOrCopyNodeTree(saveList, saveLedger, 32, needCopyNode);
-
             //复制数据逻辑
             //复制数据逻辑
-            if (nodeTabColsMap != null && copeSql.length() >= 10) {
+            if (copeSql.length() >= 10) {
                 jdbcTemplate.execute(copeSql.toString());
                 jdbcTemplate.execute(copeSql.toString());
             }
             }
-
             //获取父节点信息
             //获取父节点信息
             informationQueryService.AsyncWbsTree(needCopyNode.getParentId() + "", needCopyNode.getParentId() + "", needCopyNode.getContractId(), "", "1");
             informationQueryService.AsyncWbsTree(needCopyNode.getParentId() + "", needCopyNode.getParentId() + "", needCopyNode.getContractId(), "", "1");
             return booleanR;
             return booleanR;
 
 
+        } else if (("2").equals(vo.getCopyType())) {
             /** TODO 多份复制
             /** TODO 多份复制
              * @Author liuYC
              * @Author liuYC
              * @Date 2023年4月10日18:06:53
              * @Date 2023年4月10日18:06:53
@@ -1440,7 +1455,6 @@ public class InformationWriteQueryController extends BladeController {
              *      2.1 如果点击选择的是其他父级节点的父级,那么新增一个新的当前选择的复制的节点-新的表-新的表数据(根据所属方查询对应数据)。
              *      2.1 如果点击选择的是其他父级节点的父级,那么新增一个新的当前选择的复制的节点-新的表-新的表数据(根据所属方查询对应数据)。
              *      2.2 如果点击选择的是当前复制节点本身的同等级节点,那么复制对应表数据,如果没有对应表,那么跳过。
              *      2.2 如果点击选择的是当前复制节点本身的同等级节点,那么复制对应表数据,如果没有对应表,那么跳过。
              */
              */
-        } else if (("2").equals(vo.getCopyType())) {
             //获取需要复制到的位置节点信息的集合
             //获取需要复制到的位置节点信息的集合
             List<CopyContractTreeNodeVO.CopyBatch> copyBatches = vo.getCopyBatchToPaths();
             List<CopyContractTreeNodeVO.CopyBatch> copyBatches = vo.getCopyBatchToPaths();
             if (copyBatches.size() > 0) {
             if (copyBatches.size() > 0) {
@@ -1457,9 +1471,9 @@ public class InformationWriteQueryController extends BladeController {
                     }
                     }
                 }
                 }
 
 
-                //缓存需要复制的节点信息、表信息
                 WbsTreeContract needCopyNodeRoot = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getNeedCopyPrimaryKeyId());
                 WbsTreeContract needCopyNodeRoot = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getNeedCopyPrimaryKeyId());
                 if (needCopyNodeRoot != null) {
                 if (needCopyNodeRoot != null) {
+                    //缓存需要复制的节点信息、表信息
                     Map<String, List<WbsTreeContract>> needCopyNodeAndTabMap = new HashMap<>();
                     Map<String, List<WbsTreeContract>> needCopyNodeAndTabMap = new HashMap<>();
                     List<WbsTreeContract> needCopyChildNodes = this.getChildNodes(needCopyNodeRoot);
                     List<WbsTreeContract> needCopyChildNodes = this.getChildNodes(needCopyNodeRoot);
                     if (ObjectUtil.isEmpty(needCopyChildNodes) || needCopyChildNodes.size() == 0) {
                     if (ObjectUtil.isEmpty(needCopyChildNodes) || needCopyChildNodes.size() == 0) {
@@ -1478,18 +1492,6 @@ public class InformationWriteQueryController extends BladeController {
                     Set<WbsTreeContract> addChildNodesTablesOldAll = new HashSet<>(addChildNodesTables);//表单附件数据源
                     Set<WbsTreeContract> addChildNodesTablesOldAll = new HashSet<>(addChildNodesTables);//表单附件数据源
                     List<String> resultTablesData = new ArrayList<>();//表单数据
                     List<String> resultTablesData = new ArrayList<>();//表单数据
 
 
-                    //表单所属方
-                    String tabOwner = "";
-                    if (("1,2").equals(vo.getClassifyType()) || ("2,1").equals(vo.getClassifyType())) {
-                        tabOwner = "1,2,3,4,5,6";
-                    } else if (("1").equals(vo.getClassifyType())) {
-                        tabOwner = "1,2,3";
-                    } else if (("2").equals(vo.getClassifyType())) {
-                        tabOwner = "4,5,6";
-                    } else if (vo.getIsCopyData() == 0 && StringUtils.isEmpty(tabOwner)) {
-                        tabOwner = "1,2,3,4,5,6"; //如果选择的是否复制数据=0(否),默认所属方123456
-                    }
-
                     //创建线程池,默认设置4个线程
                     //创建线程池,默认设置4个线程
                     ExecutorService executor = Executors.newFixedThreadPool(4);
                     ExecutorService executor = Executors.newFixedThreadPool(4);
                     try {
                     try {
@@ -1529,20 +1531,39 @@ public class InformationWriteQueryController extends BladeController {
                                             //获取需要复制节点的上级
                                             //获取需要复制节点的上级
                                             WbsTreeContract parentNodeNeed = wbsTreeContractClient.getContractWbsTreeByContractIdAndId(needCopyNode.getParentId(), Long.parseLong(needCopyNode.getContractId()));
                                             WbsTreeContract parentNodeNeed = wbsTreeContractClient.getContractWbsTreeByContractIdAndId(needCopyNode.getParentId(), Long.parseLong(needCopyNode.getContractId()));
 
 
-                                            //2.1 选择的父级的同级的父级节点,新增(当复制节点父级与选择复制到的位置节点的父级id相同时,表示跨节点)
-                                            if (parentNodeNeed != null && parentNodeNeed.getParentId().equals(toCopyNode.getParentId())) {
-                                                toCopyNode.setNodeName(toCopyVO.getNodeName());
-                                                toCopyNode.setPartitionCode(toCopyVO.getPartitionCode());
-
-                                                //获取缓存节点、表信息
-                                                List<WbsTreeContract> needCopyNodes = needCopyNodeAndTabMap.get("node:" + needCopyNodeRoot.getPKeyId());
-                                                List<WbsTreeContract> needCopyTab = needCopyNodeAndTabMap.get("tab:" + needCopyNodeRoot.getPKeyId());
-
-                                                //构造新的节点、表、数据
-                                                this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 0, finalTabOwner, vo.getIsCopyData());
+                                            boolean var = false;
+                                            //2.1 选择的父级的同级的父级节点,新增(当复制节点父级与选择复制到的位置节点的父级id相同时,表示跨节点新增)
+                                            if (parentNodeNeed != null) {
+                                                //2.1.1 如果是跨一级的情况下:parentNodeNeed.getParentId() == toCopyNode.getParentId() ,且 parentNodeNeed.getAncestors() == toCopyNode.getAncestors() ,且节点类型必须一样
+                                                if (parentNodeNeed.getParentId().equals(toCopyNode.getParentId()) && parentNodeNeed.getAncestors().equals(toCopyNode.getAncestors()) && parentNodeNeed.getNodeType().equals(toCopyNode.getNodeType())) {
+                                                    toCopyNode.setNodeName(toCopyVO.getNodeName());
+                                                    toCopyNode.setPartitionCode(toCopyVO.getPartitionCode());
+
+                                                    //获取缓存节点、表信息
+                                                    List<WbsTreeContract> needCopyNodes = needCopyNodeAndTabMap.get("node:" + needCopyNodeRoot.getPKeyId());
+                                                    List<WbsTreeContract> needCopyTab = needCopyNodeAndTabMap.get("tab:" + needCopyNodeRoot.getPKeyId());
+
+                                                    //构造新的节点、表、数据
+                                                    this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 0, finalTabOwner, vo.getIsCopyData());
+                                                    var = true;
+
+                                                } else if (!parentNodeNeed.getParentId().equals(toCopyNode.getParentId()) && !parentNodeNeed.getAncestors().equals(toCopyNode.getAncestors()) && parentNodeNeed.getNodeType().equals(toCopyNode.getNodeType())) {
+                                                    //2.1.2 如果跨多级的情况下父级id不相同 parentNodeNeed.getParentId() != toCopyNode.getParentId() ,且 parentNodeNeed.getAncestors() != toCopyNode.getAncestors() ,且节点类型必须一样
+                                                    toCopyNode.setNodeName(toCopyVO.getNodeName());
+                                                    toCopyNode.setPartitionCode(toCopyVO.getPartitionCode());
+
+                                                    //获取缓存节点、表信息
+                                                    List<WbsTreeContract> needCopyNodes = needCopyNodeAndTabMap.get("node:" + needCopyNodeRoot.getPKeyId());
+                                                    List<WbsTreeContract> needCopyTab = needCopyNodeAndTabMap.get("tab:" + needCopyNodeRoot.getPKeyId());
+
+                                                    //构造新的节点、表、数据
+                                                    this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 0, finalTabOwner, vo.getIsCopyData());
+                                                    var = true;
+                                                }
+                                            }
 
 
-                                                //2.2 如果点击选择的是当前复制节点本身的同等级节点,那么就只复制数据。(如果是跨节点,类型相同的情况下,只复制数据)
-                                            } else if (needCopyNode.getNodeType().equals(toCopyNode.getNodeType()) && !needCopyNode.getParentId().equals(toCopyNode.getParentId())) {
+                                            //2.2 如果点击选择的是当前复制节点本身的同等级节点,那么就只复制数据。(如果是跨节点,类型相同的情况下,只复制数据),且var=false,表示没有进行到跨节点新增的逻辑,只是跨节点复制数据
+                                            if (needCopyNode.getNodeType().equals(toCopyNode.getNodeType()) && !needCopyNode.getParentId().equals(toCopyNode.getParentId()) && !var) {
                                                 //构造数据
                                                 //构造数据
                                                 this.addCopyTabData(needCopyNode, toCopyNode, finalTabOwner, resultTablesData, addTabList, vo.getIsCopyData());
                                                 this.addCopyTabData(needCopyNode, toCopyNode, finalTabOwner, resultTablesData, addTabList, vo.getIsCopyData());
                                             }
                                             }
@@ -1591,6 +1612,8 @@ public class InformationWriteQueryController extends BladeController {
                         }
                         }
                     }
                     }
                     return R.success("操作成功");
                     return R.success("操作成功");
+                } else {
+                    throw new ServiceException("没有找到需要复制的节点信息,请联系管理员");
                 }
                 }
             }
             }
         }
         }
@@ -1715,7 +1738,7 @@ public class InformationWriteQueryController extends BladeController {
      */
      */
     private void addCopyNodesAndTabsBuildData(List<WbsTreeContract> addNodeList, List<WbsTreeContract> addTabList, List<WbsTreeContract> needNodes, List<WbsTreeContract> needTabs, WbsTreeContract
     private void addCopyNodesAndTabsBuildData(List<WbsTreeContract> addNodeList, List<WbsTreeContract> addTabList, List<WbsTreeContract> needNodes, List<WbsTreeContract> needTabs, WbsTreeContract
             needCopyNode, WbsTreeContract toCopyNode, List<String> resultTablesData, Integer isSameNode, String
             needCopyNode, WbsTreeContract toCopyNode, List<String> resultTablesData, Integer isSameNode, String
-             tabOwner, Integer isCopyData) {
+                                                      tabOwner, Integer isCopyData) {
         int var = 0;
         int var = 0;
         if (needNodes.size() == 1) {
         if (needNodes.size() == 1) {
             //判断是否为最下级节点
             //判断是否为最下级节点

+ 45 - 13
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/ImageClassificationFileServiceImpl.java

@@ -34,6 +34,7 @@ import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.manager.entity.WbsParam;
 import org.springblade.manager.entity.WbsParam;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.entity.WbsTreeContract;
+import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.feign.WbsTreeContractClient;
 import org.springblade.manager.feign.WbsTreeContractClient;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -150,16 +151,20 @@ public class ImageClassificationFileServiceImpl extends BaseServiceImpl<ImageCla
         if (wbsTreeContract != null) {
         if (wbsTreeContract != null) {
             //获取当前节点所有父级节点
             //获取当前节点所有父级节点
             List<WbsTreeContract> result = new ArrayList<>();
             List<WbsTreeContract> result = new ArrayList<>();
-            this.recursiveGetParentNodes(result, wbsTreeContract);
             result.add(wbsTreeContract);
             result.add(wbsTreeContract);
-            result.sort(Comparator.comparing(WbsTreeContract::getNodeType).thenComparing(WbsTreeContract::getParentId));
+            this.recursiveGetParentNodes(result, wbsTreeContract);
+            Collections.reverse(result); //倒叙
             List<String> allNodeIds = result.stream().map(WbsTreeContract::getId).map(String::valueOf).collect(Collectors.toList());
             List<String> allNodeIds = result.stream().map(WbsTreeContract::getId).map(String::valueOf).collect(Collectors.toList());
-
-            WbsParam wbsParam = jdbcTemplate.query("select v from m_wbs_param where is_deleted = 0 and status = 1 and v is not null and k = 'FILE_TITLE' and name = '文件题名' and node_id = " + wbsTreeContract.getId(), new BeanPropertyRowMapper<>(WbsParam.class)).stream().findAny().orElse(null);
-
-            if (ObjectUtil.isNotEmpty(wbsTreeContract.getOldId())) {
+            WbsParam wbsParam = null;
+            WbsTreePrivate privateNode = jdbcTemplate.query("select p_key_id from m_wbs_tree_private where status = 1 and is_deleted = 0 and wbs_id = " + wbsTreeContract.getWbsId() + " and id = " + wbsTreeContract.getId() + " and project_id =" + wbsTreeContract.getProjectId(), new BeanPropertyRowMapper<>(WbsTreePrivate.class)).stream().findAny().orElse(null);
+            if (privateNode != null) {
+                wbsParam = jdbcTemplate.query("select v from m_wbs_param where is_deleted = 0 and status = 1 and v is not null and k = 'FILE_TITLE' and name = '文件题名' and node_id = " + privateNode.getPKeyId(), new BeanPropertyRowMapper<>(WbsParam.class)).stream().findAny().orElse(null);
+            } else if (ObjectUtil.isNotEmpty(wbsTreeContract.getOldId())) {
                 //表示复制、新增节点
                 //表示复制、新增节点
-                wbsParam = jdbcTemplate.query("select v from m_wbs_param where is_deleted = 0 and status = 1 and v is not null and k = 'FILE_TITLE' and name = '文件题名' and node_id = " + wbsTreeContract.getOldId(), new BeanPropertyRowMapper<>(WbsParam.class)).stream().findAny().orElse(null);
+                WbsTreePrivate privateNodeCopy = jdbcTemplate.query("select p_key_id from m_wbs_tree_private where status = 1 and is_deleted = 0 and wbs_id = " + wbsTreeContract.getWbsId() + " and id = " + wbsTreeContract.getOldId() + " and project_id =" + wbsTreeContract.getProjectId(), new BeanPropertyRowMapper<>(WbsTreePrivate.class)).stream().findAny().orElse(null);
+                if (privateNodeCopy != null) {
+                    wbsParam = jdbcTemplate.query("select v from m_wbs_param where is_deleted = 0 and status = 1 and v is not null and k = 'FILE_TITLE' and name = '文件题名' and node_id = " + privateNodeCopy.getPKeyId(), new BeanPropertyRowMapper<>(WbsParam.class)).stream().findAny().orElse(null);
+                }
             }
             }
 
 
             if (wbsParam != null && allNodeIds.size() > 0) {
             if (wbsParam != null && allNodeIds.size() > 0) {
@@ -191,12 +196,39 @@ public class ImageClassificationFileServiceImpl extends BaseServiceImpl<ImageCla
                     if (nameList.size() > 0) {
                     if (nameList.size() > 0) {
                         return StringUtils.join(nameList, "");
                         return StringUtils.join(nameList, "");
                     }
                     }
-                } else {
-                    //如果私有WBS为空,到公有WBS获取
-                    List<WbsTree> wbsTreeList = jdbcTemplate.query("select full_name from m_wbs_tree where is_deleted = 0 and status = 1 and id in(" + StringUtils.join(ids, ",") + ")", new BeanPropertyRowMapper<>(WbsTree.class));
-                    List<String> nameList = wbsTreeList.stream().map(WbsTree::getFullName).collect(Collectors.toList());
-                    if (nameList.size() > 0) {
-                        return StringUtils.join(nameList, "");
+                }
+            } else if (wbsParam == null) {
+                //如果私有WBS为空,到公有WBS获取,wbsTreeContract.getId()=wbsTree.getId()
+                wbsParam = jdbcTemplate.query("select v from m_wbs_param where is_deleted = 0 and status = 1 and v is not null and k = 'FILE_TITLE' and name = '文件题名' and node_id = " + wbsTreeContract.getId(), new BeanPropertyRowMapper<>(WbsParam.class)).stream().findAny().orElse(null);
+                if (wbsParam != null && allNodeIds.size() > 0) {
+                    List<String> nodeNumber = new ArrayList<>();
+                    String[] titles = wbsParam.getV().split("-");
+                    for (String title : titles) {
+                        if (title.contains("c") || title.contains("C")) {
+                            String lastStr = title.substring(title.length() - 1);
+                            nodeNumber.add(lastStr);
+                        }
+                    }
+
+                    List<String> ids = new ArrayList<>();
+                    for (String index : nodeNumber) {
+                        if (Integer.parseInt(index) <= result.size()) {
+                            String id = allNodeIds.get(Integer.parseInt(index));
+                            if (StringUtils.isNotEmpty(id)) {
+                                ids.add(id);
+                            }
+                        }
+                    }
+
+                    List<WbsTreeContract> filteredList = result.stream()
+                            .filter(e -> ids.stream().anyMatch(id -> id.equals(String.valueOf(e.getId()))))
+                            .collect(Collectors.toList());
+
+                    if (filteredList.size() > 0) {
+                        List<String> nameList = filteredList.stream().map(WbsTreeContract::getFullName).collect(Collectors.toList());
+                        if (nameList.size() > 0) {
+                            return StringUtils.join(nameList, "");
+                        }
                     }
                     }
                 }
                 }
             }
             }

+ 17 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java

@@ -541,6 +541,23 @@ public class ContractInfoController extends BladeController {
         return R.fail(200, "未查询到信息");
         return R.fail(200, "未查询到信息");
     }
     }
 
 
+    /**
+     * 客户端合同段新增节点获取当前节点树
+     */
+    @GetMapping("/add-node-tree")
+    @ApiOperationSupport(order = 18)
+    @ApiOperation(value = "客户端合同段新增节点获取当前节点树", notes = "传入选择的节点pKeyId")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "pKeyId", value = "选择的节点pKeyId", required = true)
+    })
+    public R addNodeTree(String pKeyId) {
+        List<WbsTreeContractVO> tree = contractInfoService.addNodeTree(pKeyId);
+        if (tree != null && tree.size() > 0) {
+            return R.data(tree);
+        }
+        return R.fail(200, "未查询到信息");
+    }
+
     /**
     /**
      * 查询合同段树-全加载-施工合同段
      * 查询合同段树-全加载-施工合同段
      */
      */

+ 4 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IContractInfoService.java

@@ -73,4 +73,8 @@ public interface IContractInfoService extends BaseService<ContractInfo> {
     Map<String, Object> trialRelationTree(String wbsId, String projectId, String contractId, String selfId);
     Map<String, Object> trialRelationTree(String wbsId, String projectId, String contractId, String selfId);
 
 
     Map<Long, List<WbsTreeContractTreeAllVO>> treeAllJL(String contractId, Integer type);
     Map<Long, List<WbsTreeContractTreeAllVO>> treeAllJL(String contractId, Integer type);
+
+    List<WbsTreeContractVO> addNodeTree(String pKeyId);
+
+
 }
 }

+ 53 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

@@ -190,6 +190,59 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
         return result;
         return result;
     }
     }
 
 
+    @Override
+    public List<WbsTreeContractVO> addNodeTree(String pKeyId) {
+        WbsTreeContract parentNodeRoot = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId, pKeyId).eq(WbsTreeContract::getStatus, 1));
+        if (parentNodeRoot != null) {
+            List<WbsTreeContract> allNodes = this.getChildNodes(parentNodeRoot);
+            allNodes.add(parentNodeRoot);
+            List<WbsTreeContractVO> resultAllNodes = BeanUtil.copyProperties(allNodes, WbsTreeContractVO.class);
+            return buildWbsTreeByStreamChildNodeTree(resultAllNodes, parentNodeRoot);
+        }
+        return null;
+    }
+
+    public List<WbsTreeContractVO> buildWbsTreeByStreamChildNodeTree(List<WbsTreeContractVO> nodes, WbsTreeContract parentNodeRoot) {
+        List<WbsTreeContractVO> list = nodes.stream().filter(f -> f.getId().equals(parentNodeRoot.getId())).collect(Collectors.toList());
+        Map<Long, List<WbsTreeContractVO>> map = nodes.stream().collect(Collectors.groupingBy(WbsTreeContractVO::getParentId));
+        this.recursionFnTreeChildNode(list, map);
+        return list;
+    }
+
+    public void recursionFnTreeChildNode(List<WbsTreeContractVO> list, Map<Long, List<WbsTreeContractVO>> map) {
+        for (WbsTreeContractVO wbsTreeContractVO : list) {
+            List<WbsTreeContractVO> childrenList = map.get(wbsTreeContractVO.getId());
+            wbsTreeContractVO.setChildren(childrenList);
+            if (childrenList != null && childrenList.size() > 0) {
+                wbsTreeContractVO.setHasChildren(true);
+                recursionFnTree(childrenList, map);
+            }
+        }
+    }
+
+    private List<WbsTreeContract> getChildNodes(WbsTreeContract obj) {
+        if (obj != null) {
+            List<WbsTreeContract> wbsTreeContracts = Collections.singletonList(obj);
+            List<WbsTreeContract> result = new ArrayList<>();
+            this.recursionGetChildNodes(wbsTreeContracts, result, obj.getContractId());
+            if (result.size() > 0) {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    private void recursionGetChildNodes(List<WbsTreeContract> list, List<WbsTreeContract> result, String contractId) {
+        List<Long> ids = list.stream().map(WbsTreeContract::getId).collect(Collectors.toList());
+        if (ids.size() > 0) {
+            List<WbsTreeContract> query = jdbcTemplate.query("select * from m_wbs_tree_contract where type = 1 and parent_id in(" + org.apache.commons.lang.StringUtils.join(ids, ",") + ") and status = 1 and is_deleted = 0 and contract_id = " + contractId, new BeanPropertyRowMapper<>(WbsTreeContract.class));
+            if (query.size() > 0) {
+                result.addAll(query);
+                recursionGetChildNodes(query, result, contractId);
+            }
+        }
+    }
+
     @Override
     @Override
     public List<WbsTreeContractVO6> tree6List(String wbsId, String projectId, String contractId) {
     public List<WbsTreeContractVO6> tree6List(String wbsId, String projectId, String contractId) {
         return baseMapper.tree6(Long.parseLong(wbsId), Long.parseLong(projectId), Long.parseLong(contractId));
         return baseMapper.tree6(Long.parseLong(wbsId), Long.parseLong(projectId), Long.parseLong(contractId));
@@ -206,7 +259,6 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
         List<WbsTreeContractVO6> wbsTreeContractVOS = baseMapper.tree6(Long.parseLong(wbsId), Long.parseLong(projectId), Long.parseLong(contractId));
         List<WbsTreeContractVO6> wbsTreeContractVOS = baseMapper.tree6(Long.parseLong(wbsId), Long.parseLong(projectId), Long.parseLong(contractId));
         List<WbsTreeContractVO6> wbsTreeVO2s = ForestNodeMerger.merge(wbsTreeContractVOS);
         List<WbsTreeContractVO6> wbsTreeVO2s = ForestNodeMerger.merge(wbsTreeContractVOS);
         List<WbsTreeContractVO6> list = wbsTreeVO2s.stream().filter(f -> f.getParentId() == 0L).collect(Collectors.toList());
         List<WbsTreeContractVO6> list = wbsTreeVO2s.stream().filter(f -> f.getParentId() == 0L).collect(Collectors.toList());
-
         return list;
         return list;
     }
     }