5.3 KiB
5.3 KiB
简历存储和分析功能说明
📋 功能概述
本功能实现了从在线平台(Boss直聘)获取用户简历数据,并自动存储到数据库,同时使用AI进行智能分析的完整流程。
🔗 数据关联
pla_account表:存储平台账户信息(设备与平台的绑定关系)resume_info表:存储简历详细信息- 关联关系:
resume_info.account_id=pla_account.id(自增ID) - 查询逻辑:通过
sn_code+platform查询pla_account获取account_id
🔧 核心功能
1. 简历数据获取与存储
位置: api/middleware/job/jobManager.js
主要方法:
get_online_resume(sn_code, mqttClient, params)- 获取在线简历saveResumeToDatabase(sn_code, platform, resumeData)- 保存简历到数据库
数据流程:
MQTT请求 → 获取简历数据 → 解析数据 → 存储到resume_info表 → AI分析 → 更新AI分析字段
2. 数据映射关系
从Boss直聘响应到数据库字段的映射
| Boss直聘字段 | 数据库字段 | 说明 |
|---|---|---|
baseInfo.name |
fullName |
姓名 |
baseInfo.gender |
gender |
性别(1=男,0=女) |
baseInfo.age |
age |
年龄 |
baseInfo.account |
phone |
电话 |
baseInfo.emailBlur |
email |
邮箱 |
expectList[0].locationName |
location |
所在地 |
educationExpList[0].degreeName |
education |
学历 |
educationExpList[0].major |
major |
专业 |
educationExpList[0].school |
school |
毕业院校 |
educationExpList[0].endYear |
graduationYear |
毕业年份 |
baseInfo.workYearDesc |
workYears |
工作年限 |
workExpList[0].positionName |
currentPosition |
当前职位 |
workExpList[0].companyName |
currentCompany |
当前公司 |
expectList[0].positionName |
expectedPosition |
期望职位 |
expectList[0].salaryDesc |
expectedSalary |
期望薪资 |
expectList[0].locationName |
expectedLocation |
期望地点 |
expectList[0].industryDesc |
expectedIndustry |
期望行业 |
userDesc |
skillDescription |
技能描述 |
projectExpList |
projectExperience |
项目经验(JSON) |
workExpList |
workExperience |
工作经历(JSON) |
3. AI智能分析
分析维度:
- 技能标签提取 - 从简历描述中自动提取技术栈
- 优势分析 - 分析候选人的核心优势
- 劣势分析 - 指出需要改进的方面
- 职业建议 - 提供职业发展建议
- 竞争力评分 - 0-100分的综合评分
评分规则(默认分析):
- 基础分:50分
- 工作年限:10年以上+20分,5-10年+15分,3-5年+10分
- 技能数量:10个以上+15分,5-10个+10分
- 学历:硕士+10分,本科+5分
4. 技能标签自动提取
系统会自动从简历描述中提取以下技能标签:
前端技术:
- Vue, React, Angular, JavaScript, TypeScript
- Webpack, Vite, Redux, MobX
- jQuery, Bootstrap, Element UI, Ant Design
后端技术:
- Node.js, Python, Java, C#, .NET
- Express, Koa, Django, Flask
数据库:
- MySQL, MongoDB, Redis
其他技术:
- WebRTC, FFmpeg, Canvas, WebSocket
- Git, Docker, Kubernetes, AWS, Azure
- Selenium, Jest, Mocha, Cypress
📊 数据库表结构
表名: resume_info
主要字段:
- id: 简历ID(UUID)
- sn_code: 设备SN码
- platform: 平台(boss/liepin)
- fullName: 姓名
- gender: 性别
- age: 年龄
- phone: 电话
- email: 邮箱
- education: 学历
- workYears: 工作年限
- expectedPosition: 期望职位
- expectedSalary: 期望薪资
- skills: 技能标签(JSON)
- projectExperience: 项目经验(JSON)
- workExperience: 工作经历(JSON)
- aiSkillTags: AI提取的技能标签(JSON)
- aiStrengths: AI分析的优势
- aiWeaknesses: AI分析的劣势
- aiCareerSuggestion: AI职业建议
- aiCompetitiveness: AI竞争力评分
- originalData: 原始数据(JSON)
- isActive: 是否活跃
- syncTime: 同步时间
🚀 使用示例
调用方式
const jobManager = require('./api/middleware/job/jobManager');
// 获取在线简历(自动存储和分析)
const resumeData = await jobManager.get_online_resume(
'GHJU', // 设备SN码
mqttClient, // MQTT客户端实例
{ platform: 'boss' } // 参数(可选)
);
响应数据示例
参考文件: _doc/在线简历响应文本.json
🔍 日志输出
系统会输出以下日志信息:
[工作管理] 开始获取设备 GHJU 的在线简历
[工作管理] 成功获取简历数据: {...}
[工作管理] 简历已创建 - ID: xxx-xxx-xxx
[工作管理] 开始AI分析简历 - ID: xxx-xxx-xxx
[工作管理] AI分析完成 - 竞争力评分: 85
[工作管理] 简历数据已保存到数据库
⚠️ 注意事项
- 数据安全: 原始简历数据会完整保存在
originalData字段中 - 去重机制: 同一设备同一平台只保留一份活跃简历
- 容错处理: 如果AI分析失败,会使用基于规则的默认分析
- 异步处理: 简历保存失败不会影响数据返回
📝 后续优化建议
- 增加更多平台支持(猎聘、拉勾等)
- 优化AI提示词,提高分析准确度
- 添加简历版本管理功能
- 实现简历对比功能
- 增加简历导出功能(PDF、Word等)