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.PayGoodsOrderService;
import com.pig4cloud.pigx.pay.service.PayNotifyRecordService; import com.pig4cloud.pigx.pay.service.PayNotifyRecordService;
import com.pig4cloud.pigx.pay.service.PayTradeOrderService; 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.PayConstants;
import com.pig4cloud.pigx.pay.utils.TradeStatusEnum; import com.pig4cloud.pigx.pay.utils.TradeStatusEnum;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@@ -49,92 +50,101 @@ import java.util.Map;
@Service("alipayCallback") @Service("alipayCallback")
public class AlipayPayNotifyCallbackHandler extends AbstractPayNotifyCallbakHandler { 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 *
*/ * @param params
@Override */
public void before(Map<String, String> params) { @Override
Long tenant = MapUtil.getLong(params, "passback_params"); public void before(Map<String, String> params) {
TenantContextHolder.setTenantId(tenant); Long tenant = MapUtil.getLong(params, "passback_params");
} TenantContextHolder.setTenantId(tenant);
}
/** /**
* 去重处理 * 去重处理
* @param params 回调报文 *
* @return * @param params 回调报文
*/ * @return
@Override */
public Boolean duplicateChecker(Map<String, String> params) { @Override
// 判断是否是为支付中 public Boolean duplicateChecker(Map<String, String> params) {
if (StrUtil.equals(TradeStatusEnum.WAIT_BUYER_PAY.getDescription(), params.get(PayConstants.TRADE_STATUS))) { // 判断是否是为支付中
log.info("支付宝订单待支付 {} 不做处理", params); if (StrUtil.equals(TradeStatusEnum.WAIT_BUYER_PAY.getDescription(), params.get(PayConstants.TRADE_STATUS))) {
return true; log.info("支付宝订单待支付 {} 不做处理", params);
} return true;
}
// 判断10秒内是否已经回调处理 // 判断10秒内是否已经回调处理
if (duplicateCheckerHandler.isDuplicate(params.get(PayConstants.OUT_TRADE_NO))) { if (duplicateCheckerHandler.isDuplicate(params.get(PayConstants.OUT_TRADE_NO))) {
log.info("支付宝订单重复回调 {} 不做处理", params); log.info("支付宝订单重复回调 {} 不做处理", params);
this.saveNotifyRecord(params, "重复回调"); this.saveNotifyRecord(params, "重复回调");
return true; return true;
} }
return false; return false;
} }
/** /**
* 验签逻辑 * 验签逻辑
* @param params 回调报文 *
* @return * @param params 回调报文
*/ * @return
@Override */
public Boolean verifyNotify(Map<String, String> params) { @Override
return true; public Boolean verifyNotify(Map<String, String> params) {
} return true;
}
/** /**
* 解析报文 * 解析报文
* @param params 回调报文 *
* @return * @param params 回调报文
*/ * @return
@Override */
public String parse(Map<String, String> params) { @Override
String tradeStatus = EnumUtil.fromString(TradeStatusEnum.class, params.get(PayConstants.TRADE_STATUS)) public String parse(Map<String, String> params) {
.getStatus(); String tradeStatus = EnumUtil.fromString(TradeStatusEnum.class, params.get(PayConstants.TRADE_STATUS))
.getStatus();
String orderNo = params.get(PayConstants.OUT_TRADE_NO); String orderNo = params.get(PayConstants.OUT_TRADE_NO);
PayGoodsOrder goodsOrder = goodsOrderService PayGoodsOrder goodsOrder = goodsOrderService
.getOne(Wrappers.<PayGoodsOrder>lambdaQuery().eq(PayGoodsOrder::getPayOrderId, orderNo)); .getOne(Wrappers.<PayGoodsOrder>lambdaQuery().eq(PayGoodsOrder::getPayOrderId, orderNo));
goodsOrder.setStatus(tradeStatus); goodsOrder.setStatus(tradeStatus);
goodsOrderService.updateById(goodsOrder); goodsOrderService.updateById(goodsOrder);
PayTradeOrder tradeOrder = tradeOrderService PayTradeOrder tradeOrder = tradeOrderService
.getOne(Wrappers.<PayTradeOrder>lambdaQuery().eq(PayTradeOrder::getOrderId, orderNo)); .getOne(Wrappers.<PayTradeOrder>lambdaQuery().eq(PayTradeOrder::getOrderId, orderNo));
tradeOrder.setPaySuccTime(LocalDateTime.now()); tradeOrder.setPaySuccTime(LocalDateTime.now());
tradeOrder.setChannelOrderNo(params.get("trade_no")); tradeOrder.setChannelOrderNo(params.get("trade_no"));
tradeOrder.setStatus(TradeStatusEnum.TRADE_SUCCESS.getStatus()); tradeOrder.setStatus(TradeStatusEnum.TRADE_SUCCESS.getStatus());
tradeOrderService.updateById(tradeOrder); // 退款也会回调,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 回调报文
* @param result 处理结果 */
* @param params 回调报文 @Override
*/ public void saveNotifyRecord(Map<String, String> params, String result) {
@Override PayNotifyRecord record = new PayNotifyRecord();
public void saveNotifyRecord(Map<String, String> params, String result) { String notifyId = params.get("notify_id");
PayNotifyRecord record = new PayNotifyRecord(); saveRecord(params, result, record, notifyId, recordService);
String notifyId = params.get("notify_id"); }
saveRecord(params, result, record, notifyId, recordService);
}
} }
@@ -11,44 +11,43 @@ import lombok.Getter;
@AllArgsConstructor @AllArgsConstructor
public enum TradeStatusEnum { 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("TRADE_CLOSED", OrderStatusEnum.FAIL.getStatus()), 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;
} }