From a31b27c57f6d5ee51c38310027a7ec1242683fd3 Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Fri, 22 Aug 2025 10:12:56 +0800 Subject: [PATCH] update --- .../Controllers/Admin/OtherController.php | 103 ++++++++++++++++++ routes/api.php | 1 + 2 files changed, 104 insertions(+) diff --git a/app/Http/Controllers/Admin/OtherController.php b/app/Http/Controllers/Admin/OtherController.php index 50e268d..0e9e497 100755 --- a/app/Http/Controllers/Admin/OtherController.php +++ b/app/Http/Controllers/Admin/OtherController.php @@ -16,6 +16,7 @@ use App\Models\ParameterDetail; use App\Models\User; use App\Repositories\DoorRepository; use App\Repositories\EntranceRepository; +use Illuminate\Support\Carbon; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Validator; use App\Models\Course; @@ -81,6 +82,108 @@ class OtherController extends CommonController return $this->success(compact('courseTypes', 'schoolmate', 'company', 'industryTotal', 'suzhou', 'country')); } + /** + * @OA\Get( + * path="/api/admin/other/courses-home", + * tags={"其他"}, + * summary="课程统计", + * description="", + * @OA\Parameter(name="start_date", in="query", @OA\Schema(type="string"), required=true, description="开始日期"), + * @OA\Parameter(name="end_date", 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 coursesHome() + { + $start_date = request('start_date', '2020-01-01'); + $end_date = request('end_date', date('Y-m-d')); + // 报名人数 + $list['course_signs_total'] = CourseSign::whereDate('created_at', '>=', $start_date) + ->whereDate('created_at', '<=', $end_date) + ->count(); + // 审核通过人数 + $list['course_signs_pass'] = CourseSign::where('status', 1) + ->whereDate('created_at', '>=', $start_date) + ->whereDate('created_at', '<=', $end_date) + ->count(); + // 审核通过人数去重 + $list['course_signs_pass_unique'] = CourseSign::where('status', 1) + ->whereDate('created_at', '>=', $start_date) + ->whereDate('created_at', '<=', $end_date) + ->select('user_id') + ->distinct() + ->count(); + // 课程 + $courses = Course::whereDate('created_at', '>=', $start_date) + ->whereDate('created_at', '<=', $end_date) + ->get(); + // 开课场次 + $list['course_total'] = $courses->count(); + // 开课天数 + $list['course_day_total'] = $courses->sum(function ($course) { + $start = Carbon::parse($course->start_date); + $end = Carbon::parse($course->end_date); + return $end->diffInDays($start) + 1; // 包含起始和结束日期 + }); + // 课程分类明细统计 + $courseTypesSum = []; + $courseTypes = CourseType::get(); + foreach ($courseTypes as $courseType) { + // 获取课程 + $courses = Course::where('type', $courseType->id)->get(); + // 培养人数 + $courseTypeSignsPass = CourseSign::where('status', 1) + ->whereIn('course_id', $courses->pluck('id')) + ->whereDate('created_at', '>=', $start_date) + ->whereDate('created_at', '<=', $end_date) + ->count(); + // 去重培养人数 + $courseTypeSignsPassUnique = CourseSign::where('status', 1) + ->whereDate('created_at', '>=', $start_date) + ->whereDate('created_at', '<=', $end_date) + ->select('user_id') + ->distinct() + ->count(); + foreach ($courses as $course) { + $courseTypesSum[] = [ + 'course_type' => $courseType->name, + 'course_type_signs_pass' => $courseTypeSignsPass, + 'course_type_signs_pass_unique' => $courseTypeSignsPassUnique, + 'course_name' => $course->name, + 'course_signs_pass' => CourseSign::where('status', 1) + ->where('course_id', $course->id) + ->whereDate('created_at', '>=', $start_date) + ->whereDate('created_at', '<=', $end_date) + ->count() + ]; + } + + } + // 区域明细统计 + $areas = ParameterDetail::where('parameter_id', 5)->get(); + foreach ($areas as $area) { + $area->course_signs_pass = CourseSign::where('status', 1) + ->whereHas('user', function ($query) use ($area) { + $query->where('company_area', $area->value); + })->whereDate('created_at', '>=', $start_date) + ->whereDate('created_at', '<=', $end_date) + ->count(); + $area->course_signs_pass_unique = CourseSign::where('status', 1) + ->whereHas('user', function ($query) use ($area) { + $query->where('company_area', $area->value); + })->whereDate('created_at', '>=', $start_date) + ->whereDate('created_at', '<=', $end_date) + ->select('user_id') + ->distinct() + ->count(); + } + return $this->success(compact('list', 'courseTypesSum', 'areas')); + } + /** * @OA\Post( * path="/api/admin/other/admin-user-list", diff --git a/routes/api.php b/routes/api.php index 2c68f33..cb4feba 100755 --- a/routes/api.php +++ b/routes/api.php @@ -35,6 +35,7 @@ Route::group(["namespace" => "Admin", "prefix" => "admin"], function () { Route::get('users/index', [\App\Http\Controllers\Admin\UserController::class, "index"]); Route::get('other/table-fileds', [\App\Http\Controllers\Admin\OtherController::class, "tableFileds"]); Route::get('other/home', [\App\Http\Controllers\Admin\OtherController::class, "home"]); + Route::get('other/courses-home', [\App\Http\Controllers\Admin\OtherController::class, "coursesHome"]); // 验证码登陆 Route::get('auth/sms-login', [\App\Http\Controllers\Admin\AuthController::class, "smsLogin"]);