package cn.lili.listener; import cn.hutool.json.JSONUtil; import cn.lili.cache.Cache; import cn.lili.event.OrderStatusChangeEvent; import cn.lili.event.TradeEvent; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.rocketmq.tags.OrderTagsEnum; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.core.RocketMQListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; /** * 订单消息 * * @author paulG * @since 2020/12/9 **/ @Component @Slf4j @RocketMQMessageListener(topic = "${lili.data.rocketmq.order-topic}", consumerGroup = "${lili.data.rocketmq.order-group}") public class OrderMessageListener implements RocketMQListener { /** * 交易 */ @Autowired private List tradeEvent; /** * 订单状态 */ @Autowired private List orderStatusChangeEvents; /** * 缓存 */ @Autowired private Cache cache; @Override public void onMessage(MessageExt messageExt) { try { this.orderStatusEvent(messageExt); } catch (Exception e) { log.error("订单状态变更事件调用异常", e); } } /** * 订单状态变更 * @param messageExt */ public void orderStatusEvent(MessageExt messageExt) { switch (OrderTagsEnum.valueOf(messageExt.getTags())) { //订单创建 case ORDER_CREATE: String key = new String(messageExt.getBody()); TradeDTO tradeDTO = JSONUtil.toBean(cache.getString(key), TradeDTO.class); boolean result = true; for (TradeEvent event : tradeEvent) { try { event.orderCreate(tradeDTO); } catch (Exception e) { log.error("交易{}入库,在{}业务中,状态修改事件执行异常", tradeDTO.getSn(), event.getClass().getName(), e); result = false; } } //如所有步骤顺利完成 if (Boolean.TRUE.equals(result)) { //清除记录信息的trade cache key cache.remove(key); } break; //订单状态变更 case STATUS_CHANGE: for (OrderStatusChangeEvent orderStatusChangeEvent : orderStatusChangeEvents) { try { OrderMessage orderMessage = JSONUtil.toBean(new String(messageExt.getBody()), OrderMessage.class); orderStatusChangeEvent.orderChange(orderMessage); } catch (Exception e) { log.error("订单{},在{}业务中,状态修改事件执行异常", new String(messageExt.getBody()), orderStatusChangeEvent.getClass().getName(), e); } } break; default: break; } } }