充值保护

This commit is contained in:
sxu 2025-04-10 15:15:57 +08:00
parent a019db6d13
commit e13ee9c5c0
7 changed files with 34 additions and 10 deletions

View File

@ -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(

View File

@ -21,6 +21,8 @@ public interface AccTradeMapper {
*/
public AccTrade selectAccTradeByTradeId(Long tradeId);
public AccTrade selectAccTradeByOrderNo(String orderNo);
/**
* 查询账户交易记录列表
*

View File

@ -22,6 +22,8 @@ public interface IAccTradeService {
*/
public AccTrade selectAccTradeByTradeId(Long tradeId);
public AccTrade selectAccTradeByOrderNo(String orderNo);
/**
* 查询账户交易记录列表
*

View File

@ -37,6 +37,11 @@ public class AccTradeServiceImpl implements IAccTradeService {
return accTradeMapper.selectAccTradeByTradeId(tradeId);
}
@Override
public AccTrade selectAccTradeByOrderNo(String orderNo) {
return accTradeMapper.selectAccTradeByOrderNo(orderNo);
}
/**
* 查询账户交易记录列表
*

View File

@ -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);

View File

@ -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) {

View File

@ -81,6 +81,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectAccTradeVo"/>
where trade_id = #{tradeId}
</select>
<select id="selectAccTradeByOrderNo" parameterType="Long" resultMap="AccTradeResult">
<include refid="selectAccTradeVo"/>
where order_no = #{orderNo}
</select>
<insert id="insertAccTrade" parameterType="com.bonus.canteen.core.account.domain.AccTrade">
insert into acc_trade