# 任务服务 API 文档 **服务**: `hl-task-service` **接口总数**: 27 ## 目录 - **WebSocket 实时推送** (1 个接口) - **任务看板管理** (13 个接口) - **任务管理** (13 个接口) --- ## WebSocket 实时推送 ### `GET` /admin/task/board/ws-doc/info **WebSocket 连接说明** ## 连接信息 | 项目 | 值 | |------|-------| | **连接地址** | `ws://{host}:8092/ws/task` | | **协议** | STOMP over WebSocket(SockJS 降级方案) | | **跨域** | 允许所有源 (`*`) | ## 订阅频道 | 订阅地址 | 说明 | |------------|-------------| | `/topic/board/{boardId}` | 订阅指定看板,接收该看板下的实时任务事件 | ## 推送消息格式 ```json { "event": "TASK_CREATED", "data": { ... }, "timestamp": 1709539200000 } ``` ## 事件类型 | 事件 | 说明 | data 内容 | |-------|------------|------| | TASK_CREATED | 任务创建 | 任务对象 | | TASK_UPDATED | 任务更新 | 任务对象 | | TASK_DELETED | 任务删除 | 任务ID | | TASK_MOVED | 任务移动(状态变更) | 任务对象 | | COMMENT_ADDED | 新增评论 | 评论对象 | ## 前端接入示例 (SockJS + STOMP) ```javascript import SockJS from 'sockjs-client' import { Stomp } from '@stomp/stompjs' const socket = new SockJS('http://localhost:8092/ws/task') const stompClient = Stomp.over(socket) stompClient.connect({}, () => { stompClient.subscribe('/topic/board/123', (msg) => { const { event, data, timestamp } = JSON.parse(msg.body) console.log('Event:', event, 'Data:', data) }) }) ``` **响应** `object` --- ## 任务看板管理 ### `POST` /admin/task/board **创建自定义看板** 创建自定义看板,自动添加创建者为看板成员,并创建默认状态列(待办、进行中、已完成)。 **权限**:需管理员登录。 **请求体** `创建看板请求` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `boardName` | `string` | 是 | 看板名称 | | `deptId` | `long` | | 部门ID | | `description` | `string` | | 看板描述 | | `memberIds` | `long[]` | | 成员ID列表 | **响应** `统一响应结果«看板信息»` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `code` | `int` | | 状态码 | | `data` | `看板信息` | | 响应数据 | |   `boardId` | `long` | | 看板ID | |   `boardName` | `string` | | 看板名称 | |   `boardType` | `string` | | 看板类型 | |   `createdAt` | `string` | | 创建时间 | |   `createdBy` | `long` | | 创建人ID | |   `creatorName` | `string` | | 创建人姓名 | |   `deptId` | `long` | | 部门ID | |   `deptName` | `string` | | 部门名称 | |   `description` | `string` | | 看板描述 | |   `statuses` | `看板状态信息[]` | | 状态列表 | |     `isPreset` | `boolean` | | 是否预设状态 | |     `sortOrder` | `int` | | 排序序号 | |     `statusColor` | `string` | | 状态颜色 | |     `statusId` | `long` | | 状态ID | |     `statusName` | `string` | | 状态名称 | |     `taskCount` | `int` | | 该状态下的任务数量 | |   `taskCount` | `int` | | 任务总数 | | `message` | `string` | | 响应消息 | --- ### `GET` /admin/task/board/{boardId} **看板详情** 返回看板基本信息(名称、描述、创建者),不含任务数据。查看任务请使用「获取看板任务」接口 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `boardId` | `integer` | | 看板ID | **响应** `统一响应结果«看板信息»` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `code` | `int` | | 状态码 | | `data` | `看板信息` | | 响应数据 | |   `boardId` | `long` | | 看板ID | |   `boardName` | `string` | | 看板名称 | |   `boardType` | `string` | | 看板类型 | |   `createdAt` | `string` | | 创建时间 | |   `createdBy` | `long` | | 创建人ID | |   `creatorName` | `string` | | 创建人姓名 | |   `deptId` | `long` | | 部门ID | |   `deptName` | `string` | | 部门名称 | |   `description` | `string` | | 看板描述 | |   `statuses` | `看板状态信息[]` | | 状态列表 | |     `isPreset` | `boolean` | | 是否预设状态 | |     `sortOrder` | `int` | | 排序序号 | |     `statusColor` | `string` | | 状态颜色 | |     `statusId` | `long` | | 状态ID | |     `statusName` | `string` | | 状态名称 | |     `taskCount` | `int` | | 该状态下的任务数量 | |   `taskCount` | `int` | | 任务总数 | | `message` | `string` | | 响应消息 | --- ### `PUT` /admin/task/board/{boardId} **更新看板** 更新看板的名称和描述。仅看板创建者或超级管理员可操作。 **权限**:需管理员登录,且为看板创建者或超级管理员。 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `boardId` | `integer` | | 看板ID | **请求体** `更新看板请求` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `boardName` | `string` | | 看板名称 | | `description` | `string` | | 看板描述 | **响应** `统一响应结果«看板信息»` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `code` | `int` | | 状态码 | | `data` | `看板信息` | | 响应数据 | |   `boardId` | `long` | | 看板ID | |   `boardName` | `string` | | 看板名称 | |   `boardType` | `string` | | 看板类型 | |   `createdAt` | `string` | | 创建时间 | |   `createdBy` | `long` | | 创建人ID | |   `creatorName` | `string` | | 创建人姓名 | |   `deptId` | `long` | | 部门ID | |   `deptName` | `string` | | 部门名称 | |   `description` | `string` | | 看板描述 | |   `statuses` | `看板状态信息[]` | | 状态列表 | |     `isPreset` | `boolean` | | 是否预设状态 | |     `sortOrder` | `int` | | 排序序号 | |     `statusColor` | `string` | | 状态颜色 | |     `statusId` | `long` | | 状态ID | |     `statusName` | `string` | | 状态名称 | |     `taskCount` | `int` | | 该状态下的任务数量 | |   `taskCount` | `int` | | 任务总数 | | `message` | `string` | | 响应消息 | --- ### `DELETE` /admin/task/board/{boardId} **删除看板** 删除看板及其下所有状态列和任务(级联删除)。仅看板创建者或超级管理员可操作 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `boardId` | `integer` | | 看板ID | **响应** `统一响应结果«Void»` --- ### `DELETE` /admin/task/board/{boardId}/member/{targetAdminId} **移除成员** 从看板中移除指定成员。仅看板创建者或超级管理员可操作,不能移除创建者自己 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `boardId` | `integer` | | 看板ID | | `targetAdminId` | `integer` | | 目标管理员ID | **响应** `统一响应结果«Void»` --- ### `GET` /admin/task/board/{boardId}/members **获取看板成员** 返回看板的所有成员列表,包含成员的管理员ID和姓名 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `boardId` | `integer` | | 看板ID | **响应** `统一响应结果«List«看板成员信息»»` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `code` | `int` | | 状态码 | | `data` | `看板成员信息[]` | | 响应数据 | |   `adminId` | `long` | | 管理员ID | |   `avatarUrl` | `string` | | 头像地址 | |   `joinedAt` | `string` | | 加入时间 | |   `role` | `string` | | 角色: OWNER/MEMBER | |   `username` | `string` | | 用户名 | | `message` | `string` | | 响应消息 | --- ### `POST` /admin/task/board/{boardId}/members **添加成员** 批量添加管理员为看板成员,成为成员后可以查看看板、创建和操作任务。 **权限**:需管理员登录,且为看板创建者或超级管理员。 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `boardId` | `integer` | | 看板ID | **请求体** `添加成员请求` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `adminIds` | `long[]` | 是 | 管理员ID列表 | **响应** `统一响应结果«Void»` --- ### `POST` /admin/task/board/{boardId}/status **创建状态列** 在看板中创建新的状态列(如测试中、待发布等),自动排到末尾。任务通过拖拽在不同状态列间流转。 **权限**:需管理员登录且为看板成员。 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `boardId` | `integer` | | 看板ID | **请求体** `创建状态请求` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `statusColor` | `string` | | 状态颜色 | | `statusName` | `string` | 是 | 状态名称 | **响应** `统一响应结果«看板状态信息»` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `code` | `int` | | 状态码 | | `data` | `看板状态信息` | | 响应数据 | |   `isPreset` | `boolean` | | 是否预设状态 | |   `sortOrder` | `int` | | 排序序号 | |   `statusColor` | `string` | | 状态颜色 | |   `statusId` | `long` | | 状态ID | |   `statusName` | `string` | | 状态名称 | |   `taskCount` | `int` | | 该状态下的任务数量 | | `message` | `string` | | 响应消息 | --- ### `PUT` /admin/task/board/{boardId}/status/sort **状态列排序** 批量更新状态列的排序顺序。传入状态列ID数组,数组下标即为新的排序值。操作完成后通过WebSocket推送STATUS_REORDERED事件 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `boardId` | `integer` | | 看板ID | **请求体** `状态排序请求` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `statusIds` | `long[]` | 是 | 状态ID列表(按排序顺序) | **响应** `统一响应结果«Void»` --- ### `GET` /admin/task/board/{boardId}/statuses **获取看板状态列** 返回看板的所有状态列(如待办、进行中、已完成),按排序字段升序排列。拖拽任务到不同状态列实现状态流转 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `boardId` | `integer` | | 看板ID | **响应** `统一响应结果«List«看板状态信息»»` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `code` | `int` | | 状态码 | | `data` | `看板状态信息[]` | | 响应数据 | |   `isPreset` | `boolean` | | 是否预设状态 | |   `sortOrder` | `int` | | 排序序号 | |   `statusColor` | `string` | | 状态颜色 | |   `statusId` | `long` | | 状态ID | |   `statusName` | `string` | | 状态名称 | |   `taskCount` | `int` | | 该状态下的任务数量 | | `message` | `string` | | 响应消息 | --- ### `GET` /admin/task/boards **获取可见看板列表** 返回当前管理员可见的看板列表:超级管理员可见所有看板,普通管理员仅可见自己创建的或作为成员的看板 **响应** `统一响应结果«List«看板信息»»` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `code` | `int` | | 状态码 | | `data` | `看板信息[]` | | 响应数据 | |   `boardId` | `long` | | 看板ID | |   `boardName` | `string` | | 看板名称 | |   `boardType` | `string` | | 看板类型 | |   `createdAt` | `string` | | 创建时间 | |   `createdBy` | `long` | | 创建人ID | |   `creatorName` | `string` | | 创建人姓名 | |   `deptId` | `long` | | 部门ID | |   `deptName` | `string` | | 部门名称 | |   `description` | `string` | | 看板描述 | |   `statuses` | `看板状态信息[]` | | 状态列表 | |     `isPreset` | `boolean` | | 是否预设状态 | |     `sortOrder` | `int` | | 排序序号 | |     `statusColor` | `string` | | 状态颜色 | |     `statusId` | `long` | | 状态ID | |     `statusName` | `string` | | 状态名称 | |     `taskCount` | `int` | | 该状态下的任务数量 | |   `taskCount` | `int` | | 任务总数 | | `message` | `string` | | 响应消息 | --- ### `PUT` /admin/task/status/{statusId} **更新状态列** 更新状态列的名称和颜色。 **权限**:需管理员登录且为看板成员。 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `statusId` | `integer` | | 状态列ID | **请求体** `更新状态请求` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `statusColor` | `string` | | 状态颜色 | | `statusName` | `string` | | 状态名称 | **响应** `统一响应结果«看板状态信息»` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `code` | `int` | | 状态码 | | `data` | `看板状态信息` | | 响应数据 | |   `isPreset` | `boolean` | | 是否预设状态 | |   `sortOrder` | `int` | | 排序序号 | |   `statusColor` | `string` | | 状态颜色 | |   `statusId` | `long` | | 状态ID | |   `statusName` | `string` | | 状态名称 | |   `taskCount` | `int` | | 该状态下的任务数量 | | `message` | `string` | | 响应消息 | --- ### `DELETE` /admin/task/status/{statusId} **删除状态列** 删除看板的状态列。如果状态列下有任务则不允许删除,需先移动或删除任务 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `statusId` | `integer` | | 状态列ID | **响应** `统一响应结果«Void»` --- ## 任务管理 ### `POST` /admin/task **创建任务** 在指定看板和状态列下创建任务。创建成功后通过WebSocket推送TASK_CREATED事件,并通知被分配的负责人 **关联字典**: - task_priority:任务优先级(创建时选择) **请求体** `创建任务请求` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `assigneeIds` | `long[]` | | 负责人ID列表 | | `boardId` | `long` | 是 | 看板ID | | `description` | `string` | | 任务描述 | | `dueDate` | `string` | | 截止日期 | | `priority` | `string` | | 优先级: LOW/MEDIUM/HIGH/URGENT | | `statusId` | `long` | | 状态ID | | `title` | `string` | 是 | 任务标题 | **响应** `统一响应结果«任务信息»` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `code` | `int` | | 状态码 | | `data` | `任务信息` | | 响应数据 | |   `assignees` | `负责人信息[]` | | 负责人列表 | |     `adminId` | `long` | | 管理员ID | |     `avatarUrl` | `string` | | 头像地址 | |     `username` | `string` | | 用户名 | |     `wechatName` | `string` | | 企微昵称 | |   `boardId` | `long` | | 看板ID | |   `createdAt` | `string` | | 创建时间 | |   `createdBy` | `long` | | 创建人ID | |   `creatorName` | `string` | | 创建人姓名 | |   `description` | `string` | | 任务描述 | |   `dueDate` | `string` | | 截止日期 | |   `overdue` | `boolean` | | 是否逾期 | |   `parentId` | `long` | | 父任务ID | |   `priority` | `string` | | 优先级: LOW/MEDIUM/HIGH/URGENT | |   `sortOrder` | `int` | | 排序序号 | |   `statusColor` | `string` | | 状态颜色 | |   `statusId` | `long` | | 状态ID | |   `statusName` | `string` | | 状态名称 | |   `subtaskCompleted` | `int` | | 已完成子任务数 | |   `subtaskTotal` | `int` | | 子任务总数 | |   `subtasks` | `子任务信息[]` | | 子任务列表 | |     `completed` | `boolean` | | 是否已完成 | |     `createdAt` | `string` | | 创建时间 | |     `createdBy` | `long` | | 创建人ID | |     `creatorName` | `string` | | 创建人姓名 | |     `taskId` | `long` | | 子任务ID | |     `title` | `string` | | 子任务标题 | |   `taskId` | `long` | | 任务ID | |   `title` | `string` | | 任务标题 | |   `updatedAt` | `string` | | 更新时间 | | `message` | `string` | | 响应消息 | --- ### `GET` /admin/task/board/{boardId}/tasks **获取看板任务(按状态分组)** 返回看板下所有任务,按状态列分组。支持按优先级(HIGH/MEDIUM/LOW)和负责人筛选,每组内按排序值升序排列 **关联字典**: - task_priority:任务优先级(列表筛选+显示) **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `boardId` | `integer` | | 看板ID | **查询参数** | 参数 | 类型 | 必填 | 说明 | 示例 | | --- | --- | --- | --- | --- | | `assigneeId` | `integer(int64)` | | 负责人ID | | | `priority` | `string` | | 优先级 | | **响应** `统一响应结果«List«看板任务分组信息»»` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `code` | `int` | | 状态码 | | `data` | `看板任务分组信息[]` | | 响应数据 | |   `sortOrder` | `int` | | 排序序号 | |   `statusColor` | `string` | | 状态颜色 | |   `statusId` | `long` | | 状态ID | |   `statusName` | `string` | | 状态名称 | |   `tasks` | `任务信息[]` | | 该状态下的任务列表 | |     `assignees` | `负责人信息[]` | | 负责人列表 | |     `boardId` | `long` | | 看板ID | |     `createdAt` | `string` | | 创建时间 | |     `createdBy` | `long` | | 创建人ID | |     `creatorName` | `string` | | 创建人姓名 | |     `description` | `string` | | 任务描述 | |     `dueDate` | `string` | | 截止日期 | |     `overdue` | `boolean` | | 是否逾期 | |     `parentId` | `long` | | 父任务ID | |     `priority` | `string` | | 优先级: LOW/MEDIUM/HIGH/URGENT | |     `sortOrder` | `int` | | 排序序号 | |     `statusColor` | `string` | | 状态颜色 | |     `statusId` | `long` | | 状态ID | |     `statusName` | `string` | | 状态名称 | |     `subtaskCompleted` | `int` | | 已完成子任务数 | |     `subtaskTotal` | `int` | | 子任务总数 | |     `subtasks` | `子任务信息[]` | | 子任务列表 | |     `taskId` | `long` | | 任务ID | |     `title` | `string` | | 任务标题 | |     `updatedAt` | `string` | | 更新时间 | | `message` | `string` | | 响应消息 | --- ### `DELETE` /admin/task/comment/{commentId} **删除评论** 仅评论作者本人可删除自己的评论,系统自动生成的活动记录不可删除 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `commentId` | `integer` | | 评论ID | **响应** `统一响应结果«Void»` --- ### `DELETE` /admin/task/subtask/{subtaskId} **删除子任务** 删除指定子任务。 **权限**:需管理员登录且为看板成员。 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `subtaskId` | `integer` | | 子任务ID | **响应** `统一响应结果«Void»` --- ### `PUT` /admin/task/subtask/{subtaskId}/toggle **切换子任务完成状态** 切换子任务的完成/未完成状态(toggle),完成状态切换会自动记录到任务时间线 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `subtaskId` | `integer` | | 子任务ID | **响应** `统一响应结果«Void»` --- ### `GET` /admin/task/{taskId} **任务详情** 返回任务完整信息,包含子任务列表、负责人信息、附件列表等 **关联字典**: - task_priority:任务优先级(显示) **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `taskId` | `integer` | | 任务ID | **响应** `统一响应结果«任务信息»` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `code` | `int` | | 状态码 | | `data` | `任务信息` | | 响应数据 | |   `assignees` | `负责人信息[]` | | 负责人列表 | |     `adminId` | `long` | | 管理员ID | |     `avatarUrl` | `string` | | 头像地址 | |     `username` | `string` | | 用户名 | |     `wechatName` | `string` | | 企微昵称 | |   `boardId` | `long` | | 看板ID | |   `createdAt` | `string` | | 创建时间 | |   `createdBy` | `long` | | 创建人ID | |   `creatorName` | `string` | | 创建人姓名 | |   `description` | `string` | | 任务描述 | |   `dueDate` | `string` | | 截止日期 | |   `overdue` | `boolean` | | 是否逾期 | |   `parentId` | `long` | | 父任务ID | |   `priority` | `string` | | 优先级: LOW/MEDIUM/HIGH/URGENT | |   `sortOrder` | `int` | | 排序序号 | |   `statusColor` | `string` | | 状态颜色 | |   `statusId` | `long` | | 状态ID | |   `statusName` | `string` | | 状态名称 | |   `subtaskCompleted` | `int` | | 已完成子任务数 | |   `subtaskTotal` | `int` | | 子任务总数 | |   `subtasks` | `子任务信息[]` | | 子任务列表 | |     `completed` | `boolean` | | 是否已完成 | |     `createdAt` | `string` | | 创建时间 | |     `createdBy` | `long` | | 创建人ID | |     `creatorName` | `string` | | 创建人姓名 | |     `taskId` | `long` | | 子任务ID | |     `title` | `string` | | 子任务标题 | |   `taskId` | `long` | | 任务ID | |   `title` | `string` | | 任务标题 | |   `updatedAt` | `string` | | 更新时间 | | `message` | `string` | | 响应消息 | --- ### `PUT` /admin/task/{taskId} **更新任务** 更新任务的标题、描述、优先级、截止日期、负责人等信息。更新后通过WebSocket推送TASK_UPDATED事件,如果修改了负责人则额外通知新负责人。 **权限**:需管理员登录且为看板成员。 **关联字典**: - task_priority:任务优先级(编辑时选择) **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `taskId` | `integer` | | 任务ID | **请求体** `更新任务请求` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `assigneeIds` | `long[]` | | 负责人ID列表 | | `description` | `string` | | 任务描述 | | `dueDate` | `string` | | 截止日期 | | `priority` | `string` | | 优先级: LOW/MEDIUM/HIGH/URGENT | | `title` | `string` | | 任务标题 | **响应** `统一响应结果«任务信息»` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `code` | `int` | | 状态码 | | `data` | `任务信息` | | 响应数据 | |   `assignees` | `负责人信息[]` | | 负责人列表 | |     `adminId` | `long` | | 管理员ID | |     `avatarUrl` | `string` | | 头像地址 | |     `username` | `string` | | 用户名 | |     `wechatName` | `string` | | 企微昵称 | |   `boardId` | `long` | | 看板ID | |   `createdAt` | `string` | | 创建时间 | |   `createdBy` | `long` | | 创建人ID | |   `creatorName` | `string` | | 创建人姓名 | |   `description` | `string` | | 任务描述 | |   `dueDate` | `string` | | 截止日期 | |   `overdue` | `boolean` | | 是否逾期 | |   `parentId` | `long` | | 父任务ID | |   `priority` | `string` | | 优先级: LOW/MEDIUM/HIGH/URGENT | |   `sortOrder` | `int` | | 排序序号 | |   `statusColor` | `string` | | 状态颜色 | |   `statusId` | `long` | | 状态ID | |   `statusName` | `string` | | 状态名称 | |   `subtaskCompleted` | `int` | | 已完成子任务数 | |   `subtaskTotal` | `int` | | 子任务总数 | |   `subtasks` | `子任务信息[]` | | 子任务列表 | |     `completed` | `boolean` | | 是否已完成 | |     `createdAt` | `string` | | 创建时间 | |     `createdBy` | `long` | | 创建人ID | |     `creatorName` | `string` | | 创建人姓名 | |     `taskId` | `long` | | 子任务ID | |     `title` | `string` | | 子任务标题 | |   `taskId` | `long` | | 任务ID | |   `title` | `string` | | 任务标题 | |   `updatedAt` | `string` | | 更新时间 | | `message` | `string` | | 响应消息 | --- ### `DELETE` /admin/task/{taskId} **删除任务** 删除任务及其所有子任务、评论和时间线记录(级联删除)。删除后通过WebSocket推送TASK_DELETED事件。 **权限**:需管理员登录且为看板成员。 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `taskId` | `integer` | | 任务ID | **响应** `统一响应结果«Void»` --- ### `POST` /admin/task/{taskId}/comment **添加评论** 在任务时间线中添加评论,添加后自动通知任务负责人 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `taskId` | `integer` | | 任务ID | **请求体** `创建评论请求` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `content` | `string` | 是 | 评论内容 | **响应** `统一响应结果«时间线条目»` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `code` | `int` | | 状态码 | | `data` | `时间线条目` | | 响应数据 | |   `action` | `string` | | 操作类型 | |   `adminAvatar` | `string` | | 管理员头像 | |   `adminId` | `long` | | 管理员ID | |   `adminName` | `string` | | 管理员姓名 | |   `content` | `string` | | 内容 | |   `createdAt` | `string` | | 创建时间 | |   `id` | `long` | | 条目ID | |   `newValue` | `string` | | 新值 | |   `oldValue` | `string` | | 旧值 | |   `type` | `string` | | 类型: COMMENT/ACTIVITY | | `message` | `string` | | 响应消息 | --- ### `PUT` /admin/task/{taskId}/sort **任务排序** 更新任务在同一状态列内的排序位置,用于拖拽排序 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `taskId` | `integer` | | 任务ID | **请求体** `任务排序请求` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `statusId` | `long` | 是 | 状态ID | | `taskIds` | `long[]` | 是 | 任务ID列表(按排序顺序) | **响应** `统一响应结果«Void»` --- ### `PUT` /admin/task/{taskId}/status **变更任务状态** 将任务移动到指定状态列(拖拽操作),自动记录状态变更到时间线,并通过WebSocket推送TASK_STATUS_CHANGED事件 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `taskId` | `integer` | | 任务ID | **请求体** `变更任务状态请求` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `statusId` | `long` | 是 | 目标状态ID | **响应** `统一响应结果«Void»` --- ### `POST` /admin/task/{taskId}/subtask **创建子任务** 在指定任务下创建子任务(待办项),用于拆分任务的执行步骤。子任务默认为未完成状态。 **权限**:需管理员登录且为看板成员。 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `taskId` | `integer` | | 任务ID | **请求体** `创建子任务请求` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `title` | `string` | 是 | 子任务标题 | **响应** `统一响应结果«子任务信息»` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `code` | `int` | | 状态码 | | `data` | `子任务信息` | | 响应数据 | |   `completed` | `boolean` | | 是否已完成 | |   `createdAt` | `string` | | 创建时间 | |   `createdBy` | `long` | | 创建人ID | |   `creatorName` | `string` | | 创建人姓名 | |   `taskId` | `long` | | 子任务ID | |   `title` | `string` | | 子任务标题 | | `message` | `string` | | 响应消息 | --- ### `GET` /admin/task/{taskId}/timeline **获取任务时间线** 返回任务的完整操作记录,包含评论和系统自动记录的状态变更、人员分配等活动,按时间正序排列 **路径参数** | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `taskId` | `integer` | | 任务ID | **响应** `统一响应结果«List«时间线条目»»` | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `code` | `int` | | 状态码 | | `data` | `时间线条目[]` | | 响应数据 | |   `action` | `string` | | 操作类型 | |   `adminAvatar` | `string` | | 管理员头像 | |   `adminId` | `long` | | 管理员ID | |   `adminName` | `string` | | 管理员姓名 | |   `content` | `string` | | 内容 | |   `createdAt` | `string` | | 创建时间 | |   `id` | `long` | | 条目ID | |   `newValue` | `string` | | 新值 | |   `oldValue` | `string` | | 旧值 | |   `type` | `string` | | 类型: COMMENT/ACTIVITY | | `message` | `string` | | 响应消息 | ---