From f0012ac56371b6d270a0d64cf7a80315215d4b94 Mon Sep 17 00:00:00 2001 From: wuweihua <88888888> Date: Tue, 3 Nov 2026 18:13:52 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A1=E8=B4=B9=E9=87=8D=E8=A6=86=E7=9B=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/PrcOrderBillServiceImpl.java | 42 ++++++++++++++----- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcOrderBillServiceImpl.java b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcOrderBillServiceImpl.java index e95ecec3..2b65f2ab 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcOrderBillServiceImpl.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcOrderBillServiceImpl.java @@ -207,7 +207,11 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService assertOrderBillEditable(request.getOrderNo()); PrcOrderBill existed = orderBillMapper.selectPrcOrderBillByOrderNo(request.getOrderNo()); BigDecimal systemWeight = request.getWeight(); - BigDecimal calcWeight = resolveCalcWeight(existed, systemWeight); + // Upstream Oracle sync: always use TAB_ORDER weight (same overwrite as weight/charge_weight). + // Local rebill / manual charge_weight edit: keep resolveCalcWeight preference. + BigDecimal calcWeight = isUpstreamSyncRequest(request) + ? systemWeight + : resolveCalcWeight(existed, systemWeight); // Three-side sum rule disabled: upstream already applies it. // Manual charge_weight wins; otherwise apply active biz rules (e.g. three-side). // if (!isManualChargeWeight(existed)) @@ -1755,7 +1759,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService } bill.setBillKey(billKey); bill.setOrderNo(orderNo); - // Upstream header overwrite (no validate); charge_weight kept via resolvePersistChargeWeight below. + // Upstream header overwrite (no validate). applyUpstreamBillHeaderFields(bill, request); Long customerId = request.getCustomerId(); if (customerId == null && result != null) @@ -1798,7 +1802,8 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService { bill.setCountryName(result.getCountryName()); } - // weight = system/original; charge_weight = effective (may be manual override) + // weight = system/original; charge_weight follows weight on upstream sync, + // otherwise may keep manual override via resolvePersistChargeWeight. bill.setWeight(weight); bill.setBizDate(bizDate); bill.setTmsId(request.getTmsId() == null ? null : Long.valueOf(request.getTmsId())); @@ -1816,7 +1821,14 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService bill.setWeightMax(result.getWeightMax()); bill.setWeightLabel(result.getWeightLabel()); bill.setEffectiveDate(result.getEffectiveDate()); - bill.setChargeWeight(resolvePersistChargeWeight(weight, result.getChargeWeight())); + if (isUpstreamSyncRequest(request)) + { + bill.setChargeWeight(weight); + } + else + { + bill.setChargeWeight(resolvePersistChargeWeight(weight, result.getChargeWeight())); + } Integer billingFailStatus = result.getBillingFailStatus(); if (billingFailStatus == null) { @@ -2797,6 +2809,12 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService payBillFeeMapper.selectByBillId(bill.getBillId())); } + /** Upstream Oracle row present => sync/billing path that overwrites weight & charge_weight together. */ + private static boolean isUpstreamSyncRequest(TmsPriceBillRequest request) + { + return request != null && request.getUpstreamRow() != null && !request.getUpstreamRow().isEmpty(); + } + /** charge_weight differs from weight => treated as manual override. */ private static boolean isManualChargeWeight(PrcOrderBill bill) { @@ -3011,14 +3029,11 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService applyProductCodeMapping(bill, request); Long customerId = resolveCustomerIdByCode(request.getCustomerCode(), bill.getCustomerId()); bill.setCustomerId(customerId == null ? Long.valueOf(0L) : customerId); - // System weight overwrite; charge_weight keeps existing manual override when present. + // Order-source sync: overwrite weight and charge_weight the same way from upstream. if (request.getWeight() != null) { bill.setWeight(request.getWeight()); - if (creating || bill.getChargeWeight() == null) - { - bill.setChargeWeight(request.getWeight()); - } + bill.setChargeWeight(request.getWeight()); } if (creating) { @@ -3131,8 +3146,12 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService { bill.setCustomerActiveStatus(BillCustomerActiveStatus.ACTIVE.getCode()); } - // Soft-fail snapshot: overwrite system weight; do not touch charge_weight (keep current logic). + // Soft-fail snapshot: overwrite weight and charge_weight the same way from upstream. bill.setWeight(request.getWeight()); + if (request.getWeight() != null) + { + bill.setChargeWeight(request.getWeight()); + } Date bizDate = StringUtils.isEmpty(request.getBizDate()) ? new Date() : resolveBizDate(request.getBizDate()); bill.setBizDate(bizDate); if (StringUtils.isEmpty(bill.getCurrency())) @@ -3191,7 +3210,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService } /** - * Locked by AR bill: overwrite upstream header + ext; keep amounts / fees / charge_weight. + * Locked by AR bill: overwrite upstream header + ext + weight/charge_weight; keep amounts / fees. */ private void persistFailedSnapshotWhenLocked(PrcOrderBill bill, TmsPriceBillRequest request, int billingFailStatus, String errorMessage) @@ -3203,6 +3222,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService if (request.getWeight() != null) { bill.setWeight(request.getWeight()); + bill.setChargeWeight(request.getWeight()); } } applyBillingFailText(bill, billingFailStatus, errorMessage);