|
@@ -1536,7 +1536,13 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ /**
|
|
|
+ * 多节点同步
|
|
|
+ *
|
|
|
+ * @param primaryKeyId
|
|
|
+ * @param projectId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
public List<WbsTreePrivate> syncNodeTable(String primaryKeyId, String projectId) {
|
|
|
|
|
|
if (StringUtils.isNotEmpty(primaryKeyId)) {
|
|
@@ -1553,97 +1559,89 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
//结果集
|
|
|
List<WbsTreePrivate> addData = new ArrayList<>();
|
|
|
//质检
|
|
|
- if (("1").equals(wbsTreePrivate.getWbsType())) {
|
|
|
- //当前节点引用的模板为公有模板
|
|
|
- if (("public").equals(projectInfo.getReferenceWbsTemplateType())) {
|
|
|
-
|
|
|
- //模板节点的所有子节点信息
|
|
|
- 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 {
|
|
|
- //获取列明
|
|
|
- String fieldName = LambdaUtil.getFieldName(WbsTree::getAncestors);
|
|
|
- wbsTrees = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery()
|
|
|
- .eq(WbsTree::getIsDeleted, 0)
|
|
|
- .apply("FIND_IN_SET({0}," + fieldName + ")", wbsTreeTemplate.getId()));
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- //2、获取当前节点下的节点信息
|
|
|
- if (wbsTreePrivate.getTreePId() == 0) {
|
|
|
- wbsTreePrivates = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
- .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
- .eq(WbsTreePrivate::getIsDeleted, 0));
|
|
|
- } else {
|
|
|
- //获取列明
|
|
|
- wbsTreePrivates = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
- .eq(WbsTreePrivate::getIsDeleted, 0)
|
|
|
- .apply("FIND_IN_SET({0},ancestors_p_id)", wbsTreePrivate.getPId()));
|
|
|
- }
|
|
|
+ //当前节点引用的模板为公有模板
|
|
|
+ if (("public").equals(projectInfo.getReferenceWbsTemplateType())) {
|
|
|
|
|
|
- if (wbsTreePrivates.isEmpty()) {
|
|
|
- throw new ServiceException("无法找到模板对应节点,请检查模板节点");
|
|
|
- }
|
|
|
- //3、获取需要新增的节点或者表单节点信息 以及他们对应的父级节点信息
|
|
|
+ //模板节点的所有子节点信息
|
|
|
+ List<WbsTree> wbsTrees = null;
|
|
|
+ //当前节点信息
|
|
|
+ List<WbsTreePrivate> wbsTreePrivates = null;
|
|
|
+ //获取模板中当前节点的子节点的数据------------------------------------------------------------------------------------------------------------------------
|
|
|
+ LambdaQueryWrapper<WbsTree> wrapperTree = Wrappers.lambdaQuery();
|
|
|
+ wrapperTree.eq(WbsTree::getWbsId, wbsTreePrivate.getWbsId()).eq(WbsTree::getIsDeleted, 0);
|
|
|
+ if (wbsTreeTemplate.getParentId() != 0) {
|
|
|
+ wrapperTree.apply("FIND_IN_SET({0},ancestors)", wbsTreeTemplate.getId());
|
|
|
+ }
|
|
|
+ wbsTrees = wbsTreeMapper.selectList(wrapperTree);
|
|
|
|
|
|
+ //2、获取当前节点的子节点的数据------------------------------------------------------------------------------------------------------------------------
|
|
|
+ LambdaQueryWrapper<WbsTreePrivate> wrapperPrivate = Wrappers.lambdaQuery();
|
|
|
+ wrapperPrivate.eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId()).eq(WbsTreePrivate::getIsDeleted, 0);
|
|
|
+ if (wbsTreePrivate.getTreePId() == 0) {
|
|
|
+ wrapperPrivate.apply("FIND_IN_SET({0},ancestors_p_id)", wbsTreePrivate.getPId()));
|
|
|
+ }
|
|
|
+ wbsTreePrivates = baseMapper.selectList(wrapperPrivate);
|
|
|
|
|
|
- //获取id 和 tree_p_id 组成的集合
|
|
|
- Set<Long> ids = wbsTreePrivates.stream()
|
|
|
- .flatMap(p -> Stream.of(p.getId(), p.getTreePId()))
|
|
|
- .collect(Collectors.toSet());
|
|
|
+ if (wbsTreePrivates.isEmpty()) {
|
|
|
+ throw new ServiceException("无法找到模板对应节点,请检查模板节点");
|
|
|
+ }
|
|
|
+ //3、获取需要新增的节点或者表单节点信息 以及他们对应的父级节点信息--------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
- //3.1筛选出需要新增的节点
|
|
|
- List<WbsTree> addNodes = wbsTrees.stream()
|
|
|
- .filter(f -> !ids.contains(f.getId()))
|
|
|
- .collect(Collectors.toList());
|
|
|
+ //获取id 和 tree_p_id 组成的集合
|
|
|
+ Set<Long> ids = wbsTreePrivates.stream().map(WbsTreePrivate::getTreePId).collect(Collectors.toSet());
|
|
|
|
|
|
- //将要新增的项目节点
|
|
|
- List<WbsTreePrivate> addPrivateNodes = BeanUtil.copyProperties(addNodes, WbsTreePrivate.class);
|
|
|
|
|
|
+ //3.1筛选出需要新增的节点
|
|
|
+ List<WbsTree> addNodes = wbsTrees.stream()
|
|
|
+ .filter(f -> !ids.contains(f.getId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
|
- //先给每个新增节点赋唯一id,项目id,父级id
|
|
|
- addPrivateNodes.forEach(f -> f.setPKeyId(SnowFlakeUtil.getId()));
|
|
|
+ //3.2筛选出需要修改的节点
|
|
|
+ List<WbsTree> editNodes = wbsTrees.stream()
|
|
|
+ .filter(f -> ids.contains(f.getId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
|
+ //将要新增的项目节点----------------------------------------------------------------------------------------------------
|
|
|
+ List<WbsTreePrivate> addPrivateNodes = BeanUtil.copyProperties(addNodes, WbsTreePrivate.class);
|
|
|
|
|
|
- for (WbsTreePrivate addPrivateNode : addPrivateNodes) {
|
|
|
- if (addPrivateNode.getParentId() == 0) {
|
|
|
- continue;
|
|
|
- }
|
|
|
|
|
|
- //查询出当前模板节点的父节点 去获取对应项目节点 如果父节点为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;
|
|
|
- }
|
|
|
+ //先给每个新增节点赋唯一id,项目id,父级id
|
|
|
+ addPrivateNodes.forEach(f -> f.setPKeyId(SnowFlakeUtil.getId()));
|
|
|
|
|
|
- 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());
|
|
|
+ //给每一个节点的父级id
|
|
|
+ for (WbsTreePrivate addPrivateNode : addPrivateNodes) {
|
|
|
+ if (addPrivateNode.getParentId() == 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
+ //查询出当前模板节点的父节点 去获取对应项目节点 如果父节点为0就跳过
|
|
|
+ List<WbsTreePrivate> addPrivateParentNodes = wbsTreePrivates.stream().filter(f -> f.getTreePId().equals(addPrivateNode.getParentId())).collect(Collectors.toList());
|
|
|
+ //如果没有数据 就表示这条数据的父节点也时新增节点 就需要从新增节点集合中找父级节点
|
|
|
+ if (addPrivateParentNodes.isEmpty()) {
|
|
|
+ addPrivateParentNodes = addPrivateNodes.stream().filter(f -> f.getId().equals(addPrivateNode.getParentId())).collect(Collectors.toList());
|
|
|
}
|
|
|
- addData.addAll(addPrivateNodes);
|
|
|
+ //如果现在还找不到当前节点的父节点就表示数据有问题
|
|
|
+ if (addPrivateParentNodes.isEmpty()) {
|
|
|
+ //TODO
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //当前新增节点的父节点
|
|
|
+ WbsTreePrivate parent = addPrivateParentNodes.get(0);
|
|
|
+
|
|
|
+ addPrivateNode.setPId(parent.getPKeyId());
|
|
|
+ addPrivateNode.setWbsType(wbsTreePrivate.getWbsType());
|
|
|
+ addPrivateNode.setIsAddConceal(0);
|
|
|
+ addPrivateNode.setProjectId(wbsTreePrivate.getProjectId());
|
|
|
+ //TODO 后续如果把p_key_id改成了id做 唯一id
|
|
|
+ addPrivateNode.setTreePId(addPrivateNode.getId());
|
|
|
+ //后续如果使用id做当前表主键 则先在赋值treePid之后再去赋值id addPrivateNode.setId(SnowFlakeUtil.getId());
|
|
|
}
|
|
|
+ addData.addAll(addPrivateNodes);
|
|
|
}
|
|
|
|
|
|
|
|
|
- //通过递归的方式去获取祖级路径
|
|
|
+ //设置html_url----------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
if (addData.isEmpty()) {
|
|
|
return null;
|
|
@@ -1673,7 +1671,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
}
|
|
|
|
|
|
|
|
|
- //查询出当前项目所有节点
|
|
|
+ //查询出当前项目所有节点---------------------------------------------------------------------------------------------------
|
|
|
List<WbsTreePrivate> addList = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
.eq(WbsTreePrivate::getIsDeleted, 0)
|
|
|
.eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()));
|
|
@@ -1687,15 +1685,40 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
node.setAncestorsPId(correctAncestors);
|
|
|
});
|
|
|
|
|
|
-
|
|
|
+ //新增-----------------------------------------------------------------------------------------------------------------
|
|
|
List<List<WbsTreePrivate>> partition = Lists.partition(addData, 1000);
|
|
|
for (List<WbsTreePrivate> wbsTreePrivates : partition) {
|
|
|
- this.insertBatch(wbsTreePrivates, 1000);
|
|
|
+ boolean b = this.insertBatch(wbsTreePrivates, 1000);
|
|
|
+ //如果失败 -- - - - - 继续执行 或者把当前节点的p_key_id 记录到某个地方 方便后续处理
|
|
|
+ if (!b) {
|
|
|
+ List<Long> collect1 = addData.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
|
|
|
+ //这里可以保存到数据库指定错误日志表
|
|
|
+
|
|
|
+ throw new ServiceException("新增节点失败,请联系后台人员");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return addData;
|
|
|
+ } else {
|
|
|
+ throw new ServiceException("未传指定参数,请联系后台人员");
|
|
|
}
|
|
|
- return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 同步指定节点数据到合同段
|
|
|
+ */
|
|
|
+ public void syncNodeTable(Long primaryKeyId) {
|
|
|
+ //1、新增
|
|
|
+ //2、修改排序、基础信息和地址
|
|
|
+ if (primaryKeyId == null) {
|
|
|
+ //获取当前节点对应节点信息
|
|
|
+ WbsTreePrivate wbsTreePrivate = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, primaryKeyId));
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取当前节点下的数据
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|