Procházet zdrojové kódy

合同段分配wbsbug

liuyc před 2 roky
rodič
revize
59f018d530

+ 2 - 16
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -2774,22 +2774,6 @@ public class InformationWriteQueryController extends BladeController {
                         Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(WbsTreePrivate::getId))),
                         ArrayList::new
                 ));
-
-                /*if (childList.size() > 0) {
-                    Iterator<WbsTreePrivate> iterator = childList.iterator();
-                    while (iterator.hasNext()) {
-                        WbsTreePrivate next = iterator.next();
-                        for (WbsTreePrivate wbsTreePrivate : selectedNodeList) {
-                            if (wbsTreePrivate.getPKeyId().equals(next.getPKeyId())) {
-                                //删掉重复数据
-                                iterator.remove();
-                                break;
-                            }
-                        }
-                    }
-                }*/
-                //处理完重复数据后,设置进集合中
-                //selectedNodeList.addAll(childList);
             }
             //处理半选
             this.disposeHalfSelectList(treeContract, halfSelectedNodeList, selectedNodeList, query);
@@ -2917,6 +2901,8 @@ public class InformationWriteQueryController extends BladeController {
                 newData.setCreateTime(new Date());
                 if (half.getType() != null && new Integer("2").equals(half.getType())) {
                     newData.setIsTypePrivatePid(half.getPKeyId());
+                    //2023年8月1日14:41:03更改需求,isBussShow默认=1
+                    newData.setIsBussShow(1);
                 }
 
                 //获取当前所有复制的节点的最大sort

+ 70 - 40
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -108,7 +108,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 
         //获取当前合同段所有节点、表单(不包括客户端新增或者复制节点)
         List<WbsTreeContract> list = baseMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
-                .select(WbsTreeContract::getId, WbsTreeContract::getType, WbsTreeContract::getParentId)
+                .select(WbsTreeContract::getId, WbsTreeContract::getType)
                 .eq(WbsTreeContract::getContractId, pawDTO.getContractId())
                 .eq(WbsTreeContract::getWbsId, pawDTO.getWbsId())
                 .eq(WbsTreeContract::getStatus, 1)
@@ -129,11 +129,14 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 
         //TODO ---------节点未变只同步元素表---------
         if (saveIds.size() == 0 && delIds.size() == 0) {
-            List<WbsTreePrivate> wbsTreePrivateListResult = new ArrayList<>();
+            //当前项目节点下的所有表单Ids
+            List<String> collect = new ArrayList<>();
+
             //当前项目所有表
             List<WbsTreePrivate> wbsTreePrivateList = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
-                    .eq(WbsTreePrivate::getProjectId, Long.parseLong(pawDTO.getProjectId()))
-                    .eq(WbsTreePrivate::getWbsId, Long.parseLong(pawDTO.getWbsId()))
+                    .select(WbsTreePrivate::getId, WbsTreePrivate::getParentId, WbsTreePrivate::getType)
+                    .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
+                    .eq(WbsTreePrivate::getWbsId, pawDTO.getWbsId())
                     .eq(WbsTreePrivate::getStatus, 1)
                     .eq(WbsTreePrivate::getType, 2)
             );
@@ -141,71 +144,98 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
             wbsTreePrivateList.forEach(wbsTreePrivate -> {
                 idList1.forEach(id -> {
                     if (Long.parseLong(id) == (wbsTreePrivate.getParentId()) && wbsTreePrivate.getType() == 2) {
-                        wbsTreePrivateListResult.add(wbsTreePrivate);
+                        collect.add(wbsTreePrivate.getId() + "");
                     }
                 });
             });
 
-            //当前项目节点下的所有表单Ids
-            List<String> collect = wbsTreePrivateListResult.stream().map(WbsTreePrivate::getId).distinct().map(String::valueOf).collect(Collectors.toList());
-
             if (collect.size() == collect1.size()) {
                 return true;
             }
 
             List<String> finalCollect = collect1;
-            Map<String, String> resultMapData = collect.stream().filter(f -> !finalCollect.contains(f)).collect(Collectors.toMap(Object::toString, Function.identity()));
+            List<String> collect5 = collect.stream().filter(f -> !finalCollect.contains(f)).collect(Collectors.toList());
 
             List<WbsTreeContract> wbsTreeContractResultData = new ArrayList<>();
-            wbsTreePrivateList.forEach(wbsTreePrivate -> {
-                String resultObj = resultMapData.get(wbsTreePrivate.getId() + "");
-                if (resultObj != null) {
-                    WbsTreeContract wbsTreeContract = BeanUtil.copyProperties(wbsTreePrivate, WbsTreeContract.class);
+            if (collect5.size() > 0) {
+                List<WbsTreeContract> wbsTreeContractList = baseMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery().in(WbsTreeContract::getId, collect5)
+                        .eq(WbsTreeContract::getContractId, pawDTO.getContractId())
+                        .eq(WbsTreeContract::getWbsId, pawDTO.getWbsId())
+                        .eq(WbsTreeContract::getType, 2)
+                        .eq(WbsTreeContract::getStatus, 1)
+                );
+                wbsTreeContractList.forEach(obj -> {
+                    WbsTreeContract wbsTreeContract = BeanUtil.copyProperties(obj, WbsTreeContract.class);
                     if (wbsTreeContract != null) {
                         wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
                         wbsTreeContract.setWbsId(pawDTO.getWbsId());
                         wbsTreeContract.setProjectId(pawDTO.getProjectId());
                         wbsTreeContract.setContractId(pawDTO.getContractId());
-                        wbsTreeContract.setIsTypePrivatePid(wbsTreePrivate.getPKeyId());
-                        if (wbsTreePrivate.getType() == 2) {
-                            wbsTreeContract.setIsTypePrivatePid(wbsTreePrivate.getPKeyId());
+                        wbsTreeContract.setIsTypePrivatePid(obj.getPKeyId());
+                        if (obj.getType() == 2) {
+                            wbsTreeContract.setIsTypePrivatePid(obj.getPKeyId());
                         }
                         wbsTreeContractResultData.add(wbsTreeContract);
                     }
-                }
-            });
-
-            //获取当前合同段的复制节点或者新增节点
-            List<WbsTreeContract> copyAndAddNodeList = baseMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
-                    .select(WbsTreeContract::getId, WbsTreeContract::getOldId)
-                    .eq(WbsTreeContract::getContractId, pawDTO.getContractId())
-                    .eq(WbsTreeContract::getWbsId, pawDTO.getWbsId())
-                    .eq(WbsTreeContract::getStatus, 1)
-                    .isNotNull(WbsTreeContract::getOldId));
+                });
+            }
 
