# 简历存储和分析功能说明

## 📋 功能概述

本功能实现了从在线平台（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智能分析

**分析维度**:
1. **技能标签提取** - 从简历描述中自动提取技术栈
2. **优势分析** - 分析候选人的核心优势
3. **劣势分析** - 指出需要改进的方面
4. **职业建议** - 提供职业发展建议
5. **竞争力评分** - 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`

**主要字段**:
```sql
- 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: 同步时间
```

## 🚀 使用示例

### 调用方式

```javascript
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
[工作管理] 简历数据已保存到数据库
```

## ⚠️ 注意事项

1. **数据安全**: 原始简历数据会完整保存在 `originalData` 字段中
2. **去重机制**: 同一设备同一平台只保留一份活跃简历
3. **容错处理**: 如果AI分析失败，会使用基于规则的默认分析
4. **异步处理**: 简历保存失败不会影响数据返回

## 📝 后续优化建议

1. 增加更多平台支持（猎聘、拉勾等）
2. 优化AI提示词，提高分析准确度
3. 添加简历版本管理功能
4. 实现简历对比功能
5. 增加简历导出功能（PDF、Word等）

