From e13ee9c5c0e63ad68bdae224edd45e09568f4954 Mon Sep 17 00:00:00 2001
From: sxu <602087911@qq.com>
Date: Thu, 10 Apr 2025 15:15:57 +0800
Subject: [PATCH] =?UTF-8?q?=E5=85=85=E5=80=BC=E4=BF=9D=E6=8A=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../core/account/domain/vo/AccTradeVo.java | 2 +-
.../core/account/mapper/AccTradeMapper.java | 2 ++
.../core/account/service/IAccTradeService.java | 2 ++
.../service/impl/AccTradeServiceImpl.java | 5 +++++
.../core/pay/controller/NotifyCotroller.java | 16 +++++++++++-----
.../core/pay/controller/PayController.java | 12 ++++++++----
.../resources/mapper/account/AccTradeMapper.xml | 5 +++++
7 files changed, 34 insertions(+), 10 deletions(-)
diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/vo/AccTradeVo.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/vo/AccTradeVo.java
index 26ca81a..6c8d40d 100644
--- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/vo/AccTradeVo.java
+++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/vo/AccTradeVo.java
@@ -21,7 +21,7 @@ public class AccTradeVo {
private Date tradeTime;
private Long tradeState;
private Long payType;
- private Long payState; //是否付款 true - 已付 false-未付
+ private Integer payState; //是否付款 true - 已付 false-未付
private String thirdTradeNo; //三方,支付宝交易号
private String failReason;
@JsonFormat(
diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/mapper/AccTradeMapper.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/mapper/AccTradeMapper.java
index 5954141..481dc08 100644
--- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/mapper/AccTradeMapper.java
+++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/mapper/AccTradeMapper.java
@@ -21,6 +21,8 @@ public interface AccTradeMapper {
*/
public AccTrade selectAccTradeByTradeId(Long tradeId);
+ public AccTrade selectAccTradeByOrderNo(String orderNo);
+
/**
* 查询账户交易记录列表
*
diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/IAccTradeService.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/IAccTradeService.java
index 1de1a92..fe96bde 100644
--- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/IAccTradeService.java
+++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/IAccTradeService.java
@@ -22,6 +22,8 @@ public interface IAccTradeService {
*/
public AccTrade selectAccTradeByTradeId(Long tradeId);
+ public AccTrade selectAccTradeByOrderNo(String orderNo);
+
/**
* 查询账户交易记录列表
*
diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccTradeServiceImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccTradeServiceImpl.java
index 9ab1be1..ba40456 100644
--- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccTradeServiceImpl.java
+++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccTradeServiceImpl.java
@@ -37,6 +37,11 @@ public class AccTradeServiceImpl implements IAccTradeService {
return accTradeMapper.selectAccTradeByTradeId(tradeId);
}
+ @Override
+ public AccTrade selectAccTradeByOrderNo(String orderNo) {
+ return accTradeMapper.selectAccTradeByOrderNo(orderNo);
+ }
+
/**
* 查询账户交易记录列表
*
diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/NotifyCotroller.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/NotifyCotroller.java
index 233cef1..78d0625 100644
--- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/NotifyCotroller.java
+++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/NotifyCotroller.java
@@ -4,6 +4,7 @@ import com.alipay.api.AlipayApiException;
import com.alipay.api.internal.util.AlipaySignature;
import com.bonus.canteen.core.account.constants.AccTradeStateEnum;
import com.bonus.canteen.core.account.constants.AccWalletIdEnum;
+import com.bonus.canteen.core.account.domain.AccTrade;
import com.bonus.canteen.core.account.service.AccSubService;
import com.bonus.canteen.core.account.service.IAccTradeService;
import com.bonus.canteen.core.pay.constants.AliPayTradeStatusEnum;
@@ -66,6 +67,7 @@ public class NotifyCotroller {
String third_trade_no = request.getParameter("trade_no");
//交易状态
String trade_status = request.getParameter("trade_status");
+ AccTrade accTradeInDB = accTradeService.selectAccTradeByOrderNo(order_no);
if (AliPayTradeStatusEnum.TRADE_STATUS_FINISHED.getKey().equals(trade_status)) {
//判断该笔订单是否已经做过处理
//如果没做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详情,判断金额是否等于 total_amount,并执行商户的业务程序
@@ -74,11 +76,13 @@ public class NotifyCotroller {
AccTradeVo updateTrade = new AccTradeVo();
updateTrade.setOrderNo(order_no);
updateTrade.setThirdTradeNo(third_trade_no);
- updateTrade.setPayState(PayStateEnum.PAY_SUCC.getKey().longValue());
+ updateTrade.setPayState(PayStateEnum.PAY_SUCC.getKey());
updateTrade.setTradeState(AccTradeStateEnum.TAKE_EFFECT.getKey().longValue());
updateTrade.setFailReason(trade_status);
+ if (PayStateEnum.PAY_INPROCESS.getKey().equals(accTradeInDB.getPayState())) {
+ accSubService.addAccWalletBalance(totalAmount, SecurityUtils.getUserId(), AccWalletIdEnum.WALLET.getKey());
+ }
this.accTradeService.updateAccTradeVoByOrderNo(updateTrade);
- this.accSubService.addAccWalletBalance(totalAmount, SecurityUtils.getUserId(), AccWalletIdEnum.WALLET.getKey());
} else if (AliPayTradeStatusEnum.TRADE_STATUS_SUCCESS.getKey().equals(trade_status)) {
//判断该笔订单是否已经做过处理
//如果没做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详情,判断金额是否等于 total_amount,并执行商户的业务程序
@@ -87,16 +91,18 @@ public class NotifyCotroller {
AccTradeVo updateTrade = new AccTradeVo();
updateTrade.setOrderNo(order_no);
updateTrade.setThirdTradeNo(third_trade_no);
- updateTrade.setPayState(PayStateEnum.PAY_SUCC.getKey().longValue());
+ updateTrade.setPayState(PayStateEnum.PAY_SUCC.getKey());
updateTrade.setTradeState(AccTradeStateEnum.TAKE_EFFECT.getKey().longValue());
updateTrade.setFailReason(trade_status);
+ if (PayStateEnum.PAY_INPROCESS.getKey().equals(accTradeInDB.getPayState())) {
+ accSubService.addAccWalletBalance(totalAmount, SecurityUtils.getUserId(), AccWalletIdEnum.WALLET.getKey());
+ }
this.accTradeService.updateAccTradeVoByOrderNo(updateTrade);
- this.accSubService.addAccWalletBalance(totalAmount, SecurityUtils.getUserId(), AccWalletIdEnum.WALLET.getKey());
} else {
AccTradeVo updateTrade = new AccTradeVo();
updateTrade.setOrderNo(order_no);
updateTrade.setThirdTradeNo(third_trade_no);
- updateTrade.setPayState(PayStateEnum.PAY_FAIL.getKey().longValue());
+ updateTrade.setPayState(PayStateEnum.PAY_FAIL.getKey());
updateTrade.setTradeState(AccTradeStateEnum.CLOSE.getKey().longValue());
updateTrade.setFailReason(trade_status);
this.accTradeService.updateAccTradeVoByOrderNo(updateTrade);
diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/PayController.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/PayController.java
index 269d66e..ac30d47 100644
--- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/PayController.java
+++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/PayController.java
@@ -10,6 +10,7 @@ import com.alipay.api.response.AlipayTradeQueryResponse;
import com.bonus.canteen.core.account.constants.AccTradeStateEnum;
import com.bonus.canteen.core.account.constants.AccTradeTypeEnum;
import com.bonus.canteen.core.account.constants.AccWalletIdEnum;
+import com.bonus.canteen.core.account.domain.AccTrade;
import com.bonus.canteen.core.account.service.AccSubService;
import com.bonus.canteen.core.account.service.IAccTradeService;
import com.bonus.canteen.core.pay.constants.AliPayTradeStatusEnum;
@@ -61,7 +62,7 @@ public class PayController {
accTradeVo.setTradeTime(new Date());
accTradeVo.setAmount(accTradeVo.getPaymentAmount().multiply(new BigDecimal(100)).longValue());
accTradeVo.setPayType(PayTypeEnum.MEAL_CARD.getKey().longValue());
- accTradeVo.setPayState(PayStateEnum.PAY_INPROCESS.getKey().longValue());
+ accTradeVo.setPayState(PayStateEnum.PAY_INPROCESS.getKey());
accTradeVo.setTradeState(AccTradeStateEnum.CREATE.getKey().longValue());
accTradeService.insertAccTradeVo(accTradeVo);
// 调用alipay
@@ -107,12 +108,15 @@ public class PayController {
AccTradeVo updateTrade = new AccTradeVo();
updateTrade.setOrderNo(accTradeVo.getOrderNo());
updateTrade.setThirdTradeNo(third_trade_no);
- updateTrade.setPayState(PayStateEnum.PAY_SUCC.getKey().longValue());
+ updateTrade.setPayState(PayStateEnum.PAY_SUCC.getKey());
updateTrade.setTradeState(AccTradeStateEnum.TAKE_EFFECT.getKey().longValue());
updateTrade.setFailReason(trade_status);
+ AccTrade accTradeInDB = accTradeService.selectAccTradeByOrderNo(accTradeVo.getOrderNo());
+ if (PayStateEnum.PAY_INPROCESS.getKey().equals(accTradeInDB.getPayState())) {
+ BigDecimal totalAmount = new BigDecimal(response.getTotalAmount());
+ accSubService.addAccWalletBalance(totalAmount, accTradeVo.getUserId(), AccWalletIdEnum.WALLET.getKey());
+ }
this.accTradeService.updateAccTradeVoByOrderNo(updateTrade);
- BigDecimal totalAmount = new BigDecimal(response.getTotalAmount());
- accSubService.addAccWalletBalance(totalAmount, accTradeVo.getUserId(), AccWalletIdEnum.WALLET.getKey());
}
return response;
} catch (AlipayApiException e) {
diff --git a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/account/AccTradeMapper.xml b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/account/AccTradeMapper.xml
index 8058422..43302db 100644
--- a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/account/AccTradeMapper.xml
+++ b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/account/AccTradeMapper.xml
@@ -81,6 +81,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where trade_id = #{tradeId}
+
+
insert into acc_trade