Kaynağa Gözat

订单金额bug修复

ZHOUTD 6 gün önce
ebeveyn
işleme
0fe2467e27

+ 13 - 11
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/OtcTradeOrderServiceImpl.java

@@ -2787,8 +2787,10 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             // 订单金额
             TradeOrderTotalVO summary = createVO.getSummary();
             BigDecimal orderMoney = ObjectUtil.defaultIfNull(summary.getOrderMoney(), BigDecimal.ZERO);
+            BigDecimal oldPayAmount = ObjectUtil.defaultIfNull(tradeOrderDO.getPayAmount(), BigDecimal.ZERO);
+            BigDecimal oldFreeAmount = ObjectUtil.defaultIfNull(tradeOrderDO.getFreeAmount(), BigDecimal.ZERO);
             BigDecimal policyAmount = policyList == null
-                    ? ObjectUtil.defaultIfNull(tradeOrderDO.getFreeAmount(), BigDecimal.ZERO)
+                    ? oldFreeAmount
                     : policyList.stream()
                             .map(TradeOrderPolicyReqVO::getAmount)
                             .filter(Objects::nonNull)
@@ -2798,10 +2800,10 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             BigDecimal realAmount = orderMoney.subtract(effectivePolicyAmount);
             Long discountId = summary.getDiscountId();
             shipTradeOrderCreateReqVO.setAmount(orderMoney);
-            BigDecimal oldPayAmount = ObjectUtil.defaultIfNull(tradeOrderDO.getPayAmount(), BigDecimal.ZERO);
-            BigDecimal oldFreeAmount = ObjectUtil.defaultIfNull(tradeOrderDO.getFreeAmount(), BigDecimal.ZERO);
-            // 修改订单时只保存待审核的政策,不提前修改优惠金额和实际金额
-            shipTradeOrderCreateReqVO.setPayAmount(oldPayAmount);
+            // 普通订单金额修改沿用原逻辑立即生效;仅新营销政策的优惠金额等待审核通过后生效
+            BigDecimal approvedPolicyAmount = oldFreeAmount.max(BigDecimal.ZERO)
+                    .min(orderMoney.max(BigDecimal.ZERO));
+            shipTradeOrderCreateReqVO.setPayAmount(orderMoney.subtract(approvedPolicyAmount));
             shipTradeOrderCreateReqVO.setFreeAmount(oldFreeAmount);
             BigDecimal oldOrderDeposi = ObjectUtil.defaultIfNull(tradeOrderDO.getDeposi(), BigDecimal.ZERO);
             if (createVO.getSummary().getDeposi() != null
@@ -2920,8 +2922,8 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             shipTradeOrderCreateReqVO.setOldtradeOrderTotalDO(oldTradeOrderTotal);
             // 构建新的订单汇总信息
             TradeOrderTotalDO tradeOrderTotalDO = BeanUtils.toBean(summary, TradeOrderTotalDO.class);
-            // 实际金额在最终审核通过后,按订单总金额和最新营销政策统一计算
-            tradeOrderTotalDO.setRealMoney(oldTradeOrderTotal.getRealMoney());
+            // 汇总实际金额同步本次已落库金额;待审核政策金额在最终审核通过后再统一计算
+            tradeOrderTotalDO.setRealMoney(shipTradeOrderCreateReqVO.getPayAmount());
             if(tradeOrderTotalDO.getUpFloorTotalMoney()==null){
                 tradeOrderTotalDO.setUpFloorTotalMoney(BigDecimal.ZERO);
             }
@@ -2997,9 +2999,9 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 auditType = 3;
                 desc = "平台修改定金金额,订单进入三级审核,"+oldDeposi+"->"+newDeposi;
             }
-            if (realAmount.compareTo(tradeOrderDO.getPayAmount())!=0 && loginUser.getDistributorId() == null) {
+            if (shipTradeOrderCreateReqVO.getPayAmount().compareTo(tradeOrderDO.getPayAmount())!=0 && loginUser.getDistributorId() == null) {
                 auditType = 4;
-                desc = "平台修改实际金额,订单进入四级审核,"+tradeOrderDO.getPayAmount()+"->"+realAmount;
+                desc = "平台修改实际金额,订单进入四级审核,"+tradeOrderDO.getPayAmount()+"->"+shipTradeOrderCreateReqVO.getPayAmount();
             }
             if (oldleaderAmount.compareTo(leaderAmount)!=0 || oldwithAmount.compareTo(withAmount)!=0 || oldotherMoney.compareTo(otherMoney)!=0) {
                 auditType = 4;
@@ -3009,9 +3011,9 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 auditType = 4;
                 desc = "分销商修改订单金额,订单进入四级审核,"+tradeOrderDO.getAmount()+"->"+shipTradeOrderCreateReqVO.getAmount();
             }
-            if (realAmount.compareTo(tradeOrderDO.getPayAmount())!=0 && loginUser.getDistributorId() != null) {
+            if (shipTradeOrderCreateReqVO.getPayAmount().compareTo(tradeOrderDO.getPayAmount())!=0 && loginUser.getDistributorId() != null) {
                 auditType = 4;
-                desc = "分销商修改实际金额,订单进入四级审核,"+tradeOrderDO.getPayAmount()+"->"+realAmount;
+                desc = "分销商修改实际金额,订单进入四级审核,"+tradeOrderDO.getPayAmount()+"->"+shipTradeOrderCreateReqVO.getPayAmount();
             }
             CommonResult<TradeOrderRespDTO> result = doShipModifyOrder(loginUser, shipTradeOrderCreateReqVO);
             if (result.isError()) {