Prechádzať zdrojové kódy

提交临时工程师登录

dongxiaoqin 1 rok pred
rodič
commit
7bb8586801

+ 4 - 2
app/adminapi/lists/master_worker/MasterWorkerOnlineLists.php

@@ -42,7 +42,7 @@ class MasterWorkerOnlineLists extends BaseAdminDataLists implements ListsSearchI
     {
         // 派单搜索条件 - 工程师接单状态
         return [
-            '=' => ['mw.real_name', 'mw.mobile','mw.is_disable', 'mw.accept_order_status',  'mw.work_status'],
+            '=' => ['mw.real_name', 'mw.mobile', 'mw.accept_order_status'],
             '%like%' => ['sa.service_name'],
         ];
     }
@@ -82,7 +82,7 @@ class MasterWorkerOnlineLists extends BaseAdminDataLists implements ListsSearchI
      */
     public function lists(): array
     {
-        $fields = ['mw.*,mws.comprehensive_score, mws.weight_score,sa.service_name'];
+        $fields = ['mw.id,mw.avatar,mw.real_name,mw.mobile,mw.work_total,mw.distance,mw.accept_order_status,mw.area_name,mw.service_area_id,mws.comprehensive_score, mws.weight_score,sa.service_name'];
         $orders = ['mw.id' => 'desc'];
         $queryWhere = $this->queryWhere();
         // 根据位置排序
@@ -98,6 +98,7 @@ class MasterWorkerOnlineLists extends BaseAdminDataLists implements ListsSearchI
         $list = MasterWorker::alias('mw')
             ->join('master_worker_score mws', 'mws.worker_id = mw.id')
             ->join('service_area sa', 'sa.id = mw.service_area_id')
+            ->where(['mw.is_disable' => 0, 'mw.work_status' => 0,'mw.audit_state' => 1])
             ->where($this->searchWhere)
             ->where($queryWhere)
             ->whereRaw($distanceWhereSql)
@@ -133,6 +134,7 @@ class MasterWorkerOnlineLists extends BaseAdminDataLists implements ListsSearchI
         }
         return MasterWorker::alias('mw')
             ->join('service_area sa', 'sa.id = mw.service_area_id')
+            ->where(['mw.is_disable' => 0, 'mw.work_status' => 0,'mw.audit_state' => 1])
             ->where($this->searchWhere)
             ->where($queryWhere)
             ->whereRaw($distanceWhereSql)

+ 33 - 16
app/common/cache/MasterWokerTokenCache.php

@@ -17,6 +17,7 @@ namespace app\common\cache;
 
 use app\common\model\master_worker\MasterWorker;
 use app\common\model\master_worker\MasterWorkerSession;
+use app\common\model\master_worker\MasterWorkerTemporary;
 use app\common\model\user\User;
 use app\common\model\user\UserSession;
 
@@ -70,25 +71,41 @@ class MasterWokerTokenCache extends BaseCache
         if (empty($userSession)) {
             return [];
         }
+        if ($userSession->type == 1) {
 
-        $user = MasterWorker::where('id', '=', $userSession->user_id)
+            $user = MasterWorker::where('id', '=', $userSession->user_id)
             ->find();
 
-        $userInfo = [
-            'user_id' => $user->id,
-            'real_name'=>$user->real_name,
-            'worker_number'=>$user->worker_number,
-            'nickname' => $user->nickname,
-            'token' => $token,
-            'sn' => $user->sn,
-            'mobile' => $user->mobile,
-            'avatar' => $user->avatar,
-            'tenant_id' => $user->tenant_id,
-            'team_id' => $user->team_id,
-            'team_role' => $user->team_role,
-            'terminal' => $userSession->terminal,
-            'expire_time' => $userSession->expire_time,
-        ];
+            $userInfo = [
+                'user_id' => $user->id,
+                'real_name'=>$user->real_name,
+                'worker_number'=>$user->worker_number,
+                'nickname' => $user->nickname,
+                'token' => $token,
+                'sn' => $user->sn,
+                'mobile' => $user->mobile,
+                'avatar' => $user->avatar,
+                'tenant_id' => $user->tenant_id,
+                'team_id' => $user->team_id,
+                'team_role' => $user->team_role,
+                'terminal' => $userSession->terminal,
+                'expire_time' => $userSession->expire_time,
+                'type' => 1,
+            ];
+        } else {
+            $user = MasterWorkerTemporary::where('id', '=', $userSession->user_id)
+            ->find();
+
+            $userInfo = [
+                'user_id' => $user->id,
+                'real_name'=>$user->real_name,
+                'token' => $token,
+                'mobile' => $user->mobile,
+                'terminal' => $userSession->terminal,
+                'expire_time' => $userSession->expire_time,
+                'type' => 2,
+            ];
+        }
 
         $ttl = new \DateTime(Date('Y-m-d H:i:s', $userSession->expire_time));
         $this->set($this->prefix . $token, $userInfo, $ttl);

+ 32 - 0
app/common/model/master_worker/MasterWorkerTemporary.php

@@ -0,0 +1,32 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+namespace app\common\model\master_worker;
+
+
+use app\common\model\BaseModel;
+
+
+
+/**
+ * MasterWorkerTemporary
+ * Class MasterWorkerTemporary
+ * @package app\common\model
+ */
+class MasterWorkerTemporary extends BaseModel
+{
+    
+    protected $name = 'master_worker_temporary';
+
+}

