master
cody 2 months ago
parent ddd02fc540
commit b51428ecb2

@ -86,12 +86,12 @@ class UpdateUserTalentTags extends Command
continue; continue;
} }
// 提取第一个课程名称(可能包含多个课程,用换行符、顿号、逗号等分隔) // 提取所有课程名称(可能包含多个课程,用换行符、顿号、逗号等分隔)
$courseName = $this->extractFirstCourseName($courseNameRaw); $courseNames = $this->extractAllCourseNames($courseNameRaw);
// 如果提取的课程名称与原始不同,记录日志 // 如果提取到多个课程名称,记录日志
if ($courseName !== $courseNameRaw) { if (count($courseNames) > 1) {
$this->info("第 {$rowNum} 行: 检测到多个课程名称,使用第一个: '{$courseName}'"); $this->info("第 {$rowNum} 行: 检测到多个课程名称,将按顺序尝试匹配: " . implode(', ', $courseNames));
} }
if (empty($userName)) { if (empty($userName)) {
@ -106,12 +106,17 @@ class UpdateUserTalentTags extends Command
continue; continue;
} }
// 按顺序尝试匹配每个课程,直到找到有对应报名用户的课程
$courseSign = null;
$matchedCourseName = null;
$matchedCourse = null;
foreach ($courseNames as $courseName) {
// 通过课程名称查找课程 // 通过课程名称查找课程
$course = Course::where('name', $courseName)->first(); $course = Course::where('name', $courseName)->first();
if (!$course) { if (!$course) {
$this->warn("第 {$rowNum} 行: 未找到课程 '{$courseName}'(原始值: '{$courseNameRaw}'),跳过"); $this->info("第 {$rowNum} 行: 未找到课程 '{$courseName}',尝试下一个...");
$notFoundCount++;
continue; continue;
} }
@ -123,8 +128,22 @@ class UpdateUserTalentTags extends Command
->with('user') ->with('user')
->first(); ->first();
if ($courseSign && $courseSign->user) {
// 找到匹配的课程和用户,停止循环
$matchedCourseName = $courseName;
$matchedCourse = $course;
if (count($courseNames) > 1) {
$this->info("第 {$rowNum} 行: 在课程 '{$matchedCourseName}' 中找到用户 '{$userName}'");
}
break;
} else {
$this->info("第 {$rowNum} 行: 课程 '{$courseName}' 中未找到用户 '{$userName}',尝试下一个...");
}
}
// 如果所有课程都找不到匹配的用户,跳过
if (!$courseSign || !$courseSign->user) { if (!$courseSign || !$courseSign->user) {
$this->warn("第 {$rowNum} 行: 未找到用户 '{$userName}' 在课程 '{$courseName}' 中的报名记录,跳过"); $this->warn("第 {$rowNum} 行: 在所有课程中都未找到用户 '{$userName}' 的报名记录(原始值: '{$courseNameRaw}',跳过");
$notFoundCount++; $notFoundCount++;
continue; continue;
} }
@ -254,13 +273,15 @@ class UpdateUserTalentTags extends Command
} }
/** /**
* 从可能包含多个课程名称的字符串中提取第一个课程名称 * 从可能包含多个课程名称的字符串中提取所有课程名称
* *
* @param string $courseNameRaw 原始课程名称字符串 * @param string $courseNameRaw 原始课程名称字符串
* @return string 第一个课程名称 * @return array 所有课程名称数组
*/ */
protected function extractFirstCourseName($courseNameRaw) protected function extractAllCourseNames($courseNameRaw)
{ {
$courseNames = [];
// 先按换行符分割(\n, \r\n, \r // 先按换行符分割(\n, \r\n, \r
$parts = preg_split('/[\r\n]+/', $courseNameRaw); $parts = preg_split('/[\r\n]+/', $courseNameRaw);
@ -269,17 +290,21 @@ class UpdateUserTalentTags extends Command
$parts = preg_split('/[、,,]+/', $courseNameRaw); $parts = preg_split('/[、,,]+/', $courseNameRaw);
} }
// 取第一个非空部分 // 提取所有非空部分
foreach ($parts as $part) { foreach ($parts as $part) {
$part = trim($part); $part = trim($part);
// 去除末尾可能的标点符号(顿号、逗号等) // 去除末尾可能的标点符号(顿号、逗号等)
$part = rtrim($part, '、,,'); $part = rtrim($part, '、,,');
if (!empty($part)) { if (!empty($part)) {
return $part; $courseNames[] = $part;
} }
} }
// 如果所有部分都为空,返回原始值 // 如果所有部分都为空,返回原始值作为单个元素
return trim($courseNameRaw); if (empty($courseNames)) {
$courseNames[] = trim($courseNameRaw);
}
return $courseNames;
} }
} }

Loading…
Cancel
Save