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