|
@@ -63,6 +63,7 @@ import java.util.function.BiPredicate;
|
|
|
import java.util.function.BinaryOperator;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
@Service
|
|
|
@AllArgsConstructor
|
|
@@ -87,14 +88,21 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
@Override
|
|
|
public List<WbsTreePrivateVO> tree(String wbsId, String projectId) {
|
|
|
WbsInfo wbsInfo = wbsInfoMapper.selectOne(Wrappers.<WbsInfo>query().lambda().eq(WbsInfo::getId, wbsId));
|
|
|
+ String sql="select * from m_project_info where id="+projectId;
|
|
|
+ ProjectInfo projectInfo = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(ProjectInfo.class));
|
|
|
+ Integer parentId = null;
|
|
|
+ if(projectInfo.getTemplateType()!=null&&projectInfo.getTemplateType()==2){
|
|
|
+ parentId=1;
|
|
|
+ }
|
|
|
if (wbsInfo != null) {
|
|
|
+ List<WbsTreePrivateVO> tree = baseMapper.tree(wbsId, projectId, wbsInfo.getWbsType(),parentId);
|
|
|
//公有引用
|
|
|
- return ForestNodeMerger.merge(baseMapper.tree(wbsId, projectId, wbsInfo.getWbsType()));
|
|
|
+ return ForestNodeMerger.merge(tree);
|
|
|
} else {
|
|
|
//私有引用`
|
|
|
WbsTreePrivate nodeRoot = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getWbsId, wbsId).eq(WbsTreePrivate::getProjectId, projectId).eq(WbsTreePrivate::getParentId, 0L));
|
|
|
if (nodeRoot != null) {
|
|
|
- return ForestNodeMerger.merge(baseMapper.tree(wbsId, projectId, Integer.valueOf(nodeRoot.getWbsType())));
|
|
|
+ return ForestNodeMerger.merge(baseMapper.tree(wbsId, projectId, Integer.valueOf(nodeRoot.getWbsType()),parentId));
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
@@ -1530,9 +1538,14 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
if (("public").equals(projectInfo.getReferenceWbsTemplateType())) {
|
|
|
/*-------------------------------------质检公有引用同步--------------------------------------------*/
|
|
|
//获取当前节点对应的公有引用树下的元素表
|
|
|
- WbsTree wbsTree = wbsTreeMapper.selectOne(Wrappers.<WbsTree>lambdaQuery().select(WbsTree::getAncestors, WbsTree::getWbsId, WbsTree::getId).eq(WbsTree::getId, wbsTreePrivate.getId()));
|
|
|
-
|
|
|
+ List<WbsTree> wbsTrees = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery()
|
|
|
+ .select(WbsTree::getAncestors, WbsTree::getWbsId, WbsTree::getId)
|
|
|
+ .and(wq -> wq.eq(WbsTree::getId, wbsTreePrivate.getId())
|
|
|
+ .or()
|
|
|
+ .eq(WbsTree::getId, wbsTreePrivate.getTreePId()))
|
|
|
+ );
|
|
|
List<WbsTree> wbsTreesPublicTables;
|
|
|
+ WbsTree wbsTree = wbsTrees.get(0);
|
|
|
if (wbsTree.getAncestors().equals("0")) {
|
|
|
//根节点
|
|
|
wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda()
|
|
@@ -1551,7 +1564,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
|
|
|
//获取当前项目树下的元素表 节点
|
|
|
List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
- .select(WbsTreePrivate::getType, WbsTreePrivate::getId, WbsTreePrivate::getAncestors)
|
|
|
+ .select(WbsTreePrivate::getType, WbsTreePrivate::getId, WbsTreePrivate::getAncestors,WbsTreePrivate::getTreePId)
|
|
|
.eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
|
|
|
.eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
/*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
@@ -1567,9 +1580,15 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
}
|
|
|
|
|
|
//获取新增的公有元素表addPublicTable
|
|
|
- List<WbsTree> addPublicTable = wbsTreesPublicTables.stream().filter(f ->
|
|
|
- !wbsTreePrivatesProjectTables.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).contains(f.getId())).collect(Collectors.toList());
|
|
|
-
|
|
|
+// List<WbsTree> addPublicTable = wbsTreesPublicTables.stream().filter(f ->
|
|
|
+// !wbsTreePrivatesProjectTables.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).contains(f.getId())).collect(Collectors.toList());
|
|
|
+ Set<Long> privateIdsAndPids = wbsTreePrivatesProjectTables.stream()
|
|
|
+ .flatMap(p -> Stream.of(p.getId(), p.getTreePId()))
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+ // 过滤 wbsTreesPublicTables
|
|
|
+ List<WbsTree> addPublicTable = wbsTreesPublicTables.stream()
|
|
|
+ .filter(f -> !privateIdsAndPids.contains(f.getId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
//判断当前新增的表在项目的wbs树中是否存在上级节点,存在表示可以新增,不存在表示不新增
|
|
|
List<WbsTree> addPublicTables = addPublicTable.stream().filter(node ->
|
|
|
wbsTreePrivatesProjectNodes.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).contains(node.getParentId())).collect(Collectors.toList());
|
|
@@ -1952,66 +1971,66 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //同步到合同段(合同段中可能不存在原始节点(那么分配wsb处就同步不成功),但合同段存在新增、复制的节点,所以单独处理)
|
|
|
- if (!insertDataPrivateList.isEmpty()) {
|
|
|
- Map<Long, List<WbsTreePrivate>> tabParentNodesGroup = insertDataPrivateList.stream().collect(Collectors.groupingBy(WbsTreePrivate::getParentId));
|
|
|
- Set<Long> longs = tabParentNodesGroup.keySet();
|
|
|
- //获取当前项目下合同段 新增、复制、原始节点
|
|
|
- List<WbsTreeContract> addOrCopyOrYsNodes = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
|
|
|
- .select(WbsTreeContract::getId, WbsTreeContract::getContractId, WbsTreeContract::getOldId)
|
|
|
- .eq(WbsTreeContract::getProjectId, wbsTreePrivate.getProjectId())
|
|
|
- .and(obj -> obj.in(WbsTreeContract::getOldId, longs).or().in(WbsTreeContract::getId, longs))
|
|
|
- );
|
|
|
- List<WbsTreeContract> newAddOrCopyOrYsNodes = addOrCopyOrYsNodes.stream().distinct().collect(Collectors.toList());
|
|
|
- for (WbsTreeContract addOrCopyOrYsNode : newAddOrCopyOrYsNodes) {
|
|
|
- if (StringUtils.isNotEmpty(addOrCopyOrYsNode.getOldId())) {
|
|
|
- //复制、新增节点
|
|
|
- //合同段节点的oldId=当前表的parentId,也就是说当前表的父级节点=合同段复制、新增出来节点
|
|
|
- List<WbsTreePrivate> tabs = tabParentNodesGroup.get(Long.parseLong(addOrCopyOrYsNode.getOldId()));
|
|
|
- if (tabs.size() > 0) {
|
|
|
- List<WbsTreeContract> wbsTreeContractList = BeanUtil.copyProperties(tabs, WbsTreeContract.class);
|
|
|
- for (WbsTreeContract wbsTreeContract : wbsTreeContractList) {
|
|
|
- wbsTreeContract.setIsBussShow(1);
|
|
|
- wbsTreeContract.setIsDeleted(0);
|
|
|
- wbsTreeContract.setStatus(1);
|
|
|
-
|
|
|
- wbsTreeContract.setIsTypePrivatePid(wbsTreeContract.getPKeyId()); //记录原始表的pKeyId
|
|
|
-
|
|
|
- wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
|
|
|
- wbsTreeContract.setParentId(addOrCopyOrYsNode.getId());
|
|
|
- wbsTreeContract.setContractId(addOrCopyOrYsNode.getContractId());
|
|
|
- }
|
|
|
- insertDataContractList.addAll(wbsTreeContractList);
|
|
|
- }
|
|
|
- } else {
|
|
|
- //原始节点id=表parentId
|
|
|
- List<WbsTreePrivate> tabs = tabParentNodesGroup.get((addOrCopyOrYsNode.getId()));
|
|
|
- if (tabs.size() > 0) {
|
|
|
- List<WbsTreeContract> wbsTreeContractList = BeanUtil.copyProperties(tabs, WbsTreeContract.class);
|
|
|
- for (WbsTreeContract wbsTreeContract : wbsTreeContractList) {
|
|
|
- wbsTreeContract.setIsBussShow(1);
|
|
|
- wbsTreeContract.setIsDeleted(0);
|
|
|
- wbsTreeContract.setStatus(1);
|
|
|
-
|
|
|
- wbsTreeContract.setIsTypePrivatePid(wbsTreeContract.getPKeyId()); //记录原始表的pKeyId
|
|
|
-
|
|
|
- wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
|
|
|
- wbsTreeContract.setParentId(addOrCopyOrYsNode.getId());
|
|
|
- wbsTreeContract.setContractId(addOrCopyOrYsNode.getContractId());
|
|
|
- }
|
|
|
- insertDataContractList.addAll(wbsTreeContractList);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //新增同步到合同段
|
|
|
- if (!insertDataContractList.isEmpty()) {
|
|
|
- List<List<WbsTreeContract>> partition = Lists.partition(insertDataContractList, 1000);
|
|
|
- for (List<WbsTreeContract> wbsTreeContracts : partition) {
|
|
|
- wbsTreeContractService.insertBatch(wbsTreeContracts, 1000);
|
|
|
- }
|
|
|
- }
|
|
|
+// //同步到合同段(合同段中可能不存在原始节点(那么分配wsb处就同步不成功),但合同段存在新增、复制的节点,所以单独处理)
|
|
|
+// if (!insertDataPrivateList.isEmpty()) {
|
|
|
+// Map<Long, List<WbsTreePrivate>> tabParentNodesGroup = insertDataPrivateList.stream().collect(Collectors.groupingBy(WbsTreePrivate::getParentId));
|
|
|
+// Set<Long> longs = tabParentNodesGroup.keySet();
|
|
|
+// //获取当前项目下合同段 新增、复制、原始节点
|
|
|
+// List<WbsTreeContract> addOrCopyOrYsNodes = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
|
|
|
+// .select(WbsTreeContract::getId, WbsTreeContract::getContractId, WbsTreeContract::getOldId)
|
|
|
+// .eq(WbsTreeContract::getProjectId, wbsTreePrivate.getProjectId())
|
|
|
+// .and(obj -> obj.in(WbsTreeContract::getOldId, longs).or().in(WbsTreeContract::getId, longs))
|
|
|
+// );
|
|
|
+// List<WbsTreeContract> newAddOrCopyOrYsNodes = addOrCopyOrYsNodes.stream().distinct().collect(Collectors.toList());
|
|
|
+// for (WbsTreeContract addOrCopyOrYsNode : newAddOrCopyOrYsNodes) {
|
|
|
+// if (StringUtils.isNotEmpty(addOrCopyOrYsNode.getOldId())) {
|
|
|
+// //复制、新增节点
|
|
|
+// //合同段节点的oldId=当前表的parentId,也就是说当前表的父级节点=合同段复制、新增出来节点
|
|
|
+// List<WbsTreePrivate> tabs = tabParentNodesGroup.get(Long.parseLong(addOrCopyOrYsNode.getOldId()));
|
|
|
+// if (tabs.size() > 0) {
|
|
|
+// List<WbsTreeContract> wbsTreeContractList = BeanUtil.copyProperties(tabs, WbsTreeContract.class);
|
|
|
+// for (WbsTreeContract wbsTreeContract : wbsTreeContractList) {
|
|
|
+// wbsTreeContract.setIsBussShow(1);
|
|
|
+// wbsTreeContract.setIsDeleted(0);
|
|
|
+// wbsTreeContract.setStatus(1);
|
|
|
+//
|
|
|
+// wbsTreeContract.setIsTypePrivatePid(wbsTreeContract.getPKeyId()); //记录原始表的pKeyId
|
|
|
+//
|
|
|
+// wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
|
|
|
+// wbsTreeContract.setParentId(addOrCopyOrYsNode.getId());
|
|
|
+// wbsTreeContract.setContractId(addOrCopyOrYsNode.getContractId());
|
|
|
+// }
|
|
|
+// insertDataContractList.addAll(wbsTreeContractList);
|
|
|
+// }
|
|
|
+// } else {
|
|
|
+// //原始节点id=表parentId
|
|
|
+// List<WbsTreePrivate> tabs = tabParentNodesGroup.get((addOrCopyOrYsNode.getId()));
|
|
|
+// if (tabs.size() > 0) {
|
|
|
+// List<WbsTreeContract> wbsTreeContractList = BeanUtil.copyProperties(tabs, WbsTreeContract.class);
|
|
|
+// for (WbsTreeContract wbsTreeContract : wbsTreeContractList) {
|
|
|
+// wbsTreeContract.setIsBussShow(1);
|
|
|
+// wbsTreeContract.setIsDeleted(0);
|
|
|
+// wbsTreeContract.setStatus(1);
|
|
|
+//
|
|
|
+// wbsTreeContract.setIsTypePrivatePid(wbsTreeContract.getPKeyId()); //记录原始表的pKeyId
|
|
|
+//
|
|
|
+// wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
|
|
|
+// wbsTreeContract.setParentId(addOrCopyOrYsNode.getId());
|
|
|
+// wbsTreeContract.setContractId(addOrCopyOrYsNode.getContractId());
|
|
|
+// }
|
|
|
+// insertDataContractList.addAll(wbsTreeContractList);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// //新增同步到合同段
|
|
|
+// if (!insertDataContractList.isEmpty()) {
|
|
|
+// List<List<WbsTreeContract>> partition = Lists.partition(insertDataContractList, 1000);
|
|
|
+// for (List<WbsTreeContract> wbsTreeContracts : partition) {
|
|
|
+// wbsTreeContractService.insertBatch(wbsTreeContracts, 1000);
|
|
|
+// }
|
|
|
+// }
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
@@ -3006,9 +3025,19 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
}
|
|
|
}
|
|
|
System.out.println(Colour.RED.getCode()+"第"+i+"次递归完成======================================================================================="+Colour.RESET.getCode());
|
|
|
+ }
|
|
|
|
|
|
-
|
|
|
+ @Override
|
|
|
+ public WbsTreePrivateVO tree3(String wbsId, String projectId) {
|
|
|
+ WbsInfo wbsInfo = wbsInfoMapper.selectOne(Wrappers.<WbsInfo>query().lambda().eq(WbsInfo::getId, wbsId));
|
|
|
+ WbsTreePrivateVO vo=new WbsTreePrivateVO();
|
|
|
+ vo.setId(wbsInfo.getId());
|
|
|
+ vo.setHasChildren(false);
|
|
|
+ vo.setProjectName(wbsInfo.getWbsName());
|
|
|
+ vo.setWbsType(wbsInfo.getWbsType()+"");
|
|
|
+ return vo;
|
|
|
}
|
|
|
+
|
|
|
public List<WbsTreePrivate> findAllContract(WbsTreePrivate wbsTreePrivate){
|
|
|
QueryWrapper<WbsTreePrivate> wbsTreeContractQueryWrapper = new QueryWrapper<>();
|
|
|
wbsTreeContractQueryWrapper.select("p_key_id","id","p_id","wbs_id","project_id","parent_id","ancestors");
|