From 24a409a6dd468a97016a00416f4b0dc7fedcc713 Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Sun, 4 Jan 2026 14:35:11 +0800 Subject: [PATCH 1/8] update --- app/Console/Commands/AutoSchoolmate.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Console/Commands/AutoSchoolmate.php b/app/Console/Commands/AutoSchoolmate.php index 1fc7cbd..26cc821 100755 --- a/app/Console/Commands/AutoSchoolmate.php +++ b/app/Console/Commands/AutoSchoolmate.php @@ -55,7 +55,9 @@ class AutoSchoolmate extends Command ->where('start_date', '<=', $today); }) // 方式2: 或者课程状态为进行中(即使 start_date 未及时填写) - ->orWhere('course_status', 10); + ->orWhere('course_status', 10) + // 方式3: 或者课程已结束 + ->orWhere('course_status', 40); }) ->get(); From 647a782021459c060a816852c1ead7474398af7c Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Sun, 4 Jan 2026 14:40:50 +0800 Subject: [PATCH 2/8] update --- app/Console/Commands/AutoSchoolmate.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Console/Commands/AutoSchoolmate.php b/app/Console/Commands/AutoSchoolmate.php index 26cc821..e0b95fc 100755 --- a/app/Console/Commands/AutoSchoolmate.php +++ b/app/Console/Commands/AutoSchoolmate.php @@ -71,7 +71,7 @@ class AutoSchoolmate extends Command // 只更新还不是校友的学员,避免重复处理 $updated = User::whereIn('id', $courseSigns->pluck('user_id')) - ->where('is_schoolmate', '!=', 1) + // ->where('is_schoolmate', '!=', 1) //->where('is_black',0) ->update(['is_schoolmate' => 1]); From e3ecb40630308f0e1c50a32e4ccbd88b6781da21 Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Sun, 4 Jan 2026 14:43:45 +0800 Subject: [PATCH 3/8] update --- app/Console/Commands/AutoSchoolmate.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/Console/Commands/AutoSchoolmate.php b/app/Console/Commands/AutoSchoolmate.php index e0b95fc..4f0cb92 100755 --- a/app/Console/Commands/AutoSchoolmate.php +++ b/app/Console/Commands/AutoSchoolmate.php @@ -70,8 +70,12 @@ class AutoSchoolmate extends Command } // 只更新还不是校友的学员,避免重复处理 + // 注意:is_schoolmate != 1 不会匹配 NULL 值,需要显式包含 NULL $updated = User::whereIn('id', $courseSigns->pluck('user_id')) - // ->where('is_schoolmate', '!=', 1) + ->where(function ($query) { + $query->where('is_schoolmate', '!=', 1) + ->orWhereNull('is_schoolmate'); + }) //->where('is_black',0) ->update(['is_schoolmate' => 1]); From 389e4129ed93ff9bd2295186c5539052ba140828 Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Sun, 4 Jan 2026 14:44:10 +0800 Subject: [PATCH 4/8] update --- app/Console/Commands/AutoSchoolmate.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/Console/Commands/AutoSchoolmate.php b/app/Console/Commands/AutoSchoolmate.php index 4f0cb92..29ec123 100755 --- a/app/Console/Commands/AutoSchoolmate.php +++ b/app/Console/Commands/AutoSchoolmate.php @@ -55,9 +55,7 @@ class AutoSchoolmate extends Command ->where('start_date', '<=', $today); }) // 方式2: 或者课程状态为进行中(即使 start_date 未及时填写) - ->orWhere('course_status', 10) - // 方式3: 或者课程已结束 - ->orWhere('course_status', 40); + ->orWhere('course_status', 10); }) ->get(); From d14673c5e1519bed4408215d93a0c91eb813c078 Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Sun, 4 Jan 2026 14:56:57 +0800 Subject: [PATCH 5/8] update --- app/Console/Commands/UpdateUserNo.php | 59 +++++++++++++-------------- 1 file changed, 28 insertions(+), 31 deletions(-) diff --git a/app/Console/Commands/UpdateUserNo.php b/app/Console/Commands/UpdateUserNo.php index 4984525..1a14836 100755 --- a/app/Console/Commands/UpdateUserNo.php +++ b/app/Console/Commands/UpdateUserNo.php @@ -57,42 +57,39 @@ class UpdateUserNo extends Command protected function updateUserNo() { $this->info('开始更新学号...'); - // 已经开始的课程日期(所有历史数据处理) -// $dateList = Course::whereNotNull('start_date') -// ->where('start_date', '<=', date('Y-m-d')) -// ->orderBy('start_date') -// ->groupBy('start_date') -// ->pluck('start_date') -// ->toArray(); - // 当日数据处理(日常定时任务) - $dateList = [date('Y-m-d')]; - foreach ($dateList as $date) { - $courses = Course::with([ - 'courseSigns' => function ($query) { - $query->where('status', 1); - } - ])->where('start_date', $date) - ->whereNotNull('student_prefix') - ->orderBy('start_date') - ->get(); + $today = date('Y-m-d'); + + // 获取所有已开始且有学号前缀的课程 + $courses = Course::with([ + 'courseSigns' => function ($query) { + $query->where('status', 1); + } + ])->whereNotNull('start_date') + ->where('start_date', '<=', $today) + ->whereNotNull('student_prefix') + ->orderBy('start_date') + ->get(); + + $totalUpdated = 0; + foreach ($courses as $course) { $i = 1; // 编号前缀 - foreach ($courses as $course) { - foreach ($course->courseSigns as $sign) { - $user = User::find($sign->user_id); - if ($user->no) { - continue; - } - $no = $course->student_prefix . str_pad($i, 3, '0', STR_PAD_LEFT); - // 更新用户编号 - $user->no = $no; - $user->save(); - $this->info('学号: ' . $no); - $i++; + foreach ($course->courseSigns as $sign) { + $user = User::find($sign->user_id); + // 只要用户没有学号(包括 null 和空字符串),都需要更新 + if ($user->no) { + continue; } + $no = $course->student_prefix . str_pad($i, 3, '0', STR_PAD_LEFT); + // 更新用户编号 + $user->no = $no; + $user->save(); + $this->info('课程: ' . ($course->name ?? $course->id) . ', 学号: ' . $no . ', 用户: ' . ($user->name ?? $user->id)); + $i++; + $totalUpdated++; } } - $this->info('学号更新完成'); + $this->info('学号更新完成,共更新 ' . $totalUpdated . ' 个学号'); } /** From ed9022ddb444fec233ae4f3bfe57c44c2aebdf24 Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Sun, 4 Jan 2026 15:02:59 +0800 Subject: [PATCH 6/8] update --- app/Console/Commands/UpdateUserNo.php | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/app/Console/Commands/UpdateUserNo.php b/app/Console/Commands/UpdateUserNo.php index 1a14836..10f24ad 100755 --- a/app/Console/Commands/UpdateUserNo.php +++ b/app/Console/Commands/UpdateUserNo.php @@ -80,11 +80,34 @@ class UpdateUserNo extends Command if ($user->no) { continue; } - $no = $course->student_prefix . str_pad($i, 3, '0', STR_PAD_LEFT); + + // 生成学号,如果已存在则顺位+1继续尝试 + $baseNo = $course->student_prefix . str_pad($i, 3, '0', STR_PAD_LEFT); + $no = $baseNo; + $attempt = 0; + $maxAttempts = 1000; // 防止无限循环 + + // 检查学号是否已存在,如果存在则顺位+1继续尝试 + while (User::where('no', $no)->where('id', '!=', $user->id)->exists() && $attempt < $maxAttempts) { + $i++; + $no = $course->student_prefix . str_pad($i, 3, '0', STR_PAD_LEFT); + $attempt++; + } + + if ($attempt >= $maxAttempts) { + $this->warn('课程: ' . ($course->name ?? $course->id) . ', 用户: ' . ($user->name ?? $user->id) . ' 无法生成唯一学号,跳过'); + continue; + } + // 更新用户编号 $user->no = $no; $user->save(); - $this->info('课程: ' . ($course->name ?? $course->id) . ', 学号: ' . $no . ', 用户: ' . ($user->name ?? $user->id)); + + if ($no != $baseNo) { + $this->info('课程: ' . ($course->name ?? $course->id) . ', 原学号: ' . $baseNo . ' 已存在,使用: ' . $no . ', 用户: ' . ($user->name ?? $user->id)); + } else { + $this->info('课程: ' . ($course->name ?? $course->id) . ', 学号: ' . $no . ', 用户: ' . ($user->name ?? $user->id)); + } $i++; $totalUpdated++; } From c8ea20ff13213170ebfae9b971854401b7ebd63a Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Sun, 4 Jan 2026 16:19:23 +0800 Subject: [PATCH 7/8] update --- app/Http/Controllers/Admin/CompanyController.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Admin/CompanyController.php b/app/Http/Controllers/Admin/CompanyController.php index b8510e4..cfb1be9 100644 --- a/app/Http/Controllers/Admin/CompanyController.php +++ b/app/Http/Controllers/Admin/CompanyController.php @@ -72,14 +72,17 @@ class CompanyController extends BaseController $directions = explode(',', $direction); foreach ($directions as $dir) { $dir = trim($dir); - if (!empty($dir)) { + // 去除空数据:空字符串、null、只包含空白字符的字符串 + if (!empty($dir) && $dir !== '' && $dir !== null) { $allDirections[] = $dir; } } } } - // 去重并重新索引 - $directions = array_values(array_unique($allDirections)); + // 去重并重新索引,再次过滤空数据 + $directions = array_values(array_unique(array_filter($allDirections, function ($item) { + return !empty($item) && trim($item) !== ''; + }))); // 排序 sort($directions); From 0fc587be15378c3dc34e0eec9315403c814eaa4e Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Sun, 4 Jan 2026 16:24:00 +0800 Subject: [PATCH 8/8] update --- app/Http/Controllers/Admin/CompanyController.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Admin/CompanyController.php b/app/Http/Controllers/Admin/CompanyController.php index cfb1be9..ce6e261 100644 --- a/app/Http/Controllers/Admin/CompanyController.php +++ b/app/Http/Controllers/Admin/CompanyController.php @@ -72,8 +72,8 @@ class CompanyController extends BaseController $directions = explode(',', $direction); foreach ($directions as $dir) { $dir = trim($dir); - // 去除空数据:空字符串、null、只包含空白字符的字符串 - if (!empty($dir) && $dir !== '' && $dir !== null) { + // 去除空数据:空字符串、null、只包含空白字符的字符串、类似"[]"的数组字符串 + if (!empty($dir) && $dir !== '' && $dir !== null && $dir !== '[]') { $allDirections[] = $dir; } } @@ -81,7 +81,9 @@ class CompanyController extends BaseController } // 去重并重新索引,再次过滤空数据 $directions = array_values(array_unique(array_filter($allDirections, function ($item) { - return !empty($item) && trim($item) !== ''; + $trimmed = trim($item); + // 过滤空字符串、null、只包含空白字符、类似"[]"的数组字符串 + return !empty($trimmed) && $trimmed !== '' && $trimmed !== '[]'; }))); // 排序 sort($directions);