data) ? $form->data : Json::decode($form->data, true); $shipping_type = $data['shipping_type']; // 合法性验证 $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 = StoreGoodsAttr::getOne([ ['id' => $data['attr_id']], ['status' => StatusEnum::ENABLED] ], true, [ 'goods','goods.extra' ]); if (empty($sku)) throw new Exception('商品规格不存在或者已更改'); $freight_type_arr = explode(',', $sku['goods']['freight_type']); if (in_array($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); // } } $form['is_virtual'] = 0; if (in_array($sku['goods']['goods_type'], [GoodsTypeEnum::GoodsTypeVirtual])) { $form['is_virtual'] = 1; } $buy_num = $data['num']; 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, $sku['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); if ($form['action'] != 'preview_order') { if ($goods['goods_type'] == 1) { if (!in_array($shipping_type, $freight_type_arr)) { throw new Exception('物流类型不匹配'); } } } $order_goods_arr['freight_type'] = $freight_type_arr; $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']; $order_goods_arr['store_id'] = $sku['goods']['store_id']; $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; // $order_goods_arr['mch_id'] = $sku['goods']['supplier_id']; $form->order_goods[] = $order_goods_arr; $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 * @return string * @copyright: Copyright (c) 2020 广东七件事集团 */ public static function getType(): string { return 'buy_now'; } }