Explorar el Código

资金流水表增加变更前后余额字段

skyline hace 1 año
padre
commit
52f38202ca

+ 10 - 0
car-wash-entity/src/main/java/com/kym/entity/miniapp/WalletDetail.java

@@ -66,6 +66,16 @@ public class WalletDetail extends BaseEntity implements Serializable {
      */
     private Integer commission;
 
+    /**
+     * 余额变化前
+     */
+    private Integer beforeBalance;
+
+    /**
+     * 余额变化后
+     */
+    private Integer afterBalance;
+
     /**
      * 交易id type为1是pay_log的id,type为3是wash_order的id
      */

+ 3 - 0
car-wash-service/src/main/java/com/kym/service/awoara/entity/event/handle/OrderCloseEventHandler.java

@@ -60,6 +60,7 @@ public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObjec
         washOrderService.updateById(washOrder);
 
         // 扣款更新余额,新增资金流水 TODO 【存在优惠情况下校验优惠,更新优惠使用情况等】
+        var account = accountService.getAccountByUserId(washOrder.getUserId());
         accountService.lambdaUpdate().setSql("balance=balance-{0}", orderInfo.getAmount())
                 .eq(Account::getUserId, washOrder.getUserId()).update();
 
@@ -68,6 +69,8 @@ public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObjec
         walletDetail.setType(WalletDetail.TYPE_消费);
         walletDetail.setOrderNo(washOrder.getOrderId());
         walletDetail.setAmount(orderInfo.getAmount());
+        walletDetail.setBeforeBalance(account.getBalance());
+        walletDetail.setAfterBalance(account.getBalance() - orderInfo.getAmount());
         walletDetail.setTransactionId(washOrder.getId().toString());
         walletDetail.setTransactionTime(LocalDateTime.now());
         walletDetail.setStatus(WalletDetail.STATUS_已确认);

+ 4 - 1
car-wash-service/src/main/java/com/kym/service/enplus/impl/EnNotifyServiceImpl.java

@@ -328,7 +328,8 @@ public class EnNotifyServiceImpl implements EnNotifyService {
         chargeOrderService.updateById(chargeOrder);
 
         // 账户扣费
-        account.setBalance(account.getBalance() - chargeOrder.getPayAmount());
+        var beforeBalance = account.getBalance();
+        account.setBalance(beforeBalance - chargeOrder.getPayAmount());
         accountService.updateById(account);
 
         // 记录资金流水
@@ -338,6 +339,8 @@ public class EnNotifyServiceImpl implements EnNotifyService {
         // 消费
         walletDetail.setType(WalletDetail.TYPE_消费);
         walletDetail.setAmount(chargeOrder.getPayAmount());
+        walletDetail.setBeforeBalance(beforeBalance);
+        walletDetail.setAfterBalance(account.getBalance());
         walletDetail.setTransactionTime(endTime);
         // 已确认
         walletDetail.setStatus(WalletDetail.STATUS_已确认);

+ 0 - 1
car-wash-service/src/main/java/com/kym/service/miniapp/impl/WashOrderServiceImpl.java

@@ -7,7 +7,6 @@ import com.kym.entity.miniapp.queryParams.DeviceParams;
 import com.kym.entity.miniapp.queryParams.WashOrderParams;
 import com.kym.mapper.miniapp.WashOrderMapper;
 import com.kym.service.awoara.AwoaraService;
-import com.kym.service.awoara.entity.response.CreateOrder;
 import com.kym.service.miniapp.AccountService;
 import com.kym.service.miniapp.WashOrderService;
 import com.kym.service.mybatisplus.MyBaseServiceImpl;

+ 12 - 5
car-wash-service/src/main/java/com/kym/service/wechat/impl/WxPayServiceImpl.java

@@ -8,7 +8,6 @@ import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.URLUtil;
 import com.alibaba.fastjson2.JSONObject;
-
 import com.kym.common.config.WxFapiaoConfig;
 import com.kym.common.config.WxPayConfig;
 import com.kym.common.constant.ResponseEnum;
@@ -317,18 +316,24 @@ public class WxPayServiceImpl implements WxPayService {
             DateTime dt = DateUtil.parse(transaction.getSuccessTime());
             LocalDateTime successTime = LocalDateTimeUtil.of(dt);
 
+
             // 钱包流水
             var walletDetail = walletDetailService.getWalletDetailByOrderNo(transaction.getOutTradeNo(), WalletDetail.TYPE_充值);
             if (walletDetail != null) {
+
+                // 更新余额
+                var account = accountService.getAccountByUserId(walletDetail.getUserId());
+                accountService.lambdaUpdate().setSql("balance = (balance+%d)".formatted(transaction.getAmount().getTotal()))
+                        .eq(Account::getUserId, walletDetail.getUserId()).update();
+
                 walletDetail.setStatus(WalletDetail.STATUS_已确认);  //已确认
                 walletDetail.setCurrency(transaction.getAmount().getCurrency());
                 walletDetail.setAmount(transaction.getAmount().getTotal());
+                walletDetail.setBeforeBalance(account.getBalance());
+                walletDetail.setAfterBalance(account.getBalance() + walletDetail.getAmount());
                 walletDetail.setTransactionTime(successTime);
                 walletDetailService.updateById(walletDetail);
 
-                // 更新余额
-                accountService.lambdaUpdate().setSql("balance = (balance+%d)".formatted(transaction.getAmount().getTotal()))
-                        .eq(Account::getUserId, walletDetail.getUserId()).update();
 
                 // 异步处理充值服务费打折权益活动相关逻辑
                 activityService.handleRechargeActivity(walletDetail.getUserId(), transaction.getAmount().getTotal());
@@ -355,7 +360,6 @@ public class WxPayServiceImpl implements WxPayService {
                 // 如果存在进行中的订单,则向en+更新用户余额
                 var chargingOrder = chargeOrderService.getChargingOrderByUserId(walletDetail.getUserId());
                 if (chargingOrder != null) {
-                    var account = accountService.getAccountByUserId(walletDetail.getUserId());
                     // TODO: 2023-11-30 快充这里考虑过充的金额要提高
                     var res = enPlusService.updateBalanceByQueryEquipChargeStatus(chargingOrder.getStartChargeSeq(), account.getBalance() - 50);
                     LOGGER.info("用户:{}充电过程中充值,已更新en+充电金额,en+返回数据:{}", account.getUserId(), res);
@@ -588,6 +592,7 @@ public class WxPayServiceImpl implements WxPayService {
 
             if (RefundLog.STATUS_退款成功.equals(refundNotification.getRefundStatus().name())) {
                 // 冻结金额扣减此次(退款金额+优惠金额),优惠金额字段减去申请退款时的优惠金额
+                var account = accountService.getAccountByUserId(refundLog.getUserId());
                 accountService.lambdaUpdate().setSql("frozen_amount = (frozen_amount - (%d + %d)) , discount_amount = (discount_amount - %d)"
                                 .formatted(refundNotification.getAmount().getRefund().intValue(), refundLog.getDiscountAmount(), refundLog.getDiscountAmount()))
                         .eq(Account::getUserId, refundLog.getUserId()).update();
@@ -599,6 +604,8 @@ public class WxPayServiceImpl implements WxPayService {
                         .set(WalletDetail::getTransactionId, refundNotification.getTransactionId())
                         .set(WalletDetail::getTransactionTime, successTime)
                         .set(WalletDetail::getAmount, refundNotification.getAmount().getRefund().intValue())
+                        .set(WalletDetail::getBeforeBalance, account.getBalance())
+                        .set(WalletDetail::getAfterBalance, account.getBalance() - refundNotification.getAmount().getRefund().intValue())
                         .set(WalletDetail::getTransactionTime, successTime)
                         .eq(WalletDetail::getId, walletDetail.getId()).update();
                 LOGGER.info("微信退款回调{}:业务处理结束", notifyRes[2]);