Administrator
9 days ago 9ef80e04458d4b12ad5ec586d83b9f6bff22eb5d
feat(rabbitmq): 添加活动订单项核销功能

- 新增检查活动订单项状态的功能,当所有订单项都不处于"未使用"状态时,将订单状态更新为"已使用"
- 在 HappyActivityService 中添加 checkActivityItem 方法实现上述功能
- 在 AgentConsumer 中添加监听活动订单项检查队列的消费者
- 在 AgentProducer 中添加发送活动订单项检查消息的生产者
- 更新 RabbitConfigure 和 RabbitQueueEnum 以支持新的消息队列
7 files modified
74 ■■■■■ changed files
src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java 16 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java 32 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java 13 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java 7 ●●●●● patch | view | raw | blame | history
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);
    }
}