From 31c36abeaa7f5b4721159932f9ea72f9a0df8854 Mon Sep 17 00:00:00 2001 From: JIAN Date: Tue, 10 Sep 2024 11:29:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(orders.manager):=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=9B=91=E5=90=AC=E6=94=AF=E4=BB=98=E6=88=90=E5=8A=9F=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E6=9B=B4=E6=96=B0=E6=94=AF=E4=BB=98=E7=8A=B6=E6=80=81?= =?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 --- .../base/service/IOrdersCommonService.java | 8 +- .../service/impl/OrdersCommonServiceImpl.java | 28 +++---- .../manager/listener/TradeStatusListener.java | 77 +++++++++++++++++++ .../manager/service/IOrdersCreateService.java | 5 ++ 4 files changed, 99 insertions(+), 19 deletions(-) create mode 100644 jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/listener/TradeStatusListener.java diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/IOrdersCommonService.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/IOrdersCommonService.java index c35345b..e013b2c 100644 --- a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/IOrdersCommonService.java +++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/IOrdersCommonService.java @@ -13,6 +13,8 @@ import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO; * @since 2023-08-02 */ public interface IOrdersCommonService extends IService { - - Integer updateStatus(OrderUpdateStatusDTO orderUpdateStatusReqDTO); -} + /** + * 更新指定id订单的状态 + */ + Boolean updateStatus(OrderUpdateStatusDTO orderUpdateStatusReqDTO); +} \ No newline at end of file diff --git a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/impl/OrdersCommonServiceImpl.java b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/impl/OrdersCommonServiceImpl.java index 72c781c..fa38736 100644 --- a/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/impl/OrdersCommonServiceImpl.java +++ b/jzo2o-oreders/jzo2o-orders-base/src/main/java/com/jzo2o/orders/base/service/impl/OrdersCommonServiceImpl.java @@ -1,8 +1,6 @@ package com.jzo2o.orders.base.service.impl; import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jzo2o.orders.base.mapper.OrdersMapper; import com.jzo2o.orders.base.model.domain.Orders; @@ -14,27 +12,25 @@ import org.springframework.stereotype.Service; *

* 订单表 服务实现类 *

