Browse Source

同步功能-合同段不允许新增节点 如果新表单的父节点找不到就是新节点需要去手动配置

LHB 2 months ago
parent
commit
50e97cd32d

+ 143 - 159
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousServiceImpl.java

@@ -567,198 +567,183 @@ public class WbsSynchronousServiceImpl {
                 List<WbsTreeContract> startContacts = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
                         .eq(WbsTreeContract::getContractId, contractInfo.getId())
                         .eq(WbsTreeContract::getIsTypePrivatePid, primaryKeyId));
-                //如果没有查询到,表示该合同下不存在该节点 就直接新增
+                //如果没有查询到,表示该合同下不存在该节点
                 if (CollectionUtil.isEmpty(startContacts)) {
                     //不能抛异常  不然就会中止程序  开发阶段先抛异常,后续统一处理
-                    List<WbsTreeContract> addContractNode = null;
-                    addContractNode = BeanUtil.copyProperties(wbsTreePrivates, WbsTreeContract.class);
-                    //获取选中节点的父级节点与合同段对应的关系
-                    WbsTreePrivate parentNode = wbsTreePrivateMapper.selectById(wbsTreePrivate.getPId());
-                    List<WbsTreeContract> list = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
+                    throw new ServiceException("当前节点不存在");
+                }
+                for (WbsTreeContract wbsTreeContract : startContacts) {
+                    //获取合同 当前节点的所有子节点数据
+                    LambdaQueryWrapper<WbsTreeContract> wrapperContract = Wrappers.lambdaQuery();
+                    wrapperContract
                             .eq(WbsTreeContract::getContractId, contractInfo.getId())
-                            .eq(WbsTreeContract::getIsTypePrivatePid, parentNode.getPKeyId()));
-                    for (WbsTreeContract wbsTreeContract : list) {
-                        List<WbsTreeContract> wbsTreeContracts = new ArrayList<>();
-                        wbsTreeContracts.add(wbsTreeContract);
-                        insertContractForm(wbsTreeSynchronousRecord, contractInfo, wbsTreeContracts, addContractNode);
+                            .eq(WbsTreeContract::getIsDeleted, 0);
+                    //判断如果为顶级顶级节点
+                    if (wbsTreeContract.getTreePId() != 0) {
+                        wrapperContract.apply("FIND_IN_SET({0},ancestors_p_id)", wbsTreeContract.getPKeyId());
                     }
-                } else {
-                    for (WbsTreeContract wbsTreeContract : startContacts) {
-                        //获取合同 当前节点的所有子节点数据
-                        LambdaQueryWrapper<WbsTreeContract> wrapperContract = Wrappers.lambdaQuery();
-                        wrapperContract
-                                .eq(WbsTreeContract::getContractId, contractInfo.getId())
-                                .eq(WbsTreeContract::getIsDeleted, 0);
-                        //判断如果为顶级顶级节点
-                        if (wbsTreeContract.getTreePId() != 0) {
-                            wrapperContract.apply("FIND_IN_SET({0},ancestors_p_id)", wbsTreeContract.getPKeyId());
-                        }
 
-                        //当前合同的子节点数据
-                        List<WbsTreeContract> wbsTreeContracts = wbsTreeContractMapper.selectList(wrapperContract);
-                        wbsTreeContracts.add(wbsTreeContract);
+                    //当前合同的子节点数据
+                    List<WbsTreeContract> wbsTreeContracts = wbsTreeContractMapper.selectList(wrapperContract);
+                    wbsTreeContracts.add(wbsTreeContract);
 
-                        HashMap<Long, Integer> informationQueryMap = new HashMap<>();
-                        //查询质检合同节点填表信息
-                        String sql = "SELECT  b.wbs_id, b.STATUS  FROM" +
-                                "( SELECT p_key_id FROM m_wbs_tree_contract WHERE is_deleted = 0 AND contract_id = " + contractInfo.getId() + " AND FIND_IN_SET( " + wbsTreeContract.getPKeyId() + ", ancestors_p_id ) ) a" +
-                                " INNER JOIN (  SELECT  c.wbs_id, c.STATUS FROM u_information_query c" +
-                                " JOIN ( SELECT wbs_id, MAX( update_time ) AS max_update_time FROM u_information_query WHERE contract_id = " + contractInfo.getId() + " GROUP BY wbs_id ) subquery ON c.wbs_id = subquery.wbs_id " +
-                                " AND c.update_time = subquery.max_update_time WHERE  c.contract_id = " + contractInfo.getId() + " and c.is_deleted = 0 ) b ON a.p_key_id = b.wbs_id";
+                    HashMap<Long, Integer> informationQueryMap = new HashMap<>();
+                    //查询质检合同节点填表信息
+                    String sql = "SELECT  b.wbs_id, b.STATUS  FROM" +
+                            "( SELECT p_key_id FROM m_wbs_tree_contract WHERE is_deleted = 0 AND contract_id = " + contractInfo.getId() + " AND FIND_IN_SET( " + wbsTreeContract.getPKeyId() + ", ancestors_p_id ) ) a" +
+                            " INNER JOIN (  SELECT  c.wbs_id, c.STATUS FROM u_information_query c" +
+                            " JOIN ( SELECT wbs_id, MAX( update_time ) AS max_update_time FROM u_information_query WHERE contract_id = " + contractInfo.getId() + " GROUP BY wbs_id ) subquery ON c.wbs_id = subquery.wbs_id " +
+                            " AND c.update_time = subquery.max_update_time WHERE  c.contract_id = " + contractInfo.getId() + " and c.is_deleted = 0 ) b ON a.p_key_id = b.wbs_id";
 
-                        List<InformationQuery> informationQueries = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(InformationQuery.class));
-                        //质检节点填报信息
+                    List<InformationQuery> informationQueries = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(InformationQuery.class));
+                    //质检节点填报信息
 
