feat(pay): 修改退款成功状态回调逻辑

- 更新 TradeStatusEnum.java:
  修改第22行,新增 TRADE_CLOSED 状态,关联 REFUND_SUCCESS。

- 更新 AlipayPayNotifyCallbackHandler.java:
  修改第123行,完善退款成功状态判断逻辑,
  如果 trade_status=TRADE_CLOSED 则设置订单状态为 REFUND_SUCCESS,
  否则设置为 TRADE_SUCCESS。

- 更新前端文件 src/views/biz/pay/order/index.vue:
  在第256行新增退款成功状态(label: '退款成功', value: '5'),
  以支持退款成功状态在前端的显示。
This commit is contained in:
冷冷 committed 2024-11-25 13:41:28 +08:00
1 parent 99bf24ff15
commit 7aba13c20a
2 files changed
+118 -109

No files matched your search

@@ -29,6 +29,7 @@ import com.pig4cloud.pigx.pay.handler.MessageDuplicateCheckerHandler;
import com.pig4cloud.pigx.pay.service.PayGoodsOrderService;
import com.pig4cloud.pigx.pay.service.PayNotifyRecordService;
import com.pig4cloud.pigx.pay.service.PayTradeOrderService;
import com.pig4cloud.pigx.pay.utils.OrderStatusEnum;
import com.pig4cloud.pigx.pay.utils.PayConstants;
import com.pig4cloud.pigx.pay.utils.TradeStatusEnum;
import lombok.AllArgsConstructor;
@@ -49,92 +50,101 @@ import java.util.Map;
@Service("alipayCallback")
public class AlipayPayNotifyCallbackHandler extends AbstractPayNotifyCallbakHandler {
private final MessageDuplicateCheckerHandler duplicateCheckerHandler;
private final MessageDuplicateCheckerHandler duplicateCheckerHandler;
private final PayTradeOrderService tradeOrderService;
private final PayTradeOrderService tradeOrderService;
private final PayGoodsOrderService goodsOrderService;
private final PayGoodsOrderService goodsOrderService;
private final PayNotifyRecordService recordService;
private final PayNotifyRecordService recordService;
/**
* 维护租户信息
* @param params
*/
@Override
public void before(Map<String, String> params) {
Long tenant = MapUtil.getLong(params, "passback_params");
TenantContextHolder.setTenantId(tenant);
}
/**
* 维护租户信息
*
* @param params
*/
@Override
public void before(Map<String, String> params) {
Long tenant = MapUtil.getLong(params, "passback_params");
TenantContextHolder.setTenantId(tenant);
}
/**
* 去重处理
* @param params 回调报文
* @return
*/
@Override
public Boolean duplicateChecker(Map<String, String> params) {
// 判断是否是为支付中
if (StrUtil.equals(TradeStatusEnum.WAIT_BUYER_PAY.getDescription(), params.get(PayConstants.TRADE_STATUS))) {
log.info("支付宝订单待支付 {} 不做处理", params);
return true;
}
/**
* 去重处理
*
* @param params 回调报文
* @return
*/
@Override
public Boolean duplicateChecker(Map<String, String> params) {
// 判断是否是为支付中
if (StrUtil.equals(TradeStatusEnum.WAIT_BUYER_PAY.getDescription(), params.get(PayConstants.TRADE_STATUS))) {
log.info("支付宝订单待支付 {} 不做处理", params);
return true;
}
// 判断10秒内是否已经回调处理
if (duplicateCheckerHandler.isDuplicate(params.get(PayConstants.OUT_TRADE_NO))) {
log.info("支付宝订单重复回调 {} 不做处理", params);
this.saveNotifyRecord(params, "重复回调");
return true;
}
return false;
}
// 判断10秒内是否已经回调处理
if (duplicateCheckerHandler.isDuplicate(params.get(PayConstants.OUT_TRADE_NO))) {
log.info("支付宝订单重复回调 {} 不做处理", params);
this.saveNotifyRecord(params, "重复回调");
return true;
}
return false;
}
/**
* 验签逻辑
* @param params 回调报文
* @return
*/
@Override
public Boolean verifyNotify(Map<String, String> params) {
return true;
}
/**
* 验签逻辑
*
* @param params 回调报文
* @return
*/
@Override
public Boolean verifyNotify(Map<String, String> params) {
return true;
}
/**
* 解析报文
* @param params 回调报文
* @return
*/
@Override
public String parse(Map<String, String> params) {
String tradeStatus = EnumUtil.fromString(TradeStatusEnum.class, params.get(PayConstants.TRADE_STATUS))
.getStatus();
/**
* 解析报文
*
* @param params 回调报文
* @return
*/
@Override
public String parse(Map<String, String> params) {
String tradeStatus = EnumUtil.fromString(TradeStatusEnum.class, params.get(PayConstants.TRADE_STATUS))
.getStatus();
String orderNo = params.get(PayConstants.OUT_TRADE_NO);
PayGoodsOrder goodsOrder = goodsOrderService
.getOne(Wrappers.<PayGoodsOrder>lambdaQuery().eq(PayGoodsOrder::getPayOrderId, orderNo));
goodsOrder.setStatus(tradeStatus);
goodsOrderService.updateById(goodsOrder);
String orderNo = params.get(PayConstants.OUT_TRADE_NO);
PayGoodsOrder goodsOrder = goodsOrderService
.getOne(Wrappers.<PayGoodsOrder>lambdaQuery().eq(PayGoodsOrder::getPayOrderId, orderNo));
goodsOrder.setStatus(tradeStatus);
goodsOrderService.updateById(goodsOrder);
PayTradeOrder tradeOrder = tradeOrderService
.getOne(Wrappers.<PayTradeOrder>lambdaQuery().eq(PayTradeOrder::getOrderId, orderNo));
tradeOrder.setPaySuccTime(LocalDateTime.now());
tradeOrder.setChannelOrderNo(params.get("trade_no"));
tradeOrder.setStatus(TradeStatusEnum.TRADE_SUCCESS.getStatus());
tradeOrderService.updateById(tradeOrder);
PayTradeOrder tradeOrder = tradeOrderService
.getOne(Wrappers.<PayTradeOrder>lambdaQuery().eq(PayTradeOrder::getOrderId, orderNo));
tradeOrder.setPaySuccTime(LocalDateTime.now());
tradeOrder.setChannelOrderNo(params.get("trade_no"));
tradeOrder.setStatus(TradeStatusEnum.TRADE_SUCCESS.getStatus());
// 退款也会回调,trade_status=TRADE_CLOSED ,具体看报文记录
if (OrderStatusEnum.REFUND_SUCCESS.getStatus().equals(tradeStatus)) {
tradeOrder.setStatus(OrderStatusEnum.REFUND_SUCCESS.getStatus());
} else {
tradeOrder.setStatus(TradeStatusEnum.TRADE_SUCCESS.getStatus());
}
return "success";
}
return "success";
}
/**
* 保存回调记录
* @param result 处理结果
* @param params 回调报文
*/
@Override
public void saveNotifyRecord(Map<String, String> params, String result) {
PayNotifyRecord record = new PayNotifyRecord();
String notifyId = params.get("notify_id");
saveRecord(params, result, record, notifyId, recordService);
}
/**
* 保存回调记录
*
* @param result 处理结果
* @param params 回调报文
*/
@Override
public void saveNotifyRecord(Map<String, String> params, String result) {
PayNotifyRecord record = new PayNotifyRecord();
String notifyId = params.get("notify_id");
saveRecord(params, result, record, notifyId, recordService);
}
}
@@ -11,44 +11,43 @@ import lombok.Getter;
@AllArgsConstructor
public enum TradeStatusEnum {
/**
* 交易完成
*/
WAIT_BUYER_PAY("WAIT_BUYER_PAY", OrderStatusEnum.INIT.getStatus()),
/**
* 交易完成
*/
WAIT_BUYER_PAY("WAIT_BUYER_PAY", OrderStatusEnum.INIT.getStatus()),
/**
* TRADE_CLOSED
*/
TRADE_CLOSED("TRADE_CLOSED", OrderStatusEnum.FAIL.getStatus()),
/**
* TRADE_CLOSED
*/
TRADE_CLOSED("TRADE_CLOSED", OrderStatusEnum.REFUND_SUCCESS.getStatus()),
/**
* TRADE_SUCCESS
*/
TRADE_SUCCESS("TRADE_SUCCESS", OrderStatusEnum.SUCCESS.getStatus()),
/**
* TRADE_SUCCESS
*/
TRADE_SUCCESS("TRADE_SUCCESS", OrderStatusEnum.SUCCESS.getStatus()),
/**
* 交易关闭
*/
TRADE_FINISHED("TRADE_FINISHED", OrderStatusEnum.COMPLETE.getStatus()),
/**
* 交易关闭
*/
TRADE_FINISHED("TRADE_FINISHED", OrderStatusEnum.COMPLETE.getStatus()),
/**
* 微信支付成功
*/
SUCCESS("SUCCESS", OrderStatusEnum.SUCCESS.getStatus()),
/**
* 微信支付成功
*/
SUCCESS("SUCCESS", OrderStatusEnum.SUCCESS.getStatus()),
/**
* 微信支付失败
*/
FAIL("FAIL", OrderStatusEnum.FAIL.getStatus());
/**
* 微信支付失败
*/
FAIL("FAIL", OrderStatusEnum.FAIL.getStatus());
/**
* 描述
*/
private String description;
/**
* 描述
*/
private String description;
/**
* 描述
*/
private String status;
/**
* 描述
*/
private String status;
}