5.6 KiB
5.6 KiB
简历存储和分析功能 - 快速参考
🚀 快速开始
1. 基本使用
const jobManager = require('./api/middleware/job/jobManager');
// 获取在线简历(自动存储和分析)
const resumeData = await jobManager.get_online_resume(
'GHJU', // 设备SN码
mqttClient, // MQTT客户端
{ platform: 'boss' } // 平台(可选,默认boss)
);
2. 查询已存储的简历
const db = require('./api/middleware/dbProxy');
const resume_info = db.getModel('resume_info');
// 查询指定设备的简历
const resume = await resume_info.findOne({
where: {
sn_code: 'GHJU',
platform: 'boss',
isActive: true
}
});
console.log('姓名:', resume.fullName);
console.log('竞争力评分:', resume.aiCompetitiveness);
📋 主要字段说明
基本信息
fullName- 姓名gender- 性别age- 年龄phone- 电话email- 邮箱
工作信息
workYears- 工作年限currentPosition- 当前职位currentCompany- 当前公司expectedPosition- 期望职位expectedSalary- 期望薪资
AI分析字段
aiSkillTags- AI提取的技能标签(JSON数组)aiStrengths- 优势分析aiWeaknesses- 劣势分析aiCareerSuggestion- 职业建议aiCompetitiveness- 竞争力评分(0-100)
复杂数据(JSON格式)
skills- 技能标签数组projectExperience- 项目经验数组workExperience- 工作经历数组originalData- 完整原始数据
🔍 常用查询示例
查询高竞争力简历
const highScoreResumes = await resume_info.findAll({
where: {
aiCompetitiveness: { [db.models.op.gte]: 80 }
},
order: [['aiCompetitiveness', 'DESC']]
});
按技能搜索
const vueResumes = await resume_info.findAll({
where: {
skills: { [db.models.op.like]: '%Vue%' }
}
});
统计数据
// 总数
const total = await resume_info.count();
// 按平台统计
const bossCount = await resume_info.count({
where: { platform: 'boss' }
});
// 平均竞争力
const avgScore = await resume_info.findAll({
attributes: [
[db.models.sequelize.fn('AVG',
db.models.sequelize.col('aiCompetitiveness')),
'avgScore']
]
});
🎯 数据处理技巧
解析JSON字段
// 解析技能标签
const skills = JSON.parse(resume.skills || '[]');
console.log('技能:', skills.join(', '));
// 解析项目经验
const projects = JSON.parse(resume.projectExperience || '[]');
projects.forEach(p => {
console.log(`项目: ${p.name} - ${p.role}`);
});
// 解析工作经历
const workExp = JSON.parse(resume.workExperience || '[]');
workExp.forEach(w => {
console.log(`${w.company} - ${w.position}`);
});
获取原始数据
const originalData = JSON.parse(resume.originalData);
console.log('完整Boss直聘数据:', originalData);
⚙️ 配置说明
环境变量(.env)
# DeepSeek AI配置
DEEPSEEK_API_KEY=sk-xxxxxxxxxxxxx
DEEPSEEK_API_URL=https://api.deepseek.com/v1/chat/completions
DEEPSEEK_MODEL=deepseek-chat
数据库配置
确保 resume_info 表已创建,字段定义参考:
api/model/resume_info.js
🐛 常见问题
Q1: 简历保存失败怎么办?
A: 系统有容错机制,保存失败不会影响数据返回。检查日志:
[工作管理] 保存简历数据失败: [错误信息]
Q2: AI分析失败怎么办?
A: 系统会自动使用基于规则的默认分析。检查:
- DeepSeek API配置是否正确
- API密钥是否有效
- 网络连接是否正常
Q3: 如何更新已有简历?
A: 再次调用 get_online_resume,系统会自动检测并更新:
// 同一设备同一平台会自动更新
await jobManager.get_online_resume('GHJU', mqttClient);
Q4: 如何查看详细日志?
A: 查看控制台输出:
[工作管理] 开始获取设备 GHJU 的在线简历
[工作管理] 成功获取简历数据
[工作管理] 简历已创建/更新 - ID: xxx
[工作管理] AI分析完成 - 竞争力评分: 85
📊 性能优化建议
1. 批量查询
// 使用 findAll 而不是多次 findOne
const resumes = await resume_info.findAll({
where: { sn_code: { [db.models.op.in]: ['GHJU', 'ABCD'] } }
});
2. 选择性字段
// 只查询需要的字段
const resumes = await resume_info.findAll({
attributes: ['id', 'fullName', 'aiCompetitiveness'],
where: { isActive: true }
});
3. 分页查询
const resumes = await resume_info.findAndCountAll({
limit: 20,
offset: 0,
order: [['aiCompetitiveness', 'DESC']]
});
🔗 相关文档
- 详细说明:
_doc/简历存储和分析功能说明.md - 实现总结:
_doc/简历功能实现总结.md - 示例代码:
examples/resume_storage_example.js - 模型定义:
api/model/resume_info.js - 响应示例:
_doc/在线简历响应文本.json
💡 最佳实践
- 总是检查返回值
const resume = await resume_info.findOne({...});
if (resume) {
// 处理简历数据
}
- 安全解析JSON
try {
const skills = JSON.parse(resume.skills || '[]');
} catch (e) {
console.error('解析失败:', e);
}
- 使用事务处理批量操作
const t = await db.models.sequelize.transaction();
try {
// 批量操作
await t.commit();
} catch (error) {
await t.rollback();
}
- 定期清理旧数据
// 删除非活跃简历
await resume_info.destroy({
where: { isActive: false }
});