|
@@ -1,5 +1,6 @@
|
|
|
package org.springblade.manager.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.lang.func.LambdaUtil;
|
|
|
import cn.hutool.json.JSONArray;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
import cn.hutool.log.StaticLog;
|
|
@@ -1535,333 +1536,204 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public boolean syncNodeTable(String primaryKeyId) {
|
|
|
+
|
|
|
+ public List<WbsTreePrivate> syncNodeTable(String primaryKeyId, String projectId) {
|
|
|
+
|
|
|
if (StringUtils.isNotEmpty(primaryKeyId)) {
|
|
|
//获取当前节点对应节点信息
|
|
|
WbsTreePrivate wbsTreePrivate = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, primaryKeyId));
|
|
|
+
|
|
|
+ //当前节点对应的模板节点信息
|
|
|
+ WbsTree wbsTreeTemplate = wbsTreeMapper.selectOne(Wrappers.<WbsTree>lambdaQuery()
|
|
|
+ .eq(WbsTree::getId, wbsTreePrivate.getTreePId()));
|
|
|
+
|
|
|
//获取项目信息
|
|
|
ProjectInfo projectInfo = projectInfoMapper.selectOne(Wrappers.<ProjectInfo>lambdaQuery().eq(ProjectInfo::getId, wbsTreePrivate.getProjectId()));
|
|
|
- //结果集
|
|
|
- List<WbsTreePrivate> insertDataPrivateList = new ArrayList<>();
|
|
|
- List<WbsTreeContract> insertDataContractList = new ArrayList<>();
|
|
|
|
|
|
+ //结果集
|
|
|
+ List<WbsTreePrivate> addData = new ArrayList<>();
|
|
|
+ //质检
|
|
|
if (("1").equals(wbsTreePrivate.getWbsType())) {
|
|
|
+ //当前节点引用的模板为公有模板
|
|
|
if (("public").equals(projectInfo.getReferenceWbsTemplateType())) {
|
|
|
- /*-------------------------------------质检公有引用同步--------------------------------------------*/
|
|
|
- //获取当前节点对应的公有引用树下的元素表
|
|
|
- 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()
|
|
|
- .select(WbsTree::getId, WbsTree::getParentId)
|
|
|
- .eq(WbsTree::getWbsId, wbsTree.getWbsId()).eq(WbsTree::getType, 2)
|
|
|
- /*.eq(WbsTree::getStatus,1)*/
|
|
|
- );
|
|
|
+
|
|
|
+ //模板节点的所有子节点信息
|
|
|
+ List<WbsTree> wbsTrees = null;
|
|
|
+ //当前节点信息
|
|
|
+ List<WbsTreePrivate> wbsTreePrivates = null;
|
|
|
+ //判断是否为最顶级节点
|
|
|
+ if (wbsTreeTemplate.getParentId() == 0) {
|
|
|
+ //如果时最顶级节点 就获取所有节点信息
|
|
|
+ wbsTrees = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery()
|
|
|
+ .eq(WbsTree::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
+ .eq(WbsTree::getIsDeleted, 0));
|
|
|
} else {
|
|
|
- wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda()
|
|
|
- .select(WbsTree::getId, WbsTree::getParentId)
|
|
|
- .eq(WbsTree::getWbsId, wbsTree.getWbsId()).eq(WbsTree::getType, 2)
|
|
|
- /*.eq(WbsTree::getStatus,1)*/
|
|
|
- .like(WbsTree::getAncestors, wbsTree.getId())
|
|
|
- );
|
|
|
+ //获取列明
|
|
|
+ String fieldName = LambdaUtil.getFieldName(WbsTree::getAncestors);
|
|
|
+ wbsTrees = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery()
|
|
|
+ .eq(WbsTree::getIsDeleted, 0)
|
|
|
+ .apply("FIND_IN_SET({0}," + fieldName + ")", wbsTreeTemplate.getId()));
|
|
|
}
|
|
|
|
|
|
- //获取当前项目树下的元素表 节点
|
|
|
- List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
- .select(WbsTreePrivate::getType, WbsTreePrivate::getId, WbsTreePrivate::getAncestors, WbsTreePrivate::getTreePId)
|
|
|
- .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
|
|
|
- .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
- /*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
- );
|
|
|
- List<WbsTreePrivate> wbsTreePrivatesProjectNodes = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(1)).collect(Collectors.toList());
|
|
|
|
|
|
- List<WbsTreePrivate> wbsTreePrivatesProjectTables;
|
|
|
- if (wbsTreePrivate.getAncestors().equals("0")) {
|
|
|
- //根节点
|
|
|
- wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2)).collect(Collectors.toList());
|
|
|
+ //2、获取当前节点下的节点信息
|
|
|
+ if (wbsTreePrivate.getTreePId() == 0) {
|
|
|
+ wbsTreePrivates = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
+ .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
+ .eq(WbsTreePrivate::getIsDeleted, 0));
|
|
|
} else {
|
|
|
- wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2) && f.getAncestors().contains(String.valueOf(wbsTreePrivate.getId()))).collect(Collectors.toList());
|
|
|
+ //获取列明
|
|
|
+ wbsTreePrivates = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
+ .eq(WbsTreePrivate::getIsDeleted, 0)
|
|
|
+ .apply("FIND_IN_SET({0},ancestors_p_id)", wbsTreePrivate.getPId()));
|
|
|
}
|
|
|
|
|
|
- //获取新增的公有元素表addPublicTable
|
|
|
-// 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()
|
|
|
+ if (wbsTreePrivates.isEmpty()) {
|
|
|
+ throw new ServiceException("无法找到模板对应节点,请检查模板节点");
|
|
|
+ }
|
|
|
+ //3、获取需要新增的节点或者表单节点信息 以及他们对应的父级节点信息
|
|
|
+
|
|
|
+
|
|
|
+ //获取id 和 tree_p_id 组成的集合
|
|
|
+ Set<Long> ids = wbsTreePrivates.stream()
|
|
|
.flatMap(p -> Stream.of(p.getId(), p.getTreePId()))
|
|
|
.collect(Collectors.toSet());
|
|
|
|
|
|
- // 过滤 wbsTreesPublicTables
|
|
|
- List<WbsTree> addPublicTable = wbsTreesPublicTables.stream()
|
|
|
- .filter(f -> !privateIdsAndPids.contains(f.getId()))
|
|
|
+
|
|
|
+ //3.1筛选出需要新增的节点
|
|
|
+ List<WbsTree> addNodes = wbsTrees.stream()
|
|
|
+ .filter(f -> !ids.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());
|
|
|
|
|
|
- //构造
|
|
|
- List<Long> ids = addPublicTable.stream().map(WbsTree::getId).collect(Collectors.toList());
|
|
|
- if (ids.size() > 0) {
|
|
|
- List<WbsTree> resultDataList = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery().in(WbsTree::getId, ids));
|
|
|
- for (WbsTree tree : resultDataList) {
|
|
|
- WbsTreePrivate dataPrivate = BeanUtil.copyProperties(tree, WbsTreePrivate.class);
|
|
|
- if (dataPrivate != null) {
|
|
|
- dataPrivate.setPKeyId(SnowFlakeUtil.getId());
|
|
|
- dataPrivate.setWbsType(wbsTreePrivate.getWbsType());
|
|
|
- dataPrivate.setProjectId(wbsTreePrivate.getProjectId());
|
|
|
- dataPrivate.setFullName(dataPrivate.getNodeName());
|
|
|
- dataPrivate.setInitTableId(tree.getInitTableId().toString());
|
|
|
- dataPrivate.setIsAddConceal(0);
|
|
|
- dataPrivate.setParentId(wbsTreePrivate.getId());
|
|
|
- //TODO
|
|
|
- dataPrivate.setTreePId(tree.getId());
|
|
|
- //TODO
|
|
|
- dataPrivate.setPId(wbsTreePrivate.getPKeyId());
|
|
|
- //TODO
|
|
|
- dataPrivate.setAncestorsPId(wbsTreePrivate.getAncestorsPId() + "," + dataPrivate.getPId());
|
|
|
+ //将要新增的项目节点
|
|
|
+ List<WbsTreePrivate> addPrivateNodes = BeanUtil.copyProperties(addNodes, WbsTreePrivate.class);
|
|
|
|
|
|
- insertDataPrivateList.add(dataPrivate);//新增
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
- } else if (("private").equals(projectInfo.getReferenceWbsTemplateType())) {
|
|
|
- /*-------------------------------------质检私有引用同步--------------------------------------------*/
|
|
|
- //根据wbsTreePrivate的wbsId=私有引用的pKeyId来获取引用树根节点
|
|
|
- WbsTreePrivate wbsTreePrivateRoot = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getWbsId()));
|
|
|
+ //先给每个新增节点赋唯一id,项目id,父级id
|
|
|
+ addPrivateNodes.forEach(f -> f.setPKeyId(SnowFlakeUtil.getId()));
|
|
|
|
|
|
- //获取当前私有引用树的元素表信息
|
|
|
- List<WbsTreePrivate> wbsTreePrivateRootTables;
|
|
|
- if (wbsTreePrivate.getAncestors().equals("0")) {
|
|
|
- //根节点
|
|
|
- wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
- .select(WbsTreePrivate::getId, WbsTreePrivate::getParentId, WbsTreePrivate::getPKeyId)
|
|
|
- .eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2)
|
|
|
- /*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
- );
|
|
|
- } else {
|
|
|
- wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
- .select(WbsTreePrivate::getId, WbsTreePrivate::getParentId, WbsTreePrivate::getPKeyId)
|
|
|
- .eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2)
|
|
|
- /*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
- .like(WbsTreePrivate::getAncestors, wbsTreePrivateRoot.getId()));
|
|
|
- }
|
|
|
-
|
|
|
- //获取当前项目选择的节点下的所有元素表 节点
|
|
|
- List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
- .select(WbsTreePrivate::getType, WbsTreePrivate::getId, WbsTreePrivate::getAncestors, WbsTreePrivate::getPKeyId)
|
|
|
- .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
- /*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
- );
|
|
|
-
|
|
|
- List<WbsTreePrivate> wbsTreePrivatesProjectNodes = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(1)).collect(Collectors.toList());
|
|
|
- List<WbsTreePrivate> wbsTreePrivatesProjectTables;
|
|
|
- if (wbsTreePrivate.getAncestors().equals("0")) {
|
|
|
- //根节点
|
|
|
- wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2)).collect(Collectors.toList());
|
|
|
- } else {
|
|
|
- wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2) && f.getAncestors().contains(String.valueOf(wbsTreePrivate.getId()))).collect(Collectors.toList());
|
|
|
- }
|
|
|
-
|
|
|
- //获取新增的私有元素表addPrivateTable
|
|
|
- List<WbsTreePrivate> addPrivateTable = wbsTreePrivateRootTables.stream().filter(f ->
|
|
|
- !wbsTreePrivatesProjectTables.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).contains(f.getId())).collect(Collectors.toList());
|
|
|
|
|
|
- //判断当前新增的表在私有wbs中是否存在上级节点,存在表示可以新增,不存在表示不新增
|
|
|
- List<WbsTreePrivate> addPrivateTables = addPrivateTable.stream().filter(node ->
|
|
|
- wbsTreePrivatesProjectNodes.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).contains(node.getParentId())).collect(Collectors.toList());
|
|
|
- //构造
|
|
|
- List<Long> ids = addPrivateTables.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
|
|
|
- if (ids.size() > 0) {
|
|
|
- List<WbsTreePrivate> resultDataList = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().in(WbsTreePrivate::getPKeyId, ids));
|
|
|
- for (WbsTreePrivate tree : resultDataList) {
|
|
|
- WbsTreePrivate dataPrivate = BeanUtil.copyProperties(tree, WbsTreePrivate.class);
|
|
|
- if (dataPrivate != null) {
|
|
|
- dataPrivate.setPKeyId(SnowFlakeUtil.getId());
|
|
|
- dataPrivate.setWbsId(wbsTreePrivate.getWbsId());
|
|
|
- dataPrivate.setWbsType(tree.getWbsType());
|
|
|
- dataPrivate.setProjectId(wbsTreePrivate.getProjectId());
|
|
|
- dataPrivate.setInitTableId(tree.getInitTableId());
|
|
|
- dataPrivate.setIsAddConceal(0);
|
|
|
+ for (WbsTreePrivate addPrivateNode : addPrivateNodes) {
|
|
|
+ if (addPrivateNode.getParentId() == 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- //TODO
|
|
|
- dataPrivate.setTreePId(dataPrivate.getId());
|
|
|
- //TODO
|
|
|
- dataPrivate.setPId(wbsTreePrivate.getPKeyId());
|
|
|
- //TODO
|
|
|
- dataPrivate.setWbsType(wbsTreePrivate.getAncestorsPId() + "," + wbsTreePrivate.getPId());
|
|
|
+ //查询出当前模板节点的父节点 去获取对应项目节点 如果父节点为0就跳过
|
|
|
+ List<WbsTreePrivate> addPrivateParentNodes = wbsTreePrivates.stream().filter(f -> f.getId().equals(addPrivateNode.getParentId())).collect(Collectors.toList());
|
|
|
+ //如果没有数据 就表示这条数据的父节点也时新增节点 就需要从新增节点集合中找父级节点
|
|
|
+ if (addPrivateParentNodes.isEmpty()) {
|
|
|
+ addPrivateParentNodes = addPrivateNodes.stream().filter(f -> f.getId().equals(addPrivateNode.getParentId())).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ //如果现在还找不到当前节点的父节点就表示数据有问题
|
|
|
+ if (addPrivateParentNodes.isEmpty()) {
|
|
|
+ //TODO
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
+ WbsTreePrivate parent = addPrivateParentNodes.get(0);
|
|
|
+ addPrivateNode.setPId(parent.getPKeyId());
|
|
|
+ addPrivateNode.setIsAddConceal(0);
|
|
|
+ addPrivateNode.setProjectId(wbsTreePrivate.getProjectId());
|
|
|
+ //TODO 后续如果把p_key_id改成了id做 唯一id
|
|
|
+ addPrivateNode.setTreePId(addPrivateNode.getId());
|
|
|
|
|
|
- insertDataPrivateList.add(dataPrivate);
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
+ addData.addAll(addPrivateNodes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (("2").equals(wbsTreePrivate.getWbsType())) {
|
|
|
- if (("public").equals(projectInfo.getReferenceWbsTemplateTypeTrial())) {
|
|
|
- /*-------------------------------------试验公有引用同步--------------------------------------------*/
|
|
|
- //获取当前节点对应的公有引用树下的元素表
|
|
|
- WbsTree wbsTree = wbsTreeMapper.selectOne(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getId, wbsTreePrivate.getId()));
|
|
|
- List<WbsTree> wbsTreesPublicTables;
|
|
|
-
|
|
|
- if (wbsTree.getAncestors().equals("0")) {
|
|
|
- //根节点
|
|
|
- wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery()
|
|
|
- .select(WbsTree::getId, WbsTree::getParentId)
|
|
|
- .eq(WbsTree::getWbsId, wbsTree.getWbsId()).eq(WbsTree::getType, 2)
|
|
|
- /*.eq(WbsTree::getStatus, 1)*/
|
|
|
- );
|
|
|
- } else {
|
|
|
- wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getWbsId, wbsTree.getWbsId())
|
|
|
- .select(WbsTree::getId, WbsTree::getParentId)
|
|
|
- .eq(WbsTree::getType, 2)
|
|
|
- /*.eq(WbsTree::getStatus, 1)*/
|
|
|
- .like(WbsTree::getAncestors, wbsTree.getId()));
|
|
|
- }
|
|
|
-
|
|
|
- //获取当前项目树下的元素表 节点
|
|
|
- List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
- .select(WbsTreePrivate::getType, WbsTreePrivate::getId, WbsTreePrivate::getAncestors)
|
|
|
- .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
|
|
|
- .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
- /*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
- );
|
|
|
- List<WbsTreePrivate> wbsTreePrivatesProjectNodes = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(1)).collect(Collectors.toList());
|
|
|
|
|
|
- List<WbsTreePrivate> wbsTreePrivatesProjectTables;
|
|
|
- if (wbsTreePrivate.getAncestors().equals("0")) {
|
|
|
- //根节点
|
|
|
- wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2)).collect(Collectors.toList());
|
|
|
- } else {
|
|
|
- wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2) && f.getAncestors().contains(String.valueOf(wbsTreePrivate.getId()))).collect(Collectors.toList());
|
|
|
- }
|
|
|
|
|
|
- //获取新增的公有元素表addPublicTable
|
|
|
- List<WbsTree> addPublicTable = wbsTreesPublicTables.stream().filter(f ->
|
|
|
- !wbsTreePrivatesProjectTables.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).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());
|
|
|
+ //通过递归的方式去获取祖级路径
|
|
|
|
|
|
- //构造
|
|
|
- List<Long> ids = addPublicTables.stream().map(WbsTree::getId).collect(Collectors.toList());
|
|
|
- if (ids.size() > 0) {
|
|
|
- List<WbsTree> resultDataList = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery().in(WbsTree::getId, ids));
|
|
|
- for (WbsTree tree : resultDataList) {
|
|
|
- WbsTreePrivate dataPrivate = BeanUtil.copyProperties(tree, WbsTreePrivate.class);
|
|
|
- if (dataPrivate != null) {
|
|
|
- dataPrivate.setPKeyId(SnowFlakeUtil.getId());
|
|
|
- dataPrivate.setWbsType(wbsTreePrivate.getWbsType());
|
|
|
- dataPrivate.setProjectId(wbsTreePrivate.getProjectId());
|
|
|
- dataPrivate.setFullName(dataPrivate.getNodeName());
|
|
|
- dataPrivate.setInitTableId(ObjectUtils.isNotEmpty(tree.getInitTableId()) ? tree.getInitTableId().toString() : null);
|
|
|
- dataPrivate.setIsAddConceal(0);
|
|
|
-
|
|
|
- //TODO
|
|
|
- dataPrivate.setTreePId(dataPrivate.getId());
|
|
|
- //TODO
|
|
|
- dataPrivate.setPId(wbsTreePrivate.getPKeyId());
|
|
|
- //TODO
|
|
|
- dataPrivate.setWbsType(wbsTreePrivate.getAncestorsPId() + "," + wbsTreePrivate.getPId());
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- insertDataPrivateList.add(dataPrivate);//新增
|
|
|
+ if (addData.isEmpty()) {
|
|
|
+ return null;
|
|
|
+ }else{
|
|
|
+ try {
|
|
|
+ String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
|
|
|
+ Set<String> urls = new HashSet<>();
|
|
|
+ for (WbsTreePrivate tree : addData) {
|
|
|
+ if (org.apache.commons.lang3.StringUtils.isNotBlank(tree.getHtmlUrl())) {
|
|
|
+ String[] split = tree.getHtmlUrl().split("/");
|
|
|
+ String htmlUrl = file_path + "privateUrlCopy/" + tree.getPdfUrl() + "/" + split[split.length - 1];
|
|
|
+ if (!urls.contains(tree.getHtmlUrl())) {
|
|
|
+ urls.add(tree.getHtmlUrl());
|
|
|
+ File file_in = ResourceUtil.getFile(tree.getHtmlUrl());
|
|
|
+ if (!file_in.exists() || file_in.length() == 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ File file_out = ResourceUtil.getFile(htmlUrl);
|
|
|
+ FileUtil.copy(file_in, file_out);
|
|
|
}
|
|
|
+ tree.setHtmlUrl(htmlUrl);
|
|
|
}
|
|
|
}
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new ServiceException("重置表单路径错误");
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- } else if (("private").equals(projectInfo.getReferenceWbsTemplateTypeTrial())) {
|
|
|
- /*-------------------------------------试验私有引用同步--------------------------------------------*/
|
|
|
- //根据wbsTreePrivate的wbsId=私有引用的pKeyId来获取引用树根节点
|
|
|
- WbsTreePrivate wbsTreePrivateRoot = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getWbsId()));
|
|
|
|
|
|
- //获取当前私有引用树的元素表信息
|
|
|
- List<WbsTreePrivate> wbsTreePrivateRootTables;
|
|
|
- if (wbsTreePrivate.getAncestors().equals("0")) {
|
|
|
- //根节点
|
|
|
- wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
- .select(WbsTreePrivate::getId, WbsTreePrivate::getParentId, WbsTreePrivate::getPKeyId)
|
|
|
- .eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2)
|
|
|
- /*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
- );
|
|
|
- } else {
|
|
|
- wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
- .select(WbsTreePrivate::getId, WbsTreePrivate::getParentId, WbsTreePrivate::getPKeyId)
|
|
|
- .eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2)
|
|
|
- /*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
- .like(WbsTreePrivate::getAncestors, wbsTreePrivate.getId()));
|
|
|
- }
|
|
|
|
|
|
- //获取当前项目选择的节点下的所有元素表 节点
|
|
|
- List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
- .select(WbsTreePrivate::getType, WbsTreePrivate::getId, WbsTreePrivate::getAncestors)
|
|
|
- .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
- /*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
- );
|
|
|
|
|
|
- List<WbsTreePrivate> wbsTreePrivatesProjectNodes = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(1)).collect(Collectors.toList());
|
|
|
- List<WbsTreePrivate> wbsTreePrivatesProjectTables;
|
|
|
- if (wbsTreePrivate.getAncestors().equals("0")) {
|
|
|
- //根节点
|
|
|
- wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2)).collect(Collectors.toList());
|
|
|
- } else {
|
|
|
- wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2) && f.getAncestors().contains(String.valueOf(wbsTreePrivate.getId()))).collect(Collectors.toList());
|
|
|
- }
|
|
|
+ //查询出当前项目所有节点
|
|
|
+ List<WbsTreePrivate> addList = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
+ .eq(WbsTreePrivate::getIsDeleted, 0)
|
|
|
+ .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()));
|
|
|
|
|
|
- //获取新增的私有元素表addPrivateTable
|
|
|
- List<WbsTreePrivate> addPrivateTable = wbsTreePrivateRootTables.stream().filter(f ->
|
|
|
- !wbsTreePrivatesProjectTables.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).contains(f.getId())).collect(Collectors.toList());
|
|
|
+ addList.addAll(addData);
|
|
|
+ //组合祖级路径 根据当前选中节点为开始
|
|
|
+ Map<Long, WbsTreePrivate> collect = addList.stream().collect(Collectors.toMap(WbsTreePrivate::getPKeyId, Function.identity()));
|
|
|
|
|
|
- //判断当前新增的表在私有wbs中是否存在上级节点,存在表示可以新增,不存在表示不新增
|
|
|
- List<WbsTreePrivate> addPrivateTables = addPrivateTable.stream().filter(node ->
|
|
|
- wbsTreePrivatesProjectNodes.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).contains(node.getParentId())).collect(Collectors.toList());
|
|
|
+ addData.forEach(node -> {
|
|
|
+ String correctAncestors = createAncestorsPId(node, collect);
|
|
|
+ node.setAncestorsPId(correctAncestors);
|
|
|
+ });
|
|
|
|
|
|
- //构造
|
|
|
- List<Long> ids = addPrivateTables.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
|
|
|
- if (ids.size() > 0) {
|
|
|
- List<WbsTreePrivate> resultDataList = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().in(WbsTreePrivate::getPKeyId, ids));
|
|
|
- for (WbsTreePrivate tree : resultDataList) {
|
|
|
- WbsTreePrivate dataPrivate = BeanUtil.copyProperties(tree, WbsTreePrivate.class);
|
|
|
- if (dataPrivate != null) {
|
|
|
- dataPrivate.setPKeyId(SnowFlakeUtil.getId());
|
|
|
- dataPrivate.setWbsId(wbsTreePrivate.getWbsId());
|
|
|
- dataPrivate.setWbsType(tree.getWbsType());
|
|
|
- dataPrivate.setProjectId(wbsTreePrivate.getProjectId());
|
|
|
- dataPrivate.setInitTableId(ObjectUtils.isNotEmpty(tree.getInitTableId()) ? tree.getInitTableId() : null);
|
|
|
- dataPrivate.setIsAddConceal(0);
|
|
|
|
|
|
- //TODO
|
|
|
- dataPrivate.setTreePId(dataPrivate.getId());
|
|
|
- //TODO
|
|
|
- dataPrivate.setPId(wbsTreePrivate.getPKeyId());
|
|
|
- //TODO
|
|
|
- dataPrivate.setWbsType(wbsTreePrivate.getAncestorsPId() + "," + wbsTreePrivate.getPId());
|
|
|
+ List<List<WbsTreePrivate>> partition = Lists.partition(addData, 1000);
|
|
|
+ for (List<WbsTreePrivate> wbsTreePrivates : partition) {
|
|
|
+ this.insertBatch(wbsTreePrivates, 1000);
|
|
|
+ }
|
|
|
|
|
|
+ return addData;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
- insertDataPrivateList.add(dataPrivate);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean syncNodeTable(String primaryKeyId) {
|
|
|
+ if (StringUtils.isNotEmpty(primaryKeyId)) {
|
|
|
+ //获取当前节点对应节点信息
|
|
|
+ WbsTreePrivate wbsTreePrivate = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, primaryKeyId));
|
|
|
+ if(StringUtils.isEmpty(wbsTreePrivate.getAncestorsPId())){
|
|
|
+ throw new RuntimeException("当前节点祖级路径数据异常,请联系工作人员修复数据");
|
|
|
}
|
|
|
+ //查询当前选中节点下的子节点是否为表单 如果子节点还有子节点就不允许同步
|
|
|
+ Long count = baseMapper.selectCount(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPId, wbsTreePrivate.getPKeyId()).eq(WbsTreePrivate::getType, 1));
|
|
|
+ if(count > 0){
|
|
|
+ throw new RuntimeException("请选择底层节点");
|
|
|
+ }
|
|
|
+ //获取项目信息
|
|
|
+ ProjectInfo projectInfo = projectInfoMapper.selectOne(Wrappers.<ProjectInfo>lambdaQuery().eq(ProjectInfo::getId, wbsTreePrivate.getProjectId()));
|
|
|
+ //结果集
|
|
|
+ List<WbsTreePrivate> insertDataPrivateList = new ArrayList<>();
|
|
|
+ List<WbsTreeContract> insertDataContractList = new ArrayList<>();
|
|
|
|
|
|
- if (("3").equals(wbsTreePrivate.getWbsType())) {
|
|
|
- if (("public").equals(projectInfo.getReferenceWbsTemplateTypeMeter())) {
|
|
|
- /*-------------------------------------计量公有引用同步--------------------------------------------*/
|
|
|
+// if (("1").equals(wbsTreePrivate.getWbsType())) {
|
|
|
+ if (("public").equals(projectInfo.getReferenceWbsTemplateType())) {
|
|
|
+ /*-------------------------------------质检公有引用同步--------------------------------------------*/
|
|
|
//获取当前节点对应的公有引用树下的元素表
|
|
|
- WbsTree wbsTree = wbsTreeMapper.selectOne(Wrappers.<WbsTree>lambdaQuery().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()
|
|
@@ -1874,12 +1746,13 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
.select(WbsTree::getId, WbsTree::getParentId)
|
|
|
.eq(WbsTree::getWbsId, wbsTree.getWbsId()).eq(WbsTree::getType, 2)
|
|
|
/*.eq(WbsTree::getStatus,1)*/
|
|
|
- .like(WbsTree::getAncestors, wbsTree.getId()));
|
|
|
+ .like(WbsTree::getAncestors, wbsTree.getId())
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
//获取当前项目树下的元素表 节点
|
|
|
List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
- .select(WbsTreePrivate::getType, WbsTreePrivate::getId, WbsTreePrivate::getAncestors)
|
|
|
+ .select(WbsTreePrivate::getType, WbsTreePrivate::getId, WbsTreePrivate::getAncestorsPId, WbsTreePrivate::getTreePId)
|
|
|
.eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
|
|
|
.eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
/*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
@@ -1887,23 +1760,30 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
List<WbsTreePrivate> wbsTreePrivatesProjectNodes = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(1)).collect(Collectors.toList());
|
|
|
|
|
|
List<WbsTreePrivate> wbsTreePrivatesProjectTables;
|
|
|
- if (wbsTreePrivate.getAncestors().equals("0")) {
|
|
|
+ if (wbsTreePrivate.getAncestorsPId().equals("0")) {
|
|
|
//根节点
|
|
|
wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2)).collect(Collectors.toList());
|
|
|
} else {
|
|
|
- wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2) && f.getAncestors().contains(String.valueOf(wbsTreePrivate.getId()))).collect(Collectors.toList());
|
|
|
+ wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2) && f.getAncestorsPId().contains(String.valueOf(wbsTreePrivate.getPKeyId()))).collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
//获取新增的公有元素表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());
|
|
|
+ // List<WbsTree> addPublicTables = addPublicTable.stream().filter(node ->
|
|
|
+ // wbsTreePrivatesProjectNodes.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).contains(node.getParentId())).collect(Collectors.toList());
|
|
|
|
|
|
//构造
|
|
|
- List<Long> ids = addPublicTables.stream().map(WbsTree::getId).collect(Collectors.toList());
|
|
|
+ List<Long> ids = addPublicTable.stream().map(WbsTree::getId).collect(Collectors.toList());
|
|
|
if (ids.size() > 0) {
|
|
|
List<WbsTree> resultDataList = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery().in(WbsTree::getId, ids));
|
|
|
for (WbsTree tree : resultDataList) {
|
|
@@ -1915,56 +1795,70 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
dataPrivate.setFullName(dataPrivate.getNodeName());
|
|
|
dataPrivate.setInitTableId(tree.getInitTableId().toString());
|
|
|
dataPrivate.setIsAddConceal(0);
|
|
|
-
|
|
|
+ dataPrivate.setParentId(wbsTreePrivate.getId());
|
|
|
//TODO
|
|
|
- dataPrivate.setTreePId(dataPrivate.getId());
|
|
|
+ dataPrivate.setTreePId(tree.getId());
|
|
|
//TODO
|
|
|
dataPrivate.setPId(wbsTreePrivate.getPKeyId());
|
|
|
//TODO
|
|
|
- dataPrivate.setWbsType(wbsTreePrivate.getAncestorsPId() + "," + wbsTreePrivate.getPId());
|
|
|
-
|
|
|
+ dataPrivate.setAncestorsPId(wbsTreePrivate.getAncestorsPId() + "," + dataPrivate.getPId());
|
|
|
|
|
|
insertDataPrivateList.add(dataPrivate);//新增
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- } else if (("private").equals(projectInfo.getReferenceWbsTemplateTypeMeter())) {
|
|
|
- /*-------------------------------------计量私有引用同步--------------------------------------------*/
|
|
|
+ } else if (("private").equals(projectInfo.getReferenceWbsTemplateType())) {
|
|
|
+ /*-------------------------------------质检私有引用同步--------------------------------------------*/
|
|
|
//根据wbsTreePrivate的wbsId=私有引用的pKeyId来获取引用树根节点
|
|
|
- WbsTreePrivate wbsTreePrivateRoot = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getWbsId()));
|
|
|
+ WbsTreePrivate wbsTreePrivateRoot = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
+ .eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getWbsId()));
|
|
|
+
|
|
|
+ //获取到私有模板的当前节点的子节点数据
|
|
|
|
|
|
//获取当前私有引用树的元素表信息
|
|
|
List<WbsTreePrivate> wbsTreePrivateRootTables;
|
|
|
- if (wbsTreePrivate.getAncestors().equals("0")) {
|
|
|
+ if (wbsTreePrivate.getAncestorsPId().equals("0")) {
|
|
|
//根节点
|
|
|
wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
.select(WbsTreePrivate::getId, WbsTreePrivate::getParentId, WbsTreePrivate::getPKeyId)
|
|
|
- .eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2)
|
|
|
+ .eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId())
|
|
|
+ .eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId())
|
|
|
+ .eq(WbsTreePrivate::getType, 2)
|
|
|
/*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
);
|
|
|
} else {
|
|
|
wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
.select(WbsTreePrivate::getId, WbsTreePrivate::getParentId, WbsTreePrivate::getPKeyId)
|
|
|
- .eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2)
|
|
|
+ .eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId())
|
|
|
+ .eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId())
|
|
|
+ .eq(WbsTreePrivate::getType, 2)
|
|
|
/*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
.like(WbsTreePrivate::getAncestors, wbsTreePrivate.getId()));
|
|
|
}
|
|
|
+ if(CollectionUtil.isEmpty(wbsTreePrivateRootTables)){
|
|
|
+ throw new ServiceException("私有模板无法找到此节点");
|
|
|
+ }
|
|
|
|
|
|
//获取当前项目选择的节点下的所有元素表 节点
|
|
|
List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
- .select(WbsTreePrivate::getType, WbsTreePrivate::getId, WbsTreePrivate::getAncestors)
|
|
|
- .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
+ .select(WbsTreePrivate::getType, WbsTreePrivate::getId, WbsTreePrivate::getAncestorsPId, WbsTreePrivate::getPKeyId)
|
|
|
+ .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
|
|
|
+ .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
/*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
);
|
|
|
|
|
|
List<WbsTreePrivate> wbsTreePrivatesProjectNodes = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(1)).collect(Collectors.toList());
|
|
|
List<WbsTreePrivate> wbsTreePrivatesProjectTables;
|
|
|
- if (wbsTreePrivate.getAncestors().equals("0")) {
|
|
|
+ if (wbsTreePrivate.getAncestorsPId().equals("0")) {
|
|
|
//根节点
|
|
|
wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2)).collect(Collectors.toList());
|
|
|
} else {
|
|
|
- wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2) && f.getAncestors().contains(String.valueOf(wbsTreePrivate.getId()))).collect(Collectors.toList());
|
|
|
+ try {
|
|
|
+ wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2) && f.getAncestorsPId().contains(String.valueOf(wbsTreePrivate.getPKeyId()))).collect(Collectors.toList());
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new ServiceException("祖级路径数据异常,请联系工作人员修复数据");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//获取新增的私有元素表addPrivateTable
|
|
@@ -1974,7 +1868,6 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
//判断当前新增的表在私有wbs中是否存在上级节点,存在表示可以新增,不存在表示不新增
|
|
|
List<WbsTreePrivate> addPrivateTables = addPrivateTable.stream().filter(node ->
|
|
|
wbsTreePrivatesProjectNodes.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).contains(node.getParentId())).collect(Collectors.toList());
|
|
|
-
|
|
|
//构造
|
|
|
List<Long> ids = addPrivateTables.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
|
|
|
if (ids.size() > 0) {
|
|
@@ -1994,7 +1887,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
//TODO
|
|
|
dataPrivate.setPId(wbsTreePrivate.getPKeyId());
|
|
|
//TODO
|
|
|
- dataPrivate.setWbsType(wbsTreePrivate.getAncestorsPId() + "," + wbsTreePrivate.getPId());
|
|
|
+ dataPrivate.setAncestorsPId(wbsTreePrivate.getAncestorsPId() + "," + wbsTreePrivate.getPId());
|
|
|
|
|
|
|
|
|
insertDataPrivateList.add(dataPrivate);
|
|
@@ -2002,7 +1895,323 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
+// }
|
|
|
+
|
|
|
+// if (("2").equals(wbsTreePrivate.getWbsType())) {
|
|
|
+// if (("public").equals(projectInfo.getReferenceWbsTemplateTypeTrial())) {
|
|
|
+// /*-------------------------------------试验公有引用同步--------------------------------------------*/
|
|
|
+// //获取当前节点对应的公有引用树下的元素表
|
|
|
+// WbsTree wbsTree = wbsTreeMapper.selectOne(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getId, wbsTreePrivate.getId()));
|
|
|
+// List<WbsTree> wbsTreesPublicTables;
|
|
|
+//
|
|
|
+// if (wbsTree.getAncestors().equals("0")) {
|
|
|
+// //根节点
|
|
|
+// wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery()
|
|
|
+// .select(WbsTree::getId, WbsTree::getParentId)
|
|
|
+// .eq(WbsTree::getWbsId, wbsTree.getWbsId()).eq(WbsTree::getType, 2)
|
|
|
+// /*.eq(WbsTree::getStatus, 1)*/
|
|
|
+// );
|
|
|
+// } else {
|
|
|
+// wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getWbsId, wbsTree.getWbsId())
|
|
|
+// .select(WbsTree::getId, WbsTree::getParentId)
|
|
|
+// .eq(WbsTree::getType, 2)
|
|
|
+// /*.eq(WbsTree::getStatus, 1)*/
|
|
|
+// .like(WbsTree::getAncestors, wbsTree.getId()));
|
|
|
+// }
|
|
|
+//
|
|
|
+// //获取当前项目树下的元素表 节点
|
|
|
+// List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
+// .select(WbsTreePrivate::getType, WbsTreePrivate::getId, WbsTreePrivate::getAncestorsPId)
|
|
|
+// .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
|
|
|
+// .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
+// /*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
+// );
|
|
|
+// List<WbsTreePrivate> wbsTreePrivatesProjectNodes = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(1)).collect(Collectors.toList());
|
|
|
+//
|
|
|
+// List<WbsTreePrivate> wbsTreePrivatesProjectTables;
|
|
|
+// if (wbsTreePrivate.getAncestorsPId().equals("0")) {
|
|
|
+// //根节点
|
|
|
+// wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2)).collect(Collectors.toList());
|
|
|
+// } else {
|
|
|
+// try {
|
|
|
+// wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2) && f.getAncestorsPId().contains(String.valueOf(wbsTreePrivate.getPKeyId()))).collect(Collectors.toList());
|
|
|
+// } catch (Exception e) {
|
|
|
+// throw new ServiceException("祖级路径数据异常,请联系工作人员修复数据");
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// //获取新增的公有元素表addPublicTable
|
|
|
+// List<WbsTree> addPublicTable = wbsTreesPublicTables.stream().filter(f ->
|
|
|
+// !wbsTreePrivatesProjectTables.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).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());
|
|
|
+//
|
|
|
+// //构造
|
|
|
+// List<Long> ids = addPublicTables.stream().map(WbsTree::getId).collect(Collectors.toList());
|
|
|
+// if (ids.size() > 0) {
|
|
|
+// List<WbsTree> resultDataList = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery().in(WbsTree::getId, ids));
|
|
|
+// for (WbsTree tree : resultDataList) {
|
|
|
+// WbsTreePrivate dataPrivate = BeanUtil.copyProperties(tree, WbsTreePrivate.class);
|
|
|
+// if (dataPrivate != null) {
|
|
|
+// dataPrivate.setPKeyId(SnowFlakeUtil.getId());
|
|
|
+// dataPrivate.setWbsType(wbsTreePrivate.getWbsType());
|
|
|
+// dataPrivate.setProjectId(wbsTreePrivate.getProjectId());
|
|
|
+// dataPrivate.setFullName(dataPrivate.getNodeName());
|
|
|
+// dataPrivate.setInitTableId(ObjectUtils.isNotEmpty(tree.getInitTableId()) ? tree.getInitTableId().toString() : null);
|
|
|
+// dataPrivate.setIsAddConceal(0);
|
|
|
+//
|
|
|
+// //TODO
|
|
|
+// dataPrivate.setTreePId(dataPrivate.getId());
|
|
|
+// //TODO
|
|
|
+// dataPrivate.setPId(wbsTreePrivate.getPKeyId());
|
|
|
+// //TODO
|
|
|
+// dataPrivate.setAncestorsPId(wbsTreePrivate.getAncestorsPId() + "," + wbsTreePrivate.getPId());
|
|
|
+//
|
|
|
+//
|
|
|
+// insertDataPrivateList.add(dataPrivate);//新增
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// } else if (("private").equals(projectInfo.getReferenceWbsTemplateTypeTrial())) {
|
|
|
+// /*-------------------------------------试验私有引用同步--------------------------------------------*/
|
|
|
+// //根据wbsTreePrivate的wbsId=私有引用的pKeyId来获取引用树根节点
|
|
|
+// WbsTreePrivate wbsTreePrivateRoot = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getWbsId()));
|
|
|
+//
|
|
|
+// //获取当前私有引用树的元素表信息
|
|
|
+// List<WbsTreePrivate> wbsTreePrivateRootTables;
|
|
|
+// if (wbsTreePrivate.getAncestorsPId().equals("0")) {
|
|
|
+// //根节点
|
|
|
+// wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
+// .select(WbsTreePrivate::getId, WbsTreePrivate::getParentId, WbsTreePrivate::getPKeyId)
|
|
|
+// .eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2)
|
|
|
+// /*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
+// );
|
|
|
+// } else {
|
|
|
+// wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
+// .select(WbsTreePrivate::getId, WbsTreePrivate::getParentId, WbsTreePrivate::getPKeyId)
|
|
|
+// .eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2)
|
|
|
+// /*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
+// .like(WbsTreePrivate::getAncestors, wbsTreePrivate.getId()));
|
|
|
+// }
|
|
|
+// if(CollectionUtil.isEmpty(wbsTreePrivateRootTables)){
|
|
|
+// throw new ServiceException("私有模板无法找到此节点");
|
|
|
+// }
|
|
|
+//
|
|
|
+// //获取当前项目选择的节点下的所有元素表 节点
|
|
|
+// List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
+// .select(WbsTreePrivate::getType, WbsTreePrivate::getId, WbsTreePrivate::getAncestorsPId)
|
|
|
+// .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
+// /*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
+// );
|
|
|
+//
|
|
|
+// List<WbsTreePrivate> wbsTreePrivatesProjectNodes = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(1)).collect(Collectors.toList());
|
|
|
+// List<WbsTreePrivate> wbsTreePrivatesProjectTables;
|
|
|
+// if (wbsTreePrivate.getAncestorsPId().equals("0")) {
|
|
|
+// //根节点
|
|
|
+// wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2)).collect(Collectors.toList());
|
|
|
+// } else {
|
|
|
+// try {
|
|
|
+// wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2) && f.getAncestorsPId().contains(String.valueOf(wbsTreePrivate.getPKeyId()))).collect(Collectors.toList());
|
|
|
+// } catch (Exception e) {
|
|
|
+// throw new ServiceException("祖级路径数据异常,请联系工作人员修复数据");
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// //获取新增的私有元素表addPrivateTable
|
|
|
+// List<WbsTreePrivate> addPrivateTable = wbsTreePrivateRootTables.stream().filter(f ->
|
|
|
+// !wbsTreePrivatesProjectTables.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).contains(f.getId())).collect(Collectors.toList());
|
|
|
+//
|
|
|
+// //判断当前新增的表在私有wbs中是否存在上级节点,存在表示可以新增,不存在表示不新增
|
|
|
+// List<WbsTreePrivate> addPrivateTables = addPrivateTable.stream().filter(node ->
|
|
|
+// wbsTreePrivatesProjectNodes.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).contains(node.getParentId())).collect(Collectors.toList());
|
|
|
+//
|
|
|
+// //构造
|
|
|
+// List<Long> ids = addPrivateTables.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
|
|
|
+// if (ids.size() > 0) {
|
|
|
+// List<WbsTreePrivate> resultDataList = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().in(WbsTreePrivate::getPKeyId, ids));
|
|
|
+// for (WbsTreePrivate tree : resultDataList) {
|
|
|
+// WbsTreePrivate dataPrivate = BeanUtil.copyProperties(tree, WbsTreePrivate.class);
|
|
|
+// if (dataPrivate != null) {
|
|
|
+// dataPrivate.setPKeyId(SnowFlakeUtil.getId());
|
|
|
+// dataPrivate.setWbsId(wbsTreePrivate.getWbsId());
|
|
|
+// dataPrivate.setWbsType(tree.getWbsType());
|
|
|
+// dataPrivate.setProjectId(wbsTreePrivate.getProjectId());
|
|
|
+// dataPrivate.setInitTableId(ObjectUtils.isNotEmpty(tree.getInitTableId()) ? tree.getInitTableId() : null);
|
|
|
+// dataPrivate.setIsAddConceal(0);
|
|
|
+//
|
|
|
+// //TODO
|
|
|
+// dataPrivate.setTreePId(dataPrivate.getId());
|
|
|
+// //TODO
|
|
|
+// dataPrivate.setPId(wbsTreePrivate.getPKeyId());
|
|
|
+// //TODO
|
|
|
+// dataPrivate.setAncestorsPId(wbsTreePrivate.getAncestorsPId() + "," + wbsTreePrivate.getPId());
|
|
|
+//
|
|
|
+//
|
|
|
+// insertDataPrivateList.add(dataPrivate);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+// if (("3").equals(wbsTreePrivate.getWbsType())) {
|
|
|
+// if (("public").equals(projectInfo.getReferenceWbsTemplateTypeMeter())) {
|
|
|
+// /*-------------------------------------计量公有引用同步--------------------------------------------*/
|
|
|
+// //获取当前节点对应的公有引用树下的元素表
|
|
|
+// WbsTree wbsTree = wbsTreeMapper.selectOne(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getId, wbsTreePrivate.getId()));
|
|
|
+// List<WbsTree> wbsTreesPublicTables;
|
|
|
+// if (wbsTree.getAncestors().equals("0")) {
|
|
|
+// //根节点
|
|
|
+// wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda()
|
|
|
+// .select(WbsTree::getId, WbsTree::getParentId)
|
|
|
+// .eq(WbsTree::getWbsId, wbsTree.getWbsId()).eq(WbsTree::getType, 2)
|
|
|
+// /*.eq(WbsTree::getStatus,1)*/
|
|
|
+// );
|
|
|
+// } else {
|
|
|
+// wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda()
|
|
|
+// .select(WbsTree::getId, WbsTree::getParentId)
|
|
|
+// .eq(WbsTree::getWbsId, wbsTree.getWbsId()).eq(WbsTree::getType, 2)
|
|
|
+// /*.eq(WbsTree::getStatus,1)*/
|
|
|
+// .like(WbsTree::getAncestors, wbsTree.getId()));
|
|
|
+// }
|
|
|
+//
|
|
|
+// //获取当前项目树下的元素表 节点
|
|
|
+// List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
+// .select(WbsTreePrivate::getType, WbsTreePrivate::getId, WbsTreePrivate::getAncestorsPId)
|
|
|
+// .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
|
|
|
+// .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
+// /*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
+// );
|
|
|
+// List<WbsTreePrivate> wbsTreePrivatesProjectNodes = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(1)).collect(Collectors.toList());
|
|
|
+//
|
|
|
+// List<WbsTreePrivate> wbsTreePrivatesProjectTables;
|
|
|
+// if (wbsTreePrivate.getAncestorsPId().equals("0")) {
|
|
|
+// //根节点
|
|
|
+// wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2)).collect(Collectors.toList());
|
|
|
+// } else {
|
|
|
+// try {
|
|
|
+// wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2) && f.getAncestorsPId().contains(String.valueOf(wbsTreePrivate.getPKeyId()))).collect(Collectors.toList());
|
|
|
+// } catch (Exception e) {
|
|
|
+// throw new ServiceException("祖级路径数据异常,请联系工作人员修复数据");
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// //获取新增的公有元素表addPublicTable
|
|
|
+// List<WbsTree> addPublicTable = wbsTreesPublicTables.stream().filter(f ->
|
|
|
+// !wbsTreePrivatesProjectTables.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).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());
|
|
|
+//
|
|
|
+// //构造
|
|
|
+// List<Long> ids = addPublicTables.stream().map(WbsTree::getId).collect(Collectors.toList());
|
|
|
+// if (ids.size() > 0) {
|
|
|
+// List<WbsTree> resultDataList = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery().in(WbsTree::getId, ids));
|
|
|
+// for (WbsTree tree : resultDataList) {
|
|
|
+// WbsTreePrivate dataPrivate = BeanUtil.copyProperties(tree, WbsTreePrivate.class);
|
|
|
+// if (dataPrivate != null) {
|
|
|
+// dataPrivate.setPKeyId(SnowFlakeUtil.getId());
|
|
|
+// dataPrivate.setWbsType(wbsTreePrivate.getWbsType());
|
|
|
+// dataPrivate.setProjectId(wbsTreePrivate.getProjectId());
|
|
|
+// dataPrivate.setFullName(dataPrivate.getNodeName());
|
|
|
+// dataPrivate.setInitTableId(tree.getInitTableId().toString());
|
|
|
+// dataPrivate.setIsAddConceal(0);
|
|
|
+//
|
|
|
+// //TODO
|
|
|
+// dataPrivate.setTreePId(dataPrivate.getId());
|
|
|
+// //TODO
|
|
|
+// dataPrivate.setPId(wbsTreePrivate.getPKeyId());
|
|
|
+// //TODO
|
|
|
+// dataPrivate.setAncestorsPId(wbsTreePrivate.getAncestorsPId() + "," + wbsTreePrivate.getPId());
|
|
|
+//
|
|
|
+//
|
|
|
+// insertDataPrivateList.add(dataPrivate);//新增
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// } else if (("private").equals(projectInfo.getReferenceWbsTemplateTypeMeter())) {
|
|
|
+// /*-------------------------------------计量私有引用同步--------------------------------------------*/
|
|
|
+// //根据wbsTreePrivate的wbsId=私有引用的pKeyId来获取引用树根节点
|
|
|
+// WbsTreePrivate wbsTreePrivateRoot = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getWbsId()));
|
|
|
+//
|
|
|
+// //获取当前私有引用树的元素表信息
|
|
|
+// List<WbsTreePrivate> wbsTreePrivateRootTables;
|
|
|
+// if (wbsTreePrivate.getAncestorsPId().equals("0")) {
|
|
|
+// //根节点
|
|
|
+// wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
+// .select(WbsTreePrivate::getId, WbsTreePrivate::getParentId, WbsTreePrivate::getPKeyId)
|
|
|
+// .eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2)
|
|
|
+// /*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
+// );
|
|
|
+// } else {
|
|
|
+// wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
+// .select(WbsTreePrivate::getId, WbsTreePrivate::getParentId, WbsTreePrivate::getPKeyId)
|
|
|
+// .eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2)
|
|
|
+// /*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
+// .like(WbsTreePrivate::getAncestorsPId, wbsTreePrivate.getPId()));
|
|
|
+// }
|
|
|
+//
|
|
|
+// //获取当前项目选择的节点下的所有元素表 节点
|
|
|
+// List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
+// .select(WbsTreePrivate::getType, WbsTreePrivate::getId, WbsTreePrivate::getAncestorsPId)
|
|
|
+// .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
+// /*.eq(WbsTreePrivate::getStatus, 1)*/
|
|
|
+// );
|
|
|
+//
|
|
|
+// List<WbsTreePrivate> wbsTreePrivatesProjectNodes = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(1)).collect(Collectors.toList());
|
|
|
+// List<WbsTreePrivate> wbsTreePrivatesProjectTables;
|
|
|
+// if (wbsTreePrivate.getAncestorsPId().equals("0")) {
|
|
|
+// //根节点
|
|
|
+// wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2)).collect(Collectors.toList());
|
|
|
+// } else {
|
|
|
+// try {
|
|
|
+// wbsTreePrivatesProjectTables = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(2) && f.getAncestorsPId().contains(String.valueOf(wbsTreePrivate.getPKeyId()))).collect(Collectors.toList());
|
|
|
+// } catch (Exception e) {
|
|
|
+// throw new ServiceException("祖级路径数据异常,请联系工作人员修复数据");
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// //获取新增的私有元素表addPrivateTable
|
|
|
+// List<WbsTreePrivate> addPrivateTable = wbsTreePrivateRootTables.stream().filter(f ->
|
|
|
+// !wbsTreePrivatesProjectTables.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).contains(f.getId())).collect(Collectors.toList());
|
|
|
+//
|
|
|
+// //判断当前新增的表在私有wbs中是否存在上级节点,存在表示可以新增,不存在表示不新增
|
|
|
+// List<WbsTreePrivate> addPrivateTables = addPrivateTable.stream().filter(node ->
|
|
|
+// wbsTreePrivatesProjectNodes.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).contains(node.getParentId())).collect(Collectors.toList());
|
|
|
+//
|
|
|
+// //构造
|
|
|
+// List<Long> ids = addPrivateTables.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
|
|
|
+// if (ids.size() > 0) {
|
|
|
+// List<WbsTreePrivate> resultDataList = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().in(WbsTreePrivate::getPKeyId, ids));
|
|
|
+// for (WbsTreePrivate tree : resultDataList) {
|
|
|
+// WbsTreePrivate dataPrivate = BeanUtil.copyProperties(tree, WbsTreePrivate.class);
|
|
|
+// if (dataPrivate != null) {
|
|
|
+// dataPrivate.setPKeyId(SnowFlakeUtil.getId());
|
|
|
+// dataPrivate.setWbsId(wbsTreePrivate.getWbsId());
|
|
|
+// dataPrivate.setWbsType(tree.getWbsType());
|
|
|
+// dataPrivate.setProjectId(wbsTreePrivate.getProjectId());
|
|
|
+// dataPrivate.setInitTableId(tree.getInitTableId());
|
|
|
+// dataPrivate.setIsAddConceal(0);
|
|
|
+//
|
|
|
+// //TODO
|
|
|
+// dataPrivate.setTreePId(dataPrivate.getId());
|
|
|
+// //TODO
|
|
|
+// dataPrivate.setPId(wbsTreePrivate.getPKeyId());
|
|
|
+// //TODO
|
|
|
+// dataPrivate.setAncestorsPId(wbsTreePrivate.getAncestorsPId() + "," + wbsTreePrivate.getPId());
|
|
|
+//
|
|
|
+//
|
|
|
+// insertDataPrivateList.add(dataPrivate);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
//重置html路径
|
|
|
if (!insertDataPrivateList.isEmpty()) {
|
|
|
try {
|
|
@@ -3190,7 +3399,6 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
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");
|
|
@@ -3405,4 +3613,56 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 20250414-lhb-新增
|
|
|
+ * 创建祖级路径
|
|
|
+ * <p>
|
|
|
+ * 该方法用于构建给定节点的祖先路径标识符(PId)字符串
|
|
|
+ * 它通过追溯节点的父节点,直到达到根节点或满足特定条件为止
|
|
|
+ *
|
|
|
+ * @param node WbsTreeContract类型的节点,表示需要构建路径的起始节点
|
|
|
+ * @param nodeMap 一个映射,其键为节点ID,值为WbsTreeContract类型的节点对象,用于快速查找节点
|
|
|
+ * @return 返回一个字符串,表示构建的祖先路径标识符序列,以逗号分隔
|
|
|
+ */
|
|
|
+ private String createAncestorsPId(WbsTreePrivate node, Map<Long, WbsTreePrivate> nodeMap) {
|
|
|
+ // 初始化路径列表,用于存储祖先节点的ID
|
|
|
+ List<Long> path = new ArrayList<>();
|
|
|
+ // 从给定的节点开始
|
|
|
+ WbsTreePrivate current = node;
|
|
|
+ // 初始化访问集合,用于检测循环引用
|
|
|
+ Set<Long> visited = new HashSet<>();
|
|
|
+
|
|
|
+ while (true) {
|
|
|
+ // 检查当前节点是否为根节点或无效节点
|
|
|
+ if (current == null || current.getPId() == null ||
|
|
|
+ current.getPId() == 0 || current.getPId().equals(current.getPKeyId())) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检测循环引用
|
|
|
+ if (visited.contains(current.getPId())) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ // 将当前节点的ID添加到已访问集合中
|
|
|
+ visited.add(current.getPKeyId());
|
|
|
+
|
|
|
+ // 从映射中获取当前节点的父节点
|
|
|
+ current = nodeMap.get(current.getPId());
|
|
|
+ // 如果父节点存在,则将其ID添加到路径列表的开头
|
|
|
+ if (current != null) {
|
|
|
+ path.add(0, current.getPKeyId());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 安全限制,防止路径过长导致性能问题
|
|
|
+ if (path.size() > 50) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 将根节点ID(0)添加到路径的最前面,表示路径的起点
|
|
|
+ path.add(0, 0L);
|
|
|
+ // 将路径列表转换为字符串并返回
|
|
|
+ return String.join(",", path.stream().map(String::valueOf).toArray(String[]::new));
|
|
|
+ }
|
|
|
}
|