liuyc пре 3 година
родитељ
комит
761cb60fe0

+ 26 - 17
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractVO.java

@@ -40,6 +40,8 @@ public class WbsTreeContractVO implements INode<WbsTreeContractVO> {
     )
     private Long value;
 
+    private String nodeName;
+
     private Integer type;
 
     private Integer wbsType;
@@ -119,24 +121,12 @@ public class WbsTreeContractVO implements INode<WbsTreeContractVO> {
         this.value = value;
     }
 
+    public String getNodeName() {
+        return nodeName;
+    }
 
-    @Override
-    public String toString() {
-        return "WbsTreeContractVO{" +
-                "id=" + id +
-                ", parentId=" + parentId +
-                ", children=" + children +
-                ", title='" + title + '\'' +
-                ", key=" + key +
-                ", value=" + value +
-                ", type=" + type +
-                ", wbsType=" + wbsType +
-                ", deptCategory=" + deptCategory +
-                ", primaryKeyId='" + primaryKeyId + '\'' +
-                ", partitionCode='" + partitionCode + '\'' +
-                ", oldId='" + oldId + '\'' +
-                ", hasChildren=" + hasChildren +
-                '}';
+    public void setNodeName(String nodeName) {
+        this.nodeName = nodeName;
     }
 
     public boolean equals(final Object o) {
@@ -205,4 +195,23 @@ public class WbsTreeContractVO implements INode<WbsTreeContractVO> {
         return result;
     }
 
+    @Override
+    public String toString() {
+        return "WbsTreeContractVO{" +
+                "id=" + id +
+                ", parentId=" + parentId +
+                ", children=" + children +
+                ", title='" + title + '\'' +
+                ", key=" + key +
+                ", value=" + value +
+                ", nodeName='" + nodeName + '\'' +
+                ", type=" + type +
+                ", wbsType=" + wbsType +
+                ", deptCategory=" + deptCategory +
+                ", primaryKeyId='" + primaryKeyId + '\'' +
+                ", partitionCode='" + partitionCode + '\'' +
+                ", oldId='" + oldId + '\'' +
+                ", hasChildren=" + hasChildren +
+                '}';
+    }
 }

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

@@ -403,11 +403,11 @@ public class ContractInfoController extends BladeController {
 
 
     /**
-     * 分配合同段wbs节点保存或者修改
+     * 保存或修改分配合同段wbs树
      */
     @PostMapping("/submitWbsTreeInContract")
     @ApiOperationSupport(order = 17)
-    @ApiOperation(value = "分配合同段wbs节点树保存或修改", notes = "传入ids,wbsId,项目id,合同段id")
+    @ApiOperation(value = "保存或修改分配合同段wbs树", notes = "传入WbsTreeContractDTO")
     public R submitWbsTreeInContract(@RequestBody WbsTreeContractDTO wbsTreeContractDTO) {
         boolean b = wbsTreeContractService.submitWbsTreeInContract1(wbsTreeContractDTO);
         if (b) {

+ 6 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ProjectInfoController.java

@@ -227,21 +227,17 @@ public class ProjectInfoController extends BladeController {
 
 
     /**
-     * 保存或修改项目合同分配wbs树
+     * 保存或修改分配项目级wbs树
      */
     @PostMapping("/submitWbsTreeInProject")
     @ApiOperationSupport(order = 11)
-    @ApiOperation(value = "保存或修改项目合同分配wbs树", notes = "传入节点ids,wbsId(如果引用是其他私有库,那就是该库的项目id),项目id,合同段id")
+    @ApiOperation(value = "保存或修改分配项目级wbs树", notes = "传入WbsTreeContractDTO")
     public R submitWbsTreeInProject(@RequestBody WbsTreeContractDTO pawDTO) {
-        String s = wbsTreeService.submitWbsTreeInProject(pawDTO);
-        switch (s) {
-            case "1":
-                return R.success("公有wbs树新元素表同步成功");
-            case "2":
-                return R.success("关联wbs树成功");
-            default:
-                return R.fail("关联wbs树失败");
+        boolean b = wbsTreeService.submitWbsTreeInProject1(pawDTO);
+        if (b) {
+            return R.success("关联项目级树失败");
         }
+        return R.fail("关联项目级树失败");
     }
 
     /**

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml

@@ -76,6 +76,7 @@
         <result column="wbsType" property="wbsType"/>
         <result column="partition_code" property="partitionCode"/>
         <result column="old_id" property="oldId"/>
+        <result column="nodeName" property="nodeName"/>
     </resultMap>
 
     <resultMap id="resultMap2" type="org.springblade.manager.vo.ContractInfoVO">
@@ -259,6 +260,7 @@
         d.id,
         d.parent_id AS "parentId",
         IFNULL(if(length(trim(full_name)) > 0, full_name, dept_name),dept_name) AS title,
+        d.dept_name AS "nodeName",
         d.type AS "type",
         d.dept_category AS "deptCategory",
         d.id AS "value",

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

@@ -25,6 +25,7 @@ import org.springblade.manager.dto.WbsTreeDTO2;
 import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.vo.*;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
@@ -57,8 +58,11 @@ public interface IWbsTreeService extends BaseService<WbsTree> {
 
     boolean importWbsTree(MultipartFile excelFile, WbsTree wbsTreeFu, WbsTree wbsTree1) throws IOException;
 
+    @Deprecated
     String submitWbsTreeInProject(WbsTreeContractDTO pawDTO);
 
+    Boolean submitWbsTreeInProject1(WbsTreeContractDTO pawDTO);
+
     WbsTreeAllListVO findWbsTreeList(Integer type);
 
     R saveFormElement(FormElementDTO formElementDTO);

+ 2 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -45,10 +45,6 @@ public class WbsTreeContractServiceImpl
         return this.baseMapper.queryContractSubmitWbsTreeByContractId(contractId);
     }
 
-    /**
-     * 合同段wbs树保存1
-     * @deprecated
-     */
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Deprecated
@@ -196,9 +192,6 @@ public class WbsTreeContractServiceImpl
         return true;
     }
 
-    /**
-     * 合同段wbs树保存2
-     */
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean submitWbsTreeInContract1(WbsTreeContractDTO pawDTO) {
@@ -261,7 +254,7 @@ public class WbsTreeContractServiceImpl
             List<String> diffRent1 = getDiffrent(collect2, collect3);
 
             if (collect2.size() == collect3.size()) {
-                throw new ServiceException("未检测到当前引用的私有wbs树下有新增的元素表");
+                throw new ServiceException("未检测到当前引用的私有wbs树下有新增的元素表信息");
             }
             if (collect2.size() > collect3.size()) {
                 //初始化
@@ -319,7 +312,7 @@ public class WbsTreeContractServiceImpl
 
                 if (inFormationQueryInfoList.size() > 0) {
                     String names = StringUtils.join(nodeNames, " , ");
-                    throw new ServiceException(StringUtil.format("节点【{}】 下存在填报数据,删除失败!", names));
+                    throw new ServiceException(StringUtil.format("节点 {} 下存在填报数据,删除失败!", names));
                 }
 
                 //删除
@@ -379,7 +372,6 @@ public class WbsTreeContractServiceImpl
         return true;
     }
 
-
     private WbsTreeContract getWbsTreeContract(WbsTreePrivate wbsTree, WbsTreeContractDTO pawDTO) {
         WbsTreeContract wbsTreeContract = new WbsTreeContract();
         //数据初始化-施工合同

+ 292 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -785,6 +785,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
 
     @Override
     @Transactional(rollbackFor = Exception.class)
+    @Deprecated
     public String submitWbsTreeInProject(WbsTreeContractDTO pawDTO) {
         String wbsTreeIds = pawDTO.getWbsTreeIds();
         String[] ids = wbsTreeIds.split(",");
@@ -1070,6 +1071,297 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         return "2";
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean submitWbsTreeInProject1(WbsTreeContractDTO pawDTO) {
+        String wbsTreeIds = pawDTO.getWbsTreeIds();
+        String[] ids = wbsTreeIds.split(",");
+        List<String> idList = Arrays.asList(ids);
+        //入参ids
+        List<String> idList1 = idList.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
+
+        //当前项目存在的引用ids
+        List<String> idList2 = new ArrayList<>();
+
+        //当前公有引用ids
+        if (pawDTO.getReferenceType().equals("public")) {
+            List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                    .eq(WbsTreePrivate::getWbsId, pawDTO.getWbsId())
+                    .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
+                    .eq(WbsTreePrivate::getType, 1)
+            );
+            wbsTreePrivates.stream().forEach(wbsTreePrivate -> {
+                idList2.add(String.valueOf(wbsTreePrivate.getId()));
+            });
+        }
+
+        //当前私有引用ids
+        else if (pawDTO.getReferenceType().equals("private")) {
+            List<WbsTreePrivate> wbsTreePrivates2 = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                    .eq(WbsTreePrivate::getWbsId, pawDTO.getPrimaryKeyId())
+                    .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
+                    .eq(WbsTreePrivate::getType, 1)
+            );
+            wbsTreePrivates2.stream().forEach(wbsTreePrivate -> {
+                idList2.add(String.valueOf(wbsTreePrivate.getId()));
+            });
+        }
+
+        //需要新增的节点ids
+        List<String> saveIds = idList1.stream().filter(f -> !idList2.contains(f)).collect(Collectors.toList());
+        //需要删除的节点ids
+        List<String> delIds = idList2.stream().filter(f -> !idList1.contains(f)).collect(Collectors.toList());
+
+        if (saveIds.size() == 0 && delIds.size() == 0) {
+            //节点id未变,只进行节点下的元素表的同步
+            if (pawDTO.getReferenceType().equals("public")) {
+                //公有同步新增元素表
+                //获取公有wbs树新增的元素表
+                List<WbsTree> allNodeList = findAllNodeList(wbsTreeIds);
+                List<WbsTree> wbsTreeListAll = new ArrayList<>();
+
+                //获取公有wbs树所有的元素表
+                if (allNodeList != null) {
+                    List<WbsTree> wbsTreeList = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda()
+                            .eq(WbsTree::getWbsId, pawDTO.getWbsId())
+                            .eq(WbsTree::getType, 2)
+                    );
+                    wbsTreeListAll.addAll(wbsTreeList);
+                }
+
+                //公有元素表的id
+                List<Long> collect1 = wbsTreeListAll.stream().map(WbsTree::getId).collect(Collectors.toList());
+                List<String> collect2 = collect1.stream().map(String::valueOf).collect(Collectors.toList());
+
+                //获取项目私有wbs树下当前所有的元素表
+                List<WbsTreePrivate> wbsTreePrivates1 = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                        .eq(WbsTreePrivate::getWbsId, pawDTO.getWbsId())
+                        .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
+                        .eq(WbsTreePrivate::getType, 2)
+                );
+
+                //私有下元素表id
+                List<Long> collect3 = wbsTreePrivates1.stream().map(WbsTreePrivate::getId).collect(Collectors.toList());
+                List<String> collect4 = collect3.stream().map(String::valueOf).collect(Collectors.toList());
+
+                List<String> diffRent1 = WbsTreeContractServiceImpl.getDiffrent(collect2, collect4);
+
+                if (diffRent1.size() == 0) {
+                    //当wbsTreeIds == "" 时 1.在第一次新增未选择wbs树时  2.同步新增的元素表时
+                    throw new ServiceException("未检测到当前引用的wbs树下有新增的元素表信息");
+
+                } else {
+                    if (collect2.size() > collect4.size()) {
+                        //公有同步元素表
+                        diffRent1.stream().forEach(tableId -> {
+                            WbsTree wbsTree = wbsTreeMapper.selectById(tableId);
+                            Long snowId1 = SnowFlakeUtil.getId();
+                            wbsTreePrivateMapper.insertCombination1(snowId1, wbsTree, pawDTO.getWbsType(), pawDTO.getProjectId());
+                        });
+
+                        return true;
+                    }
+                }
+
+            }else if (pawDTO.getReferenceType().equals("private")) {
+                //私有同步新增元素表
+                //获取所私有引用项目的新增的元素表 根据primaryKeyId获取对象信息
+                WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
+                        .eq(WbsTreePrivate::getPKeyId, pawDTO.getPrimaryKeyId()));
+
+                //获取所私有引用项目的wbs树的全部元素表
+                List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                        .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
+                        .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
+                        .eq(WbsTreePrivate::getType, 2)
+                );
+
+                //当前新增表单的id
+                List<Long> collect1 = wbsTreePrivates.stream().map(WbsTreePrivate::getId).collect(Collectors.toList());
+                List<String> collect2 = collect1.stream().map(String::valueOf).collect(Collectors.toList());
+
+                //获取当前项目私有wbs树下当前所有的元素表
+                List<WbsTreePrivate> wbsTreePrivates1 = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                        .eq(WbsTreePrivate::getWbsId, pawDTO.getPrimaryKeyId())
+                        .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
+                        .eq(WbsTreePrivate::getType, 2)
+                );
+
+                //当前存在的表单的id
+                List<Long> collect3 = wbsTreePrivates1.stream().map(WbsTreePrivate::getId).collect(Collectors.toList());
+                List<String> collect4 = collect3.stream().map(String::valueOf).collect(Collectors.toList());
+
+                List<String> diffRent1 = WbsTreeContractServiceImpl.getDiffrent(collect2, collect4);
+
+                if (diffRent1.size() == 0) {
+                    throw new ServiceException("未检测到当前引用的wbs树下有新增的元素表信息");
+
+                } else {
+                    if (collect2.size() > collect4.size()) {
+                        //私有同步元素表
+                        List<WbsTreePrivate> lists = new ArrayList<>();
+
+                        diffRent1.stream().forEach(tableId -> {
+                            List<WbsTreePrivate> wbsTreePrivates3 = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                                    .eq(WbsTreePrivate::getId, tableId)
+                                    .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
+                                    .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
+                                    .eq(WbsTreePrivate::getType, 2)
+                            );
+                            lists.addAll(wbsTreePrivates3);
+                        });
+
+                        lists.stream().forEach(list -> {
+                            list.setPKeyId(SnowFlakeUtil.getId());
+                            list.setWbsId(pawDTO.getPrimaryKeyId());
+                            list.setProjectId(pawDTO.getProjectId());
+                        });
+
+                        wbsTreePrivateService.saveBatch(lists, 10000);
+                        return true;
+                    }
+                }
+            }
+
+
+        } else {
+            //节点id改变,进行新增或删除节点以及该节点下的元素表
+            //1.删除
+            if (delIds.size() > 0) {
+                if (pawDTO.getReferenceType().equals("public")) {
+                    List<Long> ids1 = delIds.stream().map(Long::parseLong).collect(Collectors.toList());
+                    //判断是否被合同段引用
+                    List<WbsTreeContract> wbsTreeContract = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
+                            .eq(WbsTreeContract::getWbsId, pawDTO.getWbsId())
+                            .eq(WbsTreeContract::getProjectId, pawDTO.getProjectId())
+                            .eq(WbsTreeContract::getParentId, 0)
+                    );
+
+                    if (wbsTreeContract.size() > 0) {
+                        List<ContractInfo> contractInfoArrayList = new ArrayList<>();
+                        wbsTreeContract.stream().forEach(list -> {
+                            ContractInfo contractInfos = contractInfoMapper.selectOne(Wrappers.<ContractInfo>query().lambda()
+                                    .eq(ContractInfo::getId, list.getContractId())
+                            );
+                            contractInfoArrayList.add(contractInfos);
+                        });
+                        List<String> names = contractInfoArrayList.stream().map(ContractInfo::getContractName).collect(Collectors.toList());
+                        if (wbsTreeContract.size() > 0) {
+                            String join = StringUtils.join(names, ",");
+                            throw new ServiceException(StringUtil.format("当前项目wbs树已被 {} 引用中,删除失败", join));
+                        }
+                    }
+
+                    baseMapper.deleteBatch(ids1, pawDTO.getWbsId(), pawDTO.getProjectId());
+                    baseMapper.deleteBatch2(ids1, pawDTO.getWbsId(), pawDTO.getProjectId());
+
+                } else if (pawDTO.getReferenceType().equals("private")) {
+                    List<Long> ids2 = delIds.stream().map(Long::parseLong).collect(Collectors.toList());
+                    //判断是否被合同段引用
+                    List<WbsTreeContract> wbsTreeContract = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
+                            .eq(WbsTreeContract::getWbsId, pawDTO.getPrimaryKeyId())
+                            .eq(WbsTreeContract::getProjectId, pawDTO.getProjectId())
+                            .eq(WbsTreeContract::getParentId, 0)
+                    );
+
+                    if (wbsTreeContract.size() > 0) {
+                        List<ContractInfo> contractInfoArrayList = new ArrayList<>();
+                        wbsTreeContract.stream().forEach(list -> {
+                            ContractInfo contractInfos = contractInfoMapper.selectOne(Wrappers.<ContractInfo>query().lambda()
+                                    .eq(ContractInfo::getId, list.getContractId())
+                            );
+                            contractInfoArrayList.add(contractInfos);
+                        });
+                        List<String> names = contractInfoArrayList.stream().map(ContractInfo::getContractName).collect(Collectors.toList());
+                        if (wbsTreeContract.size() > 0) {
+                            String join = StringUtils.join(names, ",");
+                            throw new ServiceException(StringUtil.format("当前项目wbs树已被 {} 引用中,删除失败", join));
+                        }
+                    }
+
+                    baseMapper.deleteBatch(ids2, pawDTO.getPrimaryKeyId(), pawDTO.getProjectId());
+                    baseMapper.deleteBatch2(ids2, pawDTO.getPrimaryKeyId(), pawDTO.getProjectId());
+
+                }
+
+            }
+
+            //2.新增
+            if (saveIds.size() > 0) {
+
+                //数据初始化节点-引用公有
+                List<WbsTreePrivate> insertData = new ArrayList<>();
+                //数据初始化节点-引用私有
+                List<WbsTreePrivate> insertData2 = new ArrayList<>();
+
+                if (pawDTO.getReferenceType().equals("public")) {
+                    //引用公有
+                    //查询所有公共节点、表 saveIds=新增的节点id
+                    List<WbsTree> addListData = new ArrayList<>();
+                    //查询出当前wbs树下所有节点、表信息
+                    List<WbsTree> treesAll = baseMapper.selectList(Wrappers.<WbsTree>query().lambda()
+                            .eq(WbsTree::getWbsId, pawDTO.getWbsId()));
+
+                    for (WbsTree wbsTree : treesAll) {
+                        for (String id : saveIds) {
+                            if (Long.parseLong(id) == (wbsTree.getId())) {
+                                //节点
+                                addListData.add(wbsTree);
+                            } else if (Long.parseLong(id) == (wbsTree.getParentId()) && wbsTree.getType() == 2) {
+                                //表
+                                addListData.add(wbsTree);
+                            }
+
+                        }
+                    }
+
+                    addListData.stream().forEach(tree -> {
+                        WbsTreePrivate wbsTreePrivate2 = getWbsTreePrivate1(tree, pawDTO);
+                        insertData.add(wbsTreePrivate2);
+                    });
+
+                } else if (pawDTO.getReferenceType().equals("private")) {
+                    //引用私有
+                    //查询所有私有节点、表 saveIds=新增的节点id
+                    List<WbsTreePrivate> addListData = new ArrayList<>();
+
+                    //查询出当前wbs树下所有节点、表信息
+                    List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectNodeAndTable(null, pawDTO.getWbsId(), pawDTO.getReferencePrivateWbsProjectId());
+
+                    for (WbsTreePrivate wbsTreePrivate : wbsTreePrivates) {
+                        for (String id : saveIds) {
+                            if (Long.parseLong(id) == (wbsTreePrivate.getId())) {
+                                //节点
+                                addListData.add(wbsTreePrivate);
+                            } else if (Long.parseLong(id) == (wbsTreePrivate.getParentId()) && wbsTreePrivate.getType() == 2) {
+                                //表
+                                addListData.add(wbsTreePrivate);
+                            }
+                        }
+                    }
+
+                    addListData.stream().forEach(tree -> {
+                        WbsTreePrivate wbsTreePrivate2 = getWbsTreePrivate2(tree, pawDTO);
+                        insertData2.add(wbsTreePrivate2);
+                    });
+                }
+
+                //新增
+                if (pawDTO.getReferenceType().equals("public")) {
+                    wbsTreePrivateService.saveBatch(insertData, 10000);
+                    projectInfoMapper.updateTemplateIdById(pawDTO.getProjectId(), pawDTO.getWbsId(), "public");
+                } else if (pawDTO.getReferenceType().equals("private")) {
+                    wbsTreePrivateService.saveBatch(insertData2, 10000);
+                    projectInfoMapper.updateTemplateIdById(pawDTO.getProjectId(), pawDTO.getPrimaryKeyId(), "private");
+                }
+
+            }
+
+        }
+        return true;
+    }
+
+
     public List<WbsTree> findAllNodeList(String wbsTreeIds) {
         if (StringUtils.isNotEmpty(wbsTreeIds)) {
             String[] ids = wbsTreeIds.split(",");