This commit is contained in:
杨志
2026-01-06 15:28:22 +08:00
parent 8013a2aad0
commit 0485bf47d4

View File

@@ -45,6 +45,8 @@ class MatchService
// 1. 从数据库获取用户简历信息 // 1. 从数据库获取用户简历信息
$resume = $this->getUserResumeFromDb($userId); $resume = $this->getUserResumeFromDb($userId);
if (empty($resume)) { if (empty($resume)) {
// 记录调试信息
error_log("获取用户简历失败 - 用户ID: {$userId}");
return [ return [
'list' => [], 'list' => [],
'pagination' => [ 'pagination' => [
@@ -52,35 +54,67 @@ class MatchService
'page_size' => $pageSize, 'page_size' => $pageSize,
'total' => 0, 'total' => 0,
'total_pages' => 0 'total_pages' => 0
],
'debug' => [
'error' => '用户不存在或简历信息为空',
'user_id' => $userId
] ]
]; ];
} }
// 2. 数据库快速过滤岗位 // 2. 数据库获取所有岗位
$filteredPositions = $this->filterPositionsFromDb($resume); $filteredPositions = $this->filterPositionsFromDb($resume);
// 记录调试信息
error_log("获取到岗位数量: " . count($filteredPositions) . ", 用户ID: {$userId}");
if (empty($filteredPositions)) {
return [
'list' => [],
'pagination' => [
'page' => $page,
'page_size' => $pageSize,
'total' => 0,
'total_pages' => 0
],
'debug' => [
'error' => '未找到任何岗位',
'user_id' => $userId,
'positions_count' => 0
]
];
}
// 3. 计算匹配度 // 3. 计算匹配度
$results = []; $results = [];
$zeroScoreCount = 0;
foreach ($filteredPositions as $position) { foreach ($filteredPositions as $position) {
try { try {
$score = $this->calculateMatchScore($position, $resume); $score = $this->calculateMatchScore($position, $resume);
if ($score == 0) {
$zeroScoreCount++;
}
if ($filterZero && $score == 0) { if ($filterZero && $score == 0) {
continue; // 过滤0分岗位 continue; // 过滤0分岗位
} }
$results[] = [ $results[] = [
'position_id' => $position['id'], 'position_id' => $position['id'] ?? 0,
'match_score' => $score, 'match_score' => $score,
'position' => $position 'position' => $position
]; ];
} catch (\Exception $e) { } catch (\Exception $e) {
// 如果计算出错,记录错误但继续处理其他岗位 // 如果计算出错,记录错误但继续处理其他岗位
error_log("计算匹配度失败 - 岗位ID: {$position['id']}, 错误: " . $e->getMessage()); error_log("计算匹配度失败 - 岗位ID: " . ($position['id'] ?? 'unknown') . ", 错误: " . $e->getMessage());
continue; continue;
} }
} }
// 记录调试信息
error_log("匹配完成 - 总岗位数: " . count($filteredPositions) . ", 有效结果数: " . count($results) . ", 0分岗位数: {$zeroScoreCount}, filter_zero: " . ($filterZero ? 'true' : 'false'));
// 4. 按匹配度降序排序 // 4. 按匹配度降序排序
usort($results, function($a, $b) { usort($results, function($a, $b) {
return $b['match_score'] - $a['match_score']; return $b['match_score'] - $a['match_score'];
@@ -100,6 +134,12 @@ class MatchService
'total' => $total, 'total' => $total,
'total_pages' => $totalPages, 'total_pages' => $totalPages,
'has_more' => $page < $totalPages 'has_more' => $page < $totalPages
],
'debug' => [
'total_positions' => count($filteredPositions),
'zero_score_count' => $zeroScoreCount,
'filter_zero' => $filterZero,
'result_count' => $total
] ]
]; ];
} }
@@ -112,8 +152,21 @@ class MatchService
private function getUserResumeFromDb(int $userId): array private function getUserResumeFromDb(int $userId): array
{ {
// 1. 获取用户基本信息t_user表 // 1. 获取用户基本信息t_user表
$user = Db::name('t_user')->where('uid', $userId)->find(); // 尝试不同的主键字段名
$user = null;
try {
$user = Db::name('t_user')->where('uid', $userId)->find();
} catch (\Exception $e) {
// 如果uid字段不存在尝试id字段
try {
$user = Db::name('t_user')->where('id', $userId)->find();
} catch (\Exception $e2) {
error_log("查询用户失败 - 用户ID: {$userId}, 错误: " . $e2->getMessage());
}
}
if (empty($user)) { if (empty($user)) {
error_log("用户不存在 - 用户ID: {$userId}");
return []; return [];
} }
@@ -216,10 +269,17 @@ class MatchService
// 尝试添加deleted_at条件 // 尝试添加deleted_at条件
$query->whereNull('deleted_at'); $query->whereNull('deleted_at');
$positions = $query->select()->toArray(); $positions = $query->select()->toArray();
error_log("从no_notice_position表获取到 " . count($positions) . " 个岗位已排除deleted_at");
} catch (\Exception $e) { } catch (\Exception $e) {
// 如果字段不存在或其他错误,查询所有记录 // 如果字段不存在或其他错误,查询所有记录
$query = Db::name('no_notice_position'); try {
$positions = $query->select()->toArray(); $query = Db::name('no_notice_position');
$positions = $query->select()->toArray();
error_log("从no_notice_position表获取到 " . count($positions) . " 个岗位无deleted_at字段");
} catch (\Exception $e2) {
error_log("查询岗位失败: " . $e2->getMessage());
$positions = [];
}
} }
// 解析JSON字段构建position_require结构 // 解析JSON字段构建position_require结构