donglang 15 godzin temu
rodzic
commit
dd6e08107f

+ 5 - 0
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/vo/ParkingWalletFeeFreezeResult.java

@@ -25,6 +25,11 @@ public class ParkingWalletFeeFreezeResult implements Serializable {
      */
     private Long chargeStrategyId;
 
+    /**
+     * 收费策略类型(1-按吨计费,2-按次计费,3-按月计费)
+     */
+    private Integer chargeStrategyType;
+
     /**
      * 收费策略描述,如10元/吨
      */

+ 6 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrder.java

@@ -165,6 +165,12 @@ public class KwoTradeOrder extends BaseModel implements Serializable {
     @TableField("charge_strategy_id")
     private Long chargeStrategyId;
 
+    /**
+     * 应用的收费策略类型(1-按吨计费,2-按次计费,3-按月计费)
+     */
+    @TableField("charge_strategy_type")
+    private Integer chargeStrategyType;
+
     /**
      * 应用的收费策略描述,如10元/吨
      */

+ 31 - 7
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -2259,6 +2259,7 @@ public class KwoTradeOrderService {
         log.info("贸易订单下单应用收费策略,orderNo:{}, feeFreezeParam:{}", order.getTOrderNo(), JSON.toJSONString(feeFreezeParam));
         ParkingWalletFeeFreezeResult feeFreezeResult = resolveParkingWalletFeeFeignResult(
                 parkingWalletFeeFeignService.applyChargeStrategyFreeze(feeFreezeParam), "服务费冻结");
+        log.info("服务费冻结结果,orderNo:{}, feeFreezeResult:{}", order.getTOrderNo(), com.alibaba.fastjson2.JSON.toJSONString(feeFreezeResult));
         fillChargeStrategyInfo(order, feeFreezeResult);
         log.info("贸易订单收费策略处理完成,orderNo:{}, feeFreezeResult:{}", order.getTOrderNo(), JSON.toJSONString(feeFreezeResult));
 
@@ -2475,6 +2476,7 @@ public class KwoTradeOrderService {
         }
         order.setApplyChargeStrategy(feeFreezeResult.getApplyChargeStrategy() == null ? Global.NO : feeFreezeResult.getApplyChargeStrategy());
         order.setChargeStrategyId(feeFreezeResult.getChargeStrategyId());
+        order.setChargeStrategyType(feeFreezeResult.getChargeStrategyType());
         order.setChargeStrategyDesc(feeFreezeResult.getChargeStrategyDesc());
         order.setChargeStrategyAmount(feeFreezeResult.getChargeStrategyAmount());
     }
@@ -2648,17 +2650,21 @@ public class KwoTradeOrderService {
 
         if (Objects.equals(tradeOrderAuditParam.getStatus(), 2)) {
             BigDecimal serviceFeeBalance = null;
-            // 审核拒绝:若应用了收费策略,解冻并返还采购方服务费余额
-            if (Objects.equals(kwoTradeOrder.getApplyChargeStrategy(), Global.YES)) {
+            // 审核拒绝:若应用了按吨收费策略,解冻并返还采购方服务费余额
+            if (isChargeByTonStrategyApplied(kwoTradeOrder)) {
                 ParkingWalletFeeFreezeParam serviceFeeUnfreezeParam = new ParkingWalletFeeFreezeParam();
                 serviceFeeUnfreezeParam.setOrderNo(kwoTradeOrder.getTOrderNo());
                 serviceFeeUnfreezeParam.setProEntId(unitMap.get(String.valueOf(1)).getEntId());
                 serviceFeeUnfreezeParam.setSupEntId(551429255406292993L);
                 serviceFeeUnfreezeParam.setOperatorId(LoginUserHolder.getUserId());
-                log.info("贸易订单审核拒绝解冻服务费,orderNo:{}, param:{}",
-                        kwoTradeOrder.getTOrderNo(), JSON.toJSONString(serviceFeeUnfreezeParam));
+                log.info("贸易订单审核拒绝解冻服务费,orderNo:{}, chargeStrategyType:{}, param:{}",
+                        kwoTradeOrder.getTOrderNo(), kwoTradeOrder.getChargeStrategyType(),
+                        com.alibaba.fastjson2.JSON.toJSONString(serviceFeeUnfreezeParam));
                 ParkingWalletFeeFreezeResult unfreezeResult = resolveParkingWalletFeeFeignResult(
                         parkingWalletFeeFeignService.unfreezeChargeStrategy(serviceFeeUnfreezeParam), "服务费解冻");
+                log.info("贸易订单审核拒绝,解冻服务费成功,orderNo:{}, chargeStrategyType:{}, result:{}",
+                        kwoTradeOrder.getTOrderNo(), kwoTradeOrder.getChargeStrategyType(),
+                        com.alibaba.fastjson2.JSON.toJSONString(unfreezeResult));
                 serviceFeeBalance = unfreezeResult.getServiceFeeBalance();
             }
 
@@ -3149,6 +3155,18 @@ public class KwoTradeOrderService {
         settleChargeStrategyIfApplied(order, logisticOrderList);
     }
 
+    /**
+     * 判断订单是否应用按吨收费策略。
+     *
+     * @param order 贸易订单
+     * @return true-已应用按吨收费策略
+     */
+    static boolean isChargeByTonStrategyApplied(KwoTradeOrder order) {
+        return order != null
+                && Objects.equals(order.getApplyChargeStrategy(), Global.YES)
+                && Objects.equals(order.getChargeStrategyType(), ParkingChangeStrategyEnum.BY_TON.getCode());
+    }
+
     /**
      * 判断贸易订单下是否存在运单且所有运单均已完成。
      *
@@ -3165,7 +3183,7 @@ public class KwoTradeOrderService {
     /**
      * 贸易订单完结时,处理收费策略关联的服务费结算
      * <p>
-     * 触发条件:所有运单完成且订单 applyChargeStrategy=1(下单时已冻结服务费)。
+     * 触发条件:所有运单完成且订单 applyChargeStrategy=1、chargeStrategyType=按吨计费(下单时已冻结服务费)。
      * 运输净重量:汇总已完成运单子任务的装/卸货净重(与看板运单完成量统计口径一致)。
      * 扣减逻辑:运输净重量 × 订单下单时快照的收费策略单价(无快照时回退当前策略)
      *
@@ -3178,8 +3196,14 @@ public class KwoTradeOrderService {
                     order.getId(), order.getTOrderNo(), order.getApplyChargeStrategy());
             return;
         }
-        log.info("贸易订单已应用收费策略,开始准备服务费结算,订单ID:{}, 订单号:{}, 收费策略ID:{}, 计费方式:{}",
-                order.getId(), order.getTOrderNo(), order.getChargeStrategyId(), order.getChargeType());
+        if (!isChargeByTonStrategyApplied(order)) {
+            log.info("贸易订单未应用按吨收费策略,跳过服务费解冻及扣减,订单ID:{}, 订单号:{}, 收费策略类型:{}",
+                    order.getId(), order.getTOrderNo(), order.getChargeStrategyType());
+            return;
+        }
+        log.info("贸易订单已应用按吨收费策略,开始准备服务费结算,订单ID:{}, 订单号:{}, 收费策略ID:{}, 收费策略类型:{}, 计费方式:{}",
+                order.getId(), order.getTOrderNo(), order.getChargeStrategyId(), order.getChargeStrategyType(), order.getChargeType());
+
 
         List<KwoTradeOrderUnit> orderUnits = kwoTradeOrderUnitService.getByOrderId(order.getId());
         if (CollUtil.isEmpty(orderUnits)) {

+ 1 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ParkingWalletFeeService.java

@@ -495,6 +495,7 @@ public class ParkingWalletFeeService {
 
         result.setApplyChargeStrategy(Global.YES);
         result.setChargeStrategyId(currentStrategy.getId());
+        result.setChargeStrategyType(currentStrategy.getType());
         result.setChargeStrategyDesc(buildStrategyMethodDesc(currentStrategy));
         result.setChargeStrategyAmount(unitFee);
         result.setFreezeAmount(freezeAmount);

+ 2 - 0
sql/2026/07/2026_07_07_add_trade_order_charge_strategy_type.sql

@@ -0,0 +1,2 @@
+ALTER TABLE kwo_trade_order
+    ADD COLUMN charge_strategy_type tinyint DEFAULT NULL COMMENT '应用的收费策略类型(1-按吨计费,2-按次计费,3-按月计费)' AFTER charge_strategy_id;