|
@@ -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);
|