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()); } } src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java
@@ -64,4 +64,6 @@ void activityStart(); FebsResponse checkOrder(ApiCheckOrderDto dto); void checkActivityItem(Long orderId); } 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) { 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"; 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); } } } 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"), 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); } }