# 指令流程映射关系文档 ## 📋 完整的指令执行流程 本文档说明从 Admin 前端到 boss-automation-nodejs 的完整指令映射关系。 ## 🔄 执行流程图 ``` Admin 前端 (pla_account_detail.vue) ↓ commandType plaAccountServer.runCommand() ↓ HTTP POST 后端 API (pla_account.js) ↓ taskType taskQueue.addTask() ↓ taskQueue.getTaskCommands() ↓ command_type command.executeCommand() ↓ jobManager[command_type]() ↓ MQTT action boss-automation-nodejs ↓ BossService[action]() ``` ## 📊 完整映射表 | Admin commandType | taskType | command_type | MQTT action | Boss 方法 | 说明 | |------------------|----------|--------------|-------------|-----------|------| | `get_login_qr_code` | `get_login_qr_code` | `getLoginQrCode` | `get_login_qr_code` | `get_login_qr_code()` | 获取登录二维码 | | `openBotDetection` | `openBotDetection` | `openBotDetection` | `openBotDetection` | `openBotDetection()` | 打开测试页 | | `get_resume` | `get_resume` | `getOnlineResume` | `get_resume` | `get_resume()` | 获取用户简历 | | `get_user_info` | `get_user_info` | `getUserInfo` | `get_user_info` | `get_user_info()` | 获取用户信息 | | `search_jobs` | `search_jobs` | `searchJob` | `search_jobs` | `search_jobs()` | 搜索岗位 | | `getJobList` | `getJobList` | `getJobList` | `getJobList` | `getJobList()` | 获取岗位列表 | | `getChatList` | `getChatList` | `getChatList` | `getChatList` | `getChatList()` | 获取聊天列表 | ## 🔍 详细说明 ### 1. Admin 前端 (commandType) 在 `pla_account_detail.vue` 中定义的操作类型: ```javascript actionMenuList: [ { value: 'get_login_qr_code', label: '用户登录', commandType: 'get_login_qr_code', commandName: '获取登录二维码' }, { value: 'getJobList', label: '岗位列表', commandType: 'getJobList', commandName: '获取岗位列表' }, // ... ] ``` ### 2. 后端 API (taskType) 在 `pla_account.js` 中,`commandType` 直接作为 `taskType` 传递: ```javascript const task = await task_status.create({ sn_code: account.sn_code, taskType: commandConfig.type, // 使用 commandType taskName: commandName || commandConfig.name, taskParams: JSON.stringify(finalParams) }); ``` ### 3. 任务队列 (command_type) 在 `taskQueue.js` 的 `getTaskCommands()` 方法中,将 `taskType` 映射为 `command_type`: ```javascript async getTaskCommands(task) { const { taskType, taskParams } = task; switch (taskType) { case 'get_login_qr_code': return [{ command_type: 'getLoginQrCode', // jobManager 方法名 command_name: '获取登录二维码', command_params: JSON.stringify({ platform }) }]; case 'getJobList': return [{ command_type: 'getJobList', // jobManager 方法名 command_name: '获取岗位列表', command_params: JSON.stringify({ keyword, platform }) }]; // ... } } ``` ### 4. 指令管理器 (jobManager 方法) 在 `command.js` 中调用 `jobManager` 的方法: ```javascript async executeCommand(taskId, command, mqttClient) { const commandType = command.command_type; const commandParams = JSON.parse(command.command_params); // 调用 jobManager 的方法 if (commandType && jobManager[commandType]) { result = await jobManager[commandType](sn_code, mqttClient, commandParams); } } ``` ### 5. MQTT 通信 (action) 在 `jobManager.js` 中,通过 MQTT 发送指令: ```javascript async getJobList(sn_code, mqttClient, params = {}) { const response = await mqttClient.publishAndWait(sn_code, { platform: 'boss', action: "getJobList", // MQTT action,对应 Boss 方法名 data: { keyword, pageCount } }); return response.data; } ``` ### 6. Boss 模块执行 在 `boss-automation-nodejs` 中,根据 `action` 调用对应方法: ```javascript // modules/index.js async executeAction(platform, action, data) { const modules = this.getModules(); // 调用 BossService[action] let result = await modules[platform][action](data); return result; } ``` ## ⚠️ 关键注意事项 ### 1. 命名一致性 - **Admin commandType** → 用户界面显示的操作类型 - **taskType** → 任务类型,与 commandType 相同 - **command_type** → jobManager 中的方法名(驼峰命名) - **MQTT action** → Boss 模块中的方法名(可能有别名) ### 2. 参数传递 参数在整个流程中的传递: ```javascript // Admin 前端 commandParams: { keyword: '前端', platform: 'boss' } ↓ // taskParams taskParams: { keyword: '前端', platform: 'boss' } ↓ // command_params command_params: '{"keyword":"前端","platform":"boss"}' ↓ // jobManager 方法参数 params: { keyword: '前端', platform: 'boss' } ↓ // MQTT data data: { keyword: '前端', pageCount: 3 } ↓ // Boss 方法参数 data: { keyword: '前端', pageCount: 3 } ``` ### 3. 别名支持 Boss 模块中的别名方法: ```javascript // BossService 类中 async openBotDetection(data) { return this.open_bot_detection(data); } async get_resume(data) { return this.getOnlineResume(data); } async search_jobs(data) { return this.searchJob(data); } ``` ## 🐛 常见问题 ### Q1: 提示"未知的指令类型" **原因:** `command_type` 在 `jobManager` 中不存在 **解决:** 1. 检查 `taskQueue.js` 中的 `getTaskCommands()` 方法 2. 确保 `command_type` 与 `jobManager` 中的方法名一致 ### Q2: MQTT 消息发送失败 **原因:** `action` 在 Boss 模块中不存在 **解决:** 1. 检查 `jobManager.js` 中的 MQTT action 2. 确保 Boss 模块中有对应的方法或别名 ### Q3: 参数传递错误 **原因:** 参数格式不正确 **解决:** 1. 确保 `command_params` 是 JSON 字符串 2. 在 `jobManager` 中正确解析参数 3. 在 MQTT 消息中正确传递参数 --- **创建时间**: 2025-11-13 **作者**: Augment Agent