diff --git a/app/services/resume_diagnose_service.py b/app/services/resume_diagnose_service.py index 22fc32e..d29b42e 100644 --- a/app/services/resume_diagnose_service.py +++ b/app/services/resume_diagnose_service.py @@ -14,11 +14,7 @@ from app.core.logger import log from app.models.resume_diagnosis_issue import ResumeDiagnosisIssue from app.models.resume_diagnosis_report import ResumeDiagnosisReport from app.models.user_resume import UserResume -from app.models.user_resume_competition import UserResumeCompetition -from app.models.user_resume_education import UserResumeEducation -from app.models.user_resume_internship import UserResumeInternship -from app.models.user_resume_project import UserResumeProject -from app.models.user_resume_work import UserResumeWork +from app.services.resume_loader import load_resume_detail from app.tool.snowflake import next_id # 模块中文名映射 @@ -35,11 +31,8 @@ class ResumeDiagnoseService: async def load_resume_data(self, resume_id: int, user_id: int) -> tuple[UserResume, list[dict]]: """加载简历主表 + 5 张子表数据,组装 AI 任务列表""" - result = await self.session.execute( - select(UserResume).where(UserResume.id == resume_id, UserResume.user_id == user_id)) - resume = result.scalar_one_or_none() - if resume is None: - raise ValueError("简历不存在") + detail = await load_resume_detail(self.session, resume_id, user_id) + resume = detail.resume target_position = resume.target_position or "" tasks: list[dict] = [] @@ -54,23 +47,23 @@ class ResumeDiagnoseService: }) # 子表 - await self._collect_tasks(tasks, target_position, "education", UserResumeEducation, resume_id, - lambda r: f"学校: {r.school or ''}, 专业: {r.major or ''}, 学历: {r.degree or ''}") - await self._collect_tasks(tasks, target_position, "work", UserResumeWork, resume_id, - lambda r: f"公司: {r.company_name or ''}, 职位: {r.position or ''}") - await self._collect_tasks(tasks, target_position, "internship", UserResumeInternship, resume_id, - lambda r: f"公司: {r.company_name or ''}, 职位: {r.position or ''}") - await self._collect_tasks(tasks, target_position, "project", UserResumeProject, resume_id, - lambda r: f"公司: {r.company_name or ''}, 项目: {r.project_name or ''}, 角色: {r.role or ''}") - await self._collect_tasks(tasks, target_position, "competition", UserResumeCompetition, resume_id, - lambda r: f"竞赛: {r.competition_name or ''}, 获奖: {r.award or ''}") + self._collect_tasks(tasks, target_position, "education", detail.education, + lambda r: f"学校: {r.school or ''}, 专业: {r.major or ''}, 学历: {r.degree or ''}") + self._collect_tasks(tasks, target_position, "work", detail.work, + lambda r: f"公司: {r.company_name or ''}, 职位: {r.position or ''}") + self._collect_tasks(tasks, target_position, "internship", detail.internship, + lambda r: f"公司: {r.company_name or ''}, 职位: {r.position or ''}") + self._collect_tasks(tasks, target_position, "project", detail.project, + lambda r: f"公司: {r.company_name or ''}, 项目: {r.project_name or ''}, 角色: {r.role or ''}") + self._collect_tasks(tasks, target_position, "competition", detail.competition, + lambda r: f"竞赛: {r.competition_name or ''}, 获奖: {r.award or ''}") return resume, tasks - async def _collect_tasks(self, tasks: list[dict], target_position: str, - module_type: str, model_cls, resume_id: int, context_fn): - """查询子表记录,将有 description 的记录加入 tasks""" - result = await self.session.execute(select(model_cls).where(model_cls.resume_id == resume_id)) - for record in result.scalars().all(): + @staticmethod + def _collect_tasks(tasks: list[dict], target_position: str, + module_type: str, records: list, context_fn): + """将有 description 的记录加入 tasks""" + for record in records: desc_text = _build_description_text(record.description) if not desc_text: continue @@ -80,7 +73,7 @@ class ResumeDiagnoseService: "context": context_fn(record), "description_text": desc_text, "_module_type_key": module_type, "_module_record_id": record.id, - "_original_description": record.description, # 原始 [{id,text}],用于映射 optimized_content + "_original_description": record.description, }) async def save_report(self, resume_id: int, user_id: int, grade: str, summary: str,