充值保护

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 Date tradeTime;
private Long tradeState; private Long tradeState;
private Long payType; private Long payType;
private Long payState; //是否付款 true - 已付 false-未付 private Integer payState; //是否付款 true - 已付 false-未付
private String thirdTradeNo; //三方支付宝交易号 private String thirdTradeNo; //三方支付宝交易号
private String failReason; private String failReason;
@JsonFormat( @JsonFormat(

View File

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

View File

@ -37,6 +37,11 @@ public class AccTradeServiceImpl implements IAccTradeService {
return accTradeMapper.selectAccTradeByTradeId(tradeId); 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.alipay.api.internal.util.AlipaySignature;
import com.bonus.canteen.core.account.constants.AccTradeStateEnum; import com.bonus.canteen.core.account.constants.AccTradeStateEnum;
import com.bonus.canteen.core.account.constants.AccWalletIdEnum; 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.AccSubService;
import com.bonus.canteen.core.account.service.IAccTradeService; import com.bonus.canteen.core.account.service.IAccTradeService;
import com.bonus.canteen.core.pay.constants.AliPayTradeStatusEnum; import com.bonus.canteen.core.pay.constants.AliPayTradeStatusEnum;
@ -66,6 +67,7 @@ public class NotifyCotroller {
String third_trade_no = request.getParameter("trade_no"); String third_trade_no = request.getParameter("trade_no");
//交易状态 //交易状态
String trade_status = request.getParameter("trade_status"); String trade_status = request.getParameter("trade_status");
AccTrade accTradeInDB = accTradeService.selectAccTradeByOrderNo(order_no);
if (AliPayTradeStatusEnum.TRADE_STATUS_FINISHED.getKey().equals(trade_status)) { if (AliPayTradeStatusEnum.TRADE_STATUS_FINISHED.getKey().equals(trade_status)) {
//判断该笔订单是否已经做过处理 //判断该笔订单是否已经做过处理
//如果没做过处理根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详情判断金额是否等于 total_amount并执行商户的业务程序 //如果没做过处理根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详情判断金额是否等于 total_amount并执行商户的业务程序
@ -74,11 +76,13 @@ public class NotifyCotroller {
AccTradeVo updateTrade = new AccTradeVo(); AccTradeVo updateTrade = new AccTradeVo();
updateTrade.setOrderNo(order_no); updateTrade.setOrderNo(order_no);
updateTrade.setThirdTradeNo(third_trade_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.setTradeState(AccTradeStateEnum.TAKE_EFFECT.getKey().longValue());
updateTrade.setFailReason(trade_status); 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.accTradeService.updateAccTradeVoByOrderNo(updateTrade);
this.accSubService.addAccWalletBalance(totalAmount, SecurityUtils.getUserId(), AccWalletIdEnum.WALLET.getKey());
} else if (AliPayTradeStatusEnum.TRADE_STATUS_SUCCESS.getKey().equals(trade_status)) { } else if (AliPayTradeStatusEnum.TRADE_STATUS_SUCCESS.getKey().equals(trade_status)) {
//判断该笔订单是否已经做过处理 //判断该笔订单是否已经做过处理
//如果没做过处理根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详情判断金额是否等于 total_amount并执行商户的业务程序 //如果没做过处理根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详情判断金额是否等于 total_amount并执行商户的业务程序
@ -87,16 +91,18 @@ public class NotifyCotroller {
AccTradeVo updateTrade = new AccTradeVo(); AccTradeVo updateTrade = new AccTradeVo();
updateTrade.setOrderNo(order_no); updateTrade.setOrderNo(order_no);
updateTrade.setThirdTradeNo(third_trade_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.setTradeState(AccTradeStateEnum.TAKE_EFFECT.getKey().longValue());
updateTrade.setFailReason(trade_status); 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.accTradeService.updateAccTradeVoByOrderNo(updateTrade);
this.accSubService.addAccWalletBalance(totalAmount, SecurityUtils.getUserId(), AccWalletIdEnum.WALLET.getKey());
} else { } else {
AccTradeVo updateTrade = new AccTradeVo(); AccTradeVo updateTrade = new AccTradeVo();
updateTrade.setOrderNo(order_no); updateTrade.setOrderNo(order_no);
updateTrade.setThirdTradeNo(third_trade_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.setTradeState(AccTradeStateEnum.CLOSE.getKey().longValue());
updateTrade.setFailReason(trade_status); updateTrade.setFailReason(trade_status);
this.accTradeService.updateAccTradeVoByOrderNo(updateTrade); 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.AccTradeStateEnum;
import com.bonus.canteen.core.account.constants.AccTradeTypeEnum; import com.bonus.canteen.core.account.constants.AccTradeTypeEnum;
import com.bonus.canteen.core.account.constants.AccWalletIdEnum; 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.AccSubService;
import com.bonus.canteen.core.account.service.IAccTradeService; import com.bonus.canteen.core.account.service.IAccTradeService;
import com.bonus.canteen.core.pay.constants.AliPayTradeStatusEnum; import com.bonus.canteen.core.pay.constants.AliPayTradeStatusEnum;
@ -61,7 +62,7 @@ public class PayController {
accTradeVo.setTradeTime(new Date()); accTradeVo.setTradeTime(new Date());
accTradeVo.setAmount(accTradeVo.getPaymentAmount().multiply(new BigDecimal(100)).longValue()); accTradeVo.setAmount(accTradeVo.getPaymentAmount().multiply(new BigDecimal(100)).longValue());
accTradeVo.setPayType(PayTypeEnum.MEAL_CARD.getKey().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()); accTradeVo.setTradeState(AccTradeStateEnum.CREATE.getKey().longValue());
accTradeService.insertAccTradeVo(accTradeVo); accTradeService.insertAccTradeVo(accTradeVo);
// 调用alipay // 调用alipay
@ -107,13 +108,16 @@ public class PayController {
AccTradeVo updateTrade = new AccTradeVo(); AccTradeVo updateTrade = new AccTradeVo();
updateTrade.setOrderNo(accTradeVo.getOrderNo()); updateTrade.setOrderNo(accTradeVo.getOrderNo());
updateTrade.setThirdTradeNo(third_trade_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.setTradeState(AccTradeStateEnum.TAKE_EFFECT.getKey().longValue());
updateTrade.setFailReason(trade_status); updateTrade.setFailReason(trade_status);
this.accTradeService.updateAccTradeVoByOrderNo(updateTrade); AccTrade accTradeInDB = accTradeService.selectAccTradeByOrderNo(accTradeVo.getOrderNo());
if (PayStateEnum.PAY_INPROCESS.getKey().equals(accTradeInDB.getPayState())) {
BigDecimal totalAmount = new BigDecimal(response.getTotalAmount()); BigDecimal totalAmount = new BigDecimal(response.getTotalAmount());
accSubService.addAccWalletBalance(totalAmount, accTradeVo.getUserId(), AccWalletIdEnum.WALLET.getKey()); accSubService.addAccWalletBalance(totalAmount, accTradeVo.getUserId(), AccWalletIdEnum.WALLET.getKey());
} }
this.accTradeService.updateAccTradeVoByOrderNo(updateTrade);
}
return response; return response;
} catch (AlipayApiException e) { } catch (AlipayApiException e) {
log.error("查询异常, ", e.getErrMsg()); log.error("查询异常, ", e.getErrMsg());

View File

@ -82,6 +82,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where trade_id = #{tradeId} where trade_id = #{tradeId}
</select> </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 id="insertAccTrade" parameterType="com.bonus.canteen.core.account.domain.AccTrade">
insert into acc_trade insert into acc_trade
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">