goods_list); if (!$data) { $this->addError($attr, "{$attr}数据格式错误。"); } $this->goods_list = $data; }], ['goods_list', function ($attr, $params) { foreach ($this->goods_list as $i => $goods) { if (!is_array($goods)) { $this->addError($attr, "{$goods}必须是一个数组。"); return; } if (empty($goods['id'])) { $this->addError($attr, "{$goods}['id']不能为空。"); return; } if (!is_array($goods['attr'])) { $this->addError($attr, "{$goods}['attr']必须是一个数组。"); return; } if (empty($goods['num'])) { $this->addError($attr, "{$goods}['num']不能为空。"); return; } } }], ]; } public function submit() { if (!$this->validate()) { return [ 'code' => 1, 'msg' => $this->getErrorSummary(false)[0] ]; } $food_times = FoodOrderDetail::find()->where(['order_id' => $this->order_id])->groupBy('times')->select('times')->asArray()->all(); $food_times = array_column($food_times, 'times'); $user = get_user(); // order_id存在说明已存在订单,执行加菜操作 if (!empty($this->order_id)) { $food_order = FoodOrder::findOne(['store_id' => $this->store_id, 'id' => $this->order_id, 'is_pay' => FoodOrder::IS_PAY_FALSE]); if (!$food_order) { return [ 'code' => 1, 'msg' => '订单异常' ]; } $times = max($food_times); foreach ($this->goods_list as $key => $value) { $food_goods = FoodGoods::findOne(['id' => $value['id'], ['status' => FoodGoods::STATUS_NORMAL]]); if (!$food_goods) { unset($this->goods_list[$key]); continue; } $food_detail = new FoodOrderDetail(); $food_detail->order_id = $this->order_id; $food_detail->goods_id = $value['id']; $food_detail->goods_name = $food_goods->name; $food_detail->num = $value['num']; $food_detail->total_price = $food_goods->price * $value['num']; $food_detail->created_at = time(); $food_detail->times = $times + 1; $food_detail->attr = Json::encode($value['attr']); $food_detail->pic = $value['pic']; if (!$food_detail->save()) { return [ 'code' => 1, 'msg' => 'goods_id: '. $value['id']. '-' .$food_detail->errors[0] ]; } else { $food_order = FoodOrder::findOne($this->order_id); $food_order->pay_price += $food_goods->price * $value['num']; $food_order->total_price += $food_goods->price * $value['num']; $food_order->save(); } } } else { $food_order = new FoodOrder(); $food_order->store_id = $this->store_id; $food_order->user_id = $this->user_id; $food_order->order_no = OrderNo::getOrderNo(OrderNo::ORDER_ALIPAY_FOOD); $pay_price = 0; foreach ($this->goods_list as $key => $goods) { $food_goods = FoodGoods::findOne(['id' => $goods['id'], ['status' => FoodGoods::STATUS_NORMAL]]); if (!$food_goods) { unset($this->goods_list[$key]); continue; } $pay_price += floatval($food_goods->price * $goods['num']); } $total_price = $pay_price; $food_order->total_price = $total_price; $food_order->pay_price = $pay_price; $food_order->name = $user->nickname; $food_order->mobile = $user->binding; $food_order->remark = ''; $food_order->is_pay = FoodOrder::IS_PAY_FALSE; $food_order->created_at = time(); $food_order->table_num = $this->table_num; // 添加分销关系 $share_setting = Option::get('share_basic_setting', $this->store_id); $share_setting = $share_setting ? Json::decode($share_setting['value']) : []; if (isset($share_setting['rebate']) && $share_setting['rebate']['value'] > 0) { // 一级 $food_order->parent_id = $user->id; if ($user->parent_id) { // 二级 $food_order->parent_id_1 = $user->parent_id; $user_final = User::findOne($user->parent_id); if ($user_final->parent_id) { // 三级 $food_order->parent_id_2 = $user_final->parent_id; } } } else { if ($user->parent_id) { $food_order->parent_id = $user->parent_id; // 二级 $user_second = User::findOne($user->parent_id); if ($user_second->parent_id) { $food_order->parent_id_1 = $user_second->parent_id; $user_final = User::findOne($user_second->parent_id); if ($user_final->parent_id) { // 三级 $food_order->parent_id_2 = $user_final->parent_id; } } } } if (!$food_order->save()) { return [ 'code' => 1, 'msg' => $food_order->errors[0] ]; } else { $this->order_id = $food_order->id; foreach ($this->goods_list as $key => $value) { $food_goods = FoodGoods::findOne(['id' => $value['id'], ['status' => FoodGoods::STATUS_NORMAL]]); if (!$food_goods) { unset($this->goods_list[$key]); continue; } $food_detail = new FoodOrderDetail(); $food_detail->order_id = $food_order->id; $food_detail->goods_id = $value['id']; $food_detail->goods_name = $food_goods->name; $food_detail->num = $value['num']; $food_detail->total_price = floatval($food_goods->price * $value['num']); $food_detail->created_at = time(); $food_detail->times = 1; $food_detail->attr = Json::encode($value['attr']); $food_detail->pic = $value['pic']; if (!$food_detail->save()) { return [ 'code' => 1, 'msg' => 'goods_id: '. $value['id']. '-' .$food_detail->errors[0] ]; } } } } return [ 'code' => 0, 'msg' => 'success', 'data' => $this->order_id ]; } /** * @return array|\Yansongda\Supports\Collection */ public function pay() { $goods_list = FoodOrderDetail::find()->where(['order_id' => $this->order_id])->asArray()->all(); $goods_names = ''; foreach ($goods_list as $goods) { $goods_names .= $goods['goods_name'] . ';'; } $goods_names = mb_substr($goods_names, 0, 32, 'utf-8'); $order = FoodOrder::findOne($this->order_id); // 供应链系统下单时是否使用平台商户号,1使用,0未使用 if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($order->store_id)) { $order->is_use_platform_mch = 1; $order->save(); } if ($this->pay_type == 1) { if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($order->store_id) && self_mini() === false) { $result = WechatPay::orderUnify($order,OrderNo::ORDER_MALL, $goods_names); } else { if (is_profit_pay()) { $result = WechatNewPay::orderUnify($order,OrderNo::ORDER_MALL, $goods_names); } else { $result = WechatPay::orderUnify($order,OrderNo::ORDER_MALL, $goods_names); } } if (isset($result['code']) && $result['code'] == 1) { return $result; } return [ 'code' => 0, 'msg' => 'success', 'data' => (object)$result['data'], 'res' => $result['res'], 'body' => $goods_names ]; } else { if (is_profit_pay('ali')) { $result = AlipayProfit::mini($order, $goods_names, get_user(), '', '', true); } else { $result = Alipay::mini($order, $goods_names, get_user()); } if (isset($result['code']) && $result['code'] == 1) { return $result; } return [ 'code' => 0, 'msg' => 'success', 'data' => $result['data']['trade_no'], 'body' => $goods_names ]; } } }