|
@@ -1543,68 +1543,102 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
* @param projectId
|
|
|
* @return
|
|
|
*/
|
|
|
- public List<WbsTreePrivate> syncNodeTable(String primaryKeyId, String projectId) {
|
|
|
+ public boolean 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> templateNodes = new ArrayList<>();
|
|
|
+
|
|
|
//结果集
|
|
|
List<WbsTreePrivate> addData = new ArrayList<>();
|
|
|
+ List<WbsTreePrivate> editData = new ArrayList<>();
|
|
|
//质检
|
|
|
//当前节点引用的模板为公有模板
|
|
|
+
|
|
|
if (("public").equals(projectInfo.getReferenceWbsTemplateType())) {
|
|
|
+ //当前节点对应的模板节点信息
|
|
|
+ WbsTree wbsTreeTemplate = wbsTreeMapper.selectOne(Wrappers.<WbsTree>lambdaQuery()
|
|
|
+ .eq(WbsTree::getId, wbsTreePrivate.getTreePId()));
|
|
|
|
|
|
//模板节点的所有子节点信息
|
|
|
List<WbsTree> wbsTrees = null;
|
|
|
//当前节点信息
|
|
|
- List<WbsTreePrivate> wbsTreePrivates = null;
|
|
|
+
|
|
|
//获取模板中当前节点的子节点的数据------------------------------------------------------------------------------------------------------------------------
|
|
|
LambdaQueryWrapper<WbsTree> wrapperTree = Wrappers.lambdaQuery();
|
|
|
- wrapperTree.eq(WbsTree::getWbsId, wbsTreePrivate.getWbsId()).eq(WbsTree::getIsDeleted, 0);
|
|
|
+ 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);
|
|
|
+ //3、获取需要新增的节点或者表单节点信息 以及他们对应的父级节点信息--------------------------------------------------------------------------------------------
|
|
|
+ if (CollectionUtil.isEmpty(wbsTrees)) {
|
|
|
+ throw new ServiceException("模板节点未找到");
|
|
|
+ }
|
|
|
+ templateNodes = BeanUtil.copyProperties(wbsTrees, WbsTreePrivate.class);
|
|
|
|
|
|
- //2、获取当前节点的子节点的数据------------------------------------------------------------------------------------------------------------------------
|
|
|
+ } else if (("private").equals(projectInfo.getReferenceWbsTemplateType())) {
|
|
|
+ //根据wbsTreePrivate的wbsId=私有引用的pKeyId来获取引用树根节点
|
|
|
+ WbsTreePrivate wbsTreePrivateRoot = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
+ .eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getWbsId()));
|
|
|
+
|
|
|
+ //获取当前选中节点与私有模板对应的节点信息 父级模板项目的当前选中节点
|
|
|
+ wbsTreePrivateRoot = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
+ .eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId())
|
|
|
+ .eq(WbsTreePrivate::getTreePId, wbsTreePrivate.getTreePId()));
|
|
|
+
|
|
|
+ //获取模板中当前节点的子节点的数据------------------------------------------------------------------------------------------------------------------------
|
|
|
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()));
|
|
|
+ wrapperPrivate.eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId())
|
|
|
+ .eq(WbsTreePrivate::getIsDeleted, 0);
|
|
|
+ //判断如果为顶级顶级节点
|
|
|
+ if (wbsTreePrivate.getTreePId() != 0) {
|
|
|
+ wrapperPrivate.apply("FIND_IN_SET({0},ancestors_p_id)", wbsTreePrivateRoot.getPId());
|
|
|
}
|
|
|
- wbsTreePrivates = baseMapper.selectList(wrapperPrivate);
|
|
|
+ templateNodes = baseMapper.selectList(wrapperPrivate);
|
|
|
+ }
|
|
|
|
|
|
- if (wbsTreePrivates.isEmpty()) {
|
|
|
- throw new ServiceException("无法找到模板对应节点,请检查模板节点");
|
|
|
- }
|
|
|
- //3、获取需要新增的节点或者表单节点信息 以及他们对应的父级节点信息--------------------------------------------------------------------------------------------
|
|
|
+ if (CollectionUtil.isEmpty(templateNodes)) {
|
|
|
+ throw new ServiceException("未找到模板对应节点");
|
|
|
+ }
|
|
|
|
|
|
|
|
|
- //获取id 和 tree_p_id 组成的集合
|
|
|
- Set<Long> ids = wbsTreePrivates.stream().map(WbsTreePrivate::getTreePId).collect(Collectors.toSet());
|
|
|
+ //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());
|
|
|
+ }
|
|
|
+ List<WbsTreePrivate> wbsTreePrivates = baseMapper.selectList(wrapperPrivate);
|
|
|
|
|
|
+ if (wbsTreePrivates.isEmpty()) {
|
|
|
+ throw new ServiceException("无法找到模板对应节点,请检查模板节点");
|
|
|
+ }
|
|
|
+ //获取id 和 tree_p_id 组成的集合
|
|
|
+ Set<Long> ids = wbsTreePrivates.stream().map(WbsTreePrivate::getTreePId).collect(Collectors.toSet());
|
|
|
+ //3.1筛选出需要新增的节点
|
|
|
+ List<WbsTreePrivate> addPrivateNodes = templateNodes.stream()
|
|
|
+ .filter(f -> !ids.contains(f.getId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
|
- //3.1筛选出需要新增的节点
|
|
|
- List<WbsTree> addNodes = wbsTrees.stream()
|
|
|
- .filter(f -> !ids.contains(f.getId()))
|
|
|
- .collect(Collectors.toList());
|
|
|
+ //3.2筛选出需要修改的节点
|
|
|
+ List<WbsTreePrivate> editPrivateNodes = templateNodes.stream()
|
|
|
+ .filter(f -> ids.contains(f.getId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
|
- //3.2筛选出需要修改的节点
|
|
|
- List<WbsTree> editNodes = wbsTrees.stream()
|
|
|
- .filter(f -> ids.contains(f.getId()))
|
|
|
- .collect(Collectors.toList());
|
|
|
|
|
|
+ //------------------------------------------------新增-------------------------------------------------------------------------
|
|
|
+ if (CollectionUtil.isNotEmpty(addPrivateNodes)) {
|
|
|
//将要新增的项目节点----------------------------------------------------------------------------------------------------
|
|
|
- List<WbsTreePrivate> addPrivateNodes = BeanUtil.copyProperties(addNodes, WbsTreePrivate.class);
|
|
|
-
|
|
|
|
|
|
//先给每个新增节点赋唯一id,项目id,父级id
|
|
|
addPrivateNodes.forEach(f -> f.setPKeyId(SnowFlakeUtil.getId()));
|
|
@@ -1640,12 +1674,56 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
addData.addAll(addPrivateNodes);
|
|
|
}
|
|
|
|
|
|
+ //------------------------------------------------编辑-------------------------------------------------------------------------
|
|
|
+ /**
|
|
|
+ * 编辑情况下
|
|
|
+ * type == 1 修改基础信息
|
|
|
+ * type == 2
|
|
|
+ */
|
|
|
+ if (CollectionUtil.isNotEmpty(editPrivateNodes)) {
|
|
|
+ Map<Long, WbsTreePrivate> editMap = wbsTreePrivates.stream().collect(Collectors.toMap(WbsTreePrivate::getId, Function.identity()));
|
|
|
+ for (WbsTreePrivate editNode : editPrivateNodes) {
|
|
|
+ //获取旧节点
|
|
|
+ WbsTreePrivate oldNode = editMap.get(editNode.getId());
|
|
|
+ //
|
|
|
+ if (oldNode == null) {
|
|
|
+ throw new ServiceException("数据问题");
|
|
|
+ }
|
|
|
|
|
|
- //设置html_url----------------------------------------------------------------------------------------------------------
|
|
|
+ oldNode.setNodeType(editNode.getNodeType());
|
|
|
+ oldNode.setNodeName(editNode.getNodeName());
|
|
|
+ oldNode.setSort(editNode.getSort());
|
|
|
+ oldNode.setRemark(editNode.getRemark());
|
|
|
+ oldNode.setInitTableId(editNode.getInitTableId());
|
|
|
+ oldNode.setExcelId(editNode.getExcelId());
|
|
|
+ oldNode.setIsExistForm(editNode.getIsExistForm());
|
|
|
+ oldNode.setHtmlUrl(editNode.getHtmlUrl());
|
|
|
+ oldNode.setFillRate(editNode.getFillRate());
|
|
|
|
|
|
- if (addData.isEmpty()) {
|
|
|
- return null;
|
|
|
- } else {
|
|
|
+
|
|
|
+ //普通节点
|
|
|
+ if (editNode.getType() == 1) {
|
|
|
+ //判断是否被修改过
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ //元素表单节点
|
|
|
+ if (editNode.getType() == 2) {
|
|
|
+ //判断是否关联过清表
|
|
|
+ if(oldNode.getIsLinkTable() == 2){
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ //是否需要编辑元素表单数据???
|
|
|
+ editData.add(oldNode);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //设置html_url----------------------------------------------------------------------------------------------------------
|
|
|
+ //如果有新增的数据 旧设置html_url
|
|
|
+ if (CollectionUtil.isNotEmpty(addData)) {
|
|
|
try {
|
|
|
String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
|
|
|
Set<String> urls = new HashSet<>();
|
|
@@ -1668,37 +1746,48 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
} catch (Exception e) {
|
|
|
throw new ServiceException("重置表单路径错误");
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- //查询出当前项目所有节点---------------------------------------------------------------------------------------------------
|
|
|
- List<WbsTreePrivate> addList = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
- .eq(WbsTreePrivate::getIsDeleted, 0)
|
|
|
- .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()));
|
|
|
-
|
|
|
- addList.addAll(addData);
|
|
|
- //组合祖级路径 根据当前选中节点为开始
|
|
|
- Map<Long, WbsTreePrivate> collect = addList.stream().collect(Collectors.toMap(WbsTreePrivate::getPKeyId, Function.identity()));
|
|
|
+ //查询出当前项目所有节点---------------------------------------------------------------------------------------------------
|
|
|
+ List<WbsTreePrivate> addList = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
+ .eq(WbsTreePrivate::getIsDeleted, 0)
|
|
|
+ .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()));
|
|
|
|
|
|
- addData.forEach(node -> {
|
|
|
- String correctAncestors = createAncestorsPId(node, collect);
|
|
|
- node.setAncestorsPId(correctAncestors);
|
|
|
- });
|
|
|
+ addList.addAll(addData);
|
|
|
+ //组合祖级路径 根据当前选中节点为开始
|
|
|
+ Map<Long, WbsTreePrivate> collect = addList.stream().collect(Collectors.toMap(WbsTreePrivate::getPKeyId, Function.identity()));
|
|
|
|
|
|
- //新增-----------------------------------------------------------------------------------------------------------------
|
|
|
- List<List<WbsTreePrivate>> partition = Lists.partition(addData, 1000);
|
|
|
- for (List<WbsTreePrivate> wbsTreePrivates : partition) {
|
|
|
- boolean b = this.insertBatch(wbsTreePrivates, 1000);
|
|
|
- //如果失败 -- - - - - 继续执行 或者把当前节点的p_key_id 记录到某个地方 方便后续处理
|
|
|
- if (!b) {
|
|
|
- List<Long> collect1 = addData.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
|
|
|
- //这里可以保存到数据库指定错误日志表
|
|
|
+ addData.forEach(node -> {
|
|
|
+ String correctAncestors = createAncestorsPId(node, collect);
|
|
|
+ node.setAncestorsPId(correctAncestors);
|
|
|
+ });
|
|
|
|
|
|
- throw new ServiceException("新增节点失败,请联系后台人员");
|
|
|
+ //新增-----------------------------------------------------------------------------------------------------------------
|
|
|
+ List<List<WbsTreePrivate>> partition = Lists.partition(addData, 1000);
|
|
|
+ for (List<WbsTreePrivate> data : partition) {
|
|
|
+ //单个批次一个事务,只会回滚当前批次数据
|
|
|
+ boolean b = this.insertBatch(data, 1000);
|
|
|
+ //如果失败 -- - - - - 继续执行 或者把当前节点的p_key_id 记录到某个地方 方便后续处理
|
|
|
+ if (!b) {
|
|
|
+ List<Long> collect1 = addData.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
|
|
|
+ //这里可以保存到数据库指定错误日志表
|
|
|
+
|
|
|
+ throw new ServiceException("新增节点失败,请联系后台人员");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (CollectionUtil.isNotEmpty(editData)) {
|
|
|
+
|
|
|
+ //修改-----------------------------------------------------------------------------------------------------------------
|
|
|
+ List<List<WbsTreePrivate>> edits = Lists.partition(editData, 1000);
|
|
|
+ for (List<WbsTreePrivate> data : edits) {
|
|
|
+ //单个批次一个事务,只会回滚当前批次数据
|
|
|
+ boolean b = this.saveOrUpdateBatch(data, 1000);
|
|
|
+ //如果失败 -- - - - - 继续执行 或者把当前节点的p_key_id 记录到某个地方 方便后续处理
|
|
|
+ if (!b) {
|
|
|
+ //这里可以保存到数据库指定错误日志表
|
|
|
+ throw new ServiceException("修改节点失败,请联系后台人员");
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- return addData;
|
|
|
+ return true;
|
|
|
} else {
|
|
|
throw new ServiceException("未传指定参数,请联系后台人员");
|
|
|
}
|