全部
常见问题
产品动态
精选推荐
功能建议

分析中 已回复 待规划 {{opt.name}}
分析中 已回复 待规划
运费模版设置了不送达区域下单未拦截

管理 管理 编辑 删除

问题说明:平台和门店的运费模版均设置了不送达区域,门店下单未做拦截

修改文件:app/services/order/StoreCartServices.php

修改方法:handleCartList()

public function handleCartList(int $uid, array $cartList, array $addr = [], int $shipping_type = 1, int $store_id = 0, int $is_store_delivery_type = 0)
    {
        if (!$cartList) {
            return [$cartList, [], [], [], 0, [], []];
        }
        /** @var StoreProductServices $productServices */
        $productServices = app()->make(StoreProductServices::class);
        /** @var MemberCardServices $memberCardService */
        $memberCardService = app()->make(MemberCardServices::class);
        //付费会员状态
        $vipStatus = $memberCardService->isOpenMemberCardCache('vip_price', false);
        /** @var UserLevelServices $userLevelServices */
        $userLevelServices = app()->make(UserLevelServices::class);
        //用户等级折扣
        [$userInfo, $discount] = $userLevelServices->getUserInfoAndLevelDiscount($uid);
        $tempIds = [];
        $cityId = (int)($addr['city_id'] ?? 0);
        $latitude = $this->getItem('latitude', '');
        $longitude = $this->getItem('longitude', '');
        $user_store_id = $this->getItem('store_id', 0);
        $store_id = $store_id > 0 ? $store_id : $user_store_id;
        /** @var SystemStoreServices $storeServices */
        $storeServices = app()->make(SystemStoreServices::class);
        $store_mention = $store_delivery = $store_city_delivery_status = true;
        $deliveryType = [];
        if ($store_id) {
            //配送方式:1、平台配送,2、到店自提,3、门店配送
            $deliverySettings = $storeServices->get(['id' => $store_id, 'is_del' => 0], ['delivery_type','city_delivery_status','city_delivery_type']);
            $deliveryType = is_string($deliverySettings['delivery_type']) ? explode(',', $deliverySettings['delivery_type']) : $deliverySettings['delivery_type'];
            $store_mention = in_array(2, $deliveryType);
            $store_delivery = in_array(3, $deliveryType);
            $store_city_delivery_status = $deliverySettings['city_delivery_status'];
        }
        //平台是否开启门店核销
        $store_self_mention = sys_config('store_func_status', 1) && sys_config('store_self_mention') && $store_mention;
        //同城配送开关
        $delivery_status_mention = sys_config('city_delivery_status') && $store_delivery;
        //商家自配开关
        $self_delivery_status = sys_config('self_delivery_status') && $store_city_delivery_status;
        if ($is_store_delivery_type != 2 && $shipping_type == 3) {
            $shipping_type = 1;
        }
        //不送达运费模板
        if ($shipping_type == 1 && $cityId) {
            /** @var ShippingTemplatesServices $shippingService */
            $shippingService = app()->make(ShippingTemplatesServices::class);
            $tempIds = $shippingService->getNoDeliveryTempIdsByCartList($cityId, $cartList);
        }
        $productIds = $allStock = $attrUniquesArr = [];
        if ($store_id > 0) {//平台商品,在门店购买 验证门店库存
            /** @var StoreProductAttrValueServices $skuValueServices */
            $skuValueServices = app()->make(StoreProductAttrValueServices::class);
            /** @var StoreBranchProductServices $branchProductServics */
            $branchProductServics = app()->make(StoreBranchProductServices::class);
            foreach ($cartList as $cart) {
                $productInfo = $cart['productInfo'] ?? [];
                if (!$productInfo) continue;
                $product_id = 0;
                if (in_array($productInfo['type'], [0, 2])) {
                    $product_id = $productInfo['id'];
                } else {//门店商品
                    if ($productInfo['pid'] && $productInfo['relation_id'] != $store_id) {//平台共享商品到另一个门店购买
                        $product_id = $productInfo['pid'];
                    }
                }
                if (!$product_id) {//自己门店购买不用再次验证库存
                    continue;
                }
                $productIds[] = $cart['product_id'];
                $suk = '';
                //类型 0:普通、1:秒杀、2:砍价、3:拼团、4:积分、5:套餐、6:预售、7:新人礼、8:抽奖、9:拼单、10:桌码、11:卡项、12:预约 、13:配送
                switch ($cart['type']) {
                    case 0:
                    case 6:
                    case 8:
                    case 9:
                    case 10:
                    case 11:
                    case 12:
                        $suk = $skuValueServices->value(['unique' => $cart['product_attr_unique'], 'product_id' => $cart['product_id'], 'type' => 0], 'suk');
                        break;
                    case 1:
                    case 2:
                    case 3:
                    case 4:
                    case 5:
                    case 7:
                        if ($cart['type'] == 5 && isset($cart['discount_product_id'])) {
                            $product_id = $cart['discount_product_id'];
                        } else {
                            $product_id = $cart['activity_id'];
                        }
                        $suk = $skuValueServices->value(['unique' => $cart['product_attr_unique'], 'product_id' => $product_id, 'type' => $cart['type']], 'suk');
                        break;
                }
                $branchProductInfo = $branchProductServics->isValidStoreProduct((int)$cart['product_id'], $store_id);
                if (!$branchProductInfo) {
                    continue;
                }
                $attrValue = '';
                if ($suk) {
                    $attrValue = $skuValueServices->get(['suk' => $suk, 'product_id' => $branchProductInfo['id'], 'type' => 0]);
                }
                if (!$attrValue) {
                    continue;
                }
                $allStock[$attrValue['unique']] = $attrValue['stock'];
                $attrUniquesArr[$cart['product_attr_unique']] = $attrValue['unique'];
            }
        } else {
            $productIds = array_unique(array_column($cartList, 'product_id'));
        }

        $storeInfo = [];
        if ($store_id) {
            $storeInfo = $storeServices->getNearbyStore(['id' => $store_id], '', '', '', 1);
        } else if ($latitude && $longitude) {
            $storeInfo = $storeServices->getNearbyStore([], $latitude, $longitude, '', 1);
        }
        $valid = $invalid = [];
        /** @var StoreProductLabelServices $storeProductLabelServices */
        $storeProductLabelServices = app()->make(StoreProductLabelServices::class);
        $productServices->setItem('isVip', $this->getItem('isVip', 0));
        $siteUrl = sys_config('site_url');
		//验证是否在配送范围
		$isCityStoreDeliveryScope = true;
		if ($shipping_type == 3) {
			if (isset($addr['isCityStoreDeliveryScope'])) {
				$isCityStoreDeliveryScope = $addr['isCityStoreDeliveryScope'];
			} else {
				$isCityStoreDeliveryScope = $storeServices->checkCityStoreDeliveryScope($uid, $store_id, $addr);
			}
		}
        foreach ($cartList as &$item) {
            $item['is_gift'] = 0;
            if (isset($item['cart_type']) && $item['cart_type'] == 3) {//无码商品
                $item['productInfo'] = [
                    'id' => 0, 'pid' => 0, 'type' => 1, 'relation_id' => $item['store_id'], 'store_name' => '无码商品', 'image' => $siteUrl . '/statics/images/product/uncensored_product_image.png', 'price' => $item['price'], 'delivery_type' => [], 'code' => '', 'bar_code' => '',
                    'attrInfo' => ['id' => 0, 'type' => 0, 'product_id' => 0, 'suk' => '默认', 'unique' => $item['product_attr_unique'], 'image' => $siteUrl . '/statics/images/product/uncensored_product_image.png', 'price' => $item['price'], 'stock' => 1, 'code' => '', 'bar_code' => '']
                ];
            }
            if (isset($item['productInfo']['delivery_type'])) {
                $item['productInfo']['delivery_type'] = is_string($item['productInfo']['delivery_type']) ? explode(',', $item['productInfo']['delivery_type']) : $item['productInfo']['delivery_type'];
            } else {
                $item['productInfo']['delivery_type'] = [];
            }
            if (!isset($item['productInfo']['attrInfo']) || !$item['productInfo']['attrInfo']) {
                $item['productInfo']['attrInfo'] = $item['attrInfo'] ?? [];
            }
			$item['productInfo'] = get_thumb_water($item['productInfo']);
			$productInfo = $item['productInfo'];
            $item['productInfo']['attrInfo'] = get_thumb_water($item['productInfo']['attrInfo']);
            $item['attrStatus'] = isset($item['productInfo']['attrInfo']['stock']) && $item['productInfo']['attrInfo']['stock'];
            $item['productInfo']['attrInfo']['image'] = $item['productInfo']['attrInfo']['image'] ?? $item['productInfo']['image'] ?? '';
            $item['productInfo']['attrInfo']['suk'] = $item['productInfo']['attrInfo']['suk'] ?? '已失效';

            //门店独立商品
            $isBranchProduct = isset($productInfo['type']) && isset($productInfo['pid']) && $productInfo['type'] == 1 && !$productInfo['pid'];
            $product_store_id = $isBranchProduct ? $productInfo['relation_id'] : 0;
            $item['costPrice'] = $productInfo['attrInfo']['cost'] ?? $productInfo['cost'] ?? 0;
            $item['trueStock'] = $item['branch_stock'] = $productInfo['attrInfo']['stock'] ?? $productInfo['stock'] ?? 0;
            $item['branch_sales'] = $productInfo['attrInfo']['sales'] ?? $productInfo['sales'] ?? 0;
            $item['vip_price'] = $productInfo['attrInfo']['vip_price'] ?? $productInfo['vip_price'] ?? 0;
            $item['vip_truePrice'] = 0;
            $item['price_type'] = '';
            $item['truePrice'] = $item['sum_price'] = (float)($productInfo['attrInfo']['price'] ?? $productInfo['price'] ?? 0);
            $item['service_price'] = $productInfo['reservationTimeInfo']['service_price'] ?? 0;
            $item['total_price'] = bcmul((string)$item['truePrice'], (string)$item['cart_num'], 2);
            $item['settle_price'] = bcmul((string)($productInfo['attrInfo']['settle_price'] ?? 0), (string)$item['cart_num'], 2);
            if ((!$item['type'] || !$item['activity_id']) && !$isBranchProduct) {
                [$truePrice, $vip_truePrice, $price_type] = $productServices->setLevelPrice($item['truePrice'], $uid, $userInfo, $vipStatus, $discount, $item['vip_price'], $productInfo['is_vip'] ?? 0, true, ['level_type' => $productInfo['level_type'] ?? 1, 'level_price' => $productInfo['attrInfo']['level_price'] ?? '']);
                $item['truePrice'] = $truePrice;
                $item['vip_truePrice'] = $vip_truePrice;
                $item['price_type'] = $price_type;
            }
            $item['member_price'] = bcmul((string)$item['vip_truePrice'], (string)$item['cart_num'], 2);
            $item['pay_price'] = bcmul((string)$item['truePrice'], (string)$item['cart_num'], 2);

            $item['productInfo']['store_label'] = [];
            if (isset($item['productInfo']['store_label_id']) && $item['productInfo']['store_label_id']) {
                $item['productInfo']['store_label'] = $storeProductLabelServices->getLabelCache($item['productInfo']['store_label_id'], ['id', 'label_name', 'style_type', 'color', 'bg_color', 'border_color', 'icon']);
            }
            unset($item['attrInfo']);
            $applicable_type = $item['productInfo']['applicable_type'] ?? 1;
            $applicable_store_id = [];
            if (isset($item['productInfo']['applicable_store_id'])) {
                $applicable_store_id = is_string($item['productInfo']['applicable_store_id']) ? explode(',', $item['productInfo']['applicable_store_id']) : $item['productInfo']['applicable_store_id'];
            }
            $applicableStatus = $store_id <= 0 || $applicable_type == 1 || ($applicable_type == 2 && in_array($store_id, $applicable_store_id));
            if (isset($item['status']) && $item['status'] == 0) {
                $item['is_valid'] = 0;
                $item['invalid_desc'] = '此商品已失效';
                $invalid[] = $item;
            } elseif (($item['productInfo']['type'] ?? 0) == 1 && ($item['productInfo']['pid'] ?? 0) == 0 && $storeInfo && ($item['productInfo']['relation_id'] ?? 0) != $storeInfo['id'] && $item['type'] != 10) {
                $item['is_valid'] = 0;
                $item['invalid_desc'] = '此商品不属于该门店';
                $invalid[] = $item;
            } elseif ((isset($item['productInfo']['delivery_type']) && !$item['productInfo']['delivery_type']) || in_array($item['productInfo']['product_type'], [1, 2, 3])) {
                $item['is_valid'] = 1;
                $valid[] = $item;
            } elseif (!$applicableStatus) {
                $item['is_valid'] = 0;
                $item['invalid_desc'] = '此商品未同步至该门店';
                $invalid[] = $item;
            } else {
                $condition = !in_array(isset($item['productInfo']['product_id']) ? $item['productInfo']['product_id'] : $item['productInfo']['id'], $productIds) || $item['cart_num'] > ($allStock[$attrUniquesArr[$item['product_attr_unique']] ?? ''] ?? 0);
                if ($item['type'] != 10) {
                    switch ($shipping_type) {
                        case -1://购物车列表展示
                            if ($isBranchProduct && $store_id > 0 && ($store_id != $product_store_id)) {
                                $item['is_valid'] = 0;
                                $item['invalid_desc'] = '此商品不属于该门店';
                                $invalid[] = $item;
                            } else {
                                $item['is_valid'] = 1;
                                $valid[] = $item;
                            }
                            break;
                        case 1:
                            //快递不送达
                            if ($is_store_delivery_type && $deliveryType) {
                                if (in_array($item['productInfo']['temp_id'], $tempIds) || isset($item['productInfo']['delivery_type']) && !in_array(3, $item['productInfo']['delivery_type']) || isset($item['productInfo']['store_delivery_type']) && !in_array(1, $item['productInfo']['store_delivery_type']) || !in_array(1, $deliveryType)) {
                                    $item['is_valid'] = 0;
                                    $item['invalid_desc'] = '此商品不支持快递配送/在非配送区域/门店不支持快递';
                                    $invalid[] = $item;
                                } elseif ($isBranchProduct && $store_id > 0 && $store_id != $product_store_id) {
                                    $item['is_valid'] = 0;
                                    $item['invalid_desc'] = '此商品不是该门店添加的独立商品';
                                    $invalid[] = $item;
                                } else {
                                    $item['is_valid'] = 1;
                                    $valid[] = $item;
                                }
                            } else {
                                if (in_array($item['productInfo']['temp_id'], $tempIds) || (isset($item['productInfo']['delivery_type']) && !in_array(1, $item['productInfo']['delivery_type']))) {
                                    $item['is_valid'] = 0;
                                    $item['invalid_desc'] = '此商品不支持快递配送/在非配送区域';
                                    $invalid[] = $item;
                                } elseif ($isBranchProduct && $store_id > 0 && ($store_id != $product_store_id || !in_array(1, $item['productInfo']['delivery_type']))) {
                                    $item['is_valid'] = 0;
                                    $item['invalid_desc'] = '此商品不支持门店快递配送/商品是属于该门店';
                                    $invalid[] = $item;
                                } elseif ((in_array($productInfo['type'], [0, 2]) || $productInfo['relation_id'] != $store_id) && $store_id > 0 && ($condition || (!in_array(1, $item['productInfo']['delivery_type'])))) {//平台商品 在门店购买 验证门店库存
                                    $item['is_valid'] = 0;
                                    $item['invalid_desc'] = '此商品在门店中没有库存/不支持门店配送';
                                    $invalid[] = $item;
                                } else {
                                    $item['is_valid'] = 1;
                                    $valid[] = $item;
                                }
                            }
                            break;
                        case 2:
                            //不支持到店核销
                            if (!$store_self_mention) {
                                $item['is_valid'] = 0;
                                $item['invalid_desc'] = '平台/门店已关闭核销';
                                $invalid[] = $item;
                            } elseif (isset($item['productInfo']['delivery_type']) && $item['productInfo']['delivery_type'] && !in_array(2, $item['productInfo']['delivery_type'])) {
                                $item['is_valid'] = 0;
                                $item['invalid_desc'] = '此商品不支持到店核销';
                                $invalid[] = $item;
                            } elseif ($isBranchProduct && $store_id > 0 && $store_id != $product_store_id) {
                                $item['is_valid'] = 0;
                                $item['invalid_desc'] = '此商品不属于该门店';
                                $invalid[] = $item;
                            } elseif ($item['productInfo']['product_type'] == 1) {
                                $item['is_valid'] = 0;
                                $item['invalid_desc'] = '此商品是卡密商品';
                                $invalid[] = $item;
                            } elseif ((in_array($productInfo['type'], [0, 2]) || $productInfo['relation_id'] != $store_id) && $store_id > 0 && $condition) {//平台、供应商商品 在门店购买 验证门店库存
                                $item['is_valid'] = 0;
                                $item['invalid_desc'] = '此商品在门店中没有库存';
                                $invalid[] = $item;
                            } else {
                                $item['is_valid'] = 1;
                                $valid[] = $item;
                            }
                            break;
                        case 3:
                            //不支持同城配送
                            if (!$delivery_status_mention) {
                                $item['is_valid'] = 0;
                                $item['invalid_desc'] = '平台/门店已关闭同城配送';
                                $invalid[] = $item;
                            }elseif (!$self_delivery_status) {
                                $item['is_valid'] = 0;
                                $item['invalid_desc'] = '平台/门店已关闭了同城配送商家自配';
                                $invalid[] = $item;
                            } elseif (isset($item['productInfo']['delivery_type']) && $item['productInfo']['delivery_type'] && !in_array(3, $item['productInfo']['delivery_type'])) {
                                $item['is_valid'] = 0;
                                $item['invalid_desc'] = '此商品不支持门店配送';
                                $invalid[] = $item;
                            } elseif (isset($item['productInfo']['store_delivery_type']) && $item['productInfo']['store_delivery_type'] && !in_array(2, $item['productInfo']['store_delivery_type'])) {
                                $item['is_valid'] = 0;
                                $item['invalid_desc'] = '此商品门店配送方式不正确';
                                $invalid[] = $item;
                            } elseif ($isBranchProduct && $store_id > 0 && $store_id != $product_store_id) {
                                $item['is_valid'] = 0;
                                $item['invalid_desc'] = '此商品不属于该门店';
                                $invalid[] = $item;
                            } elseif ((in_array($productInfo['type'], [0, 2]) || $productInfo['relation_id'] != $store_id) && $store_id > 0 && $condition) {//平台、供应商商品 在门店购买 验证门店库存
                                $item['is_valid'] = 0;
                                $item['invalid_desc'] = '此商品在门店中没有库存';
                                $invalid[] = $item;
                            } elseif (!$isCityStoreDeliveryScope) {
                                $item['is_valid'] = 0;
                                $item['invalid_desc'] = '此商品超出配送/核销范围';
                                $invalid[] = $item;
                            } else {
                                $item['is_valid'] = 1;
                                $valid[] = $item;
                            }
                            break;
                        case 4:
                            //无库存||下架
                            if ($isBranchProduct && $store_id > 0 && $store_id != $product_store_id) {
                                $item['is_valid'] = 0;
                                $item['invalid_desc'] = '此商品超出配送/核销范围';
                                $invalid[] = $item;
                            } elseif (in_array($productInfo['type'], [0, 2]) && $store_id > 0 && $condition) {
                                $item['is_valid'] = 0;
                                $invalid[] = $item;
                            } else {
                                $item['is_valid'] = 1;
                                $valid[] = $item;
                            }
                            break;
                        default:
                            $item['is_valid'] = 1;
                            $valid[] = $item;
                            break;
                    }
                } else {
                    if ($isBranchProduct && $store_id > 0 && $store_id != $product_store_id) {
                        $item['is_valid'] = 0;
                        $item['invalid_desc'] = '此商品不属于该门店';
                        $invalid[] = $item;
                    } elseif (in_array($productInfo['type'], [0, 2]) && $store_id > 0 && $condition) {
                        $item['is_valid'] = 0;
                        $invalid[] = $item;
                    } else {
                        $item['is_valid'] = 1;
                        $valid[] = $item;
                    }
                }
            }
            unset($item['attrInfo']);
        }


        return [$cartList, $valid, $invalid];
    }


{{voteData.voteSum}} 人已参与
支持
反对
请登录后查看

全 最后编辑于2026-01-28 16:21:32

快捷回复
回复
回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
排序 默认正序 回复倒序 点赞倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推荐': '推荐'}}
{{item.is_suggest == 1? '取消推荐': '推荐'}} 【已收集】
{{item.floor}}# 沙发 板凳 地板 {{item.floor}}# 【已收集】
{{item.user_info.title || '暂无简介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打赏
已打赏¥{{item.reward_price}}
{{item.like_count}}
分享
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打赏
已打赏¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
收起 展开更多
查看更多
打赏
已打赏¥{{reward_price}}
49
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

快速安全登录

使用微信扫码登录
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定
打赏金额
当前余额:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
请输入 0.1-{{reward_max_price}} 范围内的数值
打赏成功
¥{{price}}
完成 确认打赏

微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服
CRMEB咨询热线 400-8888-794

扫码领取产品资料

功能清单
思维导图
安装教程
CRMEB开源商城下载 源码下载 CRMEB帮助文档 帮助文档
返回顶部 返回顶部
CRMEB客服