feat 回调处理优化

This commit is contained in:
bootx
2024-01-27 23:41:57 +08:00
parent 7fa88d527a
commit 03b7a4da9c
7 changed files with 3 additions and 191 deletions

View File

@@ -1,9 +1,7 @@
package cn.bootx.platform.daxpay.service.core.channel.alipay.convert;
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayConfig;
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayOrder;
import cn.bootx.platform.daxpay.service.dto.channel.alipay.AliPayConfigDto;
import cn.bootx.platform.daxpay.service.dto.channel.alipay.AliPaymentDto;
import cn.bootx.platform.daxpay.service.param.channel.alipay.AliPayConfigParam;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@@ -24,6 +22,4 @@ public interface AlipayConvert {
AliPayConfig convert(AliPayConfigParam in);
AliPayConfigDto convert(AliPayConfig in);
AliPaymentDto convert(AliPayOrder aliPayOrder);
}

View File

@@ -1,26 +0,0 @@
package cn.bootx.platform.daxpay.service.core.channel.alipay.dao;
import cn.bootx.platform.common.mybatisplus.impl.BaseManager;
import cn.bootx.platform.daxpay.service.common.entity.BasePayOrder;
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayOrder;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.util.Optional;
/**
* 支付宝支付订单
*
* @author xxm
* @since 2021/2/26
*/
@Deprecated
@Repository
@RequiredArgsConstructor
public class AliPayOrderManager extends BaseManager<AliPayOrderMapper, AliPayOrder> {
public Optional<AliPayOrder> findByPaymentId(Long paymentId) {
return this.findByField(BasePayOrder::getPaymentId, paymentId);
}
}

View File

@@ -1,17 +0,0 @@
package cn.bootx.platform.daxpay.service.core.channel.alipay.dao;
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 支付宝支付
*
* @author xxm
* @since 2021/2/26
*/
@Deprecated
@Mapper
public interface AliPayOrderMapper extends BaseMapper<AliPayOrder> {
}

View File

@@ -1,41 +0,0 @@
package cn.bootx.platform.daxpay.service.core.channel.alipay.entity;
import cn.bootx.platform.common.core.function.EntityBaseFunction;
import cn.bootx.platform.daxpay.service.common.entity.BasePayOrder;
import cn.bootx.platform.daxpay.service.core.channel.alipay.convert.AlipayConvert;
import cn.bootx.platform.daxpay.service.dto.channel.alipay.AliPaymentDto;
import cn.bootx.table.modify.annotation.DbColumn;
import cn.bootx.table.modify.annotation.DbTable;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 支付宝支付记录
*
* @author xxm
* @since 2021/2/26
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Deprecated
@Accessors(chain = true)
@DbTable(comment = "支付宝支付记录")
@TableName("pay_alipay_order")
public class AliPayOrder extends BasePayOrder implements EntityBaseFunction<AliPaymentDto> {
/** 支付宝交易号 */
@DbColumn(comment = "交易号")
private String tradeNo;
/** 所使用的支付方式 */
@DbColumn(comment = "支付方式")
private String payWay;
@Override
public AliPaymentDto toDto() {
return AlipayConvert.CONVERT.convert(this);
}
}

View File

