|
|
@@ -2,13 +2,17 @@ package com.yc.ship.module.trade.framework.mq;
|
|
|
|
|
|
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.rabbitmq.client.Channel;
|
|
|
import com.yc.ship.framework.common.pojo.CommonResult;
|
|
|
import com.yc.ship.framework.tenant.core.aop.TenantIgnore;
|
|
|
+import com.yc.ship.framework.tenant.core.context.TenantContextHolder;
|
|
|
import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO;
|
|
|
import com.yc.ship.module.trade.dal.mysql.insurance.InsuranceMapper;
|
|
|
+import com.yc.ship.module.trade.enums.TradeOrderStatusEnum;
|
|
|
+import com.yc.ship.module.trade.framework.aop.TradeOrderLogAspect;
|
|
|
import com.yc.ship.module.trade.service.insurance.InsuranceService;
|
|
|
import com.yc.ship.module.trade.service.order.TradeOrderBizService;
|
|
|
import com.yc.ship.module.trade.service.order.TradeOrderRepositoryService;
|
|
|
@@ -250,6 +254,45 @@ public class TradeMqReceiver {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 留位订单自动取消延迟消息处理
|
|
|
+ * @param data 订单ID
|
|
|
+ * @param message
|
|
|
+ * @param channel
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ @RabbitListener(queues = TradeMqConfig.DL_QUEUE_HOLD_ORDER_CANCEL, concurrency = "2")
|
|
|
+ @TenantIgnore
|
|
|
+ public void processHoldOrderCancelDelay(String data, Message message, Channel channel) throws IOException {
|
|
|
+ log.info("收到留位订单自动取消延迟消息:orderId={}", data);
|
|
|
+ try {
|
|
|
+ Long orderId = Long.parseLong(data);
|
|
|
+ TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(orderId);
|
|
|
+
|
|
|
+ // 订单不存在,直接确认消息
|
|
|
+ if (tradeOrderDO == null) {
|
|
|
+ log.warn("留位订单自动取消:订单不存在,orderId={}", orderId);
|
|
|
+ channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 只有留位状态的订单才自动取消
|
|
|
+ if (ObjectUtil.equal(tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.YD.getStatus())) {
|
|
|
+ log.info("留位订单自动取消:orderId={}, orderStatus={}", orderId, tradeOrderDO.getOrderStatus());
|
|
|
+ // 调用取消订单逻辑
|
|
|
+ tradeOrderPayService.cancelOrderByHoldTimeout(orderId);
|
|
|
+ } else {
|
|
|
+ log.info("留位订单自动取消:订单状态已变更,无需取消,orderId={}, orderStatus={}",
|
|
|
+ orderId, tradeOrderDO.getOrderStatus());
|
|
|
+ }
|
|
|
+
|
|
|
+ channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("留位订单自动取消延迟MQ处理出现错误,orderId={}", data, e);
|
|
|
+ channel.basicReject(message.getMessageProperties().getDeliveryTag(), false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@RabbitListener(queues = TradeMqConfig.QUEUE_CHECK_ORDER_SUCCESS, concurrency = "2")
|
|
|
@TenantIgnore
|
|
|
public void processCheckOrderSuccess(String data, Message message, Channel channel) throws IOException {
|