From fe791825d888a462a19ae22e968967c6ac0dbc67 Mon Sep 17 00:00:00 2001 From: weiz Date: Fri, 10 Nov 2023 11:21:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8E=A5=E5=8F=A3=E7=AD=BE?= =?UTF-8?q?=E5=90=8D=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/middleapi/config/route.php | 20 ++++ .../controller/CompanyController.php | 107 +++++++++++++++++- .../http/middleware/AuthMiddleware.php | 27 +++++ app/middleapi/service/ApiSignService.php | 39 +++++++ 4 files changed, 187 insertions(+), 6 deletions(-) create mode 100644 app/middleapi/config/route.php create mode 100644 app/middleapi/http/middleware/AuthMiddleware.php create mode 100644 app/middleapi/service/ApiSignService.php diff --git a/app/middleapi/config/route.php b/app/middleapi/config/route.php new file mode 100644 index 000000000..ffde56529 --- /dev/null +++ b/app/middleapi/config/route.php @@ -0,0 +1,20 @@ + [ + // 权限认证 + app\middleapi\http\middleware\AuthMiddleware::class, + ], +]; diff --git a/app/middleapi/controller/CompanyController.php b/app/middleapi/controller/CompanyController.php index bba5198d2..595909d80 100644 --- a/app/middleapi/controller/CompanyController.php +++ b/app/middleapi/controller/CompanyController.php @@ -2,23 +2,118 @@ namespace app\middleapi\controller; + use app\adminapi\logic\auth\AdminLogic; use app\common\controller\BaseLikeAdminController; + use app\common\logic\CompanyLogic; + use app\common\model\auth\Admin; + use app\common\model\Company; + use app\common\model\task_scheduling\TaskScheduling; + use app\common\model\user\User; + use think\facade\Db; + use think\response\Json; class CompanyController extends BaseLikeAdminController { //公司列表 - public function lists() { - + public function lists(): Json + { + if(!$this->request->isPost()){ + return $this->fail('请求方式错误'); + } + $params=$this->request->post(['page_no','page_size','company_name','area_name','street_name','area_manager','company_type','is_contract']); + $where = []; + if(!empty($params['company_name'])){ + $where[] = ['company','like','%'.$params['company_name'].'%']; + } + if(!empty($params['area_name'])){ + $arr= Db::name('geo_area')->where('area_name','like','%'.$params['area_name'].'%')->column('area_code'); + if($arr){ + $where[]=['area','in',$arr]; + } + } + if(!empty($params['street_name'])){ + $arr= Db::name('geo_street')->where('street_name','like','%'.$params['street_name'].'%')->column('street_code'); + if($arr){ + $where[]=['street','in',$arr]; + } + } + if(!empty($params['area_manager'])){ + $arr= Admin::where('name','like','%'.$params['area_manager'].'%')->column('id'); + if($arr){ + $where[]=['area_manager','in',$arr]; + } + } + if(!empty($params['company_type'])){ + $where[] = ['company_type','=',$params['company_type']]; + } + if(!empty($params['is_contract'])){ + $where[] = ['is_contract','=',$params['is_contract']]; + } + $pageNo = !empty($params['page_no']) ? $params['page_no'] : 1; + $pageSize = !empty($params['page_size']) ? $params['page_size'] : 20; + $data = Company::where($where) + ->field(['is_authentication','id', 'id contract', 'company_name', 'organization_code', 'city', 'area', 'street', 'company_type', 'master_name', 'master_position', 'master_phone', 'master_email', 'area_manager', 'is_contract', 'deposit', 'company_money', 'shareholder_money', 'deposit_time', 'status', 'face_create_status']) + ->page($pageNo, $pageSize) + ->order(['id' => 'desc']) + ->append(['notes'], true) + ->withAttr('company_type',function($value,$data){ + return Db::name('dict_data')->where('id',$value)->value('name'); + }) + ->withAttr('area',function($value,$data){ + return Db::name('geo_area')->where('area_code',$value)->value('area_name'); + }) + ->withAttr('street',function($value,$data){ + return Db::name('geo_street')->where('street_code',$value)->value('street_name'); + }) + ->withAttr('area_manager',function($value,$data){ + return Db::name('admin')->where('id',$value)->value('name'); + }) + ->withAttr('notes',function($value,$data){ + if ($data['is_authentication'] == 1) { + return Db::name('company_authentication_fail_log')->where('company_id',$data['id'])->where('log_type', 2)->order(['id'=>'desc'])->limit(1)->value('fail_reason'); + } else { + return Db::name('company_authentication_fail_log')->where('company_id',$data['id'])->where('log_type', 1)->order(['id'=>'desc'])->limit(1)->value('fail_reason'); + } + + })->select()->toArray(); + $count = Company::where($where)->count(); + $result = [ + 'lists' => $data, + 'count' => $count + ]; + return $this->success('请求成功',$result); } //公司详情 - public function detail() { - + public function detail(): Json + { + if(!$this->request->isPost()){ + return $this->fail('请求方式错误'); + } + $params=$this->request->post(['id']); + if(empty($params['id'])){ + return $this->fail('缺少必要参数'); + } + $result = CompanyLogic::detail($params); + return $this->data($result); } //公司删除 - public function delete() { - + public function delete(): Json + { + if(!$this->request->isPost()){ + return $this->fail('请求方式错误'); + } + $params=$this->request->post(['id']); + if(empty($params['id'])){ + return $this->fail('缺少必要参数'); + } + $admin_id = Company::where('id', $params['id'])->value('admin_id'); + User::where('company_id', $params['id'])->update(['delete_time' => time()]); + TaskScheduling::where('company_id', $params['id'])->update(['delete_time' => time()]); + AdminLogic::delete(['id' => $admin_id]); + CompanyLogic::delete($params); + return $this->success('删除成功', [], 1, 1); } //公司认证 diff --git a/app/middleapi/http/middleware/AuthMiddleware.php b/app/middleapi/http/middleware/AuthMiddleware.php new file mode 100644 index 000000000..eee45d13d --- /dev/null +++ b/app/middleapi/http/middleware/AuthMiddleware.php @@ -0,0 +1,27 @@ +header('appid'); + $timestamp = $request->header('timestamp'); + $sign = $request->header('sign'); + //验证参数 + if(empty($appid) || empty($timestamp) || empty($sign)){ + return JsonService::fail('缺少请求头参数', [], 0); + } + //验证签名 + $checkSign = ApiSignService::verifySign(['appid'=>$appid,'timestamp'=>$timestamp,'sign'=>$sign],env('app.app_secret')); + if($checkSign['code'] == 0){ + return JsonService::fail($checkSign['msg'],[],0); + } + return $next($request); + } + } \ No newline at end of file diff --git a/app/middleapi/service/ApiSignService.php b/app/middleapi/service/ApiSignService.php new file mode 100644 index 000000000..492de7b44 --- /dev/null +++ b/app/middleapi/service/ApiSignService.php @@ -0,0 +1,39 @@ + $v) { + if ($k == "sign" || is_array($v)) { + continue; + } + $string .= $k . "=" . $v . "&"; + } + $string = trim($string, "&"); + $string = $string . "&key=" . $appSecret; + $string = md5(md5($string)); + return strtolower($string); + } + + //检验sign是否正确 + public static function verifySign($data,$appSecret): array + { + // 验证请求, 2分钟失效 + if (time() - $data['timestamp'] > 120) { + return ['code' => 0, 'msg' => '签名已失效']; + } + //比对签名 + $clientSign = $data['sign']; + $serverSign = self::makeSign($data,$appSecret); + if ($clientSign == $serverSign) { + return ['code' => 1, 'msg' => '验证通过']; + } else { + return ['code' => 0, 'msg' => '签名校验失败']; + } + } +} \ No newline at end of file