+ 14 - 1
app/workerapi/controller/LoginController.php

@@ -35,7 +35,7 @@ use think\facade\Log;
 class LoginController extends BaseApiController
 {
 
-    public array $notNeedLogin = ['register', 'account', 'logout','testWeChat','getCredentialName','passedInterview','getRegisterId'];
+    public array $notNeedLogin = ['register', 'account', 'logout','testWeChat','getCredentialName','passedInterview','getRegisterId','mobile'];
 
 
     /**
@@ -158,5 +158,18 @@ class LoginController extends BaseApiController
         return $this->success('审核通过', ['worker_register_id'=>$params['worker_register_id']], 1, 1);
     }
 
+    /**
+     * @notes 临时工程师登录
+     * @return \think\response\Json
+     */
+    public function mobile()
+    {
+        $params = (new LoginAccountValidate())->post()->goCheck('temporary');
 
+        $result = LoginLogic::temporary($params);
+        if (false === $result) {
+            return $this->fail(LoginLogic::getError());
+        }
+        return $this->data($result);
+    }
 }

+ 5 - 0
app/workerapi/http/middleware/LoginMiddleware.php

@@ -62,6 +62,11 @@ class LoginMiddleware
                     return JsonService::fail('登录过期', [], 401);
                 }
             }
+
+            //临时工程师校验一下权限
+            if ($userInfo['type'] == 2 && $request->controller() != 'MasterWorkerTemporary') {
+                return JsonService::fail('暂无权限', [], 401);
+            }
         }
 
         //给request赋值,用于控制器

+ 34 - 3
app/workerapi/logic/LoginLogic.php

@@ -10,14 +10,12 @@ use app\common\model\master_worker\MasterWorkerAgree;
 use app\common\model\master_worker\MasterWorkerAuth;
 use app\common\model\master_worker\MasterWorkerInfo;
 use app\common\model\master_worker_register\MasterWorkerRegister;
-use app\common\model\setting\PostageRegion;
+use app\common\model\master_worker\MasterWorkerTemporary;
 use app\common\service\FileService;
 use app\common\service\sms\SmsDriver;
-use app\common\service\wechat\WeChatMnpService;
 use app\common\service\wechat\WorkerWeChatMnpService;
 use think\facade\Config;
 use app\workerapi\service\MasterWokerTokenService;
-use think\facade\Log;
 
 /**
  * @author 林海涛
@@ -287,5 +285,38 @@ class LoginLogic extends BaseLogic
         return MasterWorkerRegister::where('openid',$params['openid'])->order('id desc')->value('id')??0;
     }
 
+    public static function temporary($params)
+    {
+        try {
+            //手机验证码登录
+            $user = MasterWorkerTemporary::where('mobile',$params['account'])->findOrEmpty();
+            if($user->isEmpty()) {
+                throw new \Exception('账号不存在');
+            }
+
+            $smsDriver = new SmsDriver();
+            $result = $smsDriver->verify($params['account'], $params['code'], NoticeEnum::LOGIN_CAPTCHA);
+            if (!$result) {
+                throw new \Exception('验证码错误');
+            }
+
+            //更新登录信息
+            $user->login_time = time();
+            $user->login_ip = request()->ip();
+            $user->save();
+
+            //设置token
+            $userInfo = MasterWokerTokenService::setToken($user->id, 3, 2);
+
+            return [
+                'real_name' => $userInfo['real_name'],
+                'mobile' => $userInfo['mobile'],
+                'token' => $userInfo['token'],
+            ];
+        } catch (\Exception $e) {
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
 
 }

+ 3 - 2
app/workerapi/service/MasterWokerTokenService.php

@@ -33,10 +33,10 @@ class MasterWokerTokenService
      * @author 段誉
      * @date 2022/9/16 10:10
      */
-    public static function setToken($userId, $terminal)
+    public static function setToken($userId, $terminal,$type = 1)
     {
         $time = time();
-        $userSession = MasterWorkerSession::where([['user_id', '=', $userId], ['terminal', '=', $terminal]])->find();
+        $userSession = MasterWorkerSession::where([['user_id', '=', $userId], ['terminal', '=', $terminal], ['type','=',$type]])->find();
 
         //获取token延长过期的时间
         $expireTime = $time + Config::get('project.user_token.expire_duration');
@@ -56,6 +56,7 @@ class MasterWokerTokenService
             $userSession = MasterWorkerSession::create([
                 'user_id' => $userId,
                 'terminal' => $terminal,
+                'type' => $type,
                 'token' => create_token($userId),
                 'expire_time' => $expireTime
             ]);

+ 6 - 0
app/workerapi/validate/LoginAccountValidate.php

@@ -33,6 +33,7 @@ Class LoginAccountValidate  extends BaseValidate
         'terminal.in' => '终端参数状态值不正确',
         'scene.require' => '场景不能为空',
         'scene.in' => '场景值错误',
+        'code.require' => 'code 字段是必填项',
     ];
     /**
      * @notes 登录场景相关校验
@@ -140,4 +141,9 @@ Class LoginAccountValidate  extends BaseValidate
         }
         return '验证码错误';
     }
+
+    public function sceneTemporary()
+    {
+        $this->only(['account', 'code'])->append('code', 'require');
+    }
 }