修改8
This commit is contained in:
@@ -172,6 +172,22 @@ class MatchService
|
|||||||
'education_count' => count($resume['education'] ?? []),
|
'education_count' => count($resume['education'] ?? []),
|
||||||
'birth_date' => $resume['birth_date'] ?? '',
|
'birth_date' => $resume['birth_date'] ?? '',
|
||||||
'gender' => $resume['gender'] ?? '',
|
'gender' => $resume['gender'] ?? '',
|
||||||
|
'education_details' => array_map(function($edu) {
|
||||||
|
return [
|
||||||
|
'education_level' => $edu['education_level'] ?? '',
|
||||||
|
'degree' => $edu['degree'] ?? '',
|
||||||
|
'majors_name' => $edu['majors_name'] ?? '',
|
||||||
|
'majors_code' => $edu['majors_code'] ?? '',
|
||||||
|
'majors_category' => $edu['majors_category'] ?? '',
|
||||||
|
'school_name' => $edu['school_name'] ?? '',
|
||||||
|
];
|
||||||
|
}, $resume['education'] ?? []),
|
||||||
|
'education_raw' => array_map(function($edu) {
|
||||||
|
// 返回原始数据的前几个字段用于调试(避免数据过大)
|
||||||
|
$raw = $edu['_raw'] ?? [];
|
||||||
|
// 只返回前15个字段
|
||||||
|
return array_slice($raw, 0, 15, true);
|
||||||
|
}, $resume['education'] ?? []),
|
||||||
],
|
],
|
||||||
'first_zero_reason' => $firstZeroScoreReason
|
'first_zero_reason' => $firstZeroScoreReason
|
||||||
]
|
]
|
||||||
@@ -265,6 +281,40 @@ class MatchService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 3.1 如果教育经历里有专业代码,预先加载专业表(da_majors)以便解析专业名称
|
||||||
|
$majorCodeMap = [];
|
||||||
|
$majorCodes = [];
|
||||||
|
foreach ($educations as $education) {
|
||||||
|
$codeFields = ['major_code', 'majors_code', 'code', 'major_id', 'majors_id', 'major_no'];
|
||||||
|
foreach ($codeFields as $field) {
|
||||||
|
if (!empty($education[$field])) {
|
||||||
|
$majorCodes[] = $education[$field];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$majorCodes = array_values(array_unique($majorCodes));
|
||||||
|
|
||||||
|
if (!empty($majorCodes)) {
|
||||||
|
try {
|
||||||
|
$majors = Db::name('da_majors')
|
||||||
|
->whereIn('code', $majorCodes)
|
||||||
|
->select()
|
||||||
|
->toArray();
|
||||||
|
foreach ($majors as $major) {
|
||||||
|
$code = $major['code'] ?? $major['major_code'] ?? null;
|
||||||
|
if (!$code) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$majorCodeMap[$code] = [
|
||||||
|
'name' => $major['major_name'] ?? $major['name'] ?? $major['title'] ?? '',
|
||||||
|
'category' => $major['category_name'] ?? $major['category'] ?? $major['major_category'] ?? '',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
// da_majors 表不存在或字段不匹配时忽略
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 构建简历数据结构
|
// 构建简历数据结构
|
||||||
$resume = [
|
$resume = [
|
||||||
'user_id' => $userId,
|
'user_id' => $userId,
|
||||||
@@ -281,12 +331,51 @@ class MatchService
|
|||||||
|
|
||||||
// 处理教育经历数据,确保字段名正确
|
// 处理教育经历数据,确保字段名正确
|
||||||
foreach ($educations as $education) {
|
foreach ($educations as $education) {
|
||||||
|
// 尝试多种可能的专业字段名
|
||||||
|
$majorName = '';
|
||||||
|
$possibleMajorFields = [
|
||||||
|
'majors_name', 'major_name', 'major', 'major_field',
|
||||||
|
'specialty', 'profession', 'discipline', 'subject',
|
||||||
|
'专业名称', '专业', '学科专业', '专业类别'
|
||||||
|
];
|
||||||
|
foreach ($possibleMajorFields as $field) {
|
||||||
|
if (!empty($education[$field])) {
|
||||||
|
$majorName = $education[$field];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果有专业代码但没有名称,尝试从 da_majors 映射获取
|
||||||
|
if (empty($majorName)) {
|
||||||
|
$codeFields = ['major_code', 'majors_code', 'code', 'major_id', 'majors_id', 'major_no'];
|
||||||
|
foreach ($codeFields as $field) {
|
||||||
|
if (!empty($education[$field]) && isset($majorCodeMap[$education[$field]])) {
|
||||||
|
$majorName = $majorCodeMap[$education[$field]]['name'] ?? '';
|
||||||
|
$education['major_category'] = $majorCodeMap[$education[$field]]['category'] ?? '';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 保存专业代码,便于后续调试
|
||||||
|
$majorCode = '';
|
||||||
|
foreach (['major_code', 'majors_code', 'code', 'major_id', 'majors_id', 'major_no'] as $field) {
|
||||||
|
if (!empty($education[$field])) {
|
||||||
|
$majorCode = $education[$field];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$resume['education'][] = [
|
$resume['education'][] = [
|
||||||
'education_level' => $education['education_level'] ?? $education['education'] ?? '',
|
'education_level' => $education['education_level'] ?? $education['education'] ?? $education['学历'] ?? '',
|
||||||
'degree' => $education['degree'] ?? '',
|
'degree' => $education['degree'] ?? $education['学位'] ?? '',
|
||||||
'majors_name' => $education['majors_name'] ?? $education['major'] ?? $education['major_name'] ?? '',
|
'majors_name' => $majorName,
|
||||||
'school_name' => $education['school_name'] ?? $education['school'] ?? '',
|
'majors_code' => $majorCode,
|
||||||
'graduation_date' => $education['graduation_date'] ?? '',
|
'majors_category' => $education['major_category'] ?? $education['专业类别'] ?? '',
|
||||||
|
'school_name' => $education['school_name'] ?? $education['school'] ?? $education['学校名称'] ?? '',
|
||||||
|
'graduation_date' => $education['graduation_date'] ?? $education['毕业时间'] ?? '',
|
||||||
|
// 保存原始数据用于调试
|
||||||
|
'_raw' => $education
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -659,8 +748,16 @@ class MatchService
|
|||||||
|
|
||||||
$matchedMajors = [];
|
$matchedMajors = [];
|
||||||
foreach ($educations as $education) {
|
foreach ($educations as $education) {
|
||||||
$majorName = $education['majors_name'] ?? '';
|
// 尝试多种可能的专业字段名
|
||||||
if ($this->isMajorCategoryMatch($majorName, $requirement)) {
|
$majorName = $education['majors_name'] ??
|
||||||
|
$education['major_name'] ??
|
||||||
|
$education['major'] ??
|
||||||
|
$education['major_field'] ??
|
||||||
|
$education['specialty'] ??
|
||||||
|
$education['profession'] ??
|
||||||
|
$education['majors_category'] ?? '';
|
||||||
|
|
||||||
|
if (!empty($majorName) && $this->isMajorCategoryMatch($majorName, $requirement)) {
|
||||||
$matchedMajors[] = $majorName;
|
$matchedMajors[] = $majorName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -673,10 +770,20 @@ class MatchService
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
$actualMajors = array_map(function($edu) {
|
// 收集所有专业名称用于错误信息
|
||||||
return $edu['majors_name'] ?? '';
|
$actualMajors = [];
|
||||||
}, $educations);
|
foreach ($educations as $edu) {
|
||||||
$actualMajors = array_filter($actualMajors);
|
$majorName = $edu['majors_name'] ??
|
||||||
|
$edu['major_name'] ??
|
||||||
|
$edu['major'] ??
|
||||||
|
$edu['major_field'] ??
|
||||||
|
$edu['specialty'] ??
|
||||||
|
$edu['profession'] ??
|
||||||
|
$edu['majors_category'] ?? '';
|
||||||
|
if (!empty($majorName)) {
|
||||||
|
$actualMajors[] = $majorName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'passed' => false,
|
'passed' => false,
|
||||||
|
|||||||
Reference in New Issue
Block a user