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 index 39785df..4932f3e 100644 --- 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 @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.jzo2o.api.trade.enums.TradingStateEnum; import com.jzo2o.common.constants.MqConstants; import com.jzo2o.common.model.msg.TradeStatusMsg; +import com.jzo2o.common.utils.BeanUtils; import com.jzo2o.common.utils.CollUtils; import com.jzo2o.orders.base.enums.OrderPayStatusEnum; import com.jzo2o.orders.base.enums.OrderStatusChangeEventEnum; @@ -11,6 +12,7 @@ import com.jzo2o.orders.base.enums.OrderStatusEnum; import com.jzo2o.orders.base.handler.OrderStateMachine; import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO; import com.jzo2o.orders.manager.service.IOrdersCreateService; +import com.jzo2o.orders.manager.service.IOrdersManagerService; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.ExchangeTypes; import org.springframework.amqp.rabbit.annotation.Exchange; @@ -36,6 +38,8 @@ public class TradeStatusListener { private TransactionTemplate transactionTemplate; @Resource private OrderStateMachine orderStateMachine; + @Resource + private IOrdersManagerService ordersManagerService; @RabbitListener(bindings = @QueueBinding( value = @Queue(name = MqConstants.Queues.ORDERS_TRADE_UPDATE_STATUS), @@ -59,16 +63,16 @@ public class TradeStatusListener { for (TradeStatusMsg tradeStatusMsg : tradeStatusMsgList) { // 构造订单快照 Long orderId = tradeStatusMsg.getProductOrderNo(); + OrderSnapshotDTO orderSnapshotDTO = BeanUtils.toBean(ordersManagerService.getById(orderId), OrderSnapshotDTO.class); + orderSnapshotDTO.setOrdersStatus(OrderStatusEnum.DISPATCHING.getStatus()); + orderSnapshotDTO.setPayStatus(OrderPayStatusEnum.PAY_SUCCESS.getStatus()); + orderSnapshotDTO.setTradingOrderNo(tradeStatusMsg.getTradingOrderNo()); + orderSnapshotDTO.setThirdOrderId(tradeStatusMsg.getTransactionId()); + orderSnapshotDTO.setTradingChannel(tradeStatusMsg.getTradingChannel()); + orderSnapshotDTO.setPayTime(LocalDateTime.now()); + orderStateMachine.changeStatus(null, orderId.toString(), - OrderStatusChangeEventEnum.PAYED, OrderSnapshotDTO.builder() - .id(orderId) - .ordersStatus(OrderStatusEnum.DISPATCHING.getStatus()) - .payStatus(OrderPayStatusEnum.PAY_SUCCESS.getStatus()) - .tradingOrderNo(tradeStatusMsg.getTradingOrderNo()) - .thirdOrderId(tradeStatusMsg.getTransactionId()) - .tradingChannel(tradeStatusMsg.getTradingChannel()) - .payTime(LocalDateTime.now()) - .build()); + OrderStatusChangeEventEnum.PAYED, orderSnapshotDTO); } }); } diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersRefundService.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersRefundService.java index 35bd880..2a70fcc 100644 --- a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersRefundService.java +++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/IOrdersRefundService.java @@ -2,7 +2,7 @@ package com.jzo2o.orders.manager.service; import com.baomidou.mybatisplus.extension.service.IService; import com.jzo2o.orders.base.model.domain.OrdersRefund; -import com.jzo2o.orders.manager.model.dto.OrderCancelDTO; +import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO; import java.util.List; @@ -27,7 +27,7 @@ public interface IOrdersRefundService extends IService { * 保存退款记录信息 *
仅供内部使用!!! */ - boolean saveRefundInfo(OrderCancelDTO orderRefundInfo); + boolean saveRefundInfo(OrderSnapshotDTO orderSnapshotDTO); /** * 通过订单退款信息退款(内部无校验) diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersCanceledServiceImpl.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersCanceledServiceImpl.java index 4e1c1b7..8bffd51 100644 --- a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersCanceledServiceImpl.java +++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersCanceledServiceImpl.java @@ -8,8 +8,8 @@ import com.jzo2o.api.trade.enums.TradingStateEnum; import com.jzo2o.common.constants.UserType; import com.jzo2o.common.expcetions.DBException; import com.jzo2o.common.expcetions.ForbiddenOperationException; +import com.jzo2o.common.utils.BeanUtils; import com.jzo2o.common.utils.ObjectUtils; -import com.jzo2o.orders.base.enums.OrderRefundStatusEnum; import com.jzo2o.orders.base.enums.OrderStatusChangeEventEnum; import com.jzo2o.orders.base.enums.OrderStatusEnum; import com.jzo2o.orders.base.handler.OrderStateMachine; @@ -51,24 +51,27 @@ public class OrdersCanceledServiceImpl extends ServiceImpl 取消状态 - cancelNoPayOrder(orderCancelDTO); + cancelNoPayOrder(orderSnapshotDTO); } else if (OrderStatusEnum.DISPATCHING.getStatus().equals(ordersStatus)) { // 2. 已支付订单 -> 关闭状态 + 退款 - cancelDispatchingOrder(orderCancelDTO); + cancelDispatchingOrder(orderSnapshotDTO); } else { throw new ForbiddenOperationException("订单无法取消"); } @@ -77,6 +80,7 @@ public class OrdersCanceledServiceImpl extends ServiceImpl { - if (!saveCancelInfo(orderCancelDTO)) { + if (!saveCancelInfo(orderSnapshotDTO)) { throw new DBException("订单取消表记录表更新失败"); } @@ -117,26 +113,17 @@ public class OrdersCanceledServiceImpl extends ServiceImpl { - if (!saveCancelInfo(orderCancelDTO)) { + if (!saveCancelInfo(orderSnapshotDTO)) { throw new DBException("订单取消记录表更新失败"); } - if (!ordersRefundService.saveRefundInfo(orderCancelDTO)) { + if (!ordersRefundService.saveRefundInfo(orderSnapshotDTO)) { throw new DBException("订单退款记录表更新失败"); } @@ -148,20 +135,20 @@ public class OrdersCanceledServiceImpl extends ServiceImpl ordersRefundService .refundOrderByRefundRecord(OrdersRefund.builder() .id(orderId) - .tradingOrderNo(orderCancelDTO.getTradingOrderNo()) - .realPayAmount(orderCancelDTO.getRealPayAmount()) + .tradingOrderNo(orderSnapshotDTO.getTradingOrderNo()) + .realPayAmount(orderSnapshotDTO.getRealPayAmount()) .build())) .start(); } - private Boolean saveCancelInfo(OrderCancelDTO orderCancelInfo) { + private Boolean saveCancelInfo(OrderSnapshotDTO orderSnapshotDTO) { return SqlHelper.retBool(baseMapper.insert(OrdersCanceled.builder() - .id(orderCancelInfo.getId()) - .cancellerId(orderCancelInfo.getCurrentUserId()) - .cancelerName(orderCancelInfo.getCurrentUserName()) - .cancellerType(orderCancelInfo.getCurrentUserType()) - .cancelReason(orderCancelInfo.getCancelReason()) - .cancelTime(LocalDateTime.now()) + .id(orderSnapshotDTO.getId()) + .cancellerId(orderSnapshotDTO.getCancellerId()) + .cancelerName(orderSnapshotDTO.getCancelerName()) + .cancellerType(orderSnapshotDTO.getCancellerType()) + .cancelReason(orderSnapshotDTO.getCancelReason()) + .cancelTime(orderSnapshotDTO.getCancelTime()) .build())); } } \ No newline at end of file diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersCreateServiceImpl.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersCreateServiceImpl.java index fdad422..8a1341c 100644 --- a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersCreateServiceImpl.java +++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersCreateServiceImpl.java @@ -122,8 +122,8 @@ public class OrdersCreateServiceImpl extends ServiceImpl i .serveStartTime(serveStartTime) .lon(address.getLon()) .lat(address.getLat()) - .sortBy(sortColumn).build(); - OrderSnapshotDTO orderSnapshotDTO = BeanUtils.toBean(orderToPay, OrderSnapshotDTO.class); + .sortBy(sortColumn) + .build(); // 减小事务管理的颗粒度 return new PlaceOrderResDTO( @@ -132,7 +132,8 @@ public class OrdersCreateServiceImpl extends ServiceImpl i throw new CommonException("下单失败"); } // 初始化订单状态机 - orderStateMachine.start(null, orderId.toString(), orderSnapshotDTO); + orderStateMachine.start(null, orderId.toString(), + BeanUtils.toBean(baseMapper.selectById(orderId), OrderSnapshotDTO.class)); return orderToPay.getId(); })); } diff --git a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersRefundServiceImpl.java b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersRefundServiceImpl.java index 2f4bb5d..91fcbfa 100644 --- a/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersRefundServiceImpl.java +++ b/jzo2o-oreders/jzo2o-orders-manager/src/main/java/com/jzo2o/orders/manager/service/impl/OrdersRefundServiceImpl.java @@ -10,9 +10,9 @@ import com.jzo2o.common.utils.ObjectUtils; import com.jzo2o.orders.base.enums.OrderStatusEnum; import com.jzo2o.orders.base.mapper.OrdersRefundMapper; import com.jzo2o.orders.base.model.domain.OrdersRefund; +import com.jzo2o.orders.base.model.dto.OrderSnapshotDTO; import com.jzo2o.orders.base.model.dto.OrderUpdateStatusDTO; import com.jzo2o.orders.base.service.IOrdersCommonService; -import com.jzo2o.orders.manager.model.dto.OrderCancelDTO; import com.jzo2o.orders.manager.service.IOrdersRefundService; import org.springframework.stereotype.Service; import org.springframework.transaction.support.TransactionTemplate; @@ -50,11 +50,11 @@ public class OrdersRefundServiceImpl extends ServiceImpl