master
cody 2 months ago
parent ddd02fc540
commit b51428ecb2

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

Loading…
Cancel
Save