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