From 47eca696bd9f30faa45bb43750d357a7069741b4 Mon Sep 17 00:00:00 2001 From: liyinglin Date: Mon, 25 Sep 2023 09:35:03 +0800 Subject: [PATCH 1/6] 1 --- .../Controllers/Admin/AdminController.php | 64 +++++++++++++++++++ routes/api.php | 1 + 2 files changed, 65 insertions(+) diff --git a/app/Http/Controllers/Admin/AdminController.php b/app/Http/Controllers/Admin/AdminController.php index bdb1b54..0b5c85d 100644 --- a/app/Http/Controllers/Admin/AdminController.php +++ b/app/Http/Controllers/Admin/AdminController.php @@ -2,10 +2,13 @@ namespace App\Http\Controllers\Admin; +use App\Helpers\ResponseCode; use App\Models\Admin; +use App\Models\Department; use App\Models\OperateLog; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Rap2hpoutre\FastExcel\FastExcel; use Spatie\Permission\Models\Role; class AdminController extends CommonController @@ -240,4 +243,65 @@ class AdminController extends CommonController } } + /** + * @OA\Post ( + * path="/api/admin/import", + * tags={"后台管理"}, + * summary="导入数据", + * description="", + * @OA\Parameter(name="file", in="query", @OA\Schema(type="object"), required=true, description="文件"), + * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), + * @OA\Response( + * response="200", + * description="导入用户" + * ) + * ) + */ + public function import(Request $request) + { + $file = $request->file('file'); + //判断文件是否有效 + if (!($request->hasFile('file') && $file->isValid())) { + return $this->fail([ResponseCode::ERROR_BUSINESS, '文件不存在或无效']); + } + //获取文件大小 + $img_size = floor($file->getSize() / 1024); + if ($img_size >= 5 * 1024) { + return $this->fail([ResponseCode::ERROR_BUSINESS, '文件必须小于5M']); + } + //过滤文件后缀 + $ext = $file->getClientOriginalExtension(); + if (!in_array($ext, ['xls', 'xlsx', 'csv'])) { + return $this->fail([ResponseCode::ERROR_BUSINESS, '仅支持xls/xlsx/csv格式']); + } + $tempFile = $file->getRealPath(); + $dataArray = (new FastExcel)->import($tempFile)->toArray(); + // 获取所有key + $keyList = array_keys($dataArray[0]); + if (!in_array('GID(登录用户名)', $keyList)) { + return $this->fail([ResponseCode::ERROR_BUSINESS, 'GID(登录用户名)字段不存在']); + } + if (!in_array('部门', $keyList)) { + return $this->fail([ResponseCode::ERROR_BUSINESS, '部门字段不存在']); + } + if (!in_array('姓名', $keyList)) { + return $this->fail([ResponseCode::ERROR_BUSINESS, '姓名字段不存在']); + } + if (!in_array('手机号码', $keyList)) { + return $this->fail([ResponseCode::ERROR_BUSINESS, '手机号码字段不存在']); + } + $list = []; + foreach ($dataArray as $key => $value) { + $departmentId = Department::where('name', $value['部门'])->value('id'); + $whereArray = ['name' => $value['姓名']]; + $updateDataArray = ['name' => $value['姓名'], 'username' => $value['GID(登录用户名)'], + 'department_id' => $departmentId, + 'mobile' => $value['手机号码'], + 'password'=> \Illuminate\Support\Facades\Hash::make("Admin" . date("Y")) + ]; + Admin::updateOrCreate($whereArray, $updateDataArray); + } + return $this->success($list); + } + } diff --git a/routes/api.php b/routes/api.php index 08249f1..5263528 100644 --- a/routes/api.php +++ b/routes/api.php @@ -23,6 +23,7 @@ Route::middleware('auth:sanctum')->get('/user', function (Request $request) { Route::get("admin/gate/user-list", [\App\Http\Controllers\Admin\GateController::class, "uerList"]); Route::get("admin/gate/visit-list", [\App\Http\Controllers\Admin\GateController::class, "visitList"]); Route::get("admin/gate/use-code", [\App\Http\Controllers\Admin\GateController::class, "useCode"]); +Route::get("admin/import", [\App\Http\Controllers\Admin\AdminController::class, "import"]); // 后台 Route::group(["namespace" => "Admin", "prefix" => "admin", "middleware" => "sanctum.jwt:admin,rbac"], function () { From 5c932a0448b2864e5a3908b3c7115ec751a6a409 Mon Sep 17 00:00:00 2001 From: liyinglin Date: Mon, 25 Sep 2023 09:38:38 +0800 Subject: [PATCH 2/6] 1 --- routes/api.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/api.php b/routes/api.php index 5263528..7fb8ec7 100644 --- a/routes/api.php +++ b/routes/api.php @@ -23,7 +23,7 @@ Route::middleware('auth:sanctum')->get('/user', function (Request $request) { Route::get("admin/gate/user-list", [\App\Http\Controllers\Admin\GateController::class, "uerList"]); Route::get("admin/gate/visit-list", [\App\Http\Controllers\Admin\GateController::class, "visitList"]); Route::get("admin/gate/use-code", [\App\Http\Controllers\Admin\GateController::class, "useCode"]); -Route::get("admin/import", [\App\Http\Controllers\Admin\AdminController::class, "import"]); +Route::post("admin/import", [\App\Http\Controllers\Admin\AdminController::class, "import"]); // 后台 Route::group(["namespace" => "Admin", "prefix" => "admin", "middleware" => "sanctum.jwt:admin,rbac"], function () { From 42181ad1343e461319967e99ea2f53114a9f8fde Mon Sep 17 00:00:00 2001 From: liyinglin Date: Mon, 25 Sep 2023 14:12:12 +0800 Subject: [PATCH 3/6] 1 --- .../Controllers/Mobile/VisitController.php | 3 ++ ...23_09_25_140859_alert_study_logs_table.php | 33 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 database/migrations/2023_09_25_140859_alert_study_logs_table.php diff --git a/app/Http/Controllers/Mobile/VisitController.php b/app/Http/Controllers/Mobile/VisitController.php index 7cce3da..fc94ea7 100644 --- a/app/Http/Controllers/Mobile/VisitController.php +++ b/app/Http/Controllers/Mobile/VisitController.php @@ -277,6 +277,9 @@ class VisitController extends CommonController * @OA\Parameter(name="ask", in="query", @OA\Schema(type="string"), required=true, description="问题json"), * @OA\Parameter(name="expire_day", in="query", @OA\Schema(type="string"), required=true, description="有效天数"), * @OA\Parameter(name="type", in="query", @OA\Schema(type="string"), required=true, description="类型 init型"), + * @OA\Parameter(name="name", in="query", @OA\Schema(type="string"), required=true, description="名字"), + * @OA\Parameter(name="idcard", in="query", @OA\Schema(type="string"), required=true, description="身份证"), + * @OA\Parameter(name="mobile", in="query", @OA\Schema(type="string"), required=true, description="手机号"), * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Response( * response="200", diff --git a/database/migrations/2023_09_25_140859_alert_study_logs_table.php b/database/migrations/2023_09_25_140859_alert_study_logs_table.php new file mode 100644 index 0000000..933cbda --- /dev/null +++ b/database/migrations/2023_09_25_140859_alert_study_logs_table.php @@ -0,0 +1,33 @@ +string('name')->comment('姓名')->nullable(); + $table->string('mobile')->comment('手机号')->nullable(); + $table->string('idcard')->comment('身份证号')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('study_logs', function (Blueprint $table) { + // + }); + } +}; From dd24a4df6126f4d4a45cfebfb3786033abddfe1d Mon Sep 17 00:00:00 2001 From: liyinglin Date: Wed, 27 Sep 2023 10:03:53 +0800 Subject: [PATCH 4/6] 1 --- .../Controllers/Admin/StudyController.php | 31 ++++++++++++++++++ .../Controllers/Mobile/VisitController.php | 32 +++++++++++++++++++ app/Models/StudyLog.php | 5 +++ routes/api.php | 3 ++ 4 files changed, 71 insertions(+) diff --git a/app/Http/Controllers/Admin/StudyController.php b/app/Http/Controllers/Admin/StudyController.php index ded7bb1..5b057df 100644 --- a/app/Http/Controllers/Admin/StudyController.php +++ b/app/Http/Controllers/Admin/StudyController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin; use App\Models\Study; use App\Models\StudyAsk; +use App\Models\StudyLog; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Validator; use App\Helpers\ResponseCode; @@ -44,6 +45,36 @@ class StudyController extends CommonController return $this->success($list); } + /** + * @OA\Get( + * path="/api/admin/study/study-log", + * tags={"学习资料管理"}, + * summary="学习记录", + * description="", + * @OA\Parameter(name="keyword", in="query", @OA\Schema(type="string"), required=false, description="关键词"), + * @OA\Parameter(name="page_size", in="query", @OA\Schema(type="string"), required=false, description="每页显示的条数"), + * @OA\Parameter(name="page", in="query", @OA\Schema(type="string"), required=false, description="页码"), + * @OA\Parameter(name="sort_name", in="query", @OA\Schema(type="string"), required=false, description="排序字段名字"), + * @OA\Parameter(name="sort_type", in="query", @OA\Schema(type="string"), required=false, description="排序类型"), + * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), + * @OA\Response( + * response="200", + * description="暂无" + * ) + * ) + */ + public function studyLog() + { + $all = request()->all(); + $list = StudyLog::with('user')->where(function ($query) use ($all) { + if (isset($all['keyword'])) { + $query->where('content', 'like', '%' . $all['keyword'] . '%'); + } + })->orderBy($all['sort_name'] ?? 'id', $all['sort_type'] ?? 'desc') + ->paginate($all['page_size'] ?? 20); + return $this->success($list); + } + /** * @OA\Get( * path="/api/admin/study/show", diff --git a/app/Http/Controllers/Mobile/VisitController.php b/app/Http/Controllers/Mobile/VisitController.php index fc94ea7..8701664 100644 --- a/app/Http/Controllers/Mobile/VisitController.php +++ b/app/Http/Controllers/Mobile/VisitController.php @@ -297,4 +297,36 @@ class VisitController extends CommonController return $this->success($model); } + /** + * @OA\Post( + * path="/api/mobile/visit/idcard-check", + * tags={"小程序-学习"}, + * summary="保存学习记录", + * description="", + * @OA\Parameter(name="idcard", in="query", @OA\Schema(type="string"), required=true, description="身份证数组"), + * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), + * @OA\Response( + * response="200", + * description="暂无" + * ) + * ) + */ + public function idcardCheck() + { + $all = request()->all(); + $messages = [ + 'idcard.required' => '身份证数组必填' + ]; + $validator = Validator::make($all, [ + 'idcard' => 'required' + ], $messages); + if ($validator->fails()) { + return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); + } + $model = new StudyLog(); + $list = $model->whereIn('idcard', $all['idcard'])->pluck('idcard'); + $diff = collect($all['idcard'])->diffAssoc($list); + return $this->success($diff); + } + } diff --git a/app/Models/StudyLog.php b/app/Models/StudyLog.php index 243e4e7..f468334 100644 --- a/app/Models/StudyLog.php +++ b/app/Models/StudyLog.php @@ -10,4 +10,9 @@ class StudyLog extends CommonModel 'content'=>'json', 'ask'=>'json', ]; + + public function user(){ + return $this->hasOne(User::class,'id','user_id'); + } + } diff --git a/routes/api.php b/routes/api.php index 7fb8ec7..e24b59b 100644 --- a/routes/api.php +++ b/routes/api.php @@ -48,6 +48,7 @@ Route::group(["namespace" => "Admin", "prefix" => "admin", "middleware" => "sanc // 学习资料管理 Route::get("study/index", [\App\Http\Controllers\Admin\StudyController::class, "index"]); + Route::get("study/study-log", [\App\Http\Controllers\Admin\StudyController::class, "studyLog"]); Route::get("study/show", [\App\Http\Controllers\Admin\StudyController::class, "show"]); Route::post("study/save", [\App\Http\Controllers\Admin\StudyController::class, "save"]); Route::get("study/destroy", [\App\Http\Controllers\Admin\StudyController::class, "destroy"]); @@ -98,7 +99,9 @@ Route::group(["namespace" => "Mobile", "prefix" => "mobile", "middleware" => "sa Route::get('visit/visit-area', [\App\Http\Controllers\Mobile\VisitController::class, 'visitArea']); Route::get('visit/visit-time', [\App\Http\Controllers\Mobile\VisitController::class, 'visitTime']); + Route::get('visit/ask-log', [\App\Http\Controllers\Mobile\VisitController::class, 'askLog']); Route::post('visit/ask-save', [\App\Http\Controllers\Mobile\VisitController::class, 'askSave']); + Route::post('visit/idcard-check', [\App\Http\Controllers\Mobile\VisitController::class, 'idcardCheck']); }); From 213ca8f075791c3ed5d03deb8e5d747fb0c7ae29 Mon Sep 17 00:00:00 2001 From: liyinglin Date: Wed, 27 Sep 2023 14:31:28 +0800 Subject: [PATCH 5/6] 1 --- app/Http/Controllers/Mobile/VisitController.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/Http/Controllers/Mobile/VisitController.php b/app/Http/Controllers/Mobile/VisitController.php index 8701664..ed96b32 100644 --- a/app/Http/Controllers/Mobile/VisitController.php +++ b/app/Http/Controllers/Mobile/VisitController.php @@ -326,6 +326,9 @@ class VisitController extends CommonController $model = new StudyLog(); $list = $model->whereIn('idcard', $all['idcard'])->pluck('idcard'); $diff = collect($all['idcard'])->diffAssoc($list); + if($diff->isNotEmpty()){ + array_values($diff->toArray()); + } return $this->success($diff); } From 2dcfdd12dedbc512b5c7d1dbf41f7d4bafcfcc3e Mon Sep 17 00:00:00 2001 From: liyinglin Date: Wed, 27 Sep 2023 14:33:43 +0800 Subject: [PATCH 6/6] 1 --- app/Http/Controllers/Mobile/VisitController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Mobile/VisitController.php b/app/Http/Controllers/Mobile/VisitController.php index ed96b32..e804612 100644 --- a/app/Http/Controllers/Mobile/VisitController.php +++ b/app/Http/Controllers/Mobile/VisitController.php @@ -327,7 +327,7 @@ class VisitController extends CommonController $list = $model->whereIn('idcard', $all['idcard'])->pluck('idcard'); $diff = collect($all['idcard'])->diffAssoc($list); if($diff->isNotEmpty()){ - array_values($diff->toArray()); + $diff = array_values($diff->toArray()); } return $this->success($diff); }