master
cody 2 months ago
parent 55f4629c37
commit 3107575cd7

@ -70,22 +70,30 @@ class UpdateUserTalentTags extends Command
$rowNum = $index + 2; // Excel行号从第2行开始第1行是表头 $rowNum = $index + 2; // Excel行号从第2行开始第1行是表头
// 获取必要字段 // 获取必要字段
$courseName = trim($row['课程名称'] ?? ''); $courseNameRaw = trim($row['课程名称'] ?? '');
$userName = trim($row['姓名'] ?? ''); $userName = trim($row['姓名'] ?? '');
$talentTag = trim($row['人才标签'] ?? ''); $talentTag = trim($row['人才标签'] ?? '');
// 跳过空行 // 跳过空行
if (empty($courseName) && empty($userName)) { if (empty($courseNameRaw) && empty($userName)) {
continue; continue;
} }
// 验证必要字段 // 验证必要字段
if (empty($courseName)) { if (empty($courseNameRaw)) {
$this->warn("第 {$rowNum} 行: 课程名称为空,跳过"); $this->warn("第 {$rowNum} 行: 课程名称为空,跳过");
$skippedCount++; $skippedCount++;
continue; continue;
} }
// 提取第一个课程名称(可能包含多个课程,用换行符、顿号、逗号等分隔)
$courseName = $this->extractFirstCourseName($courseNameRaw);
// 如果提取的课程名称与原始不同,记录日志
if ($courseName !== $courseNameRaw) {
$this->info("第 {$rowNum} 行: 检测到多个课程名称,使用第一个: '{$courseName}'");
}
if (empty($userName)) { if (empty($userName)) {
$this->warn("第 {$rowNum} 行: 姓名为空,跳过"); $this->warn("第 {$rowNum} 行: 姓名为空,跳过");
$skippedCount++; $skippedCount++;
@ -102,7 +110,7 @@ class UpdateUserTalentTags extends Command
$course = Course::where('name', $courseName)->first(); $course = Course::where('name', $courseName)->first();
if (!$course) { if (!$course) {
$this->warn("第 {$rowNum} 行: 未找到课程 '{$courseName}',跳过"); $this->warn("第 {$rowNum} 行: 未找到课程 '{$courseName}'(原始值: '{$courseNameRaw}',跳过");
$notFoundCount++; $notFoundCount++;
continue; continue;
} }
@ -244,4 +252,34 @@ class UpdateUserTalentTags extends Command
throw $e; throw $e;
} }
} }
/**
* 从可能包含多个课程名称的字符串中提取第一个课程名称
*
* @param string $courseNameRaw 原始课程名称字符串
* @return string 第一个课程名称
*/
protected function extractFirstCourseName($courseNameRaw)
{
// 先按换行符分割(\n, \r\n, \r
$parts = preg_split('/[\r\n]+/', $courseNameRaw);
// 如果只有一个部分,尝试按顿号、逗号等分割
if (count($parts) === 1 || (count($parts) === 1 && empty(trim($parts[0])))) {
$parts = preg_split('/[、,,]+/', $courseNameRaw);
}
// 取第一个非空部分
foreach ($parts as $part) {
$part = trim($part);
// 去除末尾可能的标点符号(顿号、逗号等)
$part = rtrim($part, '、,,');
if (!empty($part)) {
return $part;
}
}
// 如果所有部分都为空,返回原始值
return trim($courseNameRaw);
}
} }

Loading…
Cancel
Save