@@ -1,97 +0,0 @@
package cn.bootx.platform.daxpay.service.core.channel.alipay.service;
import cn.bootx.platform.daxpay.code.PayStatusEnum;
import cn.bootx.platform.daxpay.service.common.local.PaymentContextLocal;
import cn.bootx.platform.daxpay.service.core.channel.alipay.dao.AliPayOrderManager;
import cn.bootx.platform.daxpay.service.core.channel.alipay.entity.AliPayOrder;
import cn.bootx.platform.daxpay.service.core.order.pay.entity.PayOrder;
import cn.bootx.platform.daxpay.service.core.order.pay.service.PayChannelOrderService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.Optional;
/**
* 支付宝支付订单
* 1.创建: 支付调起并支付成功后才会创建
* 2.撤销: 关闭本地支付记录
* 3.退款: 发起退款时记录
*
* @author xxm
* @since 2021/2/26
*/
@Deprecated
@Slf4j
@Service
@RequiredArgsConstructor
public class AliPayOrderService {
private final AliPayOrderManager aliPayOrderManager;
private final PayChannelOrderService payChannelOrderService;
/**
* 更新异步支付记录成功状态, 并创建支付宝支付记录
*/
@Deprecated
public void updateAsyncSuccess(PayOrder payOrder, Integer amount) {
// 创建支付宝支付订单
this.createAliPayOrder(payOrder,amount);
}
/**
* 创建支付宝支付订单(支付成功后才会创建)
*/
@Deprecated
private void createAliPayOrder(PayOrder payOrder, Integer amount) {
String tradeNo = PaymentContextLocal.get()
.getAsyncPayInfo()
.getGatewayOrderNo();
AliPayOrder aliPayOrder = new AliPayOrder();
aliPayOrder.setTradeNo(tradeNo)
.setPayWay(PaymentContextLocal.get().getAsyncPayInfo().getPayWay())
.setPaymentId(payOrder.getId())
.setAmount(amount)
.setRefundableBalance(amount)
.setBusinessNo(payOrder.getBusinessNo())
.setStatus(PayStatusEnum.SUCCESS.getCode())
// 读取回调中的支付时间
.setPayTime(LocalDateTime.now());
aliPayOrderManager.save(aliPayOrder);
}
/**
* 取消状态, 按正常来说不会出现支付宝订单需要取消的情况
*/
public void updateClose(Long paymentId) {
Optional<AliPayOrder> aliPaymentOptional = aliPayOrderManager.findByPaymentId(paymentId);
aliPaymentOptional.ifPresent(aliPayOrder -> {
aliPayOrder.setStatus(PayStatusEnum.CLOSE.getCode());
aliPayOrderManager.updateById(aliPayOrder);
});
}
/**
* 更新退款. 分为部分退款和全部退款
*/
public void updateRefund(Long paymentId, int amount) {
Optional<AliPayOrder> aliPaymentOptional = aliPayOrderManager.findByPaymentId(paymentId);
aliPaymentOptional.ifPresent(payment -> {
int refundableBalance = payment.getRefundableBalance() - amount;
payment.setRefundableBalance(refundableBalance);
// 退款完毕
if (refundableBalance == 0) {
payment.setStatus(PayStatusEnum.REFUNDED.getCode());
}
// 部分退款
else {
payment.setStatus(PayStatusEnum.PARTIAL_REFUND.getCode());
}
aliPayOrderManager.updateById(payment);
});
}
}

View File

@@ -32,7 +32,7 @@ import java.time.LocalDateTime;
public class PayCallbackRecord extends MpCreateEntity implements EntityBaseFunction<PayCallbackRecordDto> {
/** 本地订单id */
@DbColumn(comment = "支付订单id")
@DbColumn(comment = "本地订单id")
private Long orderId;
/** 支付网关订单号 */
@@ -59,7 +59,7 @@ public class PayCallbackRecord extends MpCreateEntity implements EntityBaseFunct
private String notifyInfo;
/**
* 回调处理状态
*
* @see PayCallbackStatusEnum
*/
@DbColumn(comment = "回调处理状态")

View File

@@ -2,7 +2,6 @@ package cn.bootx.platform.daxpay.service.func;
import cn.bootx.platform.daxpay.service.code.PayCallbackStatusEnum;
import cn.bootx.platform.daxpay.service.code.PayCallbackTypeEnum;
import cn.bootx.platform.daxpay.service.code.PayRepairSourceEnum;
import cn.bootx.platform.daxpay.service.common.context.CallbackLocal;
import cn.bootx.platform.daxpay.service.common.local.PaymentContextLocal;
import cn.bootx.platform.daxpay.service.core.payment.callback.service.PayCallbackService;
@@ -37,7 +36,6 @@ public abstract class AbsCallbackStrategy implements PayStrategy {
public String callback(Map<String, String> params) {
CallbackLocal callbackInfo = PaymentContextLocal.get().getCallbackInfo();
callbackInfo.getCallbackParam().putAll(params);
log.info("支付回调处理: {}", params);
// 验证消息
if (!this.verifyNotify()) {
callbackInfo.setCallbackStatus(PayCallbackStatusEnum.FAIL).setMsg("验证信息格式不通过");
@@ -45,7 +43,6 @@ public abstract class AbsCallbackStrategy implements PayStrategy {
this.saveCallbackRecord();
return null;
}
PaymentContextLocal.get().getRepairInfo().setSource(PayRepairSourceEnum.CALLBACK.getCode());
// 判断回调类型
PayCallbackTypeEnum callbackType = this.getCallbackType();
@@ -100,7 +97,7 @@ public abstract class AbsCallbackStrategy implements PayStrategy {
.setNotifyTime(LocalDateTime.now())
.setOrderId(callbackInfo.getOrderId())
.setGatewayOrderNo(callbackInfo.getGatewayOrderNo())
.setRepairOrderId(callbackInfo.getPayRepairOrderId())
.setRepairOrderId(callbackInfo.getPayRepairId())
.setStatus(callbackInfo.getCallbackStatus().getCode())
.setMsg(callbackInfo.getMsg());
callbackRecordService.save(payNotifyRecord);