فهرست منبع

模板引用手动选择节点

fangpy 1 سال پیش
والد
کامیت
8d32e8a931

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

@@ -71,10 +71,6 @@ public class ZhcxItpTemplateServiceImpl extends ServiceImpl<ZhcxItpTemplateDao,
                         if(StringUtils.isNotBlank(copyNodesDo.getPath())){
                             pids.addAll(Arrays.asList(copyNodesDo.getPath().split(",")));
                         }
-                        // 获取小构件关联的大构件 jnp add
-                        if(StringUtils.isNotBlank(copyNodesDo.getPnodeid())){
-                            pids.add(copyNodesDo.getPnodeid());
-                        }
                         // 获取所有子节点
                         for (ZhcxItpTemplateNodesDo tempNodesDo : tempNodesDos) {
                             if(StringUtils.isNotBlank(tempNodesDo.getPath())){
@@ -84,26 +80,62 @@ public class ZhcxItpTemplateServiceImpl extends ServiceImpl<ZhcxItpTemplateDao,
                             }
                         }
                     }
+                    // 前端选中的节点的所有父节点
                     if(pids != null && pids.size()>0){
                         List<ZhcxItpTemplateNodesDo> pidNodesDos = zhcxItpTemplateNodesService.list(
                                 new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().in(ZhcxItpTemplateNodesDo::getId,pids));
-                        // 补充获取没选中漏掉的大构件 jnp add
-                        List<String> bigpids = new ArrayList<>();
-                        for (ZhcxItpTemplateNodesDo pidNodesDo : pidNodesDos) {
-                            if (StringUtils.isNotBlank(pidNodesDo.getPnodeid())) {
-                                bigpids.add(pidNodesDo.getPnodeid());
+                        if(pidNodesDos != null){
+                            allCopyNodes.addAll(pidNodesDos);
+                        }
+                    }
+                    // 小构件关联的大构件
+                    Set<String> bigPids = new HashSet<>();
+                    // 大构件关联的小构件
+                    Set<String> bigChildids = new HashSet<>();
+                    for (ZhcxItpTemplateNodesDo copyNodesDo : allCopyNodes) {
+                        // 获取小构件关联的大构件
+                        if(StringUtils.isNotBlank(copyNodesDo.getPnodeid())){
+                            bigPids.add(copyNodesDo.getPnodeid());
+                        }
+                        // 获取所有子节点
+                        for (ZhcxItpTemplateNodesDo tempNodesDo : tempNodesDos) {
+                            // 判断是否有小构件归属当前大构件
+                            if(StringUtils.isNotBlank(tempNodesDo.getPnodeid()) && tempNodesDo.getPnodeid().equals(copyNodesDo.getId())){
+                                bigChildids.add(tempNodesDo.getId());
                             }
                         }
-                        if(bigpids != null && bigpids.size()>0) {
-                            List<ZhcxItpTemplateNodesDo> bigpidNodesDos = zhcxItpTemplateNodesService.list(
-                                    new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().in(ZhcxItpTemplateNodesDo::getId,bigpids));
-                            if(bigpidNodesDos != null){
-                                allCopyNodes.addAll(bigpidNodesDos);
+                    }
+
+                    // 小构件关联的大构件父节点,以及归属小构件的所有子节点报验点
+                    Set<String> gsgjids = new HashSet<>();
+                    gsgjids.addAll(bigPids);
+                    gsgjids.addAll(bigChildids);
+                    List<ZhcxItpTemplateNodesDo> gsgjNodesDos = new ArrayList<>();
+                    Set<String> bigPidsPids = new HashSet<>();
+                    for (ZhcxItpTemplateNodesDo tempNodesDo : tempNodesDos) {
+                        // 归属小构件的所有子节点报验点
+                        for (String bigChildid : bigChildids) {
+                            if(StringUtils.isNotBlank(tempNodesDo.getPath())){
+                                if(tempNodesDo.getPath().contains(bigChildid)){
+                                    gsgjNodesDos.add(tempNodesDo);
+                                }
                             }
                         }
-                        //补充获取没选中的大构件end jnp add
-                        if(pidNodesDos != null){
-                            allCopyNodes.addAll(pidNodesDos);
+                        // 小构件关联的大构件父节点
+                        if(gsgjids.contains(tempNodesDo.getId())){
+                            bigPidsPids.addAll(Arrays.asList(tempNodesDo.getPath().split(",")));
+                        }
+                    }
+                    gsgjids.addAll(bigPidsPids);
+                    if(gsgjids != null && gsgjids.size()>0){
+                        gsgjNodesDos.addAll(zhcxItpTemplateNodesService.list(
+                                new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().in(ZhcxItpTemplateNodesDo::getId,gsgjids)));
+                    }
+                    // 整体去重
+                    for (ZhcxItpTemplateNodesDo gsgjNodesDo : gsgjNodesDos) {
+                        List<ZhcxItpTemplateNodesDo> hasNodes = allCopyNodes.stream().filter(v -> v.getId().equals(gsgjNodesDo.getId())).collect(Collectors.toList());
+                        if(hasNodes == null || hasNodes.size() == 0){
+                            allCopyNodes.add(gsgjNodesDo);
                         }
                     }
                 }