feat(health):新增MQ接收支付成功结果的功能
This commit is contained in:
parent
79b7dbcadd
commit
a48fae5d30
@ -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("更新订单状态失败");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user