-            List<WbsTreeContract> copyAddNodeTabs = new ArrayList<>();
-            if (copyAndAddNodeList.size() > 0) {
-                for (WbsTreeContract synTab : wbsTreeContractResultData) {
-                    for (WbsTreeContract copyAddNode : copyAndAddNodeList) {
-                        if (synTab.getParentId().toString().equals(copyAddNode.getOldId())) {
+            if (wbsTreeContractResultData.size() > 0) {
+                //获取当前合同段的复制节点或者新增节点(最底层节点)
+                String sql = "SELECT a.id, a.old_id," +
+                        " (SELECT CASE WHEN COUNT(1) > 0 THEN 1 ELSE 0 END" +
+                        " FROM m_wbs_tree_contract b" +
+                        " WHERE b.parent_id = a.id" +
+                        " AND b.wbs_id = " + pawDTO.getWbsId() +
+                        " AND b.contract_id = " + pawDTO.getContractId() +
+                        " AND b.status = 1" +
+                        " AND b.type = 1" +
+                        " AND b.is_deleted = 0" +
+                        " ) AS hasChildren" +
+                        " FROM m_wbs_tree_contract a" +
+                        " WHERE " +
+                        " a.status = 1" +
+                        " AND a.is_deleted = 0" +
+                        " AND a.type = 1" +
+                        " AND a.wbs_id = " + pawDTO.getWbsId() +
+                        " AND a.contract_id = " + pawDTO.getContractId() +
+                        " AND a.old_id is not null" +
+                        " HAVING hasChildren = 0";
+                List<WbsTreeContract> copyAndAddNodeList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
+                List<WbsTreeContract> copyAddNodeTabs = new ArrayList<>();
+                if (copyAndAddNodeList.size() > 0) {
+                    //转换为Map,oldId作为Key,id作为value
+                    Map<String, List<WbsTreeContract>> oldIdToIdMap = copyAndAddNodeList.stream().collect(Collectors.groupingBy(WbsTreeContract::getOldId));
+                    for (WbsTreeContract synTab : wbsTreeContractResultData) {
+                        List<WbsTreeContract> nodeIds = oldIdToIdMap.get(synTab.getParentId().toString());
+                        if (nodeIds != null && nodeIds.size() > 0) {
                             WbsTreeContract copyAddNodeTab = BeanUtil.copyProperties(synTab, WbsTreeContract.class);
-                            if (copyAddNodeTab != null) {
-                                copyAddNodeTab.setParentId(copyAddNode.getId());
-                                copyAddNodeTab.setAncestors(synTab.getAncestors().replace(synTab.getParentId() + "", copyAddNodeTab.getParentId() + ""));
-                                copyAddNodeTab.setPKeyId(SnowFlakeUtil.getId());
-                                copyAddNodeTab.setCreateTime(new Date());
-                                copyAddNodeTabs.add(copyAddNodeTab);
+                            for (WbsTreeContract nodeId : nodeIds) {
+                                if (copyAddNodeTab != null) {
+                                    copyAddNodeTab.setParentId(nodeId.getId());
+                                    copyAddNodeTab.setAncestors(synTab.getAncestors().replace(synTab.getParentId() + "", copyAddNodeTab.getParentId() + ""));
+                                    copyAddNodeTab.setPKeyId(SnowFlakeUtil.getId());
+                                    copyAddNodeTab.setCreateTime(new Date());
+                                    copyAddNodeTabs.add(copyAddNodeTab);
+                                }
                             }
                         }
                     }
                 }
-            }
-
-            if (wbsTreeContractResultData.size() > 0) {
                 if (copyAddNodeTabs.size() > 0) {
                     //新增复制节点的表
                     wbsTreeContractResultData.addAll(copyAddNodeTabs);
                 }
+                Iterator<WbsTreeContract> iterator = wbsTreeContractResultData.iterator();
+                while (iterator.hasNext()) {
+                    WbsTreeContract next = iterator.next();
+                    if (next != null) {
+                        Long aLong = jdbcTemplate.queryForObject("select count(1) from m_wbs_tree_contract where type = 2 and is_deleted = 0 and status = 1 and id = " + next.getId() + " and parent_id = " + next.getParentId() + " and wbs_id = " + next.getWbsId() + " and contract_id = " + next.getContractId(), Long.class);
+                        if (aLong != null && aLong > 0L) {
+                            iterator.remove();
+                        }
+                    }
+                }
                 this.insertBatch(wbsTreeContractResultData, 1000);
             }