-                        for (InformationQuery informationQuery : informationQueries) {
-                            informationQueryMap.put(informationQuery.getWbsId(), informationQuery.getStatus());
-                        }
+                    for (InformationQuery informationQuery : informationQueries) {
+                        informationQueryMap.put(informationQuery.getWbsId(), informationQuery.getStatus());
+                    }
 
 
-                        //合同段节点对应的项目id
-                        List<Long> typePrivateIds = wbsTreeContracts.stream().map(WbsTreeContract::getIsTypePrivatePid).collect(Collectors.toList());
+                    //合同段节点对应的项目id
+                    List<Long> typePrivateIds = wbsTreeContracts.stream().map(WbsTreeContract::getIsTypePrivatePid).collect(Collectors.toList());
 
-                        //需要新增的表单
-                        List<WbsTreePrivate> addPrivateNodes = wbsTreePrivates.stream().filter(f -> f.getType() == 2 && !typePrivateIds.contains(f.getPKeyId())).collect(Collectors.toList());
+                    //需要新增的表单
+                    List<WbsTreePrivate> addPrivateNodes = wbsTreePrivates.stream().filter(f -> !typePrivateIds.contains(f.getPKeyId())).collect(Collectors.toList());
 
-                        //如果没有选中 则默认同步所有
-                        if (CollectionUtil.isNotEmpty(formList)) {
-                            //二次筛选  只保留任务选中的表单   但可能新增的数据包含新节点
-                            addPrivateNodes = addPrivateNodes.stream().filter(f -> formList.contains(f.getPKeyId())).collect(Collectors.toList());
-                        }
+                    //如果没有选中 则默认同步所有
+                    if (CollectionUtil.isNotEmpty(formList)) {
+                        //二次筛选  只保留任务选中的表单   但可能新增的数据包含新节点
+                        addPrivateNodes = addPrivateNodes.stream().filter(f -> formList.contains(f.getPKeyId())).collect(Collectors.toList());
+                    }
 
