This commit is contained in:
张成
2025-11-24 13:23:42 +08:00
commit 5d7444cd65
156 changed files with 50653 additions and 0 deletions

View File

@@ -0,0 +1,235 @@
# 指令流程映射关系文档
## 📋 完整的指令执行流程
本文档说明从 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