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 = DepositPresaleActiveGoodsAttr::getOne([ ['attr_id'=>$data['attr_id']], ['mall_id'=>$form->mall_id], ['deposit_presale_active_id'=>$data['active_id']] ],true,[ 'goods','depositPresaleActive','goodsAttr' ]); if(empty($sku) || empty($sku['goods'])) throw new Exception('找不到该定金预售商品信息'); if(in_array($sku['goods']['goods_type'],[GoodsTypeEnum::GoodsTypePhysical])) { !isset($data['mall_id']) && $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['attr_id']; $order_goods->sign_id = $sku['goodsAttr']['sign_id']; $order_goods->goods_attr_name = $sku['goodsAttr']['name']; $order_goods->num = $buy_num; $order_goods->cost_price = $sku['goodsAttr']['cost_price']; $order_goods->price = $sku['goodsAttr']['price'] ; $order_goods->goods_price = BcHelper::mul($order_goods->num, $sku['deposit_presale_price']); $order_goods->original_goods_price = $sku['goodsAttr']['original_price']; $order_goods->pic_url = !empty($sku['goodsAttr']['pic_url']) ? $sku['goodsAttr']['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); $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'; } }