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->微信")
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->无效订单")
private Integer status;

View File

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

View File

@ -61,6 +61,13 @@ public class PayOrder extends BaseAudit {
@Schema(description = "完成支付日期")
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);
RespStateInfo respStateInfo = tradeQueryRespBody.getRespStateInfo();
if (StrUtil.equals(RSP_BODY_RESP_OK, respStateInfo.getRespCode())) {
// 支付完成 进入终态
if (StrUtil.equalsAny(respStateInfo.getTransState(), RSP_BODY_TRANS_OK, RSP_BODY_TRANS_OK_WETCAT, RSP_BODY_TRANS_PARTIALLY_OK)) {
TradeQueryRespOrderInfo respOrderInfo = tradeQueryRespBody.getRespOrderInfo();
PayOrder payOrder = payOrderMapper.selectById(String.valueOf(respOrderInfo.getOrgTrace()));
if (payOrder != null) {
Order order = orderMapper.selectById(payOrder.getOrderId());
if (order != null) {
TradeQueryRespOrderInfo respOrderInfo = tradeQueryRespBody.getRespOrderInfo();
PayOrder payOrder = payOrderMapper.selectById(String.valueOf(respOrderInfo.getOrgTrace()));
if (payOrder != 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()
.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())
.pcTrace(respOrderInfo.getPcTrace())
.unTrace(respOrderInfo.getUnTrace())
@ -490,13 +490,17 @@ public class EasypayServiceImpl implements IEasypayService {
.paymentTime(LocalDateTimeUtil.parse(StrBuilder.create(respOrderInfo.getDateEnd()).append(respOrderInfo.getTimeEnd()).toString(), "yyyyMMddHHmmss"))
.payType(PayType.getByValue(payOrder.getPayType()).getChannel())
.build());
} else {
log.warn("回调通知的支付订单不存在:{}", respOrderInfo.getOrgTrace());
}else{
// 支付失败支付状态重置为待支付
payOrderMapper.updateById(PayOrder.builder().id(payOrder.getId()).transState(TransState.PENDING.getCode()).build());
}
} else {
log.warn("回调通知的支付订单不存在:{}", respOrderInfo.getOrgTrace());
}
} else {
log.warn("回调通知的支付订单不存在:{}", respOrderInfo.getOrgTrace());
}
} else {
log.warn("回调通知支付结果异常:{}", respStateInfo.getRespDesc());
}
@ -548,7 +552,8 @@ public class EasypayServiceImpl implements IEasypayService {
if (StrUtil.equals(RSP_BODY_RESP_OK, respStateInfo.getRespCode())) {
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 {
log.error("易生退款失败:{}", respStateInfo.getRespDesc());
@ -577,7 +582,7 @@ public class EasypayServiceImpl implements IEasypayService {
if (payOrder.getTransState() == TransState.REFUNDED.getCode()) {
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();
RefundApplyReqBody refundApplyReqBody = RefundApplyReqBody.builder()
.reqInfo(ReqInfo.builder().mchtCode(easypayConfig.getMchtCode()).build())