Files
autoAiWorkSys/_doc/COMMAND_FLOW_MAPPING.md
张成 5d7444cd65 1
2025-11-24 13:23:42 +08:00

6.1 KiB
Raw Blame History

指令流程映射关系文档

📋 完整的指令执行流程

本文档说明从 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 中定义的操作类型:

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 传递:

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.jsgetTaskCommands() 方法中,将 taskType 映射为 command_type

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 的方法:

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 发送指令:

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 调用对应方法:

// 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. 参数传递

参数在整个流程中的传递:

// 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 模块中的别名方法:

// 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_typejobManager 中不存在

解决:

  1. 检查 taskQueue.js 中的 getTaskCommands() 方法
  2. 确保 command_typejobManager 中的方法名一致

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