From 09fc2e9e022b88f957a02b7b66fee846ccbf4957 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E5=AE=87=E5=A5=87?= Date: Tue, 25 Nov 2025 16:05:26 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/StoreOrderServiceImpl.java | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreOrderServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreOrderServiceImpl.java index 066b9fe87..626056c13 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreOrderServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreOrderServiceImpl.java @@ -809,15 +809,17 @@ public class StoreOrderServiceImpl implements IStoreOrderService { throw new ServiceException(CharSequenceUtil.format("订单[{}]当前状态无法发货", order.getOrderNo())); } - checkNoCompleteRefundDetail(storeOrderDetailIds, "售后完成状态的商品无法发货"); + List existsRefundDetailIds = checkNoCompleteRefundDetail(storeOrderDetailIds, + "售后完成状态的商品无法发货"); List containDetails = storeOrderDetailMapper.selectList( Wrappers.lambdaQuery(StoreOrderDetail.class) .eq(StoreOrderDetail::getStoreOrderId, order.getId()) .eq(SimpleEntity::getDelFlag, Constants.UNDELETED)); for (StoreOrderDetail containDetail : containDetails) { if (EDeliveryType.SHIP_COMPLETE.getValue().equals(order.getDeliveryType())) { - //如果是货齐再发,此次发货需要包含所有明细 - if (!storeOrderDetailIds.contains(containDetail.getId())) { + //如果是货齐再发,此次发货需要包含所有明细(排除已存在售后的明细) + if (!storeOrderDetailIds.contains(containDetail.getId()) + && !existsRefundDetailIds.contains(containDetail.getId())) { throw new ServiceException(CharSequenceUtil.format("订单[{}]不可拆单发货", order.getOrderNo())); } @@ -904,15 +906,17 @@ public class StoreOrderServiceImpl implements IStoreOrderService { throw new ServiceException(CharSequenceUtil.format("订单[{}]当前状态无法发货", order.getOrderNo())); } - checkNoCompleteRefundDetail(storeOrderDetailIds, "售后完成状态的商品无法发货"); + List existsRefundDetailIds = checkNoCompleteRefundDetail(storeOrderDetailIds, + "售后完成状态的商品无法发货"); List containDetails = storeOrderDetailMapper.selectList( Wrappers.lambdaQuery(StoreOrderDetail.class) .eq(StoreOrderDetail::getStoreOrderId, order.getId()) .eq(SimpleEntity::getDelFlag, Constants.UNDELETED)); for (StoreOrderDetail containDetail : containDetails) { if (EDeliveryType.SHIP_COMPLETE.getValue().equals(order.getDeliveryType())) { - //如果是货齐再发,此次发货需要包含所有明细 - if (!storeOrderDetailIds.contains(containDetail.getId())) { + //如果是货齐再发,此次发货需要包含所有明细(排除已存在售后的明细) + if (!storeOrderDetailIds.contains(containDetail.getId()) + && !existsRefundDetailIds.contains(containDetail.getId())) { throw new ServiceException(CharSequenceUtil.format("订单[{}]不可拆单发货", order.getOrderNo())); } @@ -982,7 +986,8 @@ public class StoreOrderServiceImpl implements IStoreOrderService { public ExpressShippingLabelDTO printOrder(Long storeOrderId, List storeOrderDetailIds, Long expressId, Boolean needShip, Long operatorId) { Assert.notEmpty(storeOrderDetailIds); - checkNoCompleteRefundDetail(storeOrderDetailIds, "售后完成状态的商品无法打印快递单"); + List existsRefundDetailIds = checkNoCompleteRefundDetail(storeOrderDetailIds, + "售后完成状态的商品无法打印快递单"); ExpressManager expressManager = expressService.getExpressManager(expressId); Express express = expressService.getById(expressId); if (!BeanValidators.exists(express) || !express.getSystemDeliverAccess()) { @@ -999,8 +1004,9 @@ public class StoreOrderServiceImpl implements IStoreOrderService { .eq(SimpleEntity::getDelFlag, Constants.UNDELETED)); for (StoreOrderDetail containDetail : containDetails) { if (EDeliveryType.SHIP_COMPLETE.getValue().equals(order.getDeliveryType())) { - //如果是货齐再发,此次发货需要包含所有明细 - if (!storeOrderDetailIds.contains(containDetail.getId())) { + //如果是货齐再发,此次发货需要包含所有明细(排除已存在售后的明细) + if (!storeOrderDetailIds.contains(containDetail.getId()) + && !existsRefundDetailIds.contains(containDetail.getId())) { throw new ServiceException(CharSequenceUtil.format("订单[{}]不可拆单发货", order.getOrderNo())); } @@ -1828,20 +1834,26 @@ public class StoreOrderServiceImpl implements IStoreOrderService { * * @param orderDetailIds * @param errorMsg + * @return 已存在售后的订单明细ID */ - private void checkNoCompleteRefundDetail(Collection orderDetailIds, String errorMsg) { + private List checkNoCompleteRefundDetail(Collection orderDetailIds, String errorMsg) { if (CollUtil.isEmpty(orderDetailIds)) { - return; + return ListUtil.empty(); } List refundDetails = storeOrderDetailMapper.selectList(Wrappers .lambdaQuery(StoreOrderDetail.class) .in(StoreOrderDetail::getOriginOrderDetailId, orderDetailIds) .eq(SimpleEntity::getDelFlag, Constants.UNDELETED)); + List existsRefundDetailIds = new ArrayList<>(); for (StoreOrderDetail refundDetail : refundDetails) { + if (orderDetailIds.contains(refundDetail.getOriginOrderDetailId())) { + existsRefundDetailIds.add(refundDetail.getOriginOrderDetailId()); + } if (EOrderStatus.AFTER_SALE_COMPLETED.getValue().equals(refundDetail.getDetailStatus())) { throw new ServiceException(errorMsg); } } + return existsRefundDetailIds; } /**