refactor(order): 更新订单状态逻辑和支付流程

- 修改订单状态枚举,增加"支付中"和"已退款"状态
- 更新支付成功后的订单状态处理逻辑
- 增加支付失败时的状态回滚
- 修复退款相关的问题,更新退款成功后的订单状态
- 优化支付和退款流程中的日志记录
This commit is contained in:
huk 2025-09-03 09:48:38 +08:00
parent 55e1fcb553
commit e1937355dc
4 changed files with 27 additions and 14 deletions

View File

@ -76,7 +76,7 @@ public class Order extends BaseAudit {
@Excel(name = "支付方式0->未支付1->支付宝2->微信") @Excel(name = "支付方式0->未支付1->支付宝2->微信")
private Integer payType; private Integer payType;
@Schema(description = "订单状态0->待付款1->待发货2->已发货3->已完成4->已关闭5->无效订单") @Schema(description = "订单状态0->待支付1->支付中2->已支付3->已关闭4->已退款10->无效订单")
@Excel(name = "订单状态0->待付款1->待发货2->已发货3->已完成4->已关闭5->无效订单") @Excel(name = "订单状态0->待付款1->待发货2->已发货3->已完成4->已关闭5->无效订单")
private Integer status; private Integer status;

View File

@ -1,13 +1,14 @@
package com.wzj.soopin.order.emum; package com.wzj.soopin.order.emum;
/** /**
* 订单状态0->付款1->待发货2->已发货3->已完成4->已关闭5->无效订单 * 订单状态0->支付1->支付中2->已支付3->已关闭4->已退款10->无效订单
*/ */
public enum OrderStatusEnum { public enum OrderStatusEnum {
UNPAID(0, "待支付"), UNPAID(0, "待支付"),
PAYMENT(1, "支付中"), PAYMENT(1, "支付中"),
PAID(2, "已支付"), PAID(2, "已支付"),
CLOSED(3, "已关闭"), CLOSED(3, "已关闭"),
REFUNDED(4, "已退款"),
INVALID(10, "无效订单"); INVALID(10, "无效订单");
private final Integer value; private final Integer value;

View File

@ -61,6 +61,13 @@ public class PayOrder extends BaseAudit {
@Schema(description = "完成支付日期") @Schema(description = "完成支付日期")
private Date endTransDate; private Date endTransDate;
/**
* 退款日期
*/
@TableField(value = "refund_date")
@Schema(description = "退款日期")
private Date refundDate;
/** /**
* 易生生成后上送渠道的订单号 * 易生生成后上送渠道的订单号
*/ */

View File

@ -467,17 +467,17 @@ public class EasypayServiceImpl implements IEasypayService {
TradeQueryRespBody tradeQueryRespBody = BeanUtil.toBean(easyPayRequest.getReqBody(), TradeQueryRespBody.class); TradeQueryRespBody tradeQueryRespBody = BeanUtil.toBean(easyPayRequest.getReqBody(), TradeQueryRespBody.class);
RespStateInfo respStateInfo = tradeQueryRespBody.getRespStateInfo(); RespStateInfo respStateInfo = tradeQueryRespBody.getRespStateInfo();
if (StrUtil.equals(RSP_BODY_RESP_OK, respStateInfo.getRespCode())) { if (StrUtil.equals(RSP_BODY_RESP_OK, respStateInfo.getRespCode())) {
// 支付完成 进入终态 TradeQueryRespOrderInfo respOrderInfo = tradeQueryRespBody.getRespOrderInfo();
if (StrUtil.equalsAny(respStateInfo.getTransState(), RSP_BODY_TRANS_OK, RSP_BODY_TRANS_OK_WETCAT, RSP_BODY_TRANS_PARTIALLY_OK)) { PayOrder payOrder = payOrderMapper.selectById(String.valueOf(respOrderInfo.getOrgTrace()));
TradeQueryRespOrderInfo respOrderInfo = tradeQueryRespBody.getRespOrderInfo(); if (payOrder != null) {
PayOrder payOrder = payOrderMapper.selectById(String.valueOf(respOrderInfo.getOrgTrace())); Order order = orderMapper.selectById(payOrder.getOrderId());
if (payOrder != null) { if (order != null) {
Order order = orderMapper.selectById(payOrder.getOrderId()); // 支付完成 进入终态
if (order != null) { if (StrUtil.equalsAny(respStateInfo.getTransState(), RSP_BODY_TRANS_OK, RSP_BODY_TRANS_OK_WETCAT, RSP_BODY_TRANS_PARTIALLY_OK)) {
// 更新支付订单信息 // 更新支付订单信息
payOrderMapper.updateById(PayOrder.builder() payOrderMapper.updateById(PayOrder.builder()
.id(payOrder.getId()) .id(payOrder.getId())
.endTransDate(DateUtil.parse(StrBuilder.create(respOrderInfo.getDateEnd()).append(respOrderInfo.getTimeEnd()), toString())) .endTransDate(DateUtil.parse(StrBuilder.create(respOrderInfo.getDateEnd()).append(respOrderInfo.getTimeEnd()).toString()))
.easypayTrace(respOrderInfo.getOutTrace()) .easypayTrace(respOrderInfo.getOutTrace())
.pcTrace(respOrderInfo.getPcTrace()) .pcTrace(respOrderInfo.getPcTrace())
.unTrace(respOrderInfo.getUnTrace()) .unTrace(respOrderInfo.getUnTrace())
@ -490,13 +490,17 @@ public class EasypayServiceImpl implements IEasypayService {
.paymentTime(LocalDateTimeUtil.parse(StrBuilder.create(respOrderInfo.getDateEnd()).append(respOrderInfo.getTimeEnd()).toString(), "yyyyMMddHHmmss")) .paymentTime(LocalDateTimeUtil.parse(StrBuilder.create(respOrderInfo.getDateEnd()).append(respOrderInfo.getTimeEnd()).toString(), "yyyyMMddHHmmss"))
.payType(PayType.getByValue(payOrder.getPayType()).getChannel()) .payType(PayType.getByValue(payOrder.getPayType()).getChannel())
.build()); .build());
} else { }else{
log.warn("回调通知的支付订单不存在:{}", respOrderInfo.getOrgTrace()); // 支付失败支付状态重置为待支付
payOrderMapper.updateById(PayOrder.builder().id(payOrder.getId()).transState(TransState.PENDING.getCode()).build());
} }
} else { } else {
log.warn("回调通知的支付订单不存在:{}", respOrderInfo.getOrgTrace()); log.warn("回调通知的支付订单不存在:{}", respOrderInfo.getOrgTrace());
} }
} else {
log.warn("回调通知的支付订单不存在:{}", respOrderInfo.getOrgTrace());
} }
} else { } else {
log.warn("回调通知支付结果异常:{}", respStateInfo.getRespDesc()); log.warn("回调通知支付结果异常:{}", respStateInfo.getRespDesc());
} }
@ -548,7 +552,8 @@ public class EasypayServiceImpl implements IEasypayService {
if (StrUtil.equals(RSP_BODY_RESP_OK, respStateInfo.getRespCode())) { if (StrUtil.equals(RSP_BODY_RESP_OK, respStateInfo.getRespCode())) {
if (StrUtil.equalsAny(respStateInfo.getTransState(), RSP_BODY_TRANS_OK)) { if (StrUtil.equalsAny(respStateInfo.getTransState(), RSP_BODY_TRANS_OK)) {
// 更新支付单退款状态 // 更新支付单退款状态
payOrderMapper.updateById(PayOrder.builder().id(payOrder.getId()).transState(TransState.REFUNDED.getCode()).build()); payOrderMapper.updateById(PayOrder.builder().id(payOrder.getId()).transState(TransState.REFUNDED.getCode()).refundDate(new Date()).build());
orderMapper.updateById(Order.builder().id(order.getId()).status(OrderStatusEnum.REFUNDED.getValue()).build());
} }
} else { } else {
log.error("易生退款失败:{}", respStateInfo.getRespDesc()); log.error("易生退款失败:{}", respStateInfo.getRespDesc());
@ -577,7 +582,7 @@ public class EasypayServiceImpl implements IEasypayService {
if (payOrder.getTransState() == TransState.REFUNDED.getCode()) { if (payOrder.getTransState() == TransState.REFUNDED.getCode()) {
return easypayTransResultVO; return easypayTransResultVO;
} }
Assert.isTrue(payOrder.getTransState() == TransState.PAID.getCode() || payOrder.getTransState() == TransState.REFUND_PENDING.getCode(), () -> new ServiceException("订单未支付")); Assert.isTrue(payOrder.getTransState() == TransState.PAID.getCode() || payOrder.getTransState() == TransState.REFUND_PENDING.getCode(), () -> new ServiceException("订单未支付或退款中"));
EasyPayRequestHeader reqHeader = generateEasyPayRequestHeader(); EasyPayRequestHeader reqHeader = generateEasyPayRequestHeader();
RefundApplyReqBody refundApplyReqBody = RefundApplyReqBody.builder() RefundApplyReqBody refundApplyReqBody = RefundApplyReqBody.builder()
.reqInfo(ReqInfo.builder().mchtCode(easypayConfig.getMchtCode()).build()) .reqInfo(ReqInfo.builder().mchtCode(easypayConfig.getMchtCode()).build())