Browse Source

同步-同步合同段-新增节点构建父子级关系调整

LHB 2 weeks ago
parent
commit
cebd0d8f1e

+ 3 - 26
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousEViSaServiceImpl.java

@@ -318,8 +318,8 @@ public class WbsSynchronousEViSaServiceImpl {
         elementFormulaMappingService.saveBatch(collect1);
 
     }
-
-    public void insertContractForm(WbsTreeSynchronousRecord wbsTreeSynchronousRecord, List<WbsTreeContract> list, Long pId) {
+    @Transactional(rollbackFor = Exception.class)
+    public int insertContractForm(WbsTreeSynchronousRecord wbsTreeSynchronousRecord, List<WbsTreeContract> list, Long pId) {
 
         //新增-----------------------------------------------------------------------------------------------------------------
         //排序调整
@@ -347,29 +347,6 @@ public class WbsSynchronousEViSaServiceImpl {
 
         //单个批次一个事务,只会回滚当前批次数据
         Integer i = wbsTreeContractMapper.insertBatchSomeColumn(list);
-        //如果失败  -- - - - - 继续执行   或者把当前节点的p_key_id 记录到某个地方 方便后续处理
-        if (i == 0) {
-            //这里可以保存到数据库指定错误日志表
-            //这里可以保存到数据库指定错误日志表
-            throw new ServiceException("添加失败:");
-        } else {
-            //排序调整
-            if (wbsTreeSynchronousRecord.getType().contains("7")) {
-                //获取节点下的当前表单
-                List<WbsTreeContract> resourceData = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
-                        .select(WbsTreeContract::getPKeyId, WbsTreeContract::getSort)
-                        .eq(WbsTreeContract::getPId, pId)
-                        .eq(WbsTreeContract::getIsDeleted, 0)
-                        .orderByAsc(WbsTreeContract::getSort));
-                if (CollectionUtil.isNotEmpty(resourceData)) {
-                    for (int j = 0; i < resourceData.size(); j++) {
-                        resourceData.get(j).setSort(j + 1);
-                    }
-                    //修改排序为连续排序
-                    wbsTreeContractMapper.updateSortBatchByPKeyId(resourceData);
-                }
-
-            }
-        }
+        return i;
     }
 }

+ 43 - 35
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousServiceImpl.java

