1、优化第三方支付透传参数改为存在数据库中;2、新增超时支付单的轮训处理、增加关闭和待支付的判定和对应处理;3、新增更新前序购买记录的已支付属性;

This commit is contained in:
gaoqr
2025-09-25 17:04:40 +08:00
parent 01535623ba
commit b328878d14
25 changed files with 388 additions and 170 deletions
@@ -26,9 +26,13 @@ public class PayOrderRespDTO {
private Integer status;
/**
* 外部订单
* 第三方交易
*/
private String tradeNo;
/**
* 系统内订单号
*
* 对应 PayOrderExtensionDO 的 no 字段
*/
private String outTradeNo;
@@ -76,11 +80,6 @@ public class PayOrderRespDTO {
*/
private String channelErrorMsg;
/**
* 发起支付给支付方后,异步回调原封不动回到调用方
*/
private Map<String,Object> passbackParams;
/**
* 支付渠道:0-支付宝、1-微信
*/
@@ -105,13 +104,14 @@ public class PayOrderRespDTO {
* 创建【WAITING】状态的订单返回
*/
public static PayOrderRespDTO waitingOf(String displayMode, String displayContent,
String outTradeNo, Object rawData, Integer channelCode) {
String outTradeNo, String tradeNo, Object rawData, Integer channelCode) {
PayOrderRespDTO respDTO = new PayOrderRespDTO();
respDTO.status = PayOrderStatusRespEnum.WAITING.getStatus();
respDTO.displayMode = displayMode;
respDTO.displayContent = displayContent;
// 相对通用的字段
respDTO.outTradeNo = outTradeNo;
respDTO.tradeNo = tradeNo;
respDTO.rawData = rawData;
respDTO.channelCode = channelCode;
return respDTO;
@@ -149,23 +149,6 @@ public class PayOrderRespDTO {
return respDTO;
}
/**
* 创建指定状态的订单返回,适合支付渠道回调时
*/
public static PayOrderRespDTO of(Integer status, String channelOrderNo, String channelUserId, LocalDateTime successTime,
String outTradeNo, Object rawData, Map<String, Object> passbackParams) {
PayOrderRespDTO respDTO = new PayOrderRespDTO();
respDTO.status = status;
respDTO.channelOrderNo = channelOrderNo;
respDTO.channelUserId = channelUserId;
respDTO.successTime = successTime;
// 相对通用的字段
respDTO.outTradeNo = outTradeNo;
respDTO.rawData = rawData;
respDTO.passbackParams = passbackParams;
return respDTO;
}
/**
* 创建【CLOSED】状态的订单返回,适合调用支付渠道失败时
*/
@@ -85,11 +85,6 @@ public class PayOrderUnifiedReqDTO {
*/
private Map<String, String> channelExtras;
/**
* 发起支付给支付方后,异步回调原封不动回到调用方
*/
private Map<String, Object> passbackParams;
/**
* 展示模式
*
@@ -0,0 +1,25 @@
package com.cf.imes.framework.excel.core.convert;
/**
* 基础枚举接口,code为布尔类型
* <p>
* 用于easyexcel convert
*
* @author Gqr
* @since 2025/8/27 11:51
*/
public interface BaseBoolValEnum {
/**
* 魔值
*
* @return
*/
Boolean getCode();
/**
* 描述
*
* @return
*/
String getDesc();
}
@@ -0,0 +1,73 @@
package com.cf.imes.framework.excel.core.convert;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.converters.ReadConverterContext;
import com.alibaba.excel.converters.WriteConverterContext;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.cf.imes.framework.excel.core.annotations.EnumFormat;
import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Field;
/**
* Excel 枚举转换器
*
* @author Gqr
* @since 2025/8/27 11:02
*/
@Slf4j
public class EnumBoolValConvert implements Converter<Boolean> {
@Override
public Class<?> supportJavaTypeKey() {
return Boolean.class; // 泛型接口
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.BOOLEAN; // Excel 存字符串
}
// 写出:Integer -> 枚举描述
@Override
public WriteCellData<String> convertToExcelData(WriteConverterContext<Boolean> context) {
Boolean code = context.getValue();
if (code == null) {
return new WriteCellData<>("");
}
Class<? extends Enum> enumClass = getEnumClass(context.getContentProperty().getField());
if (enumClass != null) {
for (Object e : enumClass.getEnumConstants()) {
BaseBoolValEnum baseEnum = (BaseBoolValEnum) e;
if (baseEnum.getCode().equals(code)) {
return new WriteCellData<>(baseEnum.getDesc());
}
}
}
return new WriteCellData<>("");
}
// 读入:枚举描述 -> Integer code
@Override
public Boolean convertToJavaData(ReadConverterContext<?> context) {
String desc = context.getReadCellData().getStringValue();
if (desc == null) {
return Boolean.FALSE;
}
Class<? extends Enum> enumClass = getEnumClass(context.getContentProperty().getField());
if (enumClass != null) {
for (Object e : enumClass.getEnumConstants()) {
BaseBoolValEnum baseEnum = (BaseBoolValEnum) e;
if (baseEnum.getDesc().equals(desc)) {
return baseEnum.getCode();
}
}
}
return Boolean.FALSE;
}
private Class<? extends Enum> getEnumClass(Field field) {
EnumFormat annotation = field.getAnnotation(EnumFormat.class);
return annotation != null ? annotation.value() : null;
}
}