当前位置: 首页 > news >正文

基于事件驱动和策略模式的差异化处理方案

一、支付成功后事件驱动

        1、支付成功事件

/*** 支付成功事件** @author ronshi* @date 2025/5/12 14:40*/
@Getter
@Setter
public class PaymentSuccessEvent extends ApplicationEvent {private static final long serialVersionUID = 1L;private ProductOrderDO productOrderDO;public PaymentSuccessEvent(Object source, ProductOrderDO productOrderDO) {super(source);this.productOrderDO = productOrderDO;}
}

        2、事件触发入口

@Autowired
private ApplicationEventPublisher eventPublisher;public Boolean handlePaymentResult(HandlePaymentResultCmd cmd) {//其他业务逻辑处理//发布领域事件(解耦后续处理)eventPublisher.publishEvent(new PaymentSuccessEvent(this, productOrderDO));return true;}

         3、事件监听器 

/*** 支付成功事件监听器** @author ronshi* @date 2025/5/12 15:20*/
@RequiredArgsConstructor
@Component
public class PaymentSuccessEventHandler {private final PaymentSuccessStrategyFactory orderPaymentStrategyFactory;/*** 处理支付成功事件** @param event 支付成功事件*/@EventListenerpublic void handleEvent(PaymentSuccessEvent event) {System.out.println("【处理支付成功事件】:" + event.getProductOrderDO().getId());IPaymentSuccessStrategy strategy = orderPaymentStrategyFactory.getStrategy(event.getProductOrderDO().getOrderType());strategy.execute(event.getProductOrderDO());}
}

二、不同订单类型的策略模式处理

         1、订单支付策略

/*** 订单支付策略** @author ronshi* @date 2025/5/12 14:58*/
public interface IPaymentSuccessStrategy {/*** 执行方法** @param productOrderDO 订单信息*/void execute(ProductOrderDO productOrderDO);/*** 获取该策略支持的订单类型** @return 订单类型*/String getSupportedOrderType();
}

         2、新购订单支付策略

/*** 新购订单支付策略** @author ronshi* @date 2025/5/12 15:51*/
@Component
public class PurchasePaymentSuccessStrategy implements IPaymentSuccessStrategy {/*** 执行方法** @param productOrderDO 订单信息*/@Overridepublic void execute(ProductOrderDO productOrderDO) {System.out.println("【新购订单支付策略】:" + productOrderDO.getId());}/*** 获取该策略支持的订单类型** @return 订单类型*/@Overridepublic String getSupportedOrderType() {return OrderTypeEnum.PURCHASE.getCode();}
}

         3、续费订单支付策略

/*** 续费订单支付策略** @author ronshi* @date 2025/5/12 15:53*/
@Component
public class RenewPaymentSuccessStrategy implements IPaymentSuccessStrategy {/*** 执行方法** @param productOrderDO 订单信息*/@Overridepublic void execute(ProductOrderDO productOrderDO) {System.out.println("【续费订单支付策略】:" + productOrderDO.getId());}/*** 获取该策略支持的订单类型** @return 订单类型*/@Overridepublic String getSupportedOrderType() {return OrderTypeEnum.RENEW.getCode();}
}

           4、订单支付策略工厂

/*** 订单支付策略工厂** @author ronshi* @date 2025/5/12 15:56*/
@RequiredArgsConstructor
@Component
public class PaymentSuccessStrategyFactory {private final Map<String, IPaymentSuccessStrategy> strategyMap;/*** 获取订单支付策略** @param orderType 订单类型* @return 订单支付策略*/public IPaymentSuccessStrategy getStrategy(String orderType) {for (IPaymentSuccessStrategy strategy : strategyMap.values()) {if (strategy.getSupportedOrderType().equals(orderType)) {return strategy;}}throw new BusinessServiceException("没有对应的订单支付策略");}}

http://www.xdnf.cn/news/401041.html

相关文章:

  • TDengine 在金融领域的应用
  • 算法模型部署后_python脚本API测试指南-记录3
  • PyTorch实战(4)——卷积神经网络(Convolutional Neural Network, CNN)详解
  • SVN 中文路径访问报错(权限已正确分配)
  • Java项目层级介绍 java 层级 层次
  • Termius ssh连接服务器 vim打开的文件无法复制问题
  • Java中的​​策略模式​​和​​模板方法模式
  • 想实现一个基于MCP的pptx生成系统架构图【初版实现】
  • Java-Arrays工具类:基础到进阶的数组操作全面指南
  • 14B检索能力超过Google Search,阿里ZeroSearch通过RL激发LLM检索推理能力~
  • MFC listctrl修改背景颜色
  • 【文心智能体】使用文心一言来给智能体设计一段稳定调用工作流的提示词
  • 解决LangChain4j报错HTTP/1.1 header parser received no bytes
  • 精益数据分析(56/126):创业阶段的划分与精益数据分析实践
  • ElasticSearch聚合操作案例
  • Oracle adg环境下调整redo日志组以及standby日志组大小
  • CSDN博客粘贴图片失败如何解决
  • 佰力博科技与您探讨阻抗谱测量的基本原理和测量方法
  • 【言语】刷题2
  • Qt5.14.2 链接 MySQL 8.4 遇到的问题
  • 第三方软件测评中心分享:软件功能测试类型和测试工具
  • 动手学深度学习12.4.硬件-笔记练习(PyTorch)
  • # 实时英文 OCR 文字识别:从摄像头到 PyQt5 界面的实现
  • python 的 ​uv、pip​ 和 ​conda​ 对比和技术选型
  • 安卓玩机工具-----安卓机型一款很好用的数据备份恢复软件 支持云端备份
  • C#中SetProperty方法使用
  • Qt进阶开发:QTcpServer的的详解
  • 对抗进行性核上性麻痹,健康护理筑牢生活防线
  • Golang 应用的 CI/CD 与 K8S 自动化部署全流程指南
  • 深度拆解!MES如何重构生产计划与排产调度全流程?