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