liuyc 1 éve
szülő
commit
986ddc957c

+ 23 - 7
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -1479,7 +1479,7 @@ public class InformationWriteQueryController extends BladeController {
                     //表单所属方,只有勾选了对应的所属方权限才复制数据;勾选了复制数据才能复制,否则只是创建节点、表
                     if (nodeOld.getType() == 2 && StringUtils.isNotEmpty(newData.getInitTableName()) && tabOwner.contains(nodeOld.getTableOwner()) && vo.getIsCopyData() == 1) {
                         String tableName = newData.getInitTableName();
-                        if (StringUtils.isEmpty(tableName)){ //没有实体表名,跳过
+                        if (StringUtils.isEmpty(tableName)) { //没有实体表名,跳过
                             continue;
                         }
 
@@ -2813,6 +2813,21 @@ public class InformationWriteQueryController extends BladeController {
         }
     }
 
+    /**
+     * 获取所有子节点
+     */
+    private void currentNodeAllChild(List<WbsTreeContract> resultChildNodes, List<WbsTreeContract> childNodes, String contractId) {
+        if (childNodes.size() > 0) {
+            //如果存在子级,那么递归获取子级的子级
+            List<Long> ids = childNodes.stream().map(WbsTreeContract::getId).collect(Collectors.toList());
+            List<WbsTreeContract> childNodeList = jdbcTemplate.query("select p_key_id,id,parent_id,type from m_wbs_tree_contract where is_deleted = 0 and contract_id = " + contractId + " and parent_id in(" + StringUtils.join(ids, ",") + ")", new BeanPropertyRowMapper<>(WbsTreeContract.class));
+            if (childNodeList.size() > 0) {
+                resultChildNodes.addAll(childNodeList);
+                this.currentNodeAllChild(resultChildNodes, childNodeList, contractId);
+            }
+        }
+    }
+
     /**
      * 删除节点
      *
@@ -2842,15 +2857,18 @@ public class InformationWriteQueryController extends BladeController {
             return R.data(300, false, "存在已经上报或审批的节点,不允许删除");
         }
 
-        //查询所有子节点
-        List<WbsTreeContract> removeNodeList = jdbcTemplate.query("select p_key_id,type from m_wbs_tree_contract where is_deleted = 0 and contract_id = " + removeNode.getContractId() + " and ancestors like '%" + removeNode.getId() + "%'", new BeanPropertyRowMapper<>(WbsTreeContract.class));
+        //查询所有子节点 TODO(不能用ancestors字段获取,ancestors字段有问题,目前用递归获取)2023年9月19日
+        //List<WbsTreeContract> removeNodeList = jdbcTemplate.query("select p_key_id,type from m_wbs_tree_contract where is_deleted = 0 and contract_id = " + removeNode.getContractId() + " and ancestors like '%" + removeNode.getId() + "%'", new BeanPropertyRowMapper<>(WbsTreeContract.class));
+        List<WbsTreeContract> removeNodeList = new ArrayList<>();
+        this.currentNodeAllChild(removeNodeList, Collections.singletonList(removeNode), removeNode.getContractId());
 
         //获取pKeyId
         List<Long> removeList = removeNodeList.stream().map(WbsTreeContract::getPKeyId).distinct().collect(Collectors.toList());
         //拼接
         ids = ids + "," + String.join(",", JSONArray.parseArray(JSONObject.toJSONString(removeList), String.class));
-        //删除掉表格
+        //删除掉表格 TODO(不清楚为什么要剔除表格,按理说删除节点后,节点下的表也应该一起删除的,猜测或许是为了方便恢复节点的时候表数据还存在)2023年9月19日
         removeNodeList.removeIf(tree -> tree.getType() != null && new Integer("2").equals(tree.getType()));
+
         //获取被删除节点名称
         //String nodeName = StringUtils.isNotEmpty(removeNode.getFullName()) ? removeNode.getFullName() : removeNode.getNodeName() + "," + removeNodeList.stream().map(wbs -> StringUtils.isNotEmpty(wbs.getFullName()) ? wbs.getFullName() : wbs.getNodeName()).collect(Collectors.joining());
 
@@ -2894,13 +2912,11 @@ public class InformationWriteQueryController extends BladeController {
         this.recycleBinClient.saveDelBusinessData(idArray, StringUtils.isNotEmpty(removeNode.getFullName()) ? removeNode.getFullName() : removeNode.getNodeName(), 2, parentNodeName.toString(), removeNode.getProjectId(), removeNode.getContractId());
 
         //改为物理删除 (8.28改为逻辑删除,方便恢复)
-        Boolean aBoolean = this.wbsTreeContractClient.removeContractTreeNode(idArray);
+        this.wbsTreeContractClient.removeContractTreeNode(idArray);
 
         //更新redis
-        //this.informationQueryService.AsyncWbsTree(removeNode.getParentId() + "", removeNode.getParentId() + "", removeNode.getContractId(), "", "1");
         this.informationQueryService.delAsyncWbsTree(removeNode.getContractId());
 
-//        return R.data(aBoolean);
         return R.data(true);
     }