From 29b846017b2ff2845f37e48c7222b297840b8d9f Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Wed, 23 Sep 2026 14:49:19 +0800 Subject: [PATCH] =?UTF-8?q?:zap:=20=E5=9B=BA=E5=AE=9A=E9=87=91=E9=A2=9D?= =?UTF-8?q?=E4=B8=8E=E9=87=8C=E7=A8=8B=E7=B1=BB=E8=AE=A1=E8=B4=B9=E8=B7=B3?= =?UTF-8?q?=E8=BF=87=E6=95=B0=E9=87=8F=E5=8D=95=E4=BD=8D=E5=8C=B9=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 按车辆、固定金额、按公里/吨公里等计费要素不再要求货物数量单位一致。 Co-authored-by: Cursor --- .../ReceivablePayableDetailServiceImpl.java | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ReceivablePayableDetailServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ReceivablePayableDetailServiceImpl.java index c3d4771..81e8778 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ReceivablePayableDetailServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/ReceivablePayableDetailServiceImpl.java @@ -1113,21 +1113,47 @@ public class ReceivablePayableDetailServiceImpl * 费用生成规则命中: * 1. 货物需满足匹配规则(始发/目的/货类/货名) * 2. 普通计费要素还要求货物数量单位与计费单位一致 - * 3. 按里程、按吨·公里按运单里程(×重量)另行计算,不校验数量单位 + * 3. 按里程/按公里、按吨·公里/按吨公里、按车辆、固定金额不依赖货物数量单位,不校验数量单位 */ private boolean matchesBillingRule(Map raw, Map rule, Waybill feeWaybill) { if (!matchesRule(raw, feeWaybill)) { return false; } String element = stringValue(rule, "billingElement", ""); - if (isMileageBasedElement(element)) { + if (skipsQuantityUnitMatch(element)) { return true; } return matchesBillingUnit(rule, feeWaybill); } private boolean isMileageBasedElement(String element) { - return "按里程".equals(element) || "按吨·公里".equals(element); + String normalized = normalizeBillingElement(element); + return "按里程".equals(normalized) + || "按公里".equals(normalized) + || "按吨公里".equals(normalized); + } + + /** + * 不计货物数量单位的计费要素:里程类按运单里程计算;按车辆/固定金额按整单(量=1)计费。 + */ + private boolean skipsQuantityUnitMatch(String element) { + String normalized = normalizeBillingElement(element); + return isMileageBasedElement(normalized) + || "按车辆".equals(normalized) + || "固定金额(整单一口价)".equals(normalized) + || "固定金额".equals(normalized); + } + + /** 统一计费要素文案,兼容「按公里 / 按吨公里 / 按吨·公里」等写法 */ + private String normalizeBillingElement(String element) { + if (element == null) { + return ""; + } + return element.trim() + .replace("·", "") + .replace(".", "") + .replace(".", "") + .replace(" ", ""); } private boolean matchesBillingUnit(Map rule, Waybill feeWaybill) {