|
|
|
|
@ -70,22 +70,30 @@ class UpdateUserTalentTags extends Command
|
|
|
|
|
$rowNum = $index + 2; // Excel行号(从第2行开始,第1行是表头)
|
|
|
|
|
|
|
|
|
|
// 获取必要字段
|
|
|
|
|
$courseName = trim($row['课程名称'] ?? '');
|
|
|
|
|
$courseNameRaw = trim($row['课程名称'] ?? '');
|
|
|
|
|
$userName = trim($row['姓名'] ?? '');
|
|
|
|
|
$talentTag = trim($row['人才标签'] ?? '');
|
|
|
|
|
|
|
|
|
|
// 跳过空行
|
|
|
|
|
if (empty($courseName) && empty($userName)) {
|
|
|
|
|
if (empty($courseNameRaw) && empty($userName)) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 验证必要字段
|
|
|
|
|
if (empty($courseName)) {
|
|
|
|
|
if (empty($courseNameRaw)) {
|
|
|
|
|
$this->warn("第 {$rowNum} 行: 课程名称为空,跳过");
|
|
|
|
|
$skippedCount++;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 提取第一个课程名称(可能包含多个课程,用换行符、顿号、逗号等分隔)
|
|
|
|
|
$courseName = $this->extractFirstCourseName($courseNameRaw);
|
|
|
|
|
|
|
|
|
|
// 如果提取的课程名称与原始不同,记录日志
|
|
|
|
|
if ($courseName !== $courseNameRaw) {
|
|
|
|
|
$this->info("第 {$rowNum} 行: 检测到多个课程名称,使用第一个: '{$courseName}'");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (empty($userName)) {
|
|
|
|
|
$this->warn("第 {$rowNum} 行: 姓名为空,跳过");
|
|
|
|
|
$skippedCount++;
|
|
|
|
|
@ -102,7 +110,7 @@ class UpdateUserTalentTags extends Command
|
|
|
|
|
$course = Course::where('name', $courseName)->first();
|
|
|
|
|
|
|
|
|
|
if (!$course) {
|
|
|
|
|
$this->warn("第 {$rowNum} 行: 未找到课程 '{$courseName}',跳过");
|
|
|
|
|
$this->warn("第 {$rowNum} 行: 未找到课程 '{$courseName}'(原始值: '{$courseNameRaw}'),跳过");
|
|
|
|
|
$notFoundCount++;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
@ -244,4 +252,34 @@ class UpdateUserTalentTags extends Command
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|