From 9ef80e04458d4b12ad5ec586d83b9f6bff22eb5d Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Thu, 24 Apr 2025 17:46:07 +0800 Subject: [PATCH] feat(rabbitmq): 添加活动订单项核销功能 --- src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java | 3 + src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java | 16 ++++++++ src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java | 13 ++++++ src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java | 32 +++++++++++++++ src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java | 2 + src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java | 1 src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java | 7 +++ 7 files changed, 73 insertions(+), 1 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java b/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java index 5c4f242..af0f67a 100644 --- a/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java +++ b/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java @@ -170,4 +170,20 @@ return BindingBuilder.bind(vipLevelUpQueue()).to(vipLevelUp()).with(RabbitQueueEnum.VIP_LEVEL_UP.getRoute()); } + + @Bean + public DirectExchange activityOrderCheckExchange() { + return new DirectExchange(RabbitQueueEnum.ACTIVITY_ORDER_ITEM_CHECK.getExchange()); + } + + @Bean + public Queue activityOrderCheckQueue() { + return new Queue(QueueConstants.ACTIVITY_ORDER_ITEM_CHECK); + } + + @Bean + public Binding activityOrderCheckBind() { + return BindingBuilder.bind(activityOrderCheckQueue()).to(activityOrderCheckExchange()).with(RabbitQueueEnum.ACTIVITY_ORDER_ITEM_CHECK.getRoute()); + } + } diff --git a/src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java b/src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java index 138d9dd..72bff4a 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java @@ -64,4 +64,6 @@ void activityStart(); FebsResponse checkOrder(ApiCheckOrderDto dto); + + void checkActivityItem(Long orderId); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java index e244e5d..d61a600 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java @@ -22,6 +22,7 @@ import cc.mrbird.febs.mall.vo.activity.ApiVoteActivityHotVo; import cc.mrbird.febs.pay.model.BrandWCPayRequestData; import cc.mrbird.febs.pay.service.IXcxPayService; +import cc.mrbird.febs.rabbit.producter.AgentProducer; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateTime; @@ -60,6 +61,7 @@ private final IXcxPayService iXcxPayService; private final IApiMallMemberWalletService iApiMallMemberWalletService; private final HappyActivityCategoryMapper happyActivityCategoryMapper; + private final AgentProducer agentProducer; @Override public FebsResponse activityList(ApiActivityInfoDto dto) { @@ -795,8 +797,9 @@ happyActivityOrderItem.setTransferItemId(memberId); happyActivityOrderItemMapper.updateById(happyActivityOrderItem); - HappyActivity happyActivity = this.baseMapper.selectById(happyActivityOrderItem.getActivityId()); + agentProducer.sendCheckActivityItem(happyActivityOrderItem.getOrderId()); + HappyActivity happyActivity = this.baseMapper.selectById(happyActivityOrderItem.getActivityId()); ApiCheckOrderVo apiCheckOrderVo = new ApiCheckOrderVo(); apiCheckOrderVo.setActivityName(happyActivity.getName()); apiCheckOrderVo.setActivityStartTime(happyActivity.getStartTime()); @@ -813,6 +816,33 @@ return new FebsResponse().fail().message("核销失败!"); } + /** + * 检查活动订单项的状态 + * 当指定订单的所有活动订单项都不处于"未使用"状态时,将订单状态更新为"已使用" + * + * @param orderId 订单ID,用于查询活动订单项和订单信息 + */ + @Override + public void checkActivityItem(Long orderId) { + // 查询指定订单ID的活动订单项数量,且状态为"未使用" + Integer integer = happyActivityOrderItemMapper.selectCount( + new LambdaQueryWrapper<HappyActivityOrderItem>() + .eq(HappyActivityOrderItem::getOrderId, orderId) + .eq(HappyActivityOrderItem::getState, StateUpDownEnum.DOWN.getCode()) + ); + // 如果没有找到任何未使用的活动订单项 + if(0 == integer){ + // 根据订单ID查询订单信息 + HappyActivityOrder happyActivityOrder = happyActivityOrderMapper.selectById(orderId); + // 更新订单状态为"已使用" + happyActivityOrder.setState(StateUpDownEnum.ORDER_STATE_USED.getCode()); + // 保存更新后的订单信息 + happyActivityOrderMapper.updateById(happyActivityOrder); + } + // 结束方法执行 + return; + } + @Override public FebsResponse voteActivityHot(Long id) { diff --git a/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java b/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java index 1de63b7..3c0f198 100644 --- a/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java +++ b/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java @@ -5,6 +5,7 @@ * @date 2021-09-25 **/ public class QueueConstants { + public static final String ACTIVITY_ORDER_ITEM_CHECK = "queue_activity_order_item_check"; public static final String QUEUE_DEFAULT = "queue_default_qay"; public static final String AGENT_AUTO_LEVEL_UP = "queue_agent_auto_level_up_qay"; diff --git a/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java b/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java index 366ac20..bd3f44a 100644 --- a/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java +++ b/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java @@ -1,5 +1,6 @@ package cc.mrbird.febs.rabbit.consumer; +import cc.mrbird.febs.mall.service.HappyActivityService; import cc.mrbird.febs.mall.service.IAgentService; import cc.mrbird.febs.mall.service.IApiMallOrderInfoService; import cc.mrbird.febs.mall.service.IMemberProfitService; @@ -29,6 +30,8 @@ private IAgentService agentService; @Autowired private IMemberProfitService memberProfitService; + @Autowired + private HappyActivityService happyActivityService; @RabbitListener(queues = QueueConstants.QUEUE_DEFAULT) public void agentReturn(Message message, Channel channel) { @@ -106,4 +109,14 @@ log.error("会员升级消息异常", e); } } + + @RabbitListener(queues = QueueConstants.ACTIVITY_ORDER_ITEM_CHECK) + public void checkActivityItem(Long orderId) { + log.info("收到核销活动门票:{}", orderId); + try { + happyActivityService.checkActivityItem(orderId); + } catch (Exception e) { + log.error("核销活动门票异常", e); + } + } } diff --git a/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java b/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java index f567b9c..a1f4eb5 100644 --- a/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java +++ b/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java @@ -6,6 +6,9 @@ @Getter public enum RabbitQueueEnum { + + ACTIVITY_ORDER_ITEM_CHECK("exchange_activity_order_item_check", "route_key_activity_order_item_check", QueueConstants.ACTIVITY_ORDER_ITEM_CHECK), + DEFAULT("exchange_default_qay", "route_key_default_qay", "queue_default_qay"), ORDER_CANCEL_DELAY_TTL("exchange_order_delay_ttl_qay", "route_key_order_delay_ttl_qay", "queue_order_delay_ttl_qay"), diff --git a/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java b/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java index 501fdbb..1efdee6 100644 --- a/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java +++ b/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java @@ -97,4 +97,11 @@ CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString()); rabbitTemplate.convertAndSend(RabbitQueueEnum.VIP_LEVEL_UP.getExchange(), RabbitQueueEnum.VIP_LEVEL_UP.getRoute(), orderId, correlationData); } + + public void sendCheckActivityItem(Long orderId) { + log.info("核销活动门票:{}", orderId); + + CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString()); + rabbitTemplate.convertAndSend(RabbitQueueEnum.ACTIVITY_ORDER_ITEM_CHECK.getExchange(), RabbitQueueEnum.ACTIVITY_ORDER_ITEM_CHECK.getRoute(), orderId, correlationData); + } } -- Gitblit v1.9.1