diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTransPlanRuleServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTransPlanRuleServiceImpl.java index 149021d12..47293286f 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTransPlanRuleServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTransPlanRuleServiceImpl.java @@ -151,6 +151,7 @@ public class EmisTransPlanRuleServiceImpl extends EmisBaseService implements IEm trees = trees.stream().filter(i -> lineStartSiteCode.equals(i.getStartSiteCode())) .collect(Collectors.toList()); } + trees = deduplicate(trees); return trees; } @@ -629,4 +630,46 @@ public class EmisTransPlanRuleServiceImpl extends EmisBaseService implements IEm globalVisited.add(node.getId()); } + private boolean isSupplierCodeEqual(String s1, String s2) { + if (s1 == null || s2 == null) + return s1 == s2; + Set set1 = new HashSet<>(Arrays.asList(s1.split(","))); + Set set2 = new HashSet<>(Arrays.asList(s2.split(","))); + return set1.equals(set2); + } + + private boolean hasProductTypeIntersection(String p1, String p2) { + if (p1 == null || p2 == null) + return false; + Set set1 = new HashSet<>(Arrays.asList(p1.split(","))); + Set set2 = new HashSet<>(Arrays.asList(p2.split(","))); + set1.retainAll(set2); + return !set1.isEmpty(); + } + + private boolean isDuplicate(EmisTransPlanRule a, EmisTransPlanRule b) { + return Objects.equals(a.getLineCode(), b.getLineCode()) + && Objects.equals(a.getStartSiteCode(), b.getStartSiteCode()) + && Objects.equals(a.getNextSiteCode(), b.getNextSiteCode()) + && isSupplierCodeEqual(a.getSupplierCode(), b.getSupplierCode()) + && Objects.equals(a.getProductType(), b.getProductType()); + } + + private List deduplicate(List trees) { + List result = new ArrayList<>(); + for (EmisTransPlanRule rule : trees) { + boolean duplicate = false; + for (EmisTransPlanRule exist : result) { + if (isDuplicate(rule, exist)) { + duplicate = true; + break; + } + } + if (!duplicate) { + result.add(rule); + } + } + return result; + } + } \ No newline at end of file