当前位置: 首页 > 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("没有对应的订单支付策略");}}

相关文章:

  • Python动态渲染页面抓取之Selenium使用指南
  • 基于 51 单片机的 PWM 电机调速系统实现
  • 【AI提示词】波特五力模型专家
  • Linux常用命令详解(上):目录与文件操作及拷贝移动命令
  • OpenMCU(六):STM32F103开发板功能介绍
  • mac M2下的centos8:java和jenkins版本匹配,插件安装问题
  • 电厂除灰系统优化:时序数据库如何降低粉尘排放
  • 支付宝API-SKD-GO版
  • HBase进阶之路:从原理到实战的深度探索
  • 基于LVS和Keepalived实现高可用负载均衡架构
  • Spring Data Elasticsearch 中 ElasticsearchOperations 构建查询条件的详解
  • Kotlin 异步初始化值
  • P2P架构
  • 用 AltSnap 解锁 Windows 窗口管理的“魔法”
  • lua入门语法,包含安装,注释,变量,循环等
  • NY115NY121美光科技芯片NY122NY130
  • 添加购物车-02.代码开发
  • 讲讲git 和svn
  • VUE中通过DOM导出PDF
  • SET NX互斥功能的实现原理
  • 北京“准80后”干部兰天跨省份调任新疆生态环境厅副厅长
  • 海北州委常委、常务副州长桑本履新青海省供销社理事会主任
  • 新华时评:中美经贸会谈为全球经济纾压增信
  • 网信部门曝光网络谣言典型案例,“AI预测彩票号码百分百中奖”等在列
  • 宁德时代港股募资预计最高至50亿美元:90%将投向匈牙利项目
  • 让“五颜六色”面孔讲述上海故事,2025年上海城市推荐官开启选拔