From b8f0f151bf90fc9721082645c4d8c9b4cc3fa630 Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Thu, 14 Aug 2025 11:20:16 +0800 Subject: [PATCH] update --- app/Console/Commands/AutoSchoolmate.php | 60 +++++++++++++++++++ app/Console/Kernel.php | 2 + .../Admin/CourseContentController.php | 43 +++++++++++++ app/Http/Controllers/Admin/UserController.php | 1 + .../Controllers/Mobile/CourseController.php | 56 +++++++++++++---- .../2025_08_14_103426_alert_courses_table.php | 32 ++++++++++ .../2025_08_14_105924_alert_users_table.php | 33 ++++++++++ routes/api.php | 1 + 8 files changed, 217 insertions(+), 11 deletions(-) create mode 100755 app/Console/Commands/AutoSchoolmate.php create mode 100644 database/migrations/2025_08_14_103426_alert_courses_table.php create mode 100644 database/migrations/2025_08_14_105924_alert_users_table.php diff --git a/app/Console/Commands/AutoSchoolmate.php b/app/Console/Commands/AutoSchoolmate.php new file mode 100755 index 0000000..beefbe8 --- /dev/null +++ b/app/Console/Commands/AutoSchoolmate.php @@ -0,0 +1,60 @@ +where('auto_schoolmate', 1)->get(); + foreach ($courses as $course) { + // 获取报名通过的学员 + $courseSigns = CourseSign::where('course_id', $course->id)->where('status', 1)->get(); + // 用户设置成校友 + User::whereIn('id', $courseSigns->pluck('user_id'))->update(['is_schoolmate' => 1]); + } + return $this->info('更新完成'); + } + +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 1be6ee8..f1b43ea 100755 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -28,6 +28,8 @@ class Kernel extends ConsoleKernel $schedule->command('push_courses')->dailyAt('23:00'); // 更新学员编号 $schedule->command('update_user_no')->dailyAt('00:05'); + // 更新课程校友资格 + $schedule->command('auto_schoolmate')->dailyAt('23:50'); } /** diff --git a/app/Http/Controllers/Admin/CourseContentController.php b/app/Http/Controllers/Admin/CourseContentController.php index 7af167d..803836a 100755 --- a/app/Http/Controllers/Admin/CourseContentController.php +++ b/app/Http/Controllers/Admin/CourseContentController.php @@ -171,6 +171,49 @@ class CourseContentController extends BaseController return parent::save(); } + /** + * @OA\Post( + * path="/api/admin/course-contents/batch-save", + * tags={"排课"}, + * summary="更新或新增", + * @OA\Parameter(name="id", in="query", @OA\Schema(type="integer"), required=true, description="课程ID,多个英文逗号分割"), + * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="验证token"), + * @OA\Parameter(name="course_id", in="query", @OA\Schema(type="integer"), description="课程ID"), + * @OA\Parameter(name="start_time", in="query", @OA\Schema(type="string"), description="开始时间,例如:11:00"), + * @OA\Parameter(name="end_time", in="query", @OA\Schema(type="string"), description="结束时间,例如:11:00"), + * @OA\Parameter(name="date", in="query", @OA\Schema(type="string", format="date"), description="日期"), + * @OA\Parameter(name="teacher_id", in="query", @OA\Schema(type="integer"), description="老师ID"), + * @OA\Parameter(name="address", in="query", @OA\Schema(type="string"), description="地址"), + * @OA\Parameter(name="theme", in="query", @OA\Schema(type="string"), description="主题"), + * @OA\Parameter(name="longitude", in="query", @OA\Schema(type="string"), description="经度"), + * @OA\Parameter(name="latitude", in="query", @OA\Schema(type="string"), description="纬度"), + * @OA\Parameter(name="address_detail", in="query", @OA\Schema(type="string"), description="详细地址"), + * @OA\Parameter(name="file_ids", in="query", @OA\Schema(type="string"), description="文件id数组"), + * @OA\Response( + * response=200, + * description="操作成功" + * ) + * ) + */ + public function batchSave() + { + $all = \request()->all(); + DB::beginTransaction(); + try { + $ids = explode(',', $all['id']); + foreach ($ids as $id) { + $model = $this->model->find($id); + $model->fill($all); + $model->save(); + } + DB::commit(); + return $this->success("更新成功"); + } catch (\Exception $exception) { + DB::rollBack(); + return $this->fail([$exception->getCode(), $exception->getMessage()]); + } + } + /** * @OA\Get( * path="/api/admin/course-contents/destroy", diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index cce36f9..5b2f1bb 100755 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -402,6 +402,7 @@ class UserController extends BaseController * @OA\Parameter(name="company_need_fund", in="query", @OA\Schema(type="integer"), description="公司是否需要融资0否1是"), * @OA\Parameter(name="sign_from", in="query", @OA\Schema(type="string"), description="报名信息来源"), * @OA\Parameter(name="remark", in="query", @OA\Schema(type="string"), description="备注"), + * @OA\Parameter(name="is_black", in="query", @OA\Schema(type="string"), description="是否黑名单0否1是"), * @OA\Parameter(name="has_appointment_total", in="query", @OA\Schema(type="string"), description="预约剩余次数"), * @OA\Response( * response=200, diff --git a/app/Http/Controllers/Mobile/CourseController.php b/app/Http/Controllers/Mobile/CourseController.php index baa9074..42cab33 100755 --- a/app/Http/Controllers/Mobile/CourseController.php +++ b/app/Http/Controllers/Mobile/CourseController.php @@ -236,6 +236,7 @@ class CourseController extends CommonController * path="/api/mobile/course/my-course-content", * tags={"小程序-课程"}, * summary="我的课表", + * @OA\Parameter(name="date", in="query", @OA\Schema(type="string"), required=false, description="日期"), * @OA\Response( * response=200, * description="操作成功" @@ -244,18 +245,24 @@ class CourseController extends CommonController */ public function myCourseContent() { - $list = CourseContent::with('course.typeDetail', 'teacher', 'courseContentEvaluation')->whereHas('course', function ($query) { - $query->where('course_status', '!=', 40)->where('course_content_status', 1); - $query->whereHas('courseSigns', function ($query) { - $query->where('user_id', $this->getUserId())->where('status', 1)->where(function ($q) { - $q->where('fee_status', 1)->orWhere(function ($q) { - $q->whereHas('course', function ($qry) { - $qry->where('is_fee', 0); + $date = request('date'); + $list = CourseContent::with('course.typeDetail', 'teacher', 'courseContentEvaluation') + ->where(function ($query) use ($date) { + if ($date) { + $query->where('date', $date); + } + })->whereHas('course', function ($query) { + $query->where('course_status', '!=', 40)->where('course_content_status', 1); + $query->whereHas('courseSigns', function ($query) { + $query->where('user_id', $this->getUserId())->where('status', 1)->where(function ($q) { + $q->where('fee_status', 1)->orWhere(function ($q) { + $q->whereHas('course', function ($qry) { + $qry->where('is_fee', 0); + }); }); }); }); - }); - })->orderBy('date')->get(); + })->orderBy('date')->get(); return $this->success(compact('list')); } @@ -492,6 +499,7 @@ class CourseController extends CommonController * path="/api/mobile/course/content-check", * tags={"小程序-课程"}, * summary="签到", + * @OA\Parameter(name="batch_sign", in="query", @OA\Schema(type="string"), required=false, description="是否同日期批量签到0否1是"), * @OA\Parameter(name="course_content_id", in="query", @OA\Schema(type="string"), required=false, description="课表id"), * @OA\Parameter(name="longitude", in="query", @OA\Schema(type="string"), required=false, description="longitude"), * @OA\Parameter(name="latitude", in="query", @OA\Schema(type="string"), required=false, description="latitude"), @@ -525,7 +533,8 @@ class CourseController extends CommonController return $this->fail([ResponseCode::ERROR_BUSINESS, '超出打卡范围']); } // 判断当天才能签到 - if (date('Y-m-d') != $courseContent->date) { + $today = date('Y-m-d'); + if ($today != $courseContent->date) { return $this->fail([ResponseCode::ERROR_BUSINESS, '不在签到时间']); } // 不能重复签到 @@ -541,7 +550,32 @@ class CourseController extends CommonController 'longitude' => $all['longitude'], 'latitude' => $all['latitude'], ]); - return $this->success('打卡成功'); + // 同日期课程批量签到 + $batch_sign = request('batch_sign', 0); + if ($batch_sign) { + $courseContentList = CourseContent::where('date', $today) + ->whereHas('course', function ($query) { + $query->where('course_status', '!=', 40)->where('course_content_status', 1); + $query->whereHas('courseSigns', function ($query) { + $query->where('user_id', $this->getUserId())->where('status', 1)->where(function ($q) { + $q->where('fee_status', 1)->orWhere(function ($q) { + $q->whereHas('course', function ($qry) { + $qry->where('is_fee', 0); + }); + }); + }); + }); + })->get(); + foreach ($courseContentList as $courseContent) { + CourseContentCheck::create([ + 'course_content_id' => $courseContent->id, + 'user_id' => $this->getUserId(), + 'longitude' => $all['longitude'], + 'latitude' => $all['latitude'], + ]); + } + } + return $this->success('签到成功'); } /** diff --git a/database/migrations/2025_08_14_103426_alert_courses_table.php b/database/migrations/2025_08_14_103426_alert_courses_table.php new file mode 100644 index 0000000..9f14527 --- /dev/null +++ b/database/migrations/2025_08_14_103426_alert_courses_table.php @@ -0,0 +1,32 @@ +boolean('auto_schoolmate')->default(false)->comment('已审核学员是否自动进入校友库0否1是'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('courses', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2025_08_14_105924_alert_users_table.php b/database/migrations/2025_08_14_105924_alert_users_table.php new file mode 100644 index 0000000..868ef19 --- /dev/null +++ b/database/migrations/2025_08_14_105924_alert_users_table.php @@ -0,0 +1,33 @@ +boolean('is_black')->default(0)->comment('是否黑名单'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + // + }); + } +}; diff --git a/routes/api.php b/routes/api.php index 7c26c4b..0d88f95 100755 --- a/routes/api.php +++ b/routes/api.php @@ -54,6 +54,7 @@ Route::group(["namespace" => "Admin", "prefix" => "admin"], function () { Route::get('course-contents/index', [\App\Http\Controllers\Admin\CourseContentController::class, "index"]); Route::get('course-contents/show', [\App\Http\Controllers\Admin\CourseContentController::class, "show"]); Route::post('course-contents/save', [\App\Http\Controllers\Admin\CourseContentController::class, "save"]); + Route::post('course-contents/batch-save', [\App\Http\Controllers\Admin\CourseContentController::class, "batchSave"]); Route::get('course-contents/destroy', [\App\Http\Controllers\Admin\CourseContentController::class, "destroy"]); Route::post('course-contents/excel-show', [\App\Http\Controllers\Admin\CourseContentController::class, "excelShow"]); Route::post('course-contents/import', [\App\Http\Controllers\Admin\CourseContentController::class, "import"]);