|
@@ -108,7 +108,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
|
|
|
|
|
|
//获取当前合同段所有节点、表单(不包括客户端新增或者复制节点)
|
|
|
List<WbsTreeContract> list = baseMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
|
|
|
- .select(WbsTreeContract::getId, WbsTreeContract::getType, WbsTreeContract::getParentId)
|
|
|
+ .select(WbsTreeContract::getId, WbsTreeContract::getType)
|
|
|
.eq(WbsTreeContract::getContractId, pawDTO.getContractId())
|
|
|
.eq(WbsTreeContract::getWbsId, pawDTO.getWbsId())
|
|
|
.eq(WbsTreeContract::getStatus, 1)
|
|
@@ -129,11 +129,14 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
|
|
|
|
|
|
//TODO ---------节点未变只同步元素表---------
|
|
|
if (saveIds.size() == 0 && delIds.size() == 0) {
|
|
|
- List<WbsTreePrivate> wbsTreePrivateListResult = new ArrayList<>();
|
|
|
+ //当前项目节点下的所有表单Ids
|
|
|
+ List<String> collect = new ArrayList<>();
|
|
|
+
|
|
|
//当前项目所有表
|
|
|
List<WbsTreePrivate> wbsTreePrivateList = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
- .eq(WbsTreePrivate::getProjectId, Long.parseLong(pawDTO.getProjectId()))
|
|
|
- .eq(WbsTreePrivate::getWbsId, Long.parseLong(pawDTO.getWbsId()))
|
|
|
+ .select(WbsTreePrivate::getId, WbsTreePrivate::getParentId, WbsTreePrivate::getType)
|
|
|
+ .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
+ .eq(WbsTreePrivate::getWbsId, pawDTO.getWbsId())
|
|
|
.eq(WbsTreePrivate::getStatus, 1)
|
|
|
.eq(WbsTreePrivate::getType, 2)
|
|
|
);
|
|
@@ -141,71 +144,98 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
|
|
|
wbsTreePrivateList.forEach(wbsTreePrivate -> {
|
|
|
idList1.forEach(id -> {
|
|
|
if (Long.parseLong(id) == (wbsTreePrivate.getParentId()) && wbsTreePrivate.getType() == 2) {
|
|
|
- wbsTreePrivateListResult.add(wbsTreePrivate);
|
|
|
+ collect.add(wbsTreePrivate.getId() + "");
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
|
|
|
- //当前项目节点下的所有表单Ids
|
|
|
- List<String> collect = wbsTreePrivateListResult.stream().map(WbsTreePrivate::getId).distinct().map(String::valueOf).collect(Collectors.toList());
|
|
|
-
|
|
|
if (collect.size() == collect1.size()) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
List<String> finalCollect = collect1;
|
|
|
- Map<String, String> resultMapData = collect.stream().filter(f -> !finalCollect.contains(f)).collect(Collectors.toMap(Object::toString, Function.identity()));
|
|
|
+ List<String> collect5 = collect.stream().filter(f -> !finalCollect.contains(f)).collect(Collectors.toList());
|
|
|
|
|
|
List<WbsTreeContract> wbsTreeContractResultData = new ArrayList<>();
|
|
|
- wbsTreePrivateList.forEach(wbsTreePrivate -> {
|
|
|
- String resultObj = resultMapData.get(wbsTreePrivate.getId() + "");
|
|
|
- if (resultObj != null) {
|
|
|
- WbsTreeContract wbsTreeContract = BeanUtil.copyProperties(wbsTreePrivate, WbsTreeContract.class);
|
|
|
+ if (collect5.size() > 0) {
|
|
|
+ List<WbsTreeContract> wbsTreeContractList = baseMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery().in(WbsTreeContract::getId, collect5)
|
|
|
+ .eq(WbsTreeContract::getContractId, pawDTO.getContractId())
|
|
|
+ .eq(WbsTreeContract::getWbsId, pawDTO.getWbsId())
|
|
|
+ .eq(WbsTreeContract::getType, 2)
|
|
|
+ .eq(WbsTreeContract::getStatus, 1)
|
|
|
+ );
|
|
|
+ wbsTreeContractList.forEach(obj -> {
|
|
|
+ WbsTreeContract wbsTreeContract = BeanUtil.copyProperties(obj, WbsTreeContract.class);
|
|
|
if (wbsTreeContract != null) {
|
|
|
wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
|
|
|
wbsTreeContract.setWbsId(pawDTO.getWbsId());
|
|
|
wbsTreeContract.setProjectId(pawDTO.getProjectId());
|
|
|
wbsTreeContract.setContractId(pawDTO.getContractId());
|
|
|
- wbsTreeContract.setIsTypePrivatePid(wbsTreePrivate.getPKeyId());
|
|
|
- if (wbsTreePrivate.getType() == 2) {
|
|
|
- wbsTreeContract.setIsTypePrivatePid(wbsTreePrivate.getPKeyId());
|
|
|
+ wbsTreeContract.setIsTypePrivatePid(obj.getPKeyId());
|
|
|
+ if (obj.getType() == 2) {
|
|
|
+ wbsTreeContract.setIsTypePrivatePid(obj.getPKeyId());
|
|
|
}
|
|
|
wbsTreeContractResultData.add(wbsTreeContract);
|
|
|
}
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- //获取当前合同段的复制节点或者新增节点
|
|
|
- List<WbsTreeContract> copyAndAddNodeList = baseMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
|
|
|
- .select(WbsTreeContract::getId, WbsTreeContract::getOldId)
|
|
|
- .eq(WbsTreeContract::getContractId, pawDTO.getContractId())
|
|
|
- .eq(WbsTreeContract::getWbsId, pawDTO.getWbsId())
|
|
|
- .eq(WbsTreeContract::getStatus, 1)
|
|
|
- .isNotNull(WbsTreeContract::getOldId));
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
- List<WbsTreeContract> copyAddNodeTabs = new ArrayList<>();
|
|
|
- if (copyAndAddNodeList.size() > 0) {
|
|
|
- for (WbsTreeContract synTab : wbsTreeContractResultData) {
|
|
|
- for (WbsTreeContract copyAddNode : copyAndAddNodeList) {
|
|
|
- if (synTab.getParentId().toString().equals(copyAddNode.getOldId())) {
|
|
|
+ if (wbsTreeContractResultData.size() > 0) {
|
|
|
+ //获取当前合同段的复制节点或者新增节点(最底层节点)
|
|
|
+ String sql = "SELECT a.id, a.old_id," +
|
|
|
+ " (SELECT CASE WHEN COUNT(1) > 0 THEN 1 ELSE 0 END" +
|
|
|
+ " FROM m_wbs_tree_contract b" +
|
|
|
+ " WHERE b.parent_id = a.id" +
|
|
|
+ " AND b.wbs_id = " + pawDTO.getWbsId() +
|
|
|
+ " AND b.contract_id = " + pawDTO.getContractId() +
|
|
|
+ " AND b.status = 1" +
|
|
|
+ " AND b.type = 1" +
|
|
|
+ " AND b.is_deleted = 0" +
|
|
|
+ " ) AS hasChildren" +
|
|
|
+ " FROM m_wbs_tree_contract a" +
|
|
|
+ " WHERE " +
|
|
|
+ " a.status = 1" +
|
|
|
+ " AND a.is_deleted = 0" +
|
|
|
+ " AND a.type = 1" +
|
|
|
+ " AND a.wbs_id = " + pawDTO.getWbsId() +
|
|
|
+ " AND a.contract_id = " + pawDTO.getContractId() +
|
|
|
+ " AND a.old_id is not null" +
|
|
|
+ " HAVING hasChildren = 0";
|
|
|
+ List<WbsTreeContract> copyAndAddNodeList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
|
|
|
+ List<WbsTreeContract> copyAddNodeTabs = new ArrayList<>();
|
|
|
+ if (copyAndAddNodeList.size() > 0) {
|
|
|
+ //转换为Map,oldId作为Key,id作为value
|
|
|
+ Map<String, List<WbsTreeContract>> oldIdToIdMap = copyAndAddNodeList.stream().collect(Collectors.groupingBy(WbsTreeContract::getOldId));
|
|
|
+ for (WbsTreeContract synTab : wbsTreeContractResultData) {
|
|
|
+ List<WbsTreeContract> nodeIds = oldIdToIdMap.get(synTab.getParentId().toString());
|
|
|
+ if (nodeIds != null && nodeIds.size() > 0) {
|
|
|
WbsTreeContract copyAddNodeTab = BeanUtil.copyProperties(synTab, WbsTreeContract.class);
|
|
|
- if (copyAddNodeTab != null) {
|
|
|
- copyAddNodeTab.setParentId(copyAddNode.getId());
|
|
|
- copyAddNodeTab.setAncestors(synTab.getAncestors().replace(synTab.getParentId() + "", copyAddNodeTab.getParentId() + ""));
|
|
|
- copyAddNodeTab.setPKeyId(SnowFlakeUtil.getId());
|
|
|
- copyAddNodeTab.setCreateTime(new Date());
|
|
|
- copyAddNodeTabs.add(copyAddNodeTab);
|
|
|
+ for (WbsTreeContract nodeId : nodeIds) {
|
|
|
+ if (copyAddNodeTab != null) {
|
|
|
+ copyAddNodeTab.setParentId(nodeId.getId());
|
|
|
+ copyAddNodeTab.setAncestors(synTab.getAncestors().replace(synTab.getParentId() + "", copyAddNodeTab.getParentId() + ""));
|
|
|
+ copyAddNodeTab.setPKeyId(SnowFlakeUtil.getId());
|
|
|
+ copyAddNodeTab.setCreateTime(new Date());
|
|
|
+ copyAddNodeTabs.add(copyAddNodeTab);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- if (wbsTreeContractResultData.size() > 0) {
|
|
|
if (copyAddNodeTabs.size() > 0) {
|
|
|
//新增复制节点的表
|
|
|
wbsTreeContractResultData.addAll(copyAddNodeTabs);
|
|
|
}
|
|
|
+ Iterator<WbsTreeContract> iterator = wbsTreeContractResultData.iterator();
|
|
|
+ while (iterator.hasNext()) {
|
|
|
+ WbsTreeContract next = iterator.next();
|
|
|
+ if (next != null) {
|
|
|
+ Long aLong = jdbcTemplate.queryForObject("select count(1) from m_wbs_tree_contract where type = 2 and is_deleted = 0 and status = 1 and id = " + next.getId() + " and parent_id = " + next.getParentId() + " and wbs_id = " + next.getWbsId() + " and contract_id = " + next.getContractId(), Long.class);
|
|
|
+ if (aLong != null && aLong > 0L) {
|
|
|
+ iterator.remove();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
this.insertBatch(wbsTreeContractResultData, 1000);
|
|
|
}
|
|
|
|