@@ -24,14 +24,12 @@ import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.file.Files;
 import java.nio.file.StandardCopyOption;
 import java.rmi.ServerException;
 import java.util.*;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -719,9 +717,10 @@ public class WbsSynchronousServiceImpl {
                                                     //未填报 101
                                                     isSync = true;
                                                 } else {
-                                                    if (i == 0) {
-                                                        isSync = false;
+                                                    //没有选择未填报,但是表单查不到数据,表示这个节点有问题
+                                                    if (i == 0 && !contractRanges.contains(WbsSyncTypeEnum.NOT_FILLED_IN.code)) {
                                                         errorMsg.append(editContractNode.getNodeName() + "(" + editContractNode.getPKeyId() + ")").append("未填报;");
+                                                        continue;
                                                     }
                                                     if (contractRanges.contains(WbsSyncTypeEnum.ALREADY_FILLED_IN_NOT_REPORTED.code) && (submit == null || submit == 0)) {
                                                         //已填报-未上报 102
@@ -813,7 +812,7 @@ public class WbsSynchronousServiceImpl {
                         switch (i) {
                             //添加表单
                             case 1:
-                                addData.addAll(insertContractForm(wbsTreeSynchronousRecord, contractInfo, wbsTreeContracts, addContractNode));
+                                addData.addAll(insertContractForm(wbsTreeSynchronousRecord, contractInfo, wbsTreeContracts, addContractNode,errorMsg));
                                 //如果同时选择新增表单和其他的同步类型  在操作其他类型的时候需要添加新的表单
 //                                    if (CollectionUtil.isNotEmpty(addContractNode)) {
 //                                        editContractNodes.addAll(addContractNode.stream().filter(f -> f.getType() == 2).collect(Collectors.toList()));
@@ -861,7 +860,29 @@ public class WbsSynchronousServiceImpl {
             //新增数据
             List<WbsTreeContract> addContractNode = collect2.get(pId);
             if(CollectionUtil.isNotEmpty(addContractNode)){
-                wbsSynchronousEViSaService.insertContractForm(wbsTreeSynchronousRecord, addContractNode ,pId);
+                int i = wbsSynchronousEViSaService.insertContractForm(wbsTreeSynchronousRecord, addContractNode, pId);
+                //如果失败  -- - - - - 继续执行   或者把当前节点的p_key_id 记录到某个地方 方便后续处理
+                if (i == 0) {
+                    //这里可以保存到数据库指定错误日志表
+                    //这里可以保存到数据库指定错误日志表
+                } else {
+                    //排序调整
+                    if (wbsTreeSynchronousRecord.getType().contains("7")) {
+                        //获取节点下的当前表单
+                        List<WbsTreeContract> resourceData = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
+                                .select(WbsTreeContract::getPKeyId, WbsTreeContract::getSort)
+                                .eq(WbsTreeContract::getPId, pId)
+                                .eq(WbsTreeContract::getIsDeleted, 0)
+                                .orderByAsc(WbsTreeContract::getSort));
+                        if (CollectionUtil.isNotEmpty(resourceData)) {
+                            for (int j = 0; j < resourceData.size(); j++) {
+                                resourceData.get(j).setSort(j + 1);
+                            }
+                            //修改排序为连续排序
+                            wbsTreeContractMapper.updateSortBatchByPKeyId(resourceData);
+                        }
+                    }
+                }
             }
 
             List<WbsTreeContract> list = collect1.get(pId);
@@ -971,21 +992,6 @@ public class WbsSynchronousServiceImpl {
                 throw new ServiceException("重置表单路径错误");
             }
 
-            //查询出当前项目所有节点---------------------------------------------------------------------------------------------------
-//            List<WbsTreePrivate> addList = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
-//                    .select(WbsTreePrivate::getPKeyId, WbsTreePrivate::getPId)
-//                    .eq(WbsTreePrivate::getIsDeleted, 0)
-//                    .eq(WbsTreePrivate::getProjectId, addData.get(0).getProjectId()));
-//
-//            addList.addAll(addData);
-//            //组合祖级路径 根据当前选中节点为开始
-//            Map<Long, WbsTreePrivate> collect = addList.stream().collect(Collectors.toMap(WbsTreePrivate::getPKeyId, Function.identity()));
-//
-//            addData.forEach(node -> {
-//                String correctAncestors = createAncestorsPId(node, collect);
-//                node.setAncestorsPId(correctAncestors);
-//            });
-
             //新增-----------------------------------------------------------------------------------------------------------------
             Map<Long, List<WbsTreePrivate>> collect = addData.stream().collect(Collectors.groupingBy(WbsTreePrivate::getPId));
             Set<Long> longs = collect.keySet();
@@ -1062,35 +1068,37 @@ public class WbsSynchronousServiceImpl {
      * @param wbsTreeContracts         当前合同节点数据
      * @param addContractNodes         新增节点数据
      */
-    public List<WbsTreeContract> insertContractForm(WbsTreeSynchronousRecord wbsTreeSynchronousRecord, ContractInfo contractInfo, List<WbsTreeContract> wbsTreeContracts, List<WbsTreeContract> addContractNodes) {
+    public List<WbsTreeContract> insertContractForm(WbsTreeSynchronousRecord wbsTreeSynchronousRecord, ContractInfo contractInfo, List<WbsTreeContract> wbsTreeContracts, List<WbsTreeContract> addContractNodes, StringBuilder errorMsg) {
         List<WbsTreeContract> addData = new ArrayList<>();
 
 
         if (CollectionUtil.isNotEmpty(addContractNodes)) {
+            //项目级:p_key_id:p_id
+            HashMap<Long, Long> map = new HashMap<>();
+
+
 
             //选给新增的节点赋值
             addContractNodes.forEach(f -> {
+                Long id = SnowFlakeUtil.getId();
+                map.put(id,f.getPId());
+
                 f.setIsTypePrivatePid(f.getPKeyId());
-                f.setPKeyId(SnowFlakeUtil.getId());
+                f.setPKeyId(id);
             });
 
             for (WbsTreeContract addContractNode : addContractNodes) {
                 if (addContractNode.getParentId() == 0) {
                     continue;
                 }
-
-                //查询出当前模板节点的父节点 去获取对应项目节点  如果父节点为0就跳过
-                List<WbsTreeContract> addContractParentNodes = wbsTreeContracts.stream().filter(f -> Objects.equals(f.getTreePId(), addContractNode.getParentId())).collect(Collectors.toList());
-
-                //如果没有数据  就表示这条数据的父节点也时新增节点 就需要从新增节点集合中找父级节点
-                if (addContractParentNodes.isEmpty()) {
-                    addContractParentNodes = addContractNodes.stream().filter(f -> f.getTreePId().equals(addContractNode.getParentId())).collect(Collectors.toList());
-                }
-                //如果现在还找不到当前节点的父节点就表示数据有问题
-                if (addContractParentNodes.isEmpty()) {
-                    //TODO
-                    throw new ServiceException(addContractNode.getNodeName()  + "( " + addContractNode.getPKeyId() + ")-找不到父节点");
+                //新增的数据只有表单,所以找父节点可以直接在合同段中找,如果找不到就说明当前表单的父节点在合同段中不存在 数据有问题
+                List<WbsTreeContract> addContractParentNodes = wbsTreeContracts.stream().filter(f -> Objects.equals(f.getIsTypePrivatePid(), map.get(addContractNode.getPKeyId()))).collect(Collectors.toList());
+                //获取新增数据中的父级节点
+                if (CollectionUtil.isEmpty(addContractParentNodes)) {
+                    errorMsg.append("未在合同段[" + contractInfo.getContractName() + "]找到当前节点父节点-p_key_id(" + map.get(addContractNode.getPKeyId()) + ");");
+                    continue;
                 }
+
                 //当前新增节点的父节点
                 WbsTreeContract parent = addContractParentNodes.get(0);