-                        //筛选出需要更新的节点  同时做数据隔离
-                        List<WbsTreeContract> editContractNodes = new ArrayList<>();
-                        for (WbsTreePrivate templateNode : wbsTreePrivates) {
-                            //更新只跟新表单
-                            for (WbsTreeContract editContractNode : wbsTreeContracts) {
-
-                                // 判断模板表与项目表 html是否一致
-                                if (ObjectUtils.equals(templateNode.getPKeyId(), editContractNode.getIsTypePrivatePid())) {
-                                    if (templateNode.getType() == 1) {
-                                        editContractNode.setNodeName(templateNode.getNodeName());
-                                        editContractNodes.add(editContractNode);
-                                    } else {
-                                        //同步范围 当前节点是否允许修改
-                                        Boolean isSync = false;
-                                        if (CollectionUtil.isNotEmpty(contractRanges)) {
-                                            switch (Integer.valueOf(wbsTreePrivate.getWbsType())) {
-                                                //质检
-                                                case 1:
-                                                    Integer submit = informationQueryMap.get(editContractNode.getPKeyId());
-
-                                                    if (submit == null && contractRanges.contains(WbsSyncTypeEnum.NOT_FILLED_IN.code)) {
-                                                        //未审批 101
+                    //筛选出需要更新的节点  同时做数据隔离
+                    List<WbsTreeContract> editContractNodes = new ArrayList<>();
+                    for (WbsTreePrivate templateNode : wbsTreePrivates) {
+                        //更新只跟新表单
+                        for (WbsTreeContract editContractNode : wbsTreeContracts) {
+
+                            // 判断模板表与项目表 html是否一致
+                            if (ObjectUtils.equals(templateNode.getPKeyId(), editContractNode.getIsTypePrivatePid())) {
+                                if (templateNode.getType() == 2) {
+                                    //同步范围 当前节点是否允许修改
+                                    Boolean isSync = false;
+                                    if (CollectionUtil.isNotEmpty(contractRanges)) {
+                                        switch (Integer.valueOf(wbsTreePrivate.getWbsType())) {
+                                            //质检
+                                            case 1:
+                                                Integer submit = informationQueryMap.get(editContractNode.getPKeyId());
+
+                                                if (submit == null && contractRanges.contains(WbsSyncTypeEnum.NOT_FILLED_IN.code)) {
+                                                    //未审批 101
+                                                    isSync = true;
+                                                } else {
+                                                    if (submit == null) {
+                                                        throw new ServiceException(wbsTreeContract.getNodeName() + "--下表单未查到填报信息");
+                                                    }
+                                                    if (submit == 0 && contractRanges.contains(WbsSyncTypeEnum.ALREADY_FILLED_IN_NOT_REPORTED.code)) {
+                                                        //已填报-未上报 102
+                                                        isSync = true;
+                                                    } else if (submit == 1 && contractRanges.contains(WbsSyncTypeEnum.PENDING_APPROVAL.code)) {
+                                                        //待审批 104
+                                                        isSync = true;
+                                                    } else if (submit == 2 && contractRanges.contains(WbsSyncTypeEnum.APPROVED.code)) {
+                                                        //已审批 105
                                                         isSync = true;
-                                                    } else {
-                                                        if(submit == null){
-                                                            throw new ServiceException(wbsTreeContract.getNodeName() + "--下表单未查到填报信息");
-                                                        }
-                                                        if (submit == 0 && contractRanges.contains(WbsSyncTypeEnum.ALREADY_FILLED_IN_NOT_REPORTED.code)) {
-                                                            //已填报-未上报 102
-                                                            isSync = true;
-                                                        } else if (submit == 1 && contractRanges.contains(WbsSyncTypeEnum.PENDING_APPROVAL.code)) {
-                                                            //待审批 104
-                                                            isSync = true;
-                                                        } else if (submit == 2 && contractRanges.contains(WbsSyncTypeEnum.APPROVED.code)) {
-                                                            //已审批 105
-                                                            isSync = true;
-                                                        }
                                                     }
-                                                    break;
-                                                //试验
-                                                case 2:
-                                                    break;
-                                                //计量
-                                                case 3:
-                                                    break;
-                                                //日志
-                                                case 4:
-                                                    break;
-                                                //征地拆迁
-                                                case 5:
-                                                    break;
-                                                default:
-                                                    break;
-                                            }
-                                        } else {
-                                            isSync = true;
+                                                }
+                                                break;
+                                            //试验
+                                            case 2:
+                                                break;
+                                            //计量
+                                            case 3:
+                                                break;
+                                            //日志
+                                            case 4:
+                                                break;
+                                            //征地拆迁
+                                            case 5:
+                                                break;
+                                            default:
+                                                break;
                                         }
+                                    } else {
+                                        isSync = true;
+                                    }
 
 
-                                        //清表 公式 元素
-                                        if (collect.contains(2) || collect.contains(3) || collect.contains(5)) {
-                                            editContractNode.setExcelId(templateNode.getExcelId());
-                                            editContractNode.setInitTableName(templateNode.getInitTableName());
-                                            editContractNode.setHtmlUrl(templateNode.getHtmlUrl());
-                                            if (templateNode.getExcelId() != null) {
-                                                editContractNode.setIsLinkTable(2);
-                                            }
-                                        }
-                                        //排序
-                                        if (collect.contains(7)) {
-                                            editContractNode.setSort(templateNode.getSort());
+                                    //清表 公式 元素
+                                    if (collect.contains(2) || collect.contains(3) || collect.contains(5)) {
+                                        editContractNode.setExcelId(templateNode.getExcelId());
+                                        editContractNode.setInitTableName(templateNode.getInitTableName());
+                                        editContractNode.setHtmlUrl(templateNode.getHtmlUrl());
+                                        if (templateNode.getExcelId() != null) {
+                                            editContractNode.setIsLinkTable(2);
                                         }
+                                    }
+                                    //排序
+                                    if (collect.contains(7)) {
+                                        editContractNode.setSort(templateNode.getSort());
+                                    }
 
-                                        //手动选中的表单 进行筛选
-                                        if (CollectionUtil.isNotEmpty(formList)) {
-                                            if (formList.contains(templateNode.getPKeyId())) {
-                                                if (collect.contains(2) || collect.contains(3) || collect.contains(4) || collect.contains(5) || collect.contains(6) || collect.contains(7)) {
-                                                    if (isSync) {
-                                                        editContractNodes.add(editContractNode);
-                                                    }
-
-                                                }
-                                            }
-                                        } else {
+                                    //手动选中的表单 进行筛选
+                                    if (CollectionUtil.isNotEmpty(formList)) {
+                                        if (formList.contains(templateNode.getPKeyId())) {
                                             if (collect.contains(2) || collect.contains(3) || collect.contains(4) || collect.contains(5) || collect.contains(6) || collect.contains(7)) {
                                                 if (isSync) {
                                                     editContractNodes.add(editContractNode);
                                                 }
+
+                                            }
+                                        }
+                                    } else {
+                                        if (collect.contains(2) || collect.contains(3) || collect.contains(4) || collect.contains(5) || collect.contains(6) || collect.contains(7)) {
+                                            if (isSync) {
+                                                editContractNodes.add(editContractNode);
                                             }
                                         }
-                                        //找到了某个选中节点下与项目节点想同的节点了  提前结束循环,节省资源
-                                        break;
                                     }
+                                    //找到了某个选中节点下与项目节点想同的节点了  提前结束循环,节省资源
+                                    break;
                                 }
                             }
                         }
-                        //修改数据二次筛选  只保留任务选中的表单   但可能新增的数据包含新节点
-                        if (CollectionUtil.isNotEmpty(formList)) {
-                            editContractNodes = editContractNodes.stream().filter(f -> formList.contains(f.getPKeyId())).collect(Collectors.toList());
-                        }
+                    }
+                    //修改数据二次筛选  只保留任务选中的表单   但可能新增的数据包含新节点
+                    if (CollectionUtil.isNotEmpty(formList)) {
+                        editContractNodes = editContractNodes.stream().filter(f -> formList.contains(f.getPKeyId())).collect(Collectors.toList());
+                    }
 
-                        //合同段新增节点
-                        List<WbsTreeContract> addContractNode = null;
-                        if (addPrivateNodes != null) {
-                            addContractNode = BeanUtil.copyProperties(addPrivateNodes, WbsTreeContract.class);
-                        }
+                    //合同段新增节点
+                    List<WbsTreeContract> addContractNode = null;
+                    if (addPrivateNodes != null) {
+                        addContractNode = BeanUtil.copyProperties(addPrivateNodes, WbsTreeContract.class);
+                    }
 
-                        //转类型排序
-                        List<Integer> integers = new ArrayList<>(collect);
-                        Collections.sort(integers);
-                        for (Integer i : integers) {
-                            switch (i) {
-                                //添加表单
-                                case 1:
-                                    insertContractForm(wbsTreeSynchronousRecord, contractInfo, wbsTreeContracts, addContractNode);
-                                    //如果同时选择新增表单和其他的同步类型  在操作其他类型的时候需要添加新的表单
+                    //转类型排序
+                    List<Integer> integers = new ArrayList<>(collect);
+                    Collections.sort(integers);
+                    for (Integer i : integers) {
+                        switch (i) {
+                            //添加表单
+                            case 1:
+                                insertContractForm(wbsTreeSynchronousRecord, contractInfo, wbsTreeContracts, addContractNode);
+                                //如果同时选择新增表单和其他的同步类型  在操作其他类型的时候需要添加新的表单
 //                                    if (CollectionUtil.isNotEmpty(addContractNode)) {
 //                                        editContractNodes.addAll(addContractNode.stream().filter(f -> f.getType() == 2).collect(Collectors.toList()));
 //                                    }
-                                    break;
-                                //清表配置
-                                case 2:
-                                    //元素配置
-                                case 3:
-                                    //公式配置
-                                case 5:
-                                    //排序
-                                case 7:
-                                    editData.addAll(editContractNodes);
-                                    break;
-                                default:
-                                    break;
-                            }
+                                break;
+                            //清表配置
+                            case 2:
+                                //元素配置
+                            case 3:
+                                //公式配置
+                            case 5:
+                                //排序
+                            case 7:
+                                editData.addAll(editContractNodes);
+                                break;
+                            default:
+                                break;
                         }
                     }
                 }
@@ -819,8 +804,7 @@ public class WbsSynchronousServiceImpl {
                 }
                 //如果现在还找不到当前节点的父节点就表示数据有问题
                 if (addPrivateParentNodes.isEmpty()) {
-//                    throw new ServiceException(addPrivateNode.getNodeName() + "-找不到父节点");
-                    continue;
+                    throw new ServiceException(addPrivateNode.getNodeName() + "-找不到父节点");
                 }
                 //当前新增节点的父节点
                 WbsTreePrivate parent = addPrivateParentNodes.get(0);