From ed5eea160e095656f5039598cdf05ca9d898249c Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Wed, 25 Jun 2025 17:27:18 +0800 Subject: [PATCH] =?UTF-8?q?demand:=20=20=E7=BB=84=E6=A0=91=E8=A7=84?= =?UTF-8?q?=E5=88=99=E9=87=8D=E6=9E=84=EF=BC=8C=E8=99=9A=E6=8B=9F=E5=8D=95?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=A6=99=E6=B8=AF-=E7=BC=85=E7=94=B8?= =?UTF-8?q?=E5=BF=AB=E9=80=92=E9=80=BB=E8=BE=91=E3=80=82=20committer:=20he?= =?UTF-8?q?yu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erp/emis/service/EmisBaseService.java | 50 ++++++++++++++++--- .../impl/EmisTmsSiteBatchServiceImpl.java | 2 +- 2 files changed, 45 insertions(+), 7 deletions(-) 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 9752c1d6d..c8fe54284 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 @@ -2844,7 +2844,7 @@ public class EmisBaseService { } } - if ("002".equals(waybill.getTransLineType()) && StringUtil.isNotBlank(waybill.getVirtualRemark())) { + if (("078".equals(waybill.getTransLineType()) || "002".equals(waybill.getTransLineType())) && StringUtil.isNotBlank(waybill.getVirtualRemark())) { Date sendDate = waybill.getSendDate(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date limitDate = null; @@ -4026,9 +4026,47 @@ public class EmisBaseService { continue; } - // 按productType分组 - Map> groupByProductType = lineRules.stream() - .collect(Collectors.groupingBy(EmisTransPlanRule::getProductType)); + // 按productType分组(支持productType和productTypeName为逗号分隔的多个类型,且一一对应,且每个rule只保留一个type和typeName) + Map> groupByProductType = new HashMap<>(); + for (EmisTransPlanRule rule : lineRules) { + if (rule.getProductType() != null) { + String[] types = rule.getProductType().split(","); + String[] typeNames = rule.getProductTypeName() != null ? rule.getProductTypeName().split(",") : new String[0]; + for (int i = 0; i < types.length; i++) { + String type = types[i].trim(); + if (!type.isEmpty()) { + EmisTransPlanRule newRule = new EmisTransPlanRule(); + BeanUtils.copyProperties(rule, newRule); + newRule.setProductType(type); + if (i < typeNames.length) { + newRule.setProductTypeName(typeNames[i].trim()); + } else { + newRule.setProductTypeName(null); + } + groupByProductType.computeIfAbsent(type, k -> new ArrayList<>()).add(newRule); + } + } + } + } + // 分组内去重(lineCode、productType、startSiteCode、nextSiteCode、supplierCode、startDate、endDate都相同只保留一条) + for (Map.Entry> entry : groupByProductType.entrySet()) { + List rules = entry.getValue(); + Set uniqueKeys = new HashSet<>(); + List deduped = new ArrayList<>(); + for (EmisTransPlanRule rule : rules) { + String key = (rule.getLineCode() == null ? "" : rule.getLineCode()) + "|" + + (rule.getProductType() == null ? "" : rule.getProductType()) + "|" + + (rule.getStartSiteCode() == null ? "" : rule.getStartSiteCode()) + "|" + + (rule.getNextSiteCode() == null ? "" : rule.getNextSiteCode()) + "|" + + (rule.getSupplierCode() == null ? "" : rule.getSupplierCode()) + "|" + + (rule.getStartDate() == null ? "" : rule.getStartDate().toString()) + "|" + + (rule.getEndDate() == null ? "" : rule.getEndDate().toString()); + if (uniqueKeys.add(key)) { + deduped.add(rule); + } + } + entry.setValue(deduped); + } // 处理每个productType分组 for (Map.Entry> productEntry : groupByProductType.entrySet()) { @@ -4840,7 +4878,7 @@ public class EmisBaseService { Map scanDatePromItem = new HashMap<>(); scanDatePromItem.put("billCode", emisWaybillSave.getBillCode()); - if ("002".equals(emisWaybillSave.getTransLineType())) { + if ("078".equals(emisWaybillSave.getTransLineType()) || "002".equals(emisWaybillSave.getTransLineType())) { scanDatePromItem.put("problemType", "173"); scanDatePromItem.put("remark", "出口虚拟面单"); } else { @@ -4891,7 +4929,7 @@ public class EmisBaseService { if (emisWaybillSave.getMasterBillCode().equals(emisWaybillSave.getBillCode())) { throw new EmisBizError(EmisBizErrorType.FAIL, "运单号主单号不能相同"); } - if (!"002".equals(emisWaybillSave.getTransLineType()) && !"012".equals(emisWaybillSave.getTransLineType()) + if (!"078".equals(emisWaybillSave.getTransLineType()) && !"002".equals(emisWaybillSave.getTransLineType()) && !"012".equals(emisWaybillSave.getTransLineType()) && !"014".equals(emisWaybillSave.getTransLineType())) { throw new EmisBizError(EmisBizErrorType.FAIL, "虚拟单只支持线路为缅甸快递/缅甸快递进口/柬埔寨快递进口"); } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsSiteBatchServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsSiteBatchServiceImpl.java index b57996409..1a3132002 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsSiteBatchServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsSiteBatchServiceImpl.java @@ -150,7 +150,7 @@ public class EmisTmsSiteBatchServiceImpl extends EmisBaseService implements IEmi emisTransPlanRule.setProductType(emisWaybill.getProductType()); List list = emisTransPlanRuleMapper.checkTransPlanRule(emisTransPlanRule); if (CollectionUtil.isEmpty(list)) { - throw new EmisBizError(EmisBizErrorType.FAIL, "组批次起始网点、下一网点、供应商与规则不匹配"); + throw new EmisBizError(EmisBizErrorType.FAIL, emisWaybill.getBillCode()+"组批次起始网点、下一网点、供应商与规则不匹配"); } }