Эх сурвалжийг харах

fix bug 微信支付回调流水更新

skyline 2 жил өмнө
parent
commit
d795eea8c3

+ 4 - 4
entity/src/main/java/com/kym/entity/miniapp/PayLog.java

@@ -1,14 +1,14 @@
 package com.kym.entity.miniapp;
 
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.kym.entity.BaseEntity;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
 /**
  * <p>
  * 支付日志
@@ -58,7 +58,7 @@ public class PayLog extends BaseEntity implements Serializable {
      * 支付完成时间 示例值:2018-06-08T10:34:56+08:00
      */
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private String successTime;
+    private LocalDateTime successTime;
 
     /**
      * 交易类型,枚举值:JSAPI:公众号支付 NATIVE:扫码支付 APP:APP支付 MICROPAY:付款码支付 MWEB:H5支付 FACEPAY:刷脸支付

+ 3 - 3
entity/src/main/java/com/kym/entity/miniapp/WalletDetail.java

@@ -29,9 +29,9 @@ public class WalletDetail extends BaseEntity implements Serializable {
     public static final int TYPE_消费 = 3;
 
 
-    public static final int STATUS_待确认 = 1;
-    public static final int STATUS_已确认 = 21;
-    public static final int STATUS_已取消 = 3;
+    public static final int STATUS_待确认 = 0;
+    public static final int STATUS_已确认 = 1;
+    public static final int STATUS_已取消 = 2;
 
     private static final long serialVersionUID = 1L;
 

+ 10 - 6
service/src/main/java/com/kym/service/wechat/impl/WxPayServiceImpl.java

@@ -41,6 +41,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
+import java.time.LocalDateTime;
 
 
 /**
@@ -119,6 +120,7 @@ public class WxPayServiceImpl implements WxPayService {
         // 创建支付记录
         var walletDetail = new WalletDetail()
                 .setType(WalletDetail.TYPE_充值)
+                .setStatus(WalletDetail.STATUS_待确认)
                 .setUserId(userId)
                 .setAmount(rechargeAmount)
                 .setOrderNo(outTradeNo);
@@ -216,10 +218,15 @@ public class WxPayServiceImpl implements WxPayService {
             // 资金流水
             var walletDetail = walletDetailService.getWalletDetailByOrderNo(transaction.getOutTradeNo());
             if (walletDetail != null) {
-                walletDetail.setType(1); // 充值
-                walletDetail.setStatus(1);  //已确认
+                walletDetail.setStatus(WalletDetail.STATUS_已确认);  //已确认
                 walletDetail.setCurrency(transaction.getAmount().getCurrency());
                 walletDetail.setAmount(transaction.getAmount().getTotal());
+                walletDetail.setTransactionTime(LocalDateTime.parse(transaction.getSuccessTime()));
+                walletDetailService.updateById(walletDetail);
+
+                // 更新余额
+                accountService.lambdaUpdate().setSql("balance = (balance+%d)".formatted(transaction.getAmount().getTotal()))
+                        .eq(Account::getUserId, walletDetail.getUserId()).update();
 
                 // 支付记录
                 var payLog = new PayLog();
@@ -229,7 +236,7 @@ public class WxPayServiceImpl implements WxPayService {
                 payLog.setMchId(transaction.getMchid());
                 payLog.setOutTradeNo(transaction.getOutTradeNo());
                 payLog.setTransactionId(transaction.getTransactionId());
-                payLog.setSuccessTime(transaction.getSuccessTime());
+                payLog.setSuccessTime(LocalDateTime.parse(transaction.getSuccessTime()));
                 payLog.setTradeType(transaction.getTradeType().name());
                 payLog.setTradeState(transaction.getTradeState().name());
                 payLog.setAttach(transaction.getAttach());
@@ -239,9 +246,6 @@ public class WxPayServiceImpl implements WxPayService {
                 payLog.setPayerCurrency(transaction.getAmount().getPayerCurrency());
                 payLogService.save(payLog);
                 LOGGER.info("微信支付回调{}:业务处理结束", no);
-                // 更新余额
-                accountService.lambdaUpdate().setSql("balance = (balance+%d)".formatted(transaction.getAmount().getTotal()))
-                        .eq(Account::getUserId, walletDetail.getUserId()).update();
 
             } else {
                 LOGGER.error("微信支付通知处理异常,资金流水为空,回调信息:{}", transaction);