SpringBoot支付回调枚举+策略+工厂模式

定义业务枚举

java 复制代码
@Getter
public enum BizTypePrefixEnum {

    PAYMENT("PMT", "消费"),
    RECHARGE("RCH", "充值"),
    WITHDRAWAL("WDW", "提现"),
    REFUND("RFD", "退款"),
    RED_PACKET_PAY("RP", "红包支付"),

    ;
    private final String code;

    private final String desc;


    BizTypePrefixEnum(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public static BizTypePrefixEnum getStartsWith(String outTradeNo) {
        for (BizTypePrefixEnum bizTypePrefixEnum : BizTypePrefixEnum.values()) {
            if (outTradeNo.startsWith(bizTypePrefixEnum.getCode())) {
                return bizTypePrefixEnum;
            }
        }
        return null;
    }
}

定义策略接口

java 复制代码
public interface NotifyProcessHandler {

    /**
     * 支付回调参数
     *
     * @param req
     */
    void process(NotifyPaymentReq req);

    /**
     * 业务类型
     *
     * @return
     */
    BizTypePrefixEnum getBizType();

}

不同枚举业务,分别定义实现类

java 复制代码
@Slf4j
@Service
public class PaymentNotifyHandler implements NotifyProcessHandler {

    @Override
    public void process(NotifyPaymentReq req) {
        // todo 消费支付结果处理

    }

    @Override
    public BizTypePrefixEnum getBizType() {
        return BizTypePrefixEnum.PAYMENT;
    }
}
java 复制代码
@Slf4j
@Service
public class RechargeNotifyHandler implements NotifyProcessHandler {
    @Override
    public void process(NotifyPaymentReq req) {
        // todo 充值支付结果处理

    }

    @Override
    public BizTypePrefixEnum getBizType() {
        return BizTypePrefixEnum.RECHARGE;
    }
}

...等等其他枚举处理类

创建工厂,初始化加载策略类

java 复制代码
@Component
public class NotifyProcessFactory implements InitializingBean {

    @Autowired
    private List<NotifyProcessHandler> notifyProcessHandlerList;

    private final Map<BizTypePrefixEnum, NotifyProcessHandler> handlerMap = new HashMap<>();

    @Override
    public void afterPropertiesSet() throws Exception {
        for (NotifyProcessHandler notifyProcessHandler : notifyProcessHandlerList) {
            handlerMap.put(notifyProcessHandler.getBizType(), notifyProcessHandler);
        }
    }

    public NotifyProcessHandler getHandler(BizTypePrefixEnum bizType) {
        return handlerMap.get(bizType);
    }

}

注入工厂,实现处理策略

java 复制代码
   @Autowired
    private NotifyProcessFactory notifyProcessFactory;

   NotifyProcessHandler handler = notifyProcessFactory.getHandler(BizTypePrefixEnum.getStartsWith(req.getOutTradeNo()));
            handler.process(req);
相关推荐
闲猫6 小时前
Spring AI 对接Deepseek ChatModel 聊天对话
java·前端·spring
paopaokaka_luck7 小时前
英语单词学习系统的设计与实现(基于艾宾浩斯遗忘曲线的智能复习机制、语音朗读、多题型测试与错题自动收录、Echarts图形化分析)
vue.js·spring boot·后端·echarts
自信的未来8 小时前
JSON 工具|Web Worker 工程化打包 + 语法自动修复 + 多语言代码生成实战
java·前端·json
Brookty8 小时前
【JavaEE】线程安全(一).4:写块串行保安全、CAS
java·开发语言·java-ee·多线程·线程安全
怕孤单的草丛8 小时前
缓存管理面临的主要问题
java·数据库·缓存
犀利豆11 小时前
AI in Harness(二)
java·人工智能·后端
沉静的小伙12 小时前
在微服务中使用领域事件
java·运维·微服务
程序员在囧途12 小时前
likeadmin-api API 算力超市怎么做供应商切换?统一鉴权、task_id 和 callback_url 才能稳交付
java·服务器·数据库·开放api·likeadmin-api·api算力超市
醇氧12 小时前
Spring 容器 Map 注入机制详解
java·后端·spring