Просмотр исходного кода

分账调试:消费(本店)

skyline 1 год назад
Родитель
Сommit
c44dc97827

+ 2 - 1
car-wash-entity/src/main/java/com/kym/entity/SplitRecord.java

@@ -22,8 +22,9 @@ public class SplitRecord extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
     /**
-     * 交易类型(1-充值 2-消费 3-解冻 4-退款)
+     * 交易类型(0-平台技术服务费,1-充值 2-消费 3-解冻 4-退款)
      */
+    public static final Integer TYPE_PLATFORM = 0;
     public static final Integer TYPE_RECHARGE = 1;
     public static final Integer TYPE_CONSUME = 2;
     public static final Integer TYPE_UNFREEZE = 3;

+ 9 - 0
car-wash-entity/src/main/java/com/kym/entity/StationAccount.java

@@ -17,6 +17,15 @@ public class StationAccount extends BaseEntity {
 
     private static final long serialVersionUID = 1L;
 
+    /**
+     * 平台账户ID
+     */
+    public static final Integer PLATFORM_ACCOUNT_ID = 0;
+    /**
+     * 平台站点ID
+     */
+    public static final String PLATFORM_STATION_ID = "0";
+
     /**
      * 站点ID
      */

+ 25 - 9
car-wash-service/src/main/java/com/kym/service/awoara/event/handle/OrderCloseEventHandler.java

@@ -119,30 +119,46 @@ public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObjec
      * @param washOrder
      */
     private void doLocalSplit(WashOrder washOrder) {
-        var stationAccount = stationAccountService.getStationAccount(washOrder.getStationId());
-        var amount = (int) (washOrder.getAmount() * (0.3 - 0.1));
+        // 平台手续费10%
+        var platformAmount = (int) (washOrder.getAmount() * 0.1);
+        // 解冻金额
+        var amount = (int) (washOrder.getAmount() * 0.3 - platformAmount);
         stationAccountService.lambdaUpdate()
                 .setSql("frozen_amount = frozen_amount - {0}", amount)
-                .eq(StationAccount::getId, stationAccount.getId())
+                .eq(StationAccount::getStationId, washOrder.getStationId())
                 .update();
+
+        // 平台技术服务费10%
+        stationAccountService.lambdaUpdate()
+                .setSql("balance = balance + {0}", platformAmount)
+                .eq(StationAccount::getId, StationAccount.PLATFORM_ACCOUNT_ID)
+                .update();
+
+        // 技术服务费
+        var splitRecord0 = new SplitRecord()
+                .setFromStationId(washOrder.getStationId())
+                .setToStationId(StationAccount.PLATFORM_STATION_ID)
+                .setTradeNo(washOrder.getOrderId())
+                .setAmount(platformAmount)
+                .setType(SplitRecord.TYPE_PLATFORM);
+
         // 冻结户解冻
         var splitRecord1 = new SplitRecord()
-                .setFromStationId(stationAccount.getStationId())
-                .setToStationId(stationAccount.getStationId())
+                .setFromStationId(washOrder.getStationId())
+                .setToStationId(washOrder.getStationId())
                 .setTradeNo(washOrder.getOrderId())
                 .setAmount(amount)
                 .setType(SplitRecord.TYPE_UNFREEZE);
 
         // 基本户入账
         var splitRecord2 = new SplitRecord()
-                .setFromStationId(stationAccount.getStationId())
-                .setToStationId(stationAccount.getStationId())
+                .setFromStationId(washOrder.getStationId())
+                .setToStationId(washOrder.getStationId())
                 .setTradeNo(washOrder.getOrderId())
                 .setAmount(amount)
                 .setType(SplitRecord.TYPE_CONSUME);
 
-        splitRecordService.saveBatch(List.of(splitRecord1, splitRecord2));
-
+        splitRecordService.saveBatch(List.of(splitRecord0, splitRecord1, splitRecord2));
 
     }