浏览代码

新增节点bug

liuyc 2 年之前
父节点
当前提交
47fc1ee22f

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

@@ -2654,7 +2654,7 @@ public class InformationWriteQueryController extends BladeController {
         List<WbsTreePrivate> query = new ArrayList<>();
         List<String> pKeyIds = selectList.stream().map(AddContractTreeNodeVO.Node::getPrimaryKeyId).collect(Collectors.toList());
         //所有相关节点集合
-        List<WbsTreeContract> selectedNodeList = new ArrayList<>();
+        List<WbsTreePrivate> selectedNodeList = new ArrayList<>();
 
         //检查新增类型
         if ("1".equals(vo.getSaveType())) {
@@ -2667,9 +2667,9 @@ public class InformationWriteQueryController extends BladeController {
                     return R.data(null);
                 }
                 //检查当前操作的节点是否是填报节点,如果是则需要查询相关联表格
-                List<WbsTreeContract> submitNodeList = selectedNodeList.stream().filter(treeContract1 -> Arrays.asList("1,2,3,4".split(",")).contains(treeContract1.getMajorDataType().toString())).distinct().collect(Collectors.toList());
+                List<WbsTreePrivate> submitNodeList = selectedNodeList.stream().filter(treeContract1 -> Arrays.asList("1,2,3,4".split(",")).contains(treeContract1.getMajorDataType().toString())).distinct().collect(Collectors.toList());
 
-                List<WbsTreeContract> childList = new ArrayList<>();
+                List<WbsTreePrivate> childList = new ArrayList<>();
                 if (submitNodeList.size() > 0) {
                     //只取原始表
                     this.foreachQueryChild(submitNodeList, childList);
@@ -2679,11 +2679,11 @@ public class InformationWriteQueryController extends BladeController {
 
                 if (childList.size() > 0) {
                     //处理重复的数据
-                    Iterator<WbsTreeContract> iterator = childList.iterator();
+                    Iterator<WbsTreePrivate> iterator = childList.iterator();
                     while (iterator.hasNext()) {
-                        WbsTreeContract next = iterator.next();
-                        for (WbsTreeContract wbsTreeContract : selectedNodeList) {
-                            if (wbsTreeContract.getPKeyId().equals(next.getPKeyId())) {
+                        WbsTreePrivate next = iterator.next();
+                        for (WbsTreePrivate wbsTreePrivate : selectedNodeList) {
+                            if (wbsTreePrivate.getPKeyId().equals(next.getPKeyId())) {
                                 //删掉重复数据
                                 iterator.remove();
                                 break;
@@ -2709,9 +2709,9 @@ public class InformationWriteQueryController extends BladeController {
                     return R.data(null);
                 }
                 //检查当前操作的节点是否是填报节点,如果是则需要查询相关联表格
-                List<WbsTreeContract> submitNodeList = selectedNodeList.stream().filter(treePrivate -> Arrays.asList("1,2,3,4".split(",")).contains(treePrivate.getMajorDataType().toString())).distinct().collect(Collectors.toList());
+                List<WbsTreePrivate> submitNodeList = selectedNodeList.stream().filter(treePrivate -> Arrays.asList("1,2,3,4".split(",")).contains(treePrivate.getMajorDataType().toString())).distinct().collect(Collectors.toList());
 
-                List<WbsTreeContract> childList = new ArrayList<>();
+                List<WbsTreePrivate> childList = new ArrayList<>();
                 if (submitNodeList.size() > 0) {
                     //只取原始表
                     this.foreachQueryChild(submitNodeList, childList);
@@ -2736,20 +2736,24 @@ public class InformationWriteQueryController extends BladeController {
                                 .orElse("")));
 
         //原始表ids,电签位置信息使用
-        List<Long> oldTabIds = selectedNodeList.stream().filter(f -> new Integer(2).equals(f.getType())).map(WbsTreeContract::getId).collect(Collectors.toList());
+        List<Long> oldTabIds = selectedNodeList.stream().filter(f -> new Integer(2).equals(f.getType())).map(WbsTreePrivate::getId).collect(Collectors.toList());
 
         //构造参数
         if (selectedNodeList.size() > 0) {
             //重塑关键信息
             Map<Long, Long> OldIdToNewIdMap = new HashMap<>();
-            Map<String, WbsTreeContract> nodeMap = new HashMap<>();
+            Map<String, WbsTreePrivate> nodeMap = new HashMap<>();
+            Map<String, WbsTreeContract> nodeMapContract = new HashMap<>();
             selectedNodeList.forEach(half -> {
                 OldIdToNewIdMap.put(half.getId(), SnowFlakeUtil.getId());
                 nodeMap.put(half.getId().toString(), half);
+
+                WbsTreeContract wbsTreeContract = BeanUtil.copyProperties(half, WbsTreeContract.class);
+                nodeMapContract.put(half.getId().toString(), wbsTreeContract);
             });
 
             //处理数据
-            for (WbsTreeContract half : selectedNodeList) {
+            for (WbsTreePrivate half : selectedNodeList) {
                 //处理合同段数据
                 WbsTreeContract newData = new WbsTreeContract();
                 BeanUtils.copyProperties(half, newData);
@@ -2766,8 +2770,8 @@ public class InformationWriteQueryController extends BladeController {
                     //当前节点及其子节点操作
                     if (OldIdToNewIdMap.containsKey(half.getParentId())) {
                         //跨节点
-                        WbsTreeContract wbsTreeContract = nodeMap.get(half.getParentId() + "");
-                        if (treeContract.getNodeType().equals(wbsTreeContract.getNodeType()) && treeContract.getNodeName().equals(wbsTreeContract.getNodeName())) {
+                        WbsTreePrivate wbsTreePrivate = nodeMap.get(half.getParentId() + "");
+                        if (treeContract.getNodeType().equals(wbsTreePrivate.getNodeType()) && treeContract.getNodeName().equals(wbsTreePrivate.getNodeName())) {
                             newData.setParentId(treeContract.getId());
                             var = false;
                         }
@@ -2842,7 +2846,8 @@ public class InformationWriteQueryController extends BladeController {
 
                 if (new Integer("6").equals(newData.getNodeType())) {
                     //生成施工日志
-                    this.createLedger(newData, saveLedger, null, nodeMap);
+
+                    this.createLedger(newData, saveLedger, null, nodeMapContract);
                 }
             }
         }
@@ -2883,28 +2888,25 @@ public class InformationWriteQueryController extends BladeController {
         }
     }
 
-    private List<WbsTreeContract> unifiedCode(List<AddContractTreeNodeVO.Node> allSelectedNodeList, WbsTreeContract treeContract, String saveType, List<WbsTreePrivate> queryResultP) {
+    private List<WbsTreePrivate> unifiedCode(List<AddContractTreeNodeVO.Node> allSelectedNodeList, WbsTreeContract treeContract, String saveType, List<WbsTreePrivate> queryResultP) {
         //获取项目节点树的主键
         List<Long> halfSelectedList = allSelectedNodeList.stream().map(AddContractTreeNodeVO.Node::getPrimaryKeyId).map(Long::parseLong).distinct().collect(Collectors.toList());
 
         //获取项目对应的合同段的树原始节点的信息
         List<WbsTreePrivate> query = jdbcTemplate.query("select * from m_wbs_tree_private where p_key_id in(" + StringUtils.join(halfSelectedList, ",") + ")", new BeanPropertyRowMapper<>(WbsTreePrivate.class));
-        List<Long> projectNodeIds = query.stream().map(WbsTreePrivate::getId).collect(Collectors.toList());
-        if (projectNodeIds.size() > 0) {
+        if (query.size() > 0) {
             //返回结果集,匹配节点名称使用
             queryResultP.addAll(query);
 
-            //查询数据
-            List<WbsTreeContract> selectedNodeList = jdbcTemplate.query("select * from m_wbs_tree_contract where contract_id = " + treeContract.getContractId() + " and status = 1 and is_deleted = 0 and id in(" + StringUtils.join(projectNodeIds, ",") + ")", new BeanPropertyRowMapper<>(WbsTreeContract.class));
-
             //剔除与当前操作节点相同的ID,(如果saveType=1,表示当前及子级节点,那么就要剔除自己本身,否则视为仅当前节点操作,会存在自己本身)
             if ("1".equals(saveType)) {
-                selectedNodeList.removeIf(wbsTreePrivate -> {
+                query.removeIf(wbsTreePrivate -> {
                     Long id = wbsTreePrivate.getId();
                     return treeContract.getId() != null && treeContract.getId().equals(id);
                 });
             }
-            return selectedNodeList;
+
+            return query;
         }
 
         return null;
@@ -3015,29 +3017,25 @@ public class InformationWriteQueryController extends BladeController {
     /**
      * 处理半选集合
      */
-    private void disposeHalfSelectList(@RequestBody WbsTreeContract treeContract, List<AddContractTreeNodeVO.Node> allSelectedNodeList, List<WbsTreeContract> selectedNodeList, List<WbsTreePrivate> queryResultP) {
+    private void disposeHalfSelectList(@RequestBody WbsTreeContract treeContract, List<AddContractTreeNodeVO.Node> allSelectedNodeList, List<WbsTreePrivate> selectedNodeList, List<WbsTreePrivate> queryResultP) {
         if (allSelectedNodeList != null && allSelectedNodeList.size() > 0) {
             //获取主键
             List<Long> allSelectedList = allSelectedNodeList.stream().map(AddContractTreeNodeVO.Node::getPrimaryKeyId).map(Long::parseLong).distinct().collect(Collectors.toList());
 
             //获取项目对应的合同段的树原始节点的信息
             List<WbsTreePrivate> query = jdbcTemplate.query("select * from m_wbs_tree_private where p_key_id in(" + StringUtils.join(allSelectedList, ",") + ")", new BeanPropertyRowMapper<>(WbsTreePrivate.class));
-            List<Long> projectNodeIds = query.stream().map(WbsTreePrivate::getId).collect(Collectors.toList());
-            if (projectNodeIds.size() > 0) {
+            if (query.size() > 0) {
                 //返回结果集,匹配节点名称使用
                 queryResultP.addAll(query);
 
-                //查询数据
-                List<WbsTreeContract> allSelectedNodeLists = jdbcTemplate.query("select * from m_wbs_tree_contract where contract_id = " + treeContract.getContractId() + " and status = 1 and is_deleted = 0 and id in(" + StringUtils.join(projectNodeIds, ",") + ")", new BeanPropertyRowMapper<>(WbsTreeContract.class));
-
                 //剔除与当前操作节点相同的ID
-                allSelectedNodeLists.removeIf(wbsTreePrivate -> {
+                query.removeIf(wbsTreePrivate -> {
                     Long id = wbsTreePrivate.getId();
                     return treeContract.getId() != null && treeContract.getId().equals(id);
                 });
 
                 //设置到集合中
-                selectedNodeList.addAll(allSelectedNodeLists);
+                selectedNodeList.addAll(query);
             }
         }
     }
@@ -3048,10 +3046,10 @@ public class InformationWriteQueryController extends BladeController {
      * @param parentList 父节点集合
      * @param childList  保存集合
      */
-    private void foreachQueryChild(List<WbsTreeContract> parentList, List<WbsTreeContract> childList) {
+    private void foreachQueryChild(List<WbsTreePrivate> parentList, List<WbsTreePrivate> childList) {
         parentList.forEach(parent -> {
-            //只获取原始表,不获取复制的表(业务说是从项目wbs处取表,目前直接从当前合同段取原始表,也是一样的
-            List<WbsTreeContract> childS = jdbcTemplate.query("select * from m_wbs_tree_contract where parent_id = " + parent.getId() + " and contract_id = " + parent.getContractId() + " and is_deleted = 0 and is_cope_tab is null", new BeanPropertyRowMapper<>(WbsTreeContract.class));
+            //只获取原始表,不获取复制的表(业务说是从项目wbs处取表)
+            List<WbsTreePrivate> childS = jdbcTemplate.query("select * from m_wbs_tree_private where parent_id = " + parent.getId() + " and project_id = " + parent.getProjectId() + " and wbs_id = " + parent.getWbsId() + " and is_deleted = 0 and status = 1", new BeanPropertyRowMapper<>(WbsTreePrivate.class));
             if (childS.size() > 0) {
                 //添加入结果集
                 childList.addAll(childS);

+ 17 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

@@ -19,6 +19,7 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.manager.dto.FindAllUserByConditionDTO;
 import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 import org.springblade.manager.entity.*;
@@ -191,9 +192,11 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
     @Override
     public List<WbsTreePrivateVO> addNodeTree(String pKeyId) {
         WbsTreeContract parentNodeRoot = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId, pKeyId).eq(WbsTreeContract::getStatus, 1));
-        if (parentNodeRoot != null) {
+        if (ObjectUtil.isNotEmpty(parentNodeRoot)) {
+            String oldId = "";
             //oldId不等于空,说明是复制节点,通过oldId,获取原始节点
-            if (parentNodeRoot.getOldId() != null) {
+            if (ObjectUtil.isNotEmpty(parentNodeRoot.getOldId())) {
+                oldId = parentNodeRoot.getOldId();
                 parentNodeRoot = this.recursionFindResourceRootNode(parentNodeRoot);
             }
 
@@ -201,9 +204,20 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
             WbsTreePrivate wbsTreePrivateRoot = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getId, parentNodeRoot.getId())
                     .eq(WbsTreePrivate::getProjectId, parentNodeRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, parentNodeRoot.getWbsId()).eq(WbsTreePrivate::getStatus, 1));
 
+            if (ObjectUtil.isEmpty(wbsTreePrivateRoot)) {
+                //如果为空表示,进入新增节点的位置是从新增的节点开始的,新增的节点id更改了,导致parentNodeRoot.getId()变了,获取不到对应的项目wbs树节点,那么直接用oldId获取
+                //当前新增节点oldId现在都是改成了项目的id,那么理论上都不会变,直接用oldId就能获取到数据源
+                //如果是复制节点,id也变了,oldId有没有改变暂不清楚(另一个接口),后面再排查
+                wbsTreePrivateRoot = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getId, oldId)
+                        .eq(WbsTreePrivate::getProjectId, parentNodeRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, parentNodeRoot.getWbsId()).eq(WbsTreePrivate::getStatus, 1));
+                if (ObjectUtil.isEmpty(wbsTreePrivateRoot)) {
+                    throw new ServiceException("查询数据失败,请联系管理员");
+                }
+            }
+
             //获取项目树所有子节点
             List<WbsTreePrivate> allNodes = this.getChildNodes(wbsTreePrivateRoot);
-            if (allNodes == null) {
+            if (ObjectUtil.isEmpty(allNodes)) {
                 //如果是最底层节点,那么直接返回null,最底层节点无法新增子节点
                 return null;
             }