request->post(); $orderFormLogic = new OrderFormLogic(); $form = $orderFormLogic->getDefaultform($this->mall_id, $this->user_id); $form->attributes = $post; $form['action'] = AppEnum::ACTION_PREVIEW; !empty($form->shipping_type) && $form->shipping_type = ShippingTypeEnum::LOGISTICS; // 获取积分配置信息 $config = Yii::$app->services->setting->mall->get($this->mall_id, 'score');// 获取积分配置 $score = UserWallet::find()->select("score")->where(['user_id' => $this->user_id, 'status' => StatusEnum::ENABLED])->asArray()->scalar() ?? 0; $score_config = [ 'score_name' => $config['score_name'] ?? '积分', 'score_deduct_ratio' => empty((float)$config['score_deduct_ratio']) ? 1 : $config['score_deduct_ratio'], 'score' => $score, ]; $form->score_config = $score_config; // 初始化订单数据 $orderInitDataLogic = new OrderInitDataLogic(); $form = $orderInitDataLogic->execute($form, $form->type); if ($form === false) return $this->error($orderInitDataLogic->getError()); // 购买验证 $orderLimitLogic = new OrderLimitLogic(); $form = $orderLimitLogic->run($form); if ($form === false) return $this->error($orderLimitLogic->getError()); // 获取收货地址 $address_info = UserAddress::getUserAddress($this->user_id, $form->address_id); $form->address_id = $address_info['id']; // 营销 $orderMarketingLogic = new OrderMarketingLogic(); $form = $orderMarketingLogic->run($form); if ($form === false) return $this->error($orderMarketingLogic->getError()); $group_order_goods = $form['group_order_goods']; $marketing = $form['marketing']; $pay_type_list = \Yii::$app->services->pay->getEnablePayment($this->mall_id, $this->platform); $shipping_type_list = ShippingTypeEnum::getMap(); isset($form['total_pay_score']) && $total_pay_money[] = $form['total_pay_score'] . $score_config['score_name']; isset($form['total_pay_money']) && $total_pay_money[] = '¥'. $form['total_pay_money']; $info = compact('group_order_goods', 'marketing', 'address_info', 'pay_type_list', 'shipping_type_list'); $info['total_pay_money'] = implode('+', $total_pay_money); $info['pay_money'] = $form['total_pay_money']; $info['total_pay_score'] = $form['total_pay_score']; $info['is_address'] = $form['is_address'] ?? 0; return $this->success('操作成功', $info); } /** * 创建订单 * @Author: lun * @DateTime: 2022/1/11 0011 10:30 * @Copyright: copyright (c) 2021 广东七件事集团 * @return mixed|void */ public function actionCreate() { // 检查用户申请是否通过 if (PurchaseManager::check($this->user_id) == false) return $this->error("请申请资格"); $orderFormLogic = new OrderFormLogic(); $form = $orderFormLogic->getDefaultform($this->mall_id, $this->user_id); $form->attributes = Yii::$app->request->post(); $form['action'] = AppEnum::ACTION_CREATE; !empty($form->shipping_type) && $form->shipping_type = ShippingTypeEnum::LOGISTICS; // 获取积分配置信息 $config = Yii::$app->services->setting->mall->get($this->mall_id, 'score');// 获取积分配置 $score = UserWallet::find()->select("score")->where(['user_id' => $this->user_id, 'status' => StatusEnum::ENABLED])->asArray()->scalar() ?? 0; $score_config = [ 'score_name' => $config['score_name'] ?? '积分', 'score_deduct_ratio' => empty((float)$config['score_deduct_ratio']) ? 1 : $config['score_deduct_ratio'], 'score' => $score, ]; $form->score_config = $score_config; // 初始化订单数据 $orderInitDataLogic = new OrderInitDataLogic(); $form = $orderInitDataLogic->execute($form, $form->type); if ($form === false) return $this->error($orderInitDataLogic->getError()); // 购买验证 $orderLimitLogic = new OrderLimitLogic(); $form = $orderLimitLogic->run($form); if ($form === false) return $this->error($orderLimitLogic->getError()); // 获取收货地址 $address_info = UserAddress::getUserAddress($this->user_id, $form->address_id); $form->address_id = $address_info['id']; // 营销减免活动 $orderMarketingLogic = new OrderMarketingLogic(); $form = $orderMarketingLogic->run($form, true); if ($form === false) return $this->error($orderMarketingLogic->getError()); $res = Order::createOrder($form); if ($res === false) return $this->error(Order::getStaticError()); //删除购物车 if ($form->type == PreviewTypeEnum::CART) PurchaseCart::decreaseNumb(['user_id' => $form->user_id, 'list' => $form->attr]); return $this->success('操作成功', $res); } }