Преглед на файлове

模板引用手动选择节点

fangpy преди 1 година
родител
ревизия
cb591dc238

+ 104 - 35
business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxItpTemplateServiceImpl.java

@@ -48,57 +48,126 @@ public class ZhcxItpTemplateServiceImpl extends ServiceImpl<ZhcxItpTemplateDao,
         if(StringUtils.isBlank(copyAddTemplate.getTargetTmpId())){
             throw new CustomException("数据有问题,ID没有值");
         }
-        if(copyAddTemplate.getTmpIds() != null && copyAddTemplate.getTmpIds().size()>0){
-            // 查询所有引用子节点,复制给新的ITP地图
-            List<ZhcxItpTemplateNodesDo> copyNodesDos = zhcxItpTemplateNodesService.list(
-                    new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().in(ZhcxItpTemplateNodesDo::getItpid,copyAddTemplate.getTmpIds()));
-            if(copyNodesDos != null && copyNodesDos.size()>0){
-                // 获取当前ITP地图模板所有子节点
-                List<ZhcxItpTemplateNodesDo> targetNodesDos = zhcxItpTemplateNodesService.list(
-                        new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().eq(ZhcxItpTemplateNodesDo::getItpid,copyAddTemplate.getTargetTmpId()));
-                // 过滤出当前ITP地图模板所有根节点
-                List<ZhcxItpTemplateNodesDo> rootTargetNodes = targetNodesDos.stream().filter(v -> v.getPid().equals("-1")).collect(Collectors.toList());
-                // 存放老ID和新ID的Map,方便后面的归属大构件ID替换
-                Map<String,String> oldNewId = new HashMap<>();
-                for (ZhcxItpTemplateNodesDo copyNodesDo : copyNodesDos) {
-                    // 重复的已存在的根节点
-                    ZhcxItpTemplateNodesDo repeatNode = null;
-                    if(copyNodesDo.getPid().equals("-1") && copyNodesDo.getNodename() != null){
-                        for (ZhcxItpTemplateNodesDo rootTargetNode : rootTargetNodes) {
-                            if(rootTargetNode.getNodename() != null && copyNodesDo.getNodename().equals(rootTargetNode.getNodename())){
-                                repeatNode = rootTargetNode;
-                                break;
+        // 判断是否选择引用模板节点
+        if(copyAddTemplate.getTmpNodeIds() != null && copyAddTemplate.getTmpNodeIds().size()>0){
+            // 引用的节点没有改变不需要处理
+            if(copyAddTemplate.getTmpNodeIds().size() == 1 && "-1".equals(copyAddTemplate.getTmpNodeIds().get(0))){
+                return;
+            }else{
+                List<ZhcxItpTemplateNodesDo> allCopyNodes = new ArrayList<>();
+                // 根据引用模板ID,获取所有相关节点
+                List<ZhcxItpTemplateNodesDo> tempNodesDos = zhcxItpTemplateNodesService.list(
+                        new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().in(ZhcxItpTemplateNodesDo::getItpid,copyAddTemplate.getTmpIds()));
+                // 引用的节点做了改动,则直接覆盖当前引用节点
+                zhcxItpTemplateNodesService.remove(new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().eq(ZhcxItpTemplateNodesDo::getItpid,copyAddTemplate.getTargetTmpId()));
+                List<ZhcxItpTemplateNodesDo> copyNodesDos = zhcxItpTemplateNodesService.list(
+                        new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().in(ZhcxItpTemplateNodesDo::getId,copyAddTemplate.getTmpNodeIds()));
+                // 根据ID获取所有父子节点ID
+                if(copyNodesDos != null && copyNodesDos.size()>0){
+                    allCopyNodes.addAll(copyNodesDos);
+                    List<String> pids = new ArrayList<>();
+                    for (ZhcxItpTemplateNodesDo copyNodesDo : copyNodesDos) {
+                        // 获取所有父节点
+                        if(StringUtils.isNotBlank(copyNodesDo.getPath())){
+                            pids.addAll(Arrays.asList(copyNodesDo.getPath().split(",")));
+                        }
+                        // 获取所有子节点
+                        for (ZhcxItpTemplateNodesDo tempNodesDo : tempNodesDos) {
+                            if(StringUtils.isNotBlank(tempNodesDo.getPath())){
+                                if(tempNodesDo.getPath().contains(copyNodesDo.getId())){
+                                    allCopyNodes.add(tempNodesDo);
+                                }
                             }
                         }
                     }
-                    // 重复的阶段(即根节点),则不需要插入,只需要插入当前根节点所有子节点
-                    if(repeatNode != null){
-                        oldNewId.put(copyNodesDo.getId(),repeatNode.getId());
+                    if(pids != null && pids.size()>0){
+                        List<ZhcxItpTemplateNodesDo> pidNodesDos = zhcxItpTemplateNodesService.list(
+                                new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().in(ZhcxItpTemplateNodesDo::getId,pids));
+                        if(pidNodesDos != null){
+                            allCopyNodes.addAll(pidNodesDos);
+                        }
                     }
-                    // 无重复的设置新ID,并加入待保存的列表
-                    else{
+                }
+                if(allCopyNodes != null && allCopyNodes.size()>0){
+                    // 存放老ID和新ID的Map,方便后面的归属大构件ID替换
+                    Map<String,String> oldNewId = new HashMap<>();
+                    for (ZhcxItpTemplateNodesDo copyNodesDo : allCopyNodes) {
                         String newId = SecurityUtil.getUUID();
                         oldNewId.put(copyNodesDo.getId(),newId);
                         // 设置新的ID
                         copyNodesDo.setId(newId);
                         toCopySaveNodes.add(copyNodesDo);
                     }
+                    // 替换相关ID
+                    for (ZhcxItpTemplateNodesDo copyNodesDo : toCopySaveNodes) {
+                        // 设置新的ITP地图ID
+                        copyNodesDo.setItpid(copyAddTemplate.getTargetTmpId());
+                        // 设置新的归属大构件ID
+                        if(StringUtils.isNotBlank(copyNodesDo.getPnodeid())){
+                            copyNodesDo.setPnodeid(oldNewId.get(copyNodesDo.getPnodeid()));
+                        }
+                        // 设置新的父节点
+                        if(oldNewId.containsKey(copyNodesDo.getPid())){
+                            copyNodesDo.setPid(oldNewId.get(copyNodesDo.getPid()));
+                        }
+                    }
                 }
-                // 替换相关ID
-                for (ZhcxItpTemplateNodesDo copyNodesDo : toCopySaveNodes) {
-                    // 设置新的ITP地图ID
-                    copyNodesDo.setItpid(copyAddTemplate.getTargetTmpId());
-                    // 设置新的归属大构件ID
-                    if(StringUtils.isNotBlank(copyNodesDo.getPnodeid())){
-                        copyNodesDo.setPnodeid(oldNewId.get(copyNodesDo.getPnodeid()));
+            }
+        }else{
+            if(copyAddTemplate.getTmpIds() != null && copyAddTemplate.getTmpIds().size()>0){
+                // 查询所有引用子节点,复制给新的ITP地图
+                List<ZhcxItpTemplateNodesDo> copyNodesDos = zhcxItpTemplateNodesService.list(
+                        new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().in(ZhcxItpTemplateNodesDo::getItpid,copyAddTemplate.getTmpIds()));
+                if(copyNodesDos != null && copyNodesDos.size()>0){
+                    // 获取当前ITP地图模板所有子节点
+                    List<ZhcxItpTemplateNodesDo> targetNodesDos = zhcxItpTemplateNodesService.list(
+                            new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().eq(ZhcxItpTemplateNodesDo::getItpid,copyAddTemplate.getTargetTmpId()));
+                    // 过滤出当前ITP地图模板所有根节点
+                    List<ZhcxItpTemplateNodesDo> rootTargetNodes = targetNodesDos.stream().filter(v -> v.getPid().equals("-1")).collect(Collectors.toList());
+                    // 存放老ID和新ID的Map,方便后面的归属大构件ID替换
+                    Map<String,String> oldNewId = new HashMap<>();
+                    for (ZhcxItpTemplateNodesDo copyNodesDo : copyNodesDos) {
+                        // 重复的已存在的根节点
+                        ZhcxItpTemplateNodesDo repeatNode = null;
+                        if(copyNodesDo.getPid().equals("-1") && copyNodesDo.getNodename() != null){
+                            for (ZhcxItpTemplateNodesDo rootTargetNode : rootTargetNodes) {
+                                if(rootTargetNode.getNodename() != null && copyNodesDo.getNodename().equals(rootTargetNode.getNodename())){
+                                    repeatNode = rootTargetNode;
+                                    break;
+                                }
+                            }
+                        }
+                        // 重复的阶段(即根节点),则不需要插入,只需要插入当前根节点所有子节点
+                        if(repeatNode != null){
+                            oldNewId.put(copyNodesDo.getId(),repeatNode.getId());
+                        }
+                        // 无重复的设置新ID,并加入待保存的列表
+                        else{
+                            String newId = SecurityUtil.getUUID();
+                            oldNewId.put(copyNodesDo.getId(),newId);
+                            // 设置新的ID
+                            copyNodesDo.setId(newId);
+                            toCopySaveNodes.add(copyNodesDo);
+                        }
                     }
-                    // 设置新的父节点
-                    if(oldNewId.containsKey(copyNodesDo.getPid())){
-                        copyNodesDo.setPid(oldNewId.get(copyNodesDo.getPid()));
+                    // 替换相关ID
+                    for (ZhcxItpTemplateNodesDo copyNodesDo : toCopySaveNodes) {
+                        // 设置新的ITP地图ID
+                        copyNodesDo.setItpid(copyAddTemplate.getTargetTmpId());
+                        // 设置新的归属大构件ID
+                        if(StringUtils.isNotBlank(copyNodesDo.getPnodeid())){
+                            copyNodesDo.setPnodeid(oldNewId.get(copyNodesDo.getPnodeid()));
+                        }
+                        // 设置新的父节点
+                        if(oldNewId.containsKey(copyNodesDo.getPid())){
+                            copyNodesDo.setPid(oldNewId.get(copyNodesDo.getPid()));
+                        }
                     }
                 }
             }
         }
+
+
         // 保存数据
         if(toCopySaveNodes != null && toCopySaveNodes.size()>0){
             // 保存最终数据

+ 2 - 0
business-entity/src/main/java/com/rongwei/bsentity/vo/CopyAddTemplateVo.java

@@ -10,5 +10,7 @@ public class CopyAddTemplateVo {
 
     private List<String> tmpIds;
 
+    private List<String> tmpNodeIds;
+
     private List<String> tmpNames;
 }