From a48fae5d305f8a144975cd8b76c9dd704eac3fae Mon Sep 17 00:00:00 2001 From: JIAN Date: Mon, 16 Sep 2024 22:31:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(health):=E6=96=B0=E5=A2=9EMQ=E6=8E=A5?= =?UTF-8?q?=E6=94=B6=E6=94=AF=E4=BB=98=E6=88=90=E5=8A=9F=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../health/listener/OrderStatusListener.java | 79 +++++++++++++++++++ .../health/listener/TradeStatusListener.java | 37 --------- 2 files changed, 79 insertions(+), 37 deletions(-) create mode 100644 jzo2o-health/src/main/java/com/jzo2o/health/listener/OrderStatusListener.java delete mode 100644 jzo2o-health/src/main/java/com/jzo2o/health/listener/TradeStatusListener.java diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/listener/OrderStatusListener.java b/jzo2o-health/src/main/java/com/jzo2o/health/listener/OrderStatusListener.java new file mode 100644 index 0000000..4a847d3 --- /dev/null +++ b/jzo2o-health/src/main/java/com/jzo2o/health/listener/OrderStatusListener.java @@ -0,0 +1,79 @@ +package com.jzo2o.health.listener; + +import com.jzo2o.api.trade.enums.TradingStateEnum; +import com.jzo2o.common.constants.MqConstants; +import com.jzo2o.common.expcetions.DBException; +import com.jzo2o.common.model.msg.TradeStatusMsg; +import com.jzo2o.common.utils.CollUtils; +import com.jzo2o.common.utils.JsonUtils; +import com.jzo2o.health.constant.TradeConstants; +import com.jzo2o.health.enums.OrderPayStatusEnum; +import com.jzo2o.health.enums.OrderStatusEnum; +import com.jzo2o.health.model.OrderUpdateStatusDTO; +import com.jzo2o.health.service.IOrderCommonService; +import com.jzo2o.health.service.IOrderCreateService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.ExchangeTypes; +import org.springframework.amqp.rabbit.annotation.Exchange; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.QueueBinding; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Component; +import org.springframework.transaction.support.TransactionTemplate; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 监听MQ消息 + * @author itcast + **/ +@Slf4j +@Component +public class OrderStatusListener { + @Resource + private IOrderCommonService orderCommonService; + @Resource + private TransactionTemplate transactionTemplate; + + /** + * 接收支付成功信息 + * @param msg 消息 + */ + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = TradeConstants.MQ_TRADE_QUEUE), + exchange = @Exchange(name = MqConstants.Exchanges.TRADE, type = ExchangeTypes.TOPIC), + key = MqConstants.RoutingKeys.TRADE_UPDATE_STATUS)) + public void listenTradeUpdatePayStatusMsg(String msg) { + log.info("接收到支付结果状态的消息 ({})-> {}", MqConstants.Queues.ORDERS_TRADE_UPDATE_STATUS, msg); + + List msgList = JsonUtils.parseArray(msg).toList(TradeStatusMsg.class); + if (CollUtils.isEmpty(msgList)) { + return; + } + + // 处理当前微服务并且支付成功的订单 + List tradeStatusMsgList = msgList.stream() + .filter(statusMsg -> IOrderCreateService.PRODUCT_APP_ID.equals(statusMsg.getProductAppId()) + && TradingStateEnum.YJS.getCode().equals(statusMsg.getStatusCode())) + .collect(Collectors.toList()); + + transactionTemplate.executeWithoutResult(status -> { + for (TradeStatusMsg tradeStatusMsg : tradeStatusMsgList) { + if (!orderCommonService.updateStatus(OrderUpdateStatusDTO.builder() + .id(tradeStatusMsg.getProductOrderNo()) + .originStatus(OrderStatusEnum.NO_PAY) + .targetStatus(OrderStatusEnum.WAITING_CHECKUP) + .payStatus(OrderPayStatusEnum.PAY_SUCCESS) + .tradingOrderNo(tradeStatusMsg.getTradingOrderNo()) + .transactionId(tradeStatusMsg.getTransactionId()) + .tradingChannel(tradeStatusMsg.getTradingChannel()) + .payTime(LocalDateTime.now()).build())) { + throw new DBException("更新订单状态失败"); + } + } + }); + } +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/listener/TradeStatusListener.java b/jzo2o-health/src/main/java/com/jzo2o/health/listener/TradeStatusListener.java deleted file mode 100644 index b858ec6..0000000 --- a/jzo2o-health/src/main/java/com/jzo2o/health/listener/TradeStatusListener.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.jzo2o.health.listener; - -import com.jzo2o.common.constants.MqConstants; -import com.jzo2o.health.constant.TradeConstants; -import lombok.extern.slf4j.Slf4j; -import org.springframework.amqp.core.ExchangeTypes; -import org.springframework.amqp.rabbit.annotation.Exchange; -import org.springframework.amqp.rabbit.annotation.Queue; -import org.springframework.amqp.rabbit.annotation.QueueBinding; -import org.springframework.amqp.rabbit.annotation.RabbitListener; -import org.springframework.stereotype.Component; - -/** - * 监听mq消息,接收支付结果 - * - * @author itcast - **/ -@Slf4j -@Component -public class TradeStatusListener { - - /** - * 更新支付结果 - * 支付成功 - * - * @param msg 消息 - */ - @RabbitListener(bindings = @QueueBinding( - value = @Queue(name = TradeConstants.MQ_TRADE_QUEUE), - exchange = @Exchange(name = MqConstants.Exchanges.TRADE, type = ExchangeTypes.TOPIC), - key = MqConstants.RoutingKeys.TRADE_UPDATE_STATUS - )) - public void listenTradeUpdatePayStatusMsg(String msg) { - log.info("接收到支付结果状态的消息 ({})-> {}", MqConstants.Queues.ORDERS_TRADE_UPDATE_STATUS, msg); - - } -}