LHB 3 сар өмнө
parent
commit
4ea63c8942

+ 101 - 78
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -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));
+
+
+        }
+
+        //获取当前节点下的数据
+
     }