feat(health):新增MQ接收支付成功结果的功能

This commit is contained in:
JIAN 2024-09-16 22:31:32 +08:00
parent 79b7dbcadd
commit a48fae5d30
2 changed files with 79 additions and 37 deletions

View File

@ -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<TradeStatusMsg> msgList = JsonUtils.parseArray(msg).toList(TradeStatusMsg.class);
if (CollUtils.isEmpty(msgList)) {
return;
}
// 处理当前微服务并且支付成功的订单
List<TradeStatusMsg> 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("更新订单状态失败");
}
}
});
}
}

View File

@ -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);
}
}