欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > SpringBoot支付回调枚举+策略+工厂模式

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

2024/10/26 8:08:30 来源:https://blog.csdn.net/qq_40087415/article/details/143232796  浏览:    关键词:SpringBoot支付回调枚举+策略+工厂模式

定义业务枚举

@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;}
}

定义策略接口

public interface NotifyProcessHandler {/*** 支付回调参数** @param req*/void process(NotifyPaymentReq req);/*** 业务类型** @return*/BizTypePrefixEnum getBizType();}

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

@Slf4j
@Service
public class PaymentNotifyHandler implements NotifyProcessHandler {@Overridepublic void process(NotifyPaymentReq req) {// todo 消费支付结果处理}@Overridepublic BizTypePrefixEnum getBizType() {return BizTypePrefixEnum.PAYMENT;}
}
@Slf4j
@Service
public class RechargeNotifyHandler implements NotifyProcessHandler {@Overridepublic void process(NotifyPaymentReq req) {// todo 充值支付结果处理}@Overridepublic BizTypePrefixEnum getBizType() {return BizTypePrefixEnum.RECHARGE;}
}

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

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

@Component
public class NotifyProcessFactory implements InitializingBean {@Autowiredprivate List<NotifyProcessHandler> notifyProcessHandlerList;private final Map<BizTypePrefixEnum, NotifyProcessHandler> handlerMap = new HashMap<>();@Overridepublic void afterPropertiesSet() throws Exception {for (NotifyProcessHandler notifyProcessHandler : notifyProcessHandlerList) {handlerMap.put(notifyProcessHandler.getBizType(), notifyProcessHandler);}}public NotifyProcessHandler getHandler(BizTypePrefixEnum bizType) {return handlerMap.get(bizType);}}

注入工厂,实现处理策略

   @Autowiredprivate NotifyProcessFactory notifyProcessFactory;NotifyProcessHandler handler = notifyProcessFactory.getHandler(BizTypePrefixEnum.getStartsWith(req.getOutTradeNo()));handler.process(req);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com