const Framework = require("../../framework/node-core-framework.js"); /** * 任务管理控制器(客户端接口) * 提供客户端调用的任务相关接口 */ module.exports = { /** * @swagger * /api/task/current: * get: * summary: 获取当前执行的任务 * description: 根据设备SN码获取当前正在执行的任务信息 * tags: [前端-任务管理] * parameters: * - in: query * name: sn_code * required: true * schema: * type: string * description: 设备SN码 * example: 'GHJU' * responses: * 200: * description: 获取成功 * content: * application/json: * schema: * type: object * properties: * code: * type: integer * description: 状态码,0表示成功 * example: 0 * message: * type: string * description: 响应消息 * example: 'success' * data: * type: object * nullable: true * description: 当前任务信息,null表示没有正在执行的任务 * properties: * taskId: * type: integer * description: 任务ID * taskName: * type: string * description: 任务名称 * taskType: * type: string * description: 任务类型 * status: * type: string * description: 任务状态(running-执行中) * progress: * type: integer * description: 任务进度(0-100) * currentStep: * type: string * description: 当前步骤 * startTime: * type: string * description: 开始时间 */ 'GET /task/current': async (ctx) => { try { const { sn_code } = ctx.query || {}; if (!sn_code) { return ctx.fail('请提供设备SN码'); } const { task_status, op } = await Framework.getModels(); // 查询当前正在执行的任务(status = 'running') const currentTask = await task_status.findOne({ where: { sn_code: sn_code, status: 'running' }, order: [['id', 'DESC']] // 获取最新的任务 }); if (!currentTask) { return ctx.success(null, '暂无执行中的任务'); } const taskData = currentTask.toJSON(); return ctx.success({ taskId: taskData.id, taskName: taskData.taskName || taskData.task_name || taskData.taskType || taskData.task_type || '未知任务', taskType: taskData.taskType || taskData.task_type, status: 'running', progress: taskData.progress || 0, currentStep: taskData.currentStep || taskData.current_step || '', startTime: taskData.startTime || taskData.start_time || taskData.created_time }); } catch (error) { console.error('[任务管理] 获取当前任务失败:', error); return ctx.fail('获取当前任务失败: ' + (error.message || '未知错误')); } }, /** * @swagger * /api/task/pending: * get: * summary: 获取待执行的任务列表 * description: 根据设备SN码获取待执行的任务列表 * tags: [前端-任务管理] * parameters: * - in: query * name: sn_code * required: true * schema: * type: string * description: 设备SN码 * example: 'GHJU' * - in: query * name: limit * required: false * schema: * type: integer * default: 10 * description: 返回数量限制 * responses: * 200: * description: 获取成功 * content: * application/json: * schema: * type: object * properties: * code: * type: integer * description: 状态码,0表示成功 * example: 0 * message: * type: string * description: 响应消息 * example: 'success' * data: * type: array * description: 待执行任务列表 * items: * type: object * properties: * taskId: * type: integer * description: 任务ID * taskName: * type: string * description: 任务名称 * taskType: * type: string * description: 任务类型 * status: * type: string * description: 任务状态(pending-待执行) * scheduledTime: * type: string * description: 计划执行时间 * priority: * type: integer * description: 优先级 */ 'GET /task/pending': async (ctx) => { try { const { sn_code, limit = 10 } = ctx.query || {}; if (!sn_code) { return ctx.fail('请提供设备SN码'); } const { task_status, op } = await Framework.getModels(); // 查询待执行的任务(status = 'pending') const pendingTasks = await task_status.findAll({ where: { sn_code: sn_code, status: 'pending' }, order: [ ['priority', 'DESC'], // 按优先级降序 ['id', 'ASC'] // 同优先级按ID升序 ], limit: parseInt(limit) || 10 }); const taskList = pendingTasks.map(task => { const taskData = task.toJSON(); return { taskId: taskData.id, taskName: taskData.taskName || taskData.task_name || taskData.taskType || taskData.task_type || '未知任务', taskType: taskData.taskType || taskData.task_type, status: 'pending', scheduledTime: taskData.scheduledTime || taskData.scheduled_time || taskData.created_time, priority: taskData.priority || 0 }; }); return ctx.success(taskList); } catch (error) { console.error('[任务管理] 获取待执行任务失败:', error); return ctx.fail('获取待执行任务失败: ' + (error.message || '未知错误')); } } };