data)?$form->data:Json::decode($form->data,true); // 合法性验证 $user = User::getOne([['id'=>$form->user_id,'mall_id'=>$form->mall_id]]); if(empty($user)) throw new Exception('下单用户不存在'); if(!isset($data['num']) || (int)$data['num'] < 1) throw new Exception('请设置正确的下单数量'); $sku = GoodsAttr::getOne([['<>','status',StatusEnum::DELETE],['id'=>$data['attr_id']]],true,['goods','goods.extra']); if(empty($sku) || empty($sku['goods'])) throw new Exception('找不到产品信息'); if(in_array($sku['goods']['goods_type'],[GoodsTypeEnum::GoodsTypePhysical])) { $data['mall_id'] = $form->mall_id; $this->checkAddress($form['action'],$data,$form->user_id); $form['is_address'] = 1; } $buy_num = $data['num']; if ($buy_num > $sku['stock']) throw new Exception('商品' . $sku['goods']['goods_name'] . '库存不足! '); $order_goods = new OrderDetail(); $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']; // dd($sku); $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']; $order_goods->mall_id = $form->mall_id; // 默认数据带下单数量方便计算 $goods = $sku['goods']; $goods['number'] = $buy_num; $form->order_goods[] = ArrayHelper::toArray($order_goods); // unset($sku['product']); $form->sku[$sku['goods_id']] = $sku; $form->user = $user; return $form; } catch (Exception $e) { $this->setError($e->getMessage()); return false; } } /** * 获取下单类型 * @Author bing * @DateTime 2021-09-23 09:48:45 * @copyright: Copyright (c) 2020 广东七件事集团 * @return string */ public static function getType(): string{ return 'buy_now'; } }