| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\modules\alliance\models;
- use app\models\Md;
- use app\models\Option;
- use app\models\StoreCloud;
- use yii\base\Model;
- use app\models\Store;
- use app\models\SaasUser;
- use app\models\Driver;
- use app\models\DriverLine;
- use app\models\DriverLineOrder;
- use app\modules\alliance\models\LoginForm;
- use app\modules\admin\models\DriverForm as ADriverForm;
- class DriverForm extends Model
- {
- public $status;
- public function driverInfo($saas_user_id) {
- try{
- $model = Driver::findOne(['saas_user_id' => $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,
- ];
- }
- }
|