14 KiB
Boss直聘搜索列表和投递功能开发规划
📋 功能概述
基于Boss直聘Web端职位搜索页面(https://www.zhipin.com/web/geek/jobs),完善搜索列表获取和职位投递功能,包括服务端任务创建、指令生成和完整流程实现。
🎯 目标功能
1. 搜索列表功能
- 支持多条件搜索(关键词、城市、薪资、经验、学历等)
- 支持分页获取职位列表
- 自动保存职位到数据库
- 支持职位去重和更新
2. 投递功能
- 单个职位投递
- 批量职位投递
- 投递状态跟踪
- 投递记录管理
📊 功能架构
用户/系统触发
↓
创建任务 (task_status)
↓
生成指令序列 (task_commands)
↓
执行指令 (通过MQTT发送到设备)
↓
设备执行并返回结果
↓
保存数据到数据库
↓
更新任务和指令状态
🔧 技术实现
一、搜索列表功能完善
1.1 指令参数扩展
文件: api/middleware/job/jobManager.js
方法: get_job_list()
需要支持的参数:
{
keyword: '全栈工程师', // 搜索关键词
city: '101020100', // 城市代码(上海)
cityName: '上海', // 城市名称
salary: '20-30K', // 薪资范围
experience: '3-5年', // 工作经验
education: '本科', // 学历要求
industry: '互联网', // 公司行业
companySize: '100-499人', // 公司规模
financingStage: 'B轮', // 融资阶段
page: 1, // 页码
pageSize: 20, // 每页数量
pageCount: 3 // 获取页数(用于批量获取)
}
1.2 任务创建接口
文件: api/services/pla_account_service.js
新增方法: createSearchJobListTask()
/**
* 创建搜索职位列表任务
* @param {Object} params - 任务参数
* @param {number} params.id - 账号ID
* @param {string} params.keyword - 搜索关键词
* @param {string} params.city - 城市代码
* @param {Object} params.searchParams - 搜索条件(薪资、经验、学历等)
* @param {number} params.pageCount - 获取页数
* @returns {Promise<Object>} 任务创建结果
*/
async createSearchJobListTask(params) {
// 1. 验证账号和授权
// 2. 创建任务记录
// 3. 生成搜索指令
// 4. 执行指令
// 5. 返回任务ID
}
1.3 指令生成逻辑
文件: api/middleware/schedule/taskHandlers.js
需要完善: handleAutoDeliverTask() 中的搜索指令生成
当前实现:
const getJobListCommand = {
command_type: 'getJobList',
command_name: '获取职位列表',
command_params: JSON.stringify({
sn_code: sn_code,
keyword: keyword || accountConfig.keyword || '',
platform: platform || 'boss',
pageCount: pageCount || 3
}),
priority: config.getTaskPriority('search_jobs') || 5
};
需要扩展为:
const getJobListCommand = {
command_type: 'get_job_list', // 统一使用下划线命名
command_name: '获取职位列表',
command_params: JSON.stringify({
sn_code: sn_code,
platform: platform || 'boss',
keyword: keyword || accountConfig.keyword || '',
city: city || accountConfig.city || '101020100', // 默认上海
cityName: cityName || accountConfig.cityName || '上海',
salary: searchParams?.salary || '',
experience: searchParams?.experience || '',
education: searchParams?.education || '',
industry: searchParams?.industry || '',
companySize: searchParams?.companySize || '',
financingStage: searchParams?.financingStage || '',
page: 1,
pageSize: 20,
pageCount: pageCount || 3
}),
priority: config.getTaskPriority('get_job_list') || 5,
sequence: 1
};
1.4 职位数据保存优化
文件: api/middleware/job/jobManager.js
方法: saveJobsToDatabase()
需要完善:
- 支持更多字段映射(从Boss直聘响应数据)
- 优化位置解析逻辑
- 支持职位状态更新(已投递、已查看等)
- 添加职位匹配度计算
二、投递功能完善
2.1 单个职位投递
文件: api/middleware/job/jobManager.js
方法: applyJob()
当前状态: ✅ 已实现基础功能
需要完善:
- 支持更多投递参数(期望薪资、求职信等)
- 优化错误处理
- 添加投递前检查(是否已投递、是否满足条件等)
2.2 批量职位投递任务
文件: api/middleware/schedule/taskHandlers.js
方法: handleAutoDeliverTask()
当前状态: ✅ 已实现基础功能
需要完善:
-
搜索条件完善
- 支持城市、薪资、经验、学历等筛选条件
- 从账号配置中读取默认搜索条件
- 支持任务参数覆盖账号配置
-
职位匹配算法优化
- 完善距离计算(基于经纬度)
- 完善薪资匹配(解析薪资范围字符串)
- 完善工作年限匹配
- 完善学历匹配
- 完善权重评分系统
-
投递指令生成
- 为每个匹配的职位生成投递指令
- 支持批量投递(一次任务投递多个职位)
- 添加投递间隔控制(避免频繁投递)
2.3 投递任务创建接口
文件: api/services/pla_account_service.js
新增方法: createDeliverTask()
/**
* 创建投递任务
* @param {Object} params - 任务参数
* @param {number} params.id - 账号ID
* @param {string} params.keyword - 搜索关键词
* @param {Object} params.searchParams - 搜索条件
* @param {Object} params.filterRules - 过滤规则
* @param {number} params.maxCount - 最大投递数量
* @returns {Promise<Object>} 任务创建结果
*/
async createDeliverTask(params) {
// 1. 验证账号和授权
// 2. 创建任务记录
// 3. 生成搜索指令(获取职位列表)
// 4. 生成投递指令序列(根据匹配结果)
// 5. 执行任务
// 6. 返回任务ID
}
📝 具体开发任务
任务1: 完善搜索参数支持
文件: api/middleware/job/jobManager.js
修改方法: get_job_list()
任务内容:
- 扩展参数支持(城市、薪资、经验、学历等)
- 构建完整的搜索参数对象
- 传递给MQTT指令
代码位置: 第153-206行
预计工作量: 2小时
任务2: 优化职位数据保存
文件: api/middleware/job/jobManager.js
修改方法: saveJobsToDatabase()
任务内容:
- 完善字段映射(从Boss直聘响应数据提取更多字段)
- 优化位置解析(减少API调用,添加缓存)
- 添加职位状态管理
- 添加职位匹配度字段
代码位置: 第215-308行
预计工作量: 3小时
任务3: 完善自动投递任务搜索条件
文件: api/middleware/schedule/taskHandlers.js
修改方法: handleAutoDeliverTask()
任务内容:
- 从账号配置读取默认搜索条件
- 支持任务参数覆盖
- 构建完整的搜索参数
- 传递给搜索指令
代码位置: 第220-233行
预计工作量: 2小时
任务4: 优化职位匹配算法
文件: api/middleware/schedule/taskHandlers.js
修改方法: handleAutoDeliverTask()
任务内容:
- 完善距离计算(使用经纬度计算实际距离)
- 完善薪资匹配(解析"20-30K"格式,转换为数值范围)
- 完善工作年限匹配(解析"3-5年"格式)
- 完善学历匹配(学历等级映射)
- 优化权重评分计算
代码位置: 第255-400行(职位评分和过滤逻辑)
预计工作量: 4小时
任务5: 创建搜索任务接口
文件: api/services/pla_account_service.js
新增方法: createSearchJobListTask()
任务内容:
- 验证账号和授权
- 创建任务记录
- 生成搜索指令
- 执行指令
- 返回任务信息
代码位置: 在 runCommand() 方法后添加
预计工作量: 3小时
任务6: 创建投递任务接口
文件: api/services/pla_account_service.js
新增方法: createDeliverTask()
任务内容:
- 验证账号和授权
- 创建任务记录
- 生成搜索指令(获取职位列表)
- 等待搜索完成
- 获取匹配的职位
- 生成投递指令序列
- 执行投递指令
- 返回任务信息
代码位置: 在 createSearchJobListTask() 方法后添加
预计工作量: 4小时
任务7: 完善指令类型映射
文件: api/middleware/schedule/command.js
修改位置: 指令执行逻辑
任务内容:
- 确保
get_job_list指令类型正确映射到jobManager.get_job_list() - 确保
search_jobs指令类型正确映射到jobManager.search_jobs() - 确保
apply_job指令类型正确映射到jobManager.applyJob()
代码位置: 第150-250行(指令执行逻辑)
预计工作量: 1小时
任务8: 添加搜索条件配置管理
文件: api/model/pla_account.js
任务内容:
- 添加搜索条件配置字段(如果不存在)
- 支持在账号配置中保存默认搜索条件
- 支持在任务参数中覆盖搜索条件
相关字段:
search_config(JSON): 搜索条件配置{ "city": "101020100", "cityName": "上海", "defaultSalary": "20-30K", "defaultExperience": "3-5年", "defaultEducation": "本科" }
预计工作量: 1小时
🔄 工作流程
搜索职位列表流程
1. 用户/系统调用 createSearchJobListTask()
↓
2. 创建任务记录 (task_status)
↓
3. 生成搜索指令 (task_commands)
- command_type: 'get_job_list'
- command_params: { keyword, city, salary, ... }
↓
4. 执行指令 (通过MQTT发送到设备)
↓
5. 设备执行搜索并返回职位列表
↓
6. 保存职位到数据库 (job_postings)
- 去重处理
- 位置解析
- 字段映射
↓
7. 更新指令状态为完成
↓
8. 更新任务状态为完成
投递职位流程
1. 用户/系统调用 createDeliverTask()
↓
2. 创建任务记录 (task_status)
↓
3. 生成搜索指令 (获取职位列表)
- command_type: 'get_job_list'
↓
4. 执行搜索指令
↓
5. 获取职位列表并保存到数据库
↓
6. 根据简历信息和过滤规则匹配职位
- 距离匹配
- 薪资匹配
- 工作年限匹配
- 学历匹配
- 权重评分
↓
7. 为每个匹配的职位生成投递指令
- command_type: 'apply_job'
- command_params: { jobId, encryptBossId, ... }
↓
8. 批量执行投递指令(带间隔控制)
↓
9. 保存投递记录 (apply_records)
↓
10. 更新职位状态 (job_postings.applyStatus)
↓
11. 更新任务状态为完成
📊 数据库字段说明
job_postings 表需要完善的字段
| 字段名 | 类型 | 说明 | 状态 |
|---|---|---|---|
city |
VARCHAR | 城市代码 | 待添加 |
cityName |
VARCHAR | 城市名称 | 待添加 |
salaryMin |
INT | 最低薪资(元) | 待添加 |
salaryMax |
INT | 最高薪资(元) | 待添加 |
experienceMin |
INT | 最低工作年限 | 待添加 |
experienceMax |
INT | 最高工作年限 | 待添加 |
educationLevel |
VARCHAR | 学历等级 | 待添加 |
matchScore |
DECIMAL | 匹配度评分 | 待添加 |
pla_account 表需要添加的字段
| 字段名 | 类型 | 说明 | 状态 |
|---|---|---|---|
search_config |
JSON | 搜索条件配置 | 待添加 |
city |
VARCHAR | 默认城市代码 | 待添加 |
cityName |
VARCHAR | 默认城市名称 | 待添加 |
🧪 测试计划
单元测试
- 测试搜索参数构建
- 测试职位数据保存
- 测试职位匹配算法
- 测试投递指令生成
集成测试
- 测试完整搜索流程
- 测试完整投递流程
- 测试任务创建和执行
- 测试MQTT通信
功能测试
- 测试多条件搜索
- 测试分页获取
- 测试批量投递
- 测试错误处理
📅 开发时间估算
| 任务 | 预计时间 | 优先级 |
|---|---|---|
| 任务1: 完善搜索参数支持 | 2小时 | 高 |
| 任务2: 优化职位数据保存 | 3小时 | 高 |
| 任务3: 完善自动投递任务搜索条件 | 2小时 | 高 |
| 任务4: 优化职位匹配算法 | 4小时 | 高 |
| 任务5: 创建搜索任务接口 | 3小时 | 中 |
| 任务6: 创建投递任务接口 | 4小时 | 中 |
| 任务7: 完善指令类型映射 | 1小时 | 中 |
| 任务8: 添加搜索条件配置管理 | 1小时 | 低 |
总计: 约20小时
🚀 开发优先级
第一阶段(核心功能)
- 任务1: 完善搜索参数支持
- 任务2: 优化职位数据保存
- 任务3: 完善自动投递任务搜索条件
- 任务4: 优化职位匹配算法
第二阶段(接口完善)
- 任务5: 创建搜索任务接口
- 任务6: 创建投递任务接口
- 任务7: 完善指令类型映射
第三阶段(配置管理)
- 任务8: 添加搜索条件配置管理
📌 注意事项
- 命名规范: 统一使用下划线命名(
get_job_list而不是getJobList) - 错误处理: 所有方法都需要完善的错误处理和日志记录
- 数据验证: 所有输入参数都需要验证
- 性能优化: 批量操作需要考虑性能,避免阻塞
- MQTT通信: 确保指令参数格式正确,与客户端协议一致
- 数据库事务: 批量操作需要使用事务保证数据一致性
🔗 相关文件
api/middleware/job/jobManager.js- 工作管理核心逻辑api/middleware/schedule/taskHandlers.js- 任务处理器api/middleware/schedule/command.js- 指令管理器api/services/pla_account_service.js- 账号服务api/model/job_postings.js- 职位数据模型api/model/pla_account.js- 账号数据模型