充值保护
This commit is contained in:
parent
a019db6d13
commit
e13ee9c5c0
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@ public interface AccTradeMapper {
|
|||
*/
|
||||
public AccTrade selectAccTradeByTradeId(Long tradeId);
|
||||
|
||||
public AccTrade selectAccTradeByOrderNo(String orderNo);
|
||||
|
||||
/**
|
||||
* 查询账户交易记录列表
|
||||
*
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@ public interface IAccTradeService {
|
|||
*/
|
||||
public AccTrade selectAccTradeByTradeId(Long tradeId);
|
||||
|
||||
public AccTrade selectAccTradeByOrderNo(String orderNo);
|
||||
|
||||
/**
|
||||
* 查询账户交易记录列表
|
||||
*
|
||||
|
|
|
|||
|
|
@ -37,6 +37,11 @@ public class AccTradeServiceImpl implements IAccTradeService {
|
|||
return accTradeMapper.selectAccTradeByTradeId(tradeId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AccTrade selectAccTradeByOrderNo(String orderNo) {
|
||||
return accTradeMapper.selectAccTradeByOrderNo(orderNo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询账户交易记录列表
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue