问题说明:移动端桌码下单提交数据加载有误
修改文件:app\services\order\StoreOrderServices
修改方法:checkShipping()
public function checkShipping($uid, $cartIds, $new)
{
if ($new) {
$cartIds = explode(',', $cartIds);
$cartInfo = [];
$redis = CacheService::redisHandler();
foreach ($cartIds as $key) {
$info = $redis->get($key);
if ($info) {
$cartInfo[] = $info;
}
}
} else {
/** @var StoreCartServices $cartServices */
$cartServices = app()->make(StoreCartServices::class);
$cartInfo = $cartServices->getCartList(['uid' => $uid, 'status' => 1, 'id' => $cartIds], 0, 0, ['productInfo', 'attrInfo']);
}
if (!$cartInfo) {
throw new ValidateException('获取购物车信息失败');
}
$arr = [];
$store_id = [];
$type = 0;
//delivery_type :1、快递,2、到店核销,3、门店配送
$productType = 0;
foreach ($cartInfo as $item) {
$productInfo = $item['productInfo'] ?? [];
if (!$productInfo) continue;
$productType = $productInfo['product_type'] ?? 0;
if ($productType == 6) {//预约商品
//预约类型1:到店服务+上门服务,2:到店服务,3:上门服务
$reservation_type = (string)($productInfo['reservation_type'] ?? '1');
$reservationTypeArr = $reservation_type == 1 ? ['2', '3'] : [$reservation_type];
if (isset($item['reservation_type']) && in_array($item['reservation_type'], $reservationTypeArr)) {//选择服务方式
$delivery_type = [(string)$item['reservation_type']];
} else {
$delivery_type =[];
}
} else {
if($item['type'] == 10) {
$arr = [2];
$type = 10;
}
$delivery_type = is_string($productInfo['delivery_type']) ? explode(',', $productInfo['delivery_type']) : $productInfo['delivery_type'];
if (in_array(1, $delivery_type)) {//支持平台配送 验证平台该商品
if (isset($productInfo['type']) && $productInfo['type'] == 1 && isset($productInfo['pid']) && $productInfo['pid']) {
/** @var StoreProductServices $productServices */
$productServices = app()->make(StoreProductServices::class);
$platInfo = $productServices->getCacheProductInfo((int)$productInfo['pid']);
if (!$platInfo || $platInfo['stock'] <= 0) {
unset($delivery_type[array_search('1', $delivery_type)]);
}
}
}
}
//适用门店:0:仅平台1:所有2:部分
$applicable_type = $item['productInfo']['applicable_type'] ?? 1;
if ($applicable_type == 0) {//仅平台适用 排除门店
$delivery_type = array_diff($delivery_type, [2, 3]);
}
$arr = array_unique(array_merge($arr, $delivery_type));
if (isset($item['productInfo']['type']) && isset($item['productInfo']['relation_id']) && $item['productInfo']['type'] == 1 && $item['productInfo']['relation_id']) {
$store_id[] = $item['productInfo']['relation_id'];
}
}
$count = count($arr);
if (!$count) {
$arr = [1];
}
//平台配送
if (in_array(1, $arr)) {
$shopOperationType = sys_config('shop_operation_type', 1);
if ($shopOperationType == 3) {//单店模式,不支持平台配送
unset($arr[array_search(1, $arr)]);
}
}
/** @var SystemStoreServices $SystemStoreServe */
$SystemStoreServe = app()->make(SystemStoreServices::class);
// 门店总开关
if (!sys_config('store_func_status', 1)) {
if (in_array(2, $arr)) unset($arr[array_search(2, $arr)]);
if (in_array(3, $arr)) unset($arr[array_search(3, $arr)]);
} else {
if (in_array(2, $arr)) {//存在门店核销方式
if (sys_config('store_self_mention', 1)) {//门店核销开启
//判断有没有满足核销的店铺
if ($productType != 6 && $type != 10) {//预约商品不限制这个条件
if (!$SystemStoreServe->count(['id' => $store_id, 'delivery_type' => [1, 3], 'is_show' => 1, 'is_del' => 0])) {
unset($arr[array_search(2, $arr)]);
}
}
} else {
unset($arr[array_search(2, $arr)]);
}
}
if (in_array(3, $arr) && $productType != 6) {
//判断有没有满足配送的店铺
if (!$SystemStoreServe->count(['id' => $store_id, 'delivery_type' => [1, 2], 'is_show' => 1, 'is_del' => 0])) {
unset($arr[array_search(3, $arr)]);
}
}
}
$arr = array_merge(array_unique($arr));
return ['type' => $arr];
}