refactor(order): 更新订单状态逻辑和支付流程
- 修改订单状态枚举,增加"支付中"和"已退款"状态 - 更新支付成功后的订单状态处理逻辑 - 增加支付失败时的状态回滚 - 修复退款相关的问题,更新退款成功后的订单状态 - 优化支付和退款流程中的日志记录
This commit is contained in:
parent
55e1fcb553
commit
e1937355dc
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 易生生成后上送渠道的订单号
|
* 易生生成后上送渠道的订单号
|
||||||
*/
|
*/
|
||||||
|
@ -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())) {
|
||||||
// 支付完成 进入终态
|
|
||||||
if (StrUtil.equalsAny(respStateInfo.getTransState(), RSP_BODY_TRANS_OK, RSP_BODY_TRANS_OK_WETCAT, RSP_BODY_TRANS_PARTIALLY_OK)) {
|
|
||||||
TradeQueryRespOrderInfo respOrderInfo = tradeQueryRespBody.getRespOrderInfo();
|
TradeQueryRespOrderInfo respOrderInfo = tradeQueryRespBody.getRespOrderInfo();
|
||||||
PayOrder payOrder = payOrderMapper.selectById(String.valueOf(respOrderInfo.getOrgTrace()));
|
PayOrder payOrder = payOrderMapper.selectById(String.valueOf(respOrderInfo.getOrgTrace()));
|
||||||
if (payOrder != null) {
|
if (payOrder != null) {
|
||||||
Order order = orderMapper.selectById(payOrder.getOrderId());
|
Order order = orderMapper.selectById(payOrder.getOrderId());
|
||||||
if (order != null) {
|
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{
|
||||||
|
// 支付失败,支付状态重置为待支付
|
||||||
|
payOrderMapper.updateById(PayOrder.builder().id(payOrder.getId()).transState(TransState.PENDING.getCode()).build());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
log.warn("回调通知的支付订单不存在:{}", respOrderInfo.getOrgTrace());
|
log.warn("回调通知的支付订单不存在:{}", respOrderInfo.getOrgTrace());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log.warn("回调通知的支付订单不存在:{}", respOrderInfo.getOrgTrace());
|
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())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user