From b87190d13539ca6f3baf7cfb3bfcbeb95616a22f Mon Sep 17 00:00:00 2001 From: "pikachu1995@126.com" Date: Fri, 22 Sep 2023 17:25:46 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=88=A4=E6=96=AD=E5=88=86=E9=94=80=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=98=AF=E5=90=A6=E5=8C=85=E5=90=AB=E9=80=80=E6=AC=BE?= =?UTF-8?q?=202.=E8=AE=A2=E5=8D=95=E8=B4=A7=E7=89=A9=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E9=80=80=E6=AC=BE=E5=88=99=E8=AE=A2=E5=8D=95=E5=8F=96=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lili/event/impl/FullDiscountExecute.java | 2 +- .../event/impl/OrderStatusHandlerExecute.java | 34 ++++++++++++++++++- .../lili/event/impl/StockUpdateExecute.java | 2 +- .../impl/order/CancelOrderTaskExecute.java | 2 +- .../DistributionOrderServiceImpl.java | 8 +++-- .../order/order/service/OrderService.java | 3 +- .../order/serviceimpl/OrderServiceImpl.java | 18 +++++----- 7 files changed, 54 insertions(+), 15 deletions(-) diff --git a/consumer/src/main/java/cn/lili/event/impl/FullDiscountExecute.java b/consumer/src/main/java/cn/lili/event/impl/FullDiscountExecute.java index 86a08cbb..7949489c 100644 --- a/consumer/src/main/java/cn/lili/event/impl/FullDiscountExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/FullDiscountExecute.java @@ -104,7 +104,7 @@ public class FullDiscountExecute implements TradeEvent, OrderStatusChangeEvent { searchParams.setOrderPromotionType(OrderPromotionTypeEnum.GIFT.name()); List orders = orderService.queryListByParams(searchParams); if (orders != null && !orders.isEmpty()) { - orderService.systemCancel(orders.get(0).getSn(),"主订单取消,赠送订单字段自动取消"); + orderService.systemCancel(orders.get(0).getSn(),"主订单取消,赠送订单字段自动取消",true); } } } diff --git a/consumer/src/main/java/cn/lili/event/impl/OrderStatusHandlerExecute.java b/consumer/src/main/java/cn/lili/event/impl/OrderStatusHandlerExecute.java index b9a4717f..d6bb11e4 100644 --- a/consumer/src/main/java/cn/lili/event/impl/OrderStatusHandlerExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/OrderStatusHandlerExecute.java @@ -1,12 +1,20 @@ package cn.lili.event.impl; +import cn.lili.event.AfterSaleStatusChangeEvent; import cn.lili.event.TradeEvent; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.cart.entity.dto.TradeDTO; +import cn.lili.modules.order.order.entity.dos.OrderItem; +import cn.lili.modules.order.order.service.OrderItemService; +import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.TradeService; +import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum; import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + /** * 订单状态处理类 * @@ -14,11 +22,15 @@ import org.springframework.stereotype.Service; * @since 2020-07-03 11:20 **/ @Service -public class OrderStatusHandlerExecute implements TradeEvent { +public class OrderStatusHandlerExecute implements TradeEvent, AfterSaleStatusChangeEvent { @Autowired private TradeService tradeService; + @Autowired + private OrderItemService orderItemService; + @Autowired + private OrderService orderService; @Override public void orderCreate(TradeDTO tradeDTO) { @@ -28,4 +40,24 @@ public class OrderStatusHandlerExecute implements TradeEvent { } } + + @Override + public void afterSaleStatusChange(AfterSale afterSale) { + if (afterSale.getServiceStatus().equals(AfterSaleStatusEnum.COMPLETE.name())) { + //循环订单货物,判断是否已经全部售后 + List orderItems = orderItemService.getByOrderSn(afterSale.getOrderSn()); + // 总退货数量 + int returnCount = 0; + // 总购买数量 + int deliverCount = 0; + for (OrderItem orderItem : orderItems) { + returnCount += orderItem.getReturnGoodsNumber(); + deliverCount += orderItem.getNum(); + } + if (returnCount == deliverCount) { + orderService.systemCancel(afterSale.getOrderSn(),"订单货物全部退款",false); + } + + } + } } diff --git a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java index ceee4a1a..6736cbe0 100644 --- a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java @@ -222,7 +222,7 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { * @param orderSn 失败入库订单信息 */ private void errorOrder(String orderSn) { - orderService.systemCancel(orderSn, outOfStockMessage); + orderService.systemCancel(orderSn, outOfStockMessage,true); } diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java index 84e34132..93b14e4f 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java @@ -54,7 +54,7 @@ public class CancelOrderTaskExecute implements EveryMinuteExecute { List list = orderService.list(queryWrapper); List cancelSnList = list.stream().map(Order::getSn).collect(Collectors.toList()); for (String sn : cancelSnList) { - orderService.systemCancel(sn, "超时未支付自动取消"); + orderService.systemCancel(sn, "超时未支付自动取消",false); } } } diff --git a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java index 429010ef..c46e47b3 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java @@ -201,9 +201,13 @@ public class DistributionOrderServiceImpl extends ServiceImpl { * * @param orderSn 订单编号 * @param reason 错误原因 + * @param refundMoney 是否退款 */ - void systemCancel(String orderSn, String reason); + void systemCancel(String orderSn, String reason,Boolean refundMoney); /** * 根据sn查询 diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index 19c2b285..ee32c368 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -318,14 +318,16 @@ public class OrderServiceImpl extends ServiceImpl implements @Override @OrderLogPoint(description = "'订单['+#orderSn+']系统取消,原因为:'+#reason", orderSn = "#orderSn") @Transactional(rollbackFor = Exception.class) - public void systemCancel(String orderSn, String reason) { + public void systemCancel(String orderSn, String reason,Boolean refundMoney) { Order order = this.getBySn(orderSn); order.setOrderStatus(OrderStatusEnum.CANCELLED.name()); order.setCancelReason(reason); this.updateById(order); - //生成店铺退款流水 - this.generatorStoreRefundFlow(order); - orderStatusMessage(order); + if(refundMoney){ + //生成店铺退款流水 + this.generatorStoreRefundFlow(order); + orderStatusMessage(order); + } } /** @@ -766,11 +768,11 @@ public class OrderServiceImpl extends ServiceImpl implements //如果未开启虚拟成团且已参团人数小于成团人数,则自动取消订单 String reason = "拼团活动结束订单未付款,系统自动取消订单"; if (CharSequenceUtil.isNotEmpty(entry.getKey())) { - this.systemCancel(entry.getKey(), reason); + this.systemCancel(entry.getKey(), reason,true); } else { for (Order order : entry.getValue()) { if (!CharSequenceUtil.equalsAny(order.getOrderStatus(), OrderStatusEnum.COMPLETED.name(), OrderStatusEnum.DELIVERED.name(), OrderStatusEnum.TAKE.name(), OrderStatusEnum.STAY_PICKED_UP.name())) { - this.systemCancel(order.getSn(), reason); + this.systemCancel(order.getSn(), reason,true); } } } @@ -795,7 +797,7 @@ public class OrderServiceImpl extends ServiceImpl implements //未付款订单自动取消 if (unpaidOrders != null && !unpaidOrders.isEmpty()) { for (Order unpaidOrder : unpaidOrders) { - this.systemCancel(unpaidOrder.getSn(), "拼团活动结束订单未付款,系统自动取消订单"); + this.systemCancel(unpaidOrder.getSn(), "拼团活动结束订单未付款,系统自动取消订单",false); } } List paidOrders = listMap.get(PayStatusEnum.PAID.name()); @@ -955,7 +957,7 @@ public class OrderServiceImpl extends ServiceImpl implements private void pintuanOrderFailed(List list) { for (Order order : list) { try { - this.systemCancel(order.getSn(), "拼团人数不足,拼团失败!"); + this.systemCancel(order.getSn(), "拼团人数不足,拼团失败!",true); } catch (Exception e) { log.error("拼团订单取消失败", e); }