$saas_user_id, 'is_delete' => 0]); if(empty($model)){ return [ 'code' => 401, 'msg' => '暂无司机信息' . $saas_user_id, ]; } $saas_user = get_saas_user(); return [ 'code' => 0, 'msg' => '操作成功', 'data' => [ 'driver' => $model, 'saas_user' => $saas_user, ], ]; }catch(\Exception $e){ \Yii::error([__METHOD__, $e]); return [ 'code' => 1, 'msg' => $e->getMessage(), ]; } } public function driverLineList($saas_user_id) { try{ $model = Driver::findOne(['saas_user_id' => $saas_user_id, 'is_delete' => 0]); if(empty($model)){ return [ 'code' => 401, 'msg' => '暂无司机信息', ]; } $query = DriverLine::find()->where(['is_delete' => 0]); $query->andWhere(['driver_id' => $model->id]); if($this->status >= 0){ $query->andWhere(['status' => $this->status]); } $query->orderBy('id desc'); $res = pagination_make($query); foreach ($res['list'] as &$item) { $driver_line_order = DriverLineOrder::find()->where(['line_id' => $item['id'], 'is_delete' => 0])->groupBy('cloud_store_id')->orderBy('sortkey')->asArray()->all(); foreach($driver_line_order as &$lo){ // $lo['store'] = Store::findOne($lo['store_id']); } $item['line_order'] = $driver_line_order; $item['driver'] = $model; } return [ 'code' => 0, 'msg' => 'success', 'data' => $res, 'driver' => $model, ]; }catch(\Exception $e){ \Yii::error([__METHOD__, $e]); return [ 'code' => 1, 'msg' => $e->getMessage(), ]; } } public function driverLineInfo($saas_user_id, $line_id, $order_cloud_store_id) { try{ $model = Driver::findOne(['saas_user_id' => $saas_user_id, 'is_delete' => 0]); if(empty($model)){ return [ 'code' => 401, 'msg' => '暂无司机信息', ]; } $line = DriverLine::findOne($line_id); $driver_line_order = []; $driver_line_order1 = DriverLineOrder::find()->where(['line_id' => $line_id, 'is_delete' => 0])->orderBy('sortkey, goods_name'); $order_cloud_store_id && $driver_line_order1->andWhere(['cloud_store_id' => $order_cloud_store_id]); $driver_line_order1 = $driver_line_order1->asArray()->all(); foreach ($driver_line_order1 as $item) { // $item['store'] = Store::findOne($item['store_id']); if(isset($driver_line_order[$item['cloud_store_id']])){ $has = 0; foreach($driver_line_order[$item['cloud_store_id']]['goods'] as &$order){ if($order['goods_name'] == $item['goods_name'] && $order['goods_attr_name'] == $item['goods_attr_name']){ $has = 1; $order['goods_num'] += $item['goods_num']; } } if(!$has){ $driver_line_order[$item['cloud_store_id']]['goods'][] = $item; } }else{ $driver_line_order[$item['cloud_store_id']] = $item; $driver_line_order[$item['cloud_store_id']]['goods'] = [$item]; } $store_cloud = StoreCloud::findOne(['cloud_store_id' => $item['cloud_store_id'], 'is_delete' => 0]); if ($store_cloud && $store_cloud->store_id) { $store = Store::findOne($store_cloud->store_id); if ($store) { $driver_line_order[$item['cloud_store_id']]['logo'] = $store->logo ?: (Option::get('logo', $store->id, 'store')['value'] ?: Option::get('web_log', $store->id, 'web')['value']); } if ($item['md_id']) { $md = Md::findOne($item['md_id']); if ($md) { $driver_line_order[$item['cloud_store_id']]['logo'] = $md->cover_url; } } } } $driver_line_order = array_values($driver_line_order); return [ 'code' => 0, 'msg' => 'success', 'data' => $line, 'driver' => $model, 'order' => $driver_line_order, ]; }catch(\Exception $e){ \Yii::error([__METHOD__, $e]); return [ 'code' => 1, 'msg' => $e->getMessage(), ]; } } public function driverCarNo($saas_user_id, $id, $car_no, $name, $logo) { try{ $model = Driver::findOne(['saas_user_id' => $saas_user_id, 'is_delete' => 0, 'id' => $id]); if(empty($model)){ return [ 'code' => 401, 'msg' => '暂无司机信息', ]; } $car_no && $model->car_no = $car_no; $name && $model->name = $name; $logo && $model->logo = $logo; $save = $model->save(); if(!$save){ throw new \Exception('操作失败,' . array_shift($model->getFirstErrors())); } return [ 'code' => 0, 'msg' => '操作成功', ]; }catch(\Exception $e){ \Yii::error([__METHOD__, $e]); return [ 'code' => 1, 'msg' => $e->getMessage(), ]; } } public function driverTel($saas_user_id, $id, $tel) { try{ $model = Driver::findOne(['saas_user_id' => $saas_user_id, 'is_delete' => 0, 'id' => $id]); if(empty($model)){ return [ 'code' => 401, 'msg' => '暂无司机信息', ]; } // $verifyCode = $this->verifyCode($code); // if($verifyCode['code'] != 0){ // throw new \Exception('操作失败,' . $verifyCode['msg']); // } $model->tel = $tel; $save = $model->save(); if(!$save){ throw new \Exception('操作失败,' . array_shift($model->getFirstErrors())); } return [ 'code' => 0, 'msg' => '操作成功', ]; }catch(\Exception $e){ \Yii::error([__METHOD__, $e]); return [ 'code' => 1, 'msg' => $e->getMessage(), ]; } } public function getCode($tel) { $form = new LoginForm(); $form->phone = $tel; $form->store_id = get_store_id(); return $form->sendCode(LoginForm::CACHE_KEY_BIND_PHONE); } public function verifyCode($code) { $form = new LoginForm(); $form->verify_code = $code; // 验证码验证 $result = $form->verifySmsCode(LoginForm::CACHE_KEY_BIND_PHONE); if ($result['code'] == 1) { return $result; } $form->phone = post_params('phone'); $form->store_id = get_store_id(); return $form->sendCode(LoginForm::CACHE_KEY_BIND_PHONE); } //单点送达 public function lineOrderStatus($saas_user_id, $line_id, $order_cloud_store_id) { $t = \Yii::$app->db->beginTransaction(); try{ $model = Driver::findOne(['saas_user_id' => $saas_user_id, 'is_delete' => 0]); if(empty($model)){ return [ 'code' => 401, 'msg' => '暂无司机信息', ]; } $line = DriverLine::findOne(['id' => $line_id, 'driver_id' => $model->id]); if(empty($line)){ return [ 'code' => 401, 'msg' => '暂无线路信息', ]; } $line_order = DriverLineOrder::find()->where(['line_id' => $line->id, 'is_delete' => 0, 'cloud_store_id' => $order_cloud_store_id])->all(); foreach($line_order as $lorder){ $lorder->finish_time = time(); $lorder->status = DriverLine::STATUS_FINISH; $save = $lorder->save(); if(!$save){ throw new \Exception('操作失败,' . array_shift($lorder->getFirstErrors())); } } //查看剩余部分 $line_order = DriverLineOrder::find()->where(['line_id' => $line_id, 'is_delete' => 0])->andWhere(['!=', 'status', DriverLine::STATUS_FINISH])->all(); if(!$line_order){ $line->finish_time = time(); $line->status = DriverLine::STATUS_FINISH; $save = $line->save(); if(!$save){ throw new \Exception('操作失败,' . array_shift($line->getFirstErrors())); } } $t->commit(); return [ 'code' => 0, 'msg' => '操作成功', ]; }catch(\Exception $e){ $t->rollBack(); \Yii::error([__METHOD__, $e]); return [ 'code' => 1, 'msg' => $e->getMessage(), 'e' => $e, ]; } } //开始配送 public function lineStatus($saas_user_id, $line_id) { $t = \Yii::$app->db->beginTransaction(); try{ $model = Driver::findOne(['saas_user_id' => $saas_user_id, 'is_delete' => 0]); if(empty($model)){ return [ 'code' => 401, 'msg' => '暂无司机信息', ]; } $line = DriverLine::findOne(['id' => $line_id, 'driver_id' => $model->id]); $line->start_time = time(); $line->status = DriverLine::STATUS_DOING; $save = $line->save(); if(!$save){ throw new \Exception('操作失败,' . array_shift($line->getFirstErrors())); } $line_order = DriverLineOrder::find()->where(['line_id' => $line->id, 'is_delete' => 0])->all(); foreach($line_order as $lorder){ $lorder->status = DriverLine::STATUS_DOING; $save = $lorder->save(); if(!$save){ throw new \Exception('操作失败,' . array_shift($lorder->getFirstErrors())); } } $sort = $this->lineOrderSort($line_id); if($sort['code'] != 0){ throw new \Exception('操作失败,' . $sort['msg']); } $t->commit(); return [ 'code' => 0, 'msg' => '操作成功', ]; }catch(\Exception $e){ $t->rollBack(); \Yii::error([__METHOD__, $e]); return [ 'code' => 1, 'msg' => $e->getMessage(), ]; } } public function lineOrderSort($line_id) { // $form = new ADriverForm(); $line_order = DriverLineOrder::find()->where(['line_id' => $line_id, 'is_delete' => 0])->groupBy('cloud_store_id')->orderBy('sortkey')->all(); return [ 'code' => 0, 'msg' => "获取成功", 'line_order' => $line_order, ]; } }