demand: 漏组批次扫描寄件网点为无锡、柯桥、南京时多个网点可互换

committer: heyu
This commit is contained in:
aike 2025-07-02 10:29:19 +08:00
parent da189a7ef8
commit 047bba7d4a

View File

@ -4113,7 +4113,9 @@ public class EmisBaseService {
// 添加所有子节点到父节点的children列表中
for (EmisTransPlanRule child : children) {
if (!parent.getChildren().contains(child)) {
String siteCode1 = child.getStartSiteCode() + "," + child.getNextSiteCode();
String siteCode2 = parent.getStartSiteCode() + "," + parent.getNextSiteCode();
if (!parent.getChildren().contains(child) && !compareSiteCodes(siteCode1, siteCode2)) {
parent.getChildren().add(child);
}
}
@ -4582,16 +4584,34 @@ public class EmisBaseService {
private boolean checkBranchMatch(List<EmisTransPlanRule> ruleList, List<EmisTmsSiteBatch> waybillBatches,
EmisWaybill waybill, List<EmisTmsSiteBatchMiss> missRecords) {
// 根据waybill的startSiteCode或sendSiteCode过滤ruleList
String sendSiteCode = waybill.getSendSiteCode();
String startSiteCode = waybill.getStartSiteCode();
List<EmisTransPlanRule> filteredRuleList;
if (StringUtils.isNotBlank(waybill.getStartSiteCode())) {
if ("51000".equals(sendSiteCode) || "51200".equals(sendSiteCode)) {
filteredRuleList = ruleList.stream()
.filter(rule -> StringUtils.equals(rule.getStartSiteCode(), waybill.getStartSiteCode()))
.filter(rule -> "51000".equals(rule.getStartSiteCode())
|| "51200".equals(rule.getStartSiteCode()))
.collect(Collectors.toList()); // 无锡,张家港
} else if ("57502".equals(sendSiteCode) || "57501".equals(sendSiteCode) || "57100".equals(sendSiteCode)) {
filteredRuleList = ruleList.stream()
.filter(rule -> "57502".equals(rule.getStartSiteCode())
|| "57501".equals(rule.getStartSiteCode()) || "57100".equals(rule.getStartSiteCode()))
.collect(Collectors.toList()); // 柯桥市场部、柯桥分拨中心、杭州
} else if ("25001".equals(sendSiteCode) || "25000".equals(sendSiteCode)) {
filteredRuleList = ruleList.stream()
.filter(rule -> "25001".equals(rule.getStartSiteCode())
|| "25000".equals(rule.getStartSiteCode()))
.collect(Collectors.toList()); // 南京市场部、南京分拨中心
} else if (StringUtils.isNotBlank(startSiteCode)) {
filteredRuleList = ruleList.stream()
.filter(rule -> StringUtils.equals(rule.getStartSiteCode(), startSiteCode))
.collect(Collectors.toList());
} else {
filteredRuleList = ruleList.stream()
.filter(rule -> StringUtils.equals(rule.getStartSiteCode(), waybill.getSendSiteCode()))
.filter(rule -> StringUtils.equals(rule.getStartSiteCode(), sendSiteCode))
.collect(Collectors.toList());
}
ruleList = filteredRuleList;
// 检查当前节点是否匹配
boolean allNodeMatched = false;
@ -4659,6 +4679,26 @@ public class EmisBaseService {
return suppliers1.equals(suppliers2);
}
/**
* 比较两个网点代码字符串是否包含相同的网点(忽略顺序)
*
* @param siteCode1 第一个网点代码字符串
* @param siteCode2 第二个网点代码字符串
* @return 如果包含相同的网点返回true,否则返回false
*/
private boolean compareSiteCodes(String siteCode1, String siteCode2) {
if (siteCode1 == null || siteCode2 == null) {
return siteCode1 == siteCode2;
}
Set<String> siteCodes1 = Arrays.stream(siteCode1.split(","))
.map(String::trim)
.collect(Collectors.toSet());
Set<String> siteCodes2 = Arrays.stream(siteCode2.split(","))
.map(String::trim)
.collect(Collectors.toSet());
return siteCodes1.equals(siteCodes2);
}
private boolean checkRule(EmisTransPlanRule rule, List<EmisTmsSiteBatch> waybillBatches,
List<EmisTransPlanRule> list) {
// 检查当前节点是否匹配