package com.peanut.modules.mq.Consumer; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.peanut.config.Constants; import com.peanut.config.DelayQueueConfig; import com.peanut.modules.common.dao.BuyOrderProductDao; import com.peanut.modules.common.dao.ShopProductDao; import com.peanut.modules.common.entity.BuyOrder; import com.peanut.modules.common.entity.BuyOrderProduct; import com.peanut.modules.common.entity.ShopProduct; import com.peanut.modules.book.service.BuyOrderService; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; /** * @Description: 消息超时取消死信队列消费者 * @Author: Cauchy * @CreateTime: 2023/10/10 */ @Component public class OrderCancelConsumer { @Autowired BuyOrderService buyOrderService; @Autowired BuyOrderProductDao buyOrderProductDao; @Autowired ShopProductDao shopProductDao; @RabbitListener(queues = DelayQueueConfig.ORDER_CANCEL_DEAD_LETTER_QUEUE) public void orderConsumer(String orderId) { BuyOrder buyOrder = buyOrderService.getById(orderId); if(buyOrder == null){ return; } if(Constants.ORDER_STATUS_TO_BE_PAID.equals(buyOrder.getOrderStatus())){ buyOrder.setOrderStatus(Constants.ORDER_STATUS_OUT_OF_TIME); //回滚库存 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(BuyOrderProduct::getOrderId,buyOrder.getOrderId()); List buyOrderProducts = buyOrderProductDao.selectList(wrapper); for (BuyOrderProduct b : buyOrderProducts){ ShopProduct shopProduct = shopProductDao.selectById(b.getProductId()); shopProduct.setProductStock(shopProduct.getProductStock()+b.getQuantity()); shopProductDao.updateById(shopProduct); } buyOrderService.updateById(buyOrder); } if(Constants.ORDER_STATUS_OUT_OF_TIME.equals(buyOrder.getOrderStatus())){ buyOrderService.removeById(buyOrder); } } }