- * * @author itcast * @since 2023-08-02 */ @Service public class OrdersCommonServiceImpl extends ServiceImpl implements IOrdersCommonService { @Override - public Integer updateStatus(OrderUpdateStatusDTO orderUpdateStatusReqDTO) { - LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate() + public Boolean updateStatus(OrderUpdateStatusDTO orderUpdateStatusReqDTO) { + return lambdaUpdate() .eq(Orders::getId, orderUpdateStatusReqDTO.getId()) .gt(Orders::getUserId, 0) - .eq(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getOriginStatus()),Orders::getOrdersStatus,orderUpdateStatusReqDTO.getOriginStatus()) + .eq(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getOriginStatus()), Orders::getOrdersStatus, orderUpdateStatusReqDTO.getOriginStatus()) .set(Orders::getOrdersStatus, orderUpdateStatusReqDTO.getTargetStatus()) - .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getPayStatus()),Orders::getPayStatus,orderUpdateStatusReqDTO.getPayStatus()) - .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getPayTime()),Orders::getPayTime,orderUpdateStatusReqDTO.getPayTime()) - .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getEvaluationTime()),Orders::getEvaluationTime,orderUpdateStatusReqDTO.getEvaluationTime()) - .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getTradingOrderNo()),Orders::getTradingOrderNo,orderUpdateStatusReqDTO.getTradingOrderNo()) - .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getTransactionId()),Orders::getTransactionId,orderUpdateStatusReqDTO.getTransactionId()) - .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getTradingChannel()),Orders::getTradingChannel,orderUpdateStatusReqDTO.getTradingChannel()) - .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getRefundStatus()),Orders::getRefundStatus,orderUpdateStatusReqDTO.getRefundStatus()); - boolean update = super.update(updateWrapper); - return update?1:0; + .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getPayStatus()), Orders::getPayStatus, orderUpdateStatusReqDTO.getPayStatus()) + .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getPayTime()), Orders::getPayTime, orderUpdateStatusReqDTO.getPayTime()) + .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getEvaluationTime()), Orders::getEvaluationTime, orderUpdateStatusReqDTO.getEvaluationTime()) + .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getTradingOrderNo()), Orders::getTradingOrderNo, orderUpdateStatusReqDTO.getTradingOrderNo()) + .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getTransactionId()), Orders::getTransactionId, orderUpdateStatusReqDTO.getTransactionId()) + .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getTradingChannel()), Orders::getTradingChannel, orderUpdateStatusReqDTO.getTradingChannel()) + .set(ObjectUtil.isNotNull(orderUpdateStatusReqDTO.getRefundStatus()), Orders::getRefundStatus, orderUpdateStatusReqDTO.getRefundStatus()) + .update(); } -} +} \ No newline at end of file diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/listener/TradeStatusListener.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/listener/TradeStatusListener.java new file mode 100644 index 0000000..d92dd81 --- /dev/null +++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/listener/TradeStatusListener.java @@ -0,0 +1,77 @@ +package com.jzo2o.orders.manager.listener; + +import com.alibaba.fastjson.JSON; +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.orders.base.enums.OrderPayStatusEnum; +import com.jzo2o.orders.base.enums.OrderStatusEnum; +import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO; +import com.jzo2o.orders.base.service.IOrdersCommonService; +import com.jzo2o.orders.manager.service.IOrdersCreateService; +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; + +/** + * 监听支付订单状态更新的消息 + * @author JIAN + */ +@Slf4j +@Component +public class TradeStatusListener { + @Resource + private IOrdersCreateService ordersCreateService; + @Resource + private IOrdersCommonService ordersCommonService; + @Resource + private TransactionTemplate transactionTemplate; + + + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = MqConstants.Queues.ORDERS_TRADE_UPDATE_STATUS), + exchange = @Exchange(name = MqConstants.Exchanges.TRADE, type = ExchangeTypes.TOPIC), + key = MqConstants.RoutingKeys.TRADE_UPDATE_STATUS)) + public void onStatusUpdateMsg(String msg) { + log.info("接收到支付结果状态的消息 ({}) -> {}", MqConstants.Queues.ORDERS_TRADE_UPDATE_STATUS, msg); + + List msgList = JSON.parseArray(msg, TradeStatusMsg.class); + if (CollUtils.isEmpty(msgList)) { + return; + } + + // 处理当前微服务并且支付成功的订单 + List tradeStatusMsgList = msgList.stream() + .filter(statusMsg -> ordersCreateService.PRODUCT_APP_ID.equals(statusMsg.getProductAppId()) + && statusMsg.getStatusCode() == OrderPayStatusEnum.PAY_SUCCESS.getStatus()) + .collect(Collectors.toList()); + + transactionTemplate.execute(status -> { + for (TradeStatusMsg tradeStatusMsg : tradeStatusMsgList) { + if (!ordersCommonService.updateStatus(OrderUpdateStatusDTO.builder() + .id(tradeStatusMsg.getProductOrderNo()) + .originStatus(OrderStatusEnum.NO_PAY.getStatus()) + .targetStatus(OrderStatusEnum.DISPATCHING.getStatus()) + .payStatus(OrderPayStatusEnum.PAY_SUCCESS.getStatus()) + .tradingOrderNo(tradeStatusMsg.getTradingOrderNo()) + .transactionId(tradeStatusMsg.getTransactionId()) + .tradingChannel(tradeStatusMsg.getTradingChannel()) + .payTime(LocalDateTime.now()).build())) { + throw new DBException("更新订单状态失败"); + } + } + return true; + }); + } +} \ No newline at end of file diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersCreateService.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersCreateService.java index 1951266..6858b43 100644 --- a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersCreateService.java +++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersCreateService.java @@ -15,6 +15,11 @@ import com.jzo2o.orders.manager.model.dto.response.PlaceOrderResDTO; * @since 2023-07-10 */ public interface IOrdersCreateService extends IService { + /** + * 微服务标识 + */ + String PRODUCT_APP_ID = "jzo2o.orders"; + /** * 客户端下单接口 */