data)?$form->data:Json::decode($form->data,true); if(empty($data['attr_ids'])) throw new Exception('请选择商品'); $attr_ids = $data['attr_ids']; $redis = Yii::$app->redis; $result = $redis->hmget(StoreCart::$key.$form->user_id,...$attr_ids); $user = User::getOne([['id'=>$form->user_id,'mall_id'=>$form->mall_id]]); if(empty($user)) throw new Exception('下单用户不存在'); $carts = array_map(function ($val){ return $val?json_decode($val,true):[]; },$result); $attr_id_arr = array_column($carts,'attr_id'); if(empty($attr_id_arr)) throw new Exception('购物车为空'); $num_arr = array_column($carts,'num','attr_id'); $params['where'] = [['=','status',StatusEnum::ENABLED],['id'=>$attr_id_arr]]; $params['with'] = ['goods', 'goods.extra']; $sku_arr = StoreGoodsAttr::lists($params,true); $goods_type = []; $freight_type_arr = []; $form['is_virtual'] = 0; foreach($sku_arr as $k=>$sku){ if(!in_array($sku['goods']['goods_type'],$goods_type)) $goods_type[] =$sku['goods']['goods_type']; $freight_type = explode(',',$sku['goods']['freight_type']); if(empty($freight_type_arr)){ $freight_type_arr = $freight_type; }else{ $freight_type_arr = array_intersect($freight_type_arr,$freight_type); } if($sku['goods']['goods_type']==GoodsTypeEnum::GoodsTypePhysical){ // if($data['shipping_type']!=ShippingTypeEnum::PICKUP){ $form['is_address'] = 1; $data['mall_id'] = $form->mall_id; $this->checkAddress($form['action'],$data,$form->user_id); // } } if($sku['goods']['goods_type']==GoodsTypeEnum::GoodsTypeVirtual){ $form['is_virtual'] = 1; } } // 商品类型 $goods_types = array_unique(array_column(array_column($sku_arr ?? [], 'goods'), 'goods_type')); if(count($goods_types) > 1) throw new Exception('不同类型的商品不能一起下单'); if(count($sku_arr)>2){ if(count($goods_type)>1) throw new Exception('不同类型的商品不能一起下单'); if(empty($freight_type_arr)) throw new Exception('不同属性的商品不能一起下单'); } foreach ($sku_arr as $k=>$sku){ if(empty($sku) || empty($sku['goods'])) throw new Exception('该下单的产品不存在或者已经删除'); if(empty($num_arr[$sku['id']])) throw new Exception('请设置正确的下单数量'); $buy_num = $num_arr[$sku['id']]; if ($buy_num > $sku['stock']) throw new Exception('商品' . $sku['goods']['goods_name'] . '库存不足! '); if ($sku['goods']['check_status'] != '1') throw new Exception('商品' . $sku['goods']['goods_name'] . '不是已通过审核的商品 '); if ($sku['goods']['is_on_sale'] != '1') throw new Exception('商品' . $sku['goods']['goods_name'] . '已下架 '); $order_goods = new StoreOrderDetail(); $order_goods = $order_goods->loadDefaultValues(); $order_goods->goods_id = $sku['goods_id']; $order_goods->goods_name = $sku['goods']['goods_name']; $order_goods->goods_attr_id = $sku['id']; $order_goods->sign_id = $sku['sign_id']; $order_goods->goods_attr_name = $sku['name']; $order_goods->num = $buy_num; $order_goods->cost_price = $sku['cost_price']; $order_goods->price = $sku['price']; $order_goods->goods_price = BcHelper::mul($order_goods->num, $order_goods->price); $order_goods->original_goods_price = $order_goods->goods_price; $order_goods->pic_url = !empty($sku['pic_url']) ? $sku['pic_url'] : $sku['goods']['cover_pic']; $order_goods->user_id = $form->user_id; $order_goods->mch_id = $sku['goods']['mch_id'] ?? 0; $order_goods->mall_id = $form->mall_id; // 默认数据带下单数量方便计算 $goods = $sku['goods']; $goods['number'] = $buy_num; $order_goods_arr = ArrayHelper::toArray($order_goods); //todo 此次order_detail 没有以下字段 $order_goods_arr['supplier_type'] = $sku['goods']['supplier_type']; $order_goods_arr['supplier_id'] = $sku['goods']['supplier_id']; $order_goods_arr['supplier_goods_id'] = $sku['goods']['supplier_goods_id']; switch($sku['goods']['supplier_type']){ case 0: case 1: case 2: case 4: $order_goods_arr['store_id'] = $sku['goods']['store_id']; $order_goods_arr['mch_id'] = 0; break; case 3: $order_goods_arr['store_id'] = $sku['goods']['store_id']; $order_goods_arr['mch_id'] = $sku['goods']['supplier_id']; break; } $order_goods_arr['freight_type'] = $freight_type_arr; $order_goods_arr['credit_rate'] = $sku['goods']['credit_rate']??0; $order_goods_arr['mall_goods_id'] = $sku['goods']['mall_goods_id'] ?? 0; $order_goods_arr['mall_attr_id'] = $sku['mall_attr_id'] ?? 0; $form->order_goods[] = $order_goods_arr; $form->sku[$sku['goods_id']] = $sku; $form->user = $user; } return $form; } /** * 获取下单类型 * @Author bing * @DateTime 2021-09-23 09:48:45 * @copyright: Copyright (c) 2020 广东七件事集团 * @return string */ public static function getType(): string{ return 'cart'; } }