From fac835bcb2a398e14ac24d12686ff7e80cbe9012 Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Thu, 26 Jun 2025 18:44:41 +0800 Subject: [PATCH] =?UTF-8?q?demand:=20=20=E5=AE=9A=E6=97=B6=E6=89=AB?= =?UTF-8?q?=E6=8F=8F=E6=BC=8F=E7=BB=84=E6=89=B9=E6=AC=A1=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?treeId=20committer:=20heyu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erp/emis/domain/EmisTransPlanRule.java | 5 +++- .../erp/emis/service/EmisBaseService.java | 26 +++++++++++-------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTransPlanRule.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTransPlanRule.java index 6a26f23e8..d20303fc0 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTransPlanRule.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTransPlanRule.java @@ -25,8 +25,11 @@ public class EmisTransPlanRule extends BaseEntity { /** id */ private Long id; + /** tree唯一id */ + private String treeId; + /** 父id */ - private Long parentId; + private String parentId; /** 祖先节点 */ private String ancestors; diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java index 26aad2504..7bdb02ee9 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java @@ -4126,7 +4126,7 @@ public class EmisBaseService { } } - // 递归设置父ID和祖先节点ID + // 递归设置父ID和祖先节点ID(以treeId为准) for (EmisTransPlanRule root : result) { setParentAndAncestors(root, null, ""); } @@ -4141,23 +4141,20 @@ public class EmisBaseService { * @param parentId 父节点ID * @param ancestors 祖先节点ID字符串 */ - private void setParentAndAncestors(EmisTransPlanRule node, Long parentId, String ancestors) { + private void setParentAndAncestors(EmisTransPlanRule node, String parentId, String ancestors) { if (node == null) { return; } - // 设置父ID node.setParentId(parentId); // 设置祖先节点ID node.setAncestors(ancestors); - // 处理子节点,子节点的祖先包含当前节点和当前节点的所有祖先 if (node.getChildren() != null && !node.getChildren().isEmpty()) { - String childAncestors = ancestors.isEmpty() ? node.getId().toString() : ancestors + "," + node.getId(); - + String childAncestors = ancestors.isEmpty() ? node.getTreeId() : ancestors + "," + node.getTreeId(); for (EmisTransPlanRule child : node.getChildren()) { - setParentAndAncestors(child, node.getId(), childAncestors); + setParentAndAncestors(child, node.getTreeId(), childAncestors); } } } @@ -4217,6 +4214,9 @@ public class EmisBaseService { EmisTransPlanRule copy = new EmisTransPlanRule(); BeanUtils.copyProperties(source, copy); + // 为每个新节点生成唯一treeId + copy.setTreeId(com.xdadan.erp.common.utils.idgen.UUID.fastUUID().toString()); + // 递归复制子节点 if (source.getChildren() != null) { List copiedChildren = new ArrayList<>(); @@ -4573,6 +4573,10 @@ public class EmisBaseService { allNodeMatched = true; break; } + list = list.stream() + .collect(Collectors.collectingAndThen( + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(EmisTransPlanRule::getId))), + ArrayList::new)); if (list.size() > filterRules.size()) { filterRules = list; } @@ -4591,15 +4595,15 @@ public class EmisBaseService { return false; } EmisTransPlanRule filterRule = filterRules.get(0); - Long ancestor; + String ancestor; if (StringUtils.isEmpty(filterRule.getAncestors())) { - ancestor = filterRule.getId(); + ancestor = filterRule.getTreeId(); } else { String[] ancestors = filterRule.getAncestors().split(","); - ancestor = Long.valueOf(ancestors[0]); + ancestor = ancestors[0]; } - List rules = ruleList.stream().filter(i -> i.getId().equals(ancestor)) + List rules = ruleList.stream().filter(i -> i.getTreeId().equals(ancestor)) .collect(Collectors.toList()); EmisTransPlanRule rule = rules.get(0); setMissRecords(missRecords, rule, filterRules, waybill);