|
@@ -301,7 +301,6 @@ public class WbsSynchronousServiceImpl {
|
|
|
List<WbsTreePrivate> editPrivateNodes = new ArrayList<>();
|
|
|
for (WbsTreePrivate templateNode : templateNodes) {
|
|
|
//数据修复-----------------------------------------------------------------------------------------------------------------------------------开始
|
|
|
-
|
|
|
if (!isPublic) {
|
|
|
boolean isUpdate = false;
|
|
|
if (templateNode.getExcelId() != null) {
|
|
@@ -369,8 +368,8 @@ public class WbsSynchronousServiceImpl {
|
|
|
wbsTreePrivateMapper.update(templateNode, Wrappers.<WbsTreePrivate>lambdaUpdate()
|
|
|
.eq(WbsTreePrivate::getPKeyId, templateNode.getPKeyId()));
|
|
|
}
|
|
|
- //数据修复-----------------------------------------------------------------------------------------------------------------------------------完成
|
|
|
}
|
|
|
+ //数据修复-----------------------------------------------------------------------------------------------------------------------------------完成
|
|
|
//更新只跟新表单
|
|
|
for (WbsTreePrivate editPrivateNode : wbsTreePrivates) {
|
|
|
// 判断模板表与项目表 html是否一致
|
|
@@ -378,7 +377,7 @@ public class WbsSynchronousServiceImpl {
|
|
|
if (templateNode.getType() == 1) {
|
|
|
editPrivateNode.setNodeName(templateNode.getNodeName());
|
|
|
editData.add(editPrivateNode);
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
//清表
|
|
|
if (collect.contains(2)) {
|
|
|
//绑定清表
|
|
@@ -575,181 +574,193 @@ public class WbsSynchronousServiceImpl {
|
|
|
List<WbsTreeContract> startContacts = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
|
|
|
.eq(WbsTreeContract::getContractId, contractInfo.getId())
|
|
|
.eq(WbsTreeContract::getIsTypePrivatePid, primaryKeyId));
|
|
|
- //如果没有查询到,表示该合同下不存在该节点
|
|
|
+ //如果没有查询到,表示该合同下不存在该节点 就直接新增
|
|
|
if (CollectionUtil.isEmpty(startContacts)) {
|
|
|
//不能抛异常 不然就会中止程序 开发阶段先抛异常,后续统一处理
|
|
|
- throw new ServiceException("当前节点不存在");
|
|
|
- }
|
|
|
-
|
|
|
- for (WbsTreeContract wbsTreeContract : startContacts) {
|
|
|
-
|
|
|
-
|
|
|
- //获取合同 当前节点的所有子节点数据
|
|
|
- LambdaQueryWrapper<WbsTreeContract> wrapperContract = Wrappers.lambdaQuery();
|
|
|
- wrapperContract
|
|
|
+ List<WbsTreeContract> addContractNode = null;
|
|
|
+ addContractNode = BeanUtil.copyProperties(wbsTreePrivates, WbsTreeContract.class);
|
|
|
+ //获取选中节点的父级节点与合同段对应的关系
|
|
|
+ WbsTreePrivate parentNode = wbsTreePrivateMapper.selectById(wbsTreePrivate.getPId());
|
|
|
+ List<WbsTreeContract> list = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
|
|
|
.eq(WbsTreeContract::getContractId, contractInfo.getId())
|
|
|
- .eq(WbsTreeContract::getIsDeleted, 0);
|
|
|
- //判断如果为顶级顶级节点
|
|
|
- if (wbsTreeContract.getTreePId() != 0) {
|
|
|
- wrapperContract.apply("FIND_IN_SET({0},ancestors_p_id)", wbsTreeContract.getPKeyId());
|
|
|
+ .eq(WbsTreeContract::getIsTypePrivatePid, parentNode.getPKeyId()));
|
|
|
+ for (WbsTreeContract wbsTreeContract : list) {
|
|
|
+ List<WbsTreeContract> wbsTreeContracts = new ArrayList<>();
|
|
|
+ wbsTreeContracts.add(wbsTreeContract);
|
|
|
+ insertContractForm(wbsTreeSynchronousRecord, contractInfo, wbsTreeContracts, addContractNode);
|
|
|
}
|
|
|
+ } 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 -> !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 -> f.getType() == 1 || formList.contains(f.getPKeyId())).collect(Collectors.toList());
|
|
|
- }
|
|
|
+ //如果没有选中 则默认同步所有
|
|
|
+ if (CollectionUtil.isNotEmpty(formList)) {
|
|
|
+ //二次筛选 只保留任务选中的表单 但可能新增的数据包含新节点
|
|
|
+ addPrivateNodes = addPrivateNodes.stream().filter(f -> f.getType() == 1 || formList.contains(f.getPKeyId())).collect(Collectors.toList());
|
|
|
+ }
|
|
|
|
|
|
- //筛选出需要更新的节点 同时做数据隔离
|
|
|
- List<WbsTreeContract> editContractNodes = new ArrayList<>();
|
|
|
- for (WbsTreePrivate templateNode : wbsTreePrivates) {
|
|
|
- //更新只跟新表单
|
|
|
- if (templateNode.getType() == 2) {
|
|
|
+ //筛选出需要更新的节点 同时做数据隔离
|
|
|
+ List<WbsTreeContract> editContractNodes = new ArrayList<>();
|
|
|
+ for (WbsTreePrivate templateNode : wbsTreePrivates) {
|
|
|
+ //更新只跟新表单
|
|
|
for (WbsTreeContract editContractNode : wbsTreeContracts) {
|
|
|
+
|
|
|
// 判断模板表与项目表 html是否一致
|
|
|
if (ObjectUtils.equals(templateNode.getPKeyId(), editContractNode.getIsTypePrivatePid())) {
|
|
|
-
|
|
|
- //同步范围 当前节点是否允许修改
|
|
|
- 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 == 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;
|
|
|
- }
|
|
|
+ if (templateNode.getType() == 1) {
|
|
|
+ editContractNode.setNodeName(templateNode.getNodeName());
|
|
|
+ editData.add(editContractNode);
|
|
|
} else {
|
|
|
- isSync = true;
|
|
|
- }
|
|
|
+ //同步范围 当前节点是否允许修改
|
|
|
+ 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 == 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;
|
|
|
+ }
|
|
|
|
|
|
|
|
|
- //清表 公式 元素
|
|
|
- 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(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(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);
|
|
|
+ }
|
|
|
|
|
|
- //手动选中的表单 进行筛选
|
|
|
- if (CollectionUtil.isNotEmpty(formList)) {
|
|
|
- if (formList.contains(templateNode.getPKeyId())) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } 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);
|
|
|
}
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- } 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);
|
|
|
- //如果同时选择新增表单和其他的同步类型 在操作其他类型的时候需要添加新的表单
|
|
|
- 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;
|
|
|
+ //转类型排序
|
|
|
+ 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;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|