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 ee0caf18..8f322ac8 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 @@ -2099,49 +2099,29 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl 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); - } + Integer orderStateId = shopOrderInfo.getOrder_state_id(); + if (StrUtil.isBlank(orderId) || CheckUtil.isEmpty(orderStateId)) { + log.warn("[是否禁止退货] 订单ID或订单状态为空"); + return true; } - // 2. 检查订单状态是否为已收货或已完成 - Integer orderStateId = shopOrderInfo.getOrder_state_id(); - if (ObjectUtil.equal(orderStateId, StateCode.ORDER_STATE_RECEIVED) || - ObjectUtil.equal(orderStateId, StateCode.ORDER_STATE_FINISH)) { + // 2. 先判断整个订单是否可以退货(订单级别检查) + // 2.1 检查订单状态是否为已收货或已完成 + if (orderStateId.intValue() == StateCode.ORDER_STATE_RECEIVED || + orderStateId.intValue() == StateCode.ORDER_STATE_FINISH) { try { // 获取可提现时间戳 Long withdrawTime = shopOrderBaseService.getWithdrawTime(); @@ -2149,33 +2129,60 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl 0) { - log.debug("订单已超过退货期限,order_id: {}, product_id: {}", orderId, shopOrderItem.getProduct_id()); + log.debug("[是否禁止退货] 订单已超过退货期限,order_id: {}", orderId); return true; } } catch (Exception e) { - log.error("检查订单退货期限时发生异常,order_id: {}, product_id: {}", orderId, shopOrderItem.getProduct_id(), e); + log.error("[是否禁止退货] 检查订单退货期限时发生异常,order_id: {}", orderId, e); } } - // 3. 检查拉卡拉分账订单是否已提现 + // 2.2 检查拉卡拉分账订单是否已提现 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()); + log.debug("[是否禁止退货] 拉卡拉分账订单已提现,不允许退货,order_id: {}", orderId); return true; } } } catch (Exception e) { - log.error("检查拉卡拉分账状态时发生异常,order_id: {}, product_id: {}", orderId, shopOrderItem.getProduct_id(), e); + log.error("[是否禁止退货] 检查拉卡拉分账状态时发生异常,order_id: {}", orderId, e); + } + + // 3. 再判断具体商品是否可以退货(商品级别检查) + // 获取商品索引信息 + ShopProductIndex productIndex = shopProductIndex; + if (productIndex == null) { + productIndex = shopProductIndexService.get(shopOrderItem.getProduct_id()); + } + + if (productIndex == null) { + log.warn("[是否禁止退货] 商品索引信息不存在,product_id: {}", shopOrderItem.getProduct_id()); + return true; + } + + // 3.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 false; } + /** * 判断订单中某个商品是否禁止退货 *

@@ -2207,7 +2214,7 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl 0) { - log.debug("订单[{}]已过退货期,不允许退货", orderId); + log.debug("[订单是否禁止退货]订单[{}]已过退货期,不允许退货", orderId); return true; } } @@ -2238,7 +2245,7 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl