From 4959f8ae647d09b0a61e883fc0295aa8abd6cab3 Mon Sep 17 00:00:00 2001 From: Jack <46790855@qq.com> Date: Mon, 20 Oct 2025 21:54:50 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E5=86=99=E7=A6=81=E6=AD=A2=E9=80=80?= =?UTF-8?q?=E8=B4=A7=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ShopOrderReturnServiceImpl.java | 121 +++++++++++++----- 1 file changed, 87 insertions(+), 34 deletions(-) diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderReturnServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderReturnServiceImpl.java index c9aa5a49..ee0caf18 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderReturnServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderReturnServiceImpl.java @@ -1595,12 +1595,8 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl forbiddenStates = Arrays.asList( - StateCode.ORDER_STATE_SHIPPED, - StateCode.ORDER_STATE_RECEIVED, - StateCode.ORDER_STATE_FINISH); - if (order_state_id != null && !forbiddenStates.contains(order_state_id)) { + // 订单不是禁止退货(能退货)的情况下 + if (order_state_id != null && !isOrderDenyReturn(order_id)) { logger.info("处理运费和打包费事宜:{}", order_id); ShopOrderData order_data_row = shopOrderDataService.get(order_id); @@ -2097,51 +2093,108 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl contractTypeIds = Convert.toList(Integer.class, shopProductIndex.getContract_type_ids()); + // 获取商品索引信息 + ShopProductIndex productIndex = shopProductIndex; + if (productIndex == null) { + productIndex = shopProductIndexService.get(shopOrderItem.getProduct_id()); + } - //start判断是否可以申请退款 - // 1、商品是否禁止退货 - if (contractTypeIds.contains(new Integer(StateCode.CONTRACT_TYPE_DENY_RETURN))) { - log.error("此商品不允许退货!"); + if (productIndex == null) { + log.warn("商品索引信息不存在,product_id: {}", shopOrderItem.getProduct_id()); return true; } - // 2、是否已经可结算, 进入可结算,不允许退货。 - if (shopOrderInfo.getOrder_state_id().intValue() == StateCode.ORDER_STATE_RECEIVED || shopOrderInfo.getOrder_state_id().intValue() == StateCode.ORDER_STATE_FINISH) { - // 可提现时间 - Long withdrawTime = shopOrderBaseService.getWithdrawTime(); + String orderId = shopOrderInfo.getOrder_id(); - //order_deal_time - if (withdrawTime.compareTo(shopOrderInfo.getOrder_deal_time()) > 0) { - log.error("此商品已过退货期,不允许退货!"); - return true; + // 1. 检查商品是否设置了禁止退货标识 + String contractTypeIdsStr = productIndex.getContract_type_ids(); + if (StrUtil.isNotBlank(contractTypeIdsStr)) { + try { + List contractTypeIds = Convert.toList(Integer.class, contractTypeIdsStr); + if (contractTypeIds != null && contractTypeIds.contains(StateCode.CONTRACT_TYPE_DENY_RETURN)) { + log.debug("商品设置了禁止退货标识,order_id: {}, product_id: {}", orderId, shopOrderItem.getProduct_id()); + return true; + } + } catch (Exception e) { + log.error("解析商品保障类型失败,order_id: {}, product_id: {}", orderId, shopOrderItem.getProduct_id(), e); } } - return is_deny_return; + // 2. 检查订单状态是否为已收货或已完成 + Integer orderStateId = shopOrderInfo.getOrder_state_id(); + if (ObjectUtil.equal(orderStateId, StateCode.ORDER_STATE_RECEIVED) || + ObjectUtil.equal(orderStateId, StateCode.ORDER_STATE_FINISH)) { + + try { + // 获取可提现时间戳 + Long withdrawTime = shopOrderBaseService.getWithdrawTime(); + Long orderDealTime = shopOrderInfo.getOrder_deal_time(); + + // 检查是否超过退货期限 + if (orderDealTime != null && withdrawTime.compareTo(orderDealTime) > 0) { + log.debug("订单已超过退货期限,order_id: {}, product_id: {}", orderId, shopOrderItem.getProduct_id()); + return true; + } + } catch (Exception e) { + log.error("检查订单退货期限时发生异常,order_id: {}, product_id: {}", orderId, shopOrderItem.getProduct_id(), e); + } + } + + // 3. 检查拉卡拉分账订单是否已提现 + try { + if (lklOrderSeparateService != null && lklOrderDrawService != null) { + boolean isSeparated = lklOrderSeparateService.isOrderSeparated(orderId); + boolean isDrawn = lklOrderDrawService.isOrderDrawed(orderId); + + if (isSeparated && isDrawn) { + log.debug("拉卡拉分账订单已提现,不允许退货,order_id: {}, product_id: {}", orderId, shopOrderItem.getProduct_id()); + return true; + } + } + } catch (Exception e) { + log.error("检查拉卡拉分账状态时发生异常,order_id: {}, product_id: {}", orderId, shopOrderItem.getProduct_id(), e); + } + + // 默认允许退货 + return false; + } + + /** + * 判断订单中某个商品是否禁止退货 + *

+ * 该方法用于检查指定订单中的特定商品是否允许退货,主要检查以下几种情况: + * 1. 商品是否设置了"禁止退货"的消费者保障标识 + * 2. 订单是否已超过退货期限(已收货或已完成状态,且超过可提现时间) + * 3. 拉卡拉分账订单是否已完成提现 + * + * @param orderId 订单ID + * @param productId 商品ID + * @return boolean true表示禁止退货,false表示允许退货 + */ + public boolean ifOrderItemDenyReturn(String orderId, Long productId) { + // 复用已有的方法逻辑,避免重复代码 + return ifDenyReturn( + shopOrderInfoService.get(orderId), + null, // 不需要具体的订单商品项信息 + shopProductIndexService.get(productId) + ); }