Files
autoAiWorkSys/_doc/简历功能使用前置条件.md
张成 5d7444cd65 1
2025-11-24 13:23:42 +08:00

240 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 简历存储功能 - 前置条件和使用说明
## ⚠️ 重要前置条件
在使用简历存储功能之前,必须确保以下条件已满足:
### 1. 数据库表已创建
#### ✅ `pla_account` 表(平台账户表)
此表存储设备与平台账户的绑定关系,**必须先有记录**才能存储简历。
**表结构**:
```sql
CREATE TABLE `pla_account` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`name` varchar(50) NOT NULL DEFAULT '' COMMENT '账户名',
`sn_code` varchar(50) NOT NULL DEFAULT '' COMMENT '设备SN码',
`platform_type` varchar(50) NOT NULL DEFAULT '' COMMENT '平台类型(boss/liepin)',
`login_name` varchar(50) NOT NULL DEFAULT '' COMMENT '登录名',
`pwd` varchar(50) NOT NULL DEFAULT '' COMMENT '密码',
`keyword` varchar(50) NOT NULL DEFAULT '' COMMENT '关键词',
`search_url` varchar(50) NOT NULL DEFAULT '' COMMENT '搜索页网址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
**示例数据**:
```sql
INSERT INTO `pla_account` (`name`, `sn_code`, `platform_type`, `login_name`, `pwd`)
VALUES ('张三的Boss账号', 'GHJU', 'boss', '13800138000', 'password123');
```
#### ✅ `resume_info` 表(简历信息表)
此表存储简历详细信息,会自动创建(通过 Sequelize sync
**关键字段**:
- `id` - 简历UUID主键
- `sn_code` - 设备SN码关联设备
- `account_id` - 账户ID**关联 pla_account.id**
- `platform` - 平台类型boss/liepin
### 2. 数据关联关系
```
┌─────────────────┐ ┌──────────────────┐
│ pla_account │ │ resume_info │
├─────────────────┤ ├──────────────────┤
│ id (自增) │◄────────│ account_id │
│ sn_code │ │ sn_code │
│ platform_type │ │ platform │
│ login_name │ │ fullName │
│ pwd │ │ ... │
└─────────────────┘ └──────────────────┘
```
**查询逻辑**:
1. 通过 `sn_code` + `platform` 查询 `pla_account`
2. 获取 `pla_account.id` 作为 `account_id`
3.`account_id` 存入 `resume_info`
### 3. 环境配置
#### 数据库连接
确保数据库连接配置正确(`config/config.js`
#### AI服务配置可选
如需AI分析功能需配置 DeepSeek API
```env
DEEPSEEK_API_KEY=sk-xxxxxxxxxxxxx
DEEPSEEK_API_URL=https://api.deepseek.com/v1/chat/completions
DEEPSEEK_MODEL=deepseek-chat
```
## 🚀 使用流程
### 步骤1: 创建平台账户记录
在调用简历存储功能之前,必须先在 `pla_account` 表中创建账户记录:
```javascript
const db = require('./api/middleware/dbProxy');
const pla_account = db.getModel('pla_account');
// 创建账户记录
await pla_account.create({
name: '张三的Boss账号',
sn_code: 'GHJU',
platform_type: 'boss',
login_name: '13800138000',
pwd: 'password123',
keyword: '前端工程师',
search_url: 'https://www.zhipin.com/web/geek/job'
});
```
### 步骤2: 同步数据库表结构
运行同步脚本确保表结构正确:
```bash
node scripts/sync_resume_table.js
```
### 步骤3: 调用简历存储功能
```javascript
const jobManager = require('./api/middleware/job/jobManager');
// 获取在线简历(自动存储)
const resumeData = await jobManager.get_online_resume(
'GHJU', // 设备SN码必须在 pla_account 中存在)
mqttClient, // MQTT客户端
{ platform: 'boss' } // 平台类型(必须与 pla_account.platform_type 匹配)
);
```
## ❌ 常见错误
### 错误1: "未找到设备 GHJU 在平台 boss 的账户信息"
**原因**: `pla_account` 表中没有对应的记录
**解决方案**:
```javascript
// 检查是否存在账户记录
const account = await pla_account.findOne({
where: { sn_code: 'GHJU', platform_type: 'boss' }
});
if (!account) {
// 创建账户记录
await pla_account.create({
name: '账户名称',
sn_code: 'GHJU',
platform_type: 'boss',
login_name: '登录名',
pwd: '密码'
});
}
```
### 错误2: "Unknown column 'sn_code' in 'field list'"
**原因**: 数据库表结构未同步
**解决方案**:
```bash
# 运行同步脚本
node scripts/sync_resume_table.js
# 或手动执行SQL
ALTER TABLE `resume_info`
ADD COLUMN `sn_code` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '设备SN码',
ADD COLUMN `account_id` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '用户ID';
```
### 错误3: "account_id 不能为空"
**原因**: `pla_account` 查询失败或返回 null
**解决方案**:
1. 确认 `sn_code``platform_type` 匹配
2. 检查 `pla_account` 表中是否有对应记录
3. 确认 `platform` 参数正确('boss' 不是 'Boss'
## ✅ 验证清单
使用简历存储功能前,请确认:
- [ ] `pla_account` 表已创建
- [ ] `pla_account` 表中有对应设备的记录
- [ ] `sn_code``platform_type` 匹配
- [ ] `resume_info` 表已创建
- [ ] `resume_info` 表包含 `sn_code``account_id` 字段
- [ ] 数据库连接正常
- [ ] MQTT 客户端可用
- [ ] 可选DeepSeek API 配置正确
## 📝 完整示例
```javascript
const db = require('./api/middleware/dbProxy');
const jobManager = require('./api/middleware/job/jobManager');
async function setupAndGetResume() {
const pla_account = db.getModel('pla_account');
// 1. 检查或创建账户记录
let account = await pla_account.findOne({
where: { sn_code: 'GHJU', platform_type: 'boss' }
});
if (!account) {
console.log('创建账户记录...');
account = await pla_account.create({
name: '测试账号',
sn_code: 'GHJU',
platform_type: 'boss',
login_name: '13800138000',
pwd: 'password123'
});
console.log('账户创建成功ID:', account.id);
} else {
console.log('账户已存在ID:', account.id);
}
// 2. 获取简历(自动存储)
console.log('获取在线简历...');
const resumeData = await jobManager.get_online_resume(
'GHJU',
mqttClient,
{ platform: 'boss' }
);
console.log('简历获取成功!');
console.log('姓名:', resumeData.baseInfo?.name);
// 3. 验证存储结果
const resume_info = db.getModel('resume_info');
const savedResume = await resume_info.findOne({
where: { sn_code: 'GHJU', platform: 'boss', isActive: true }
});
console.log('简历已保存ID:', savedResume.id);
console.log('关联账户ID:', savedResume.account_id);
console.log('竞争力评分:', savedResume.aiCompetitiveness);
}
```
## 🔗 相关文档
- 详细功能说明: `_doc/简历存储和分析功能说明.md`
- 数据库同步指南: `_doc/数据库表同步指南.md`
- 快速参考: `_doc/简历功能快速参考.md`
- 示例代码: `examples/resume_storage_example.js`