# Bug 管理系统接口文档 ## 一、接口清单 | 接口路径 | 方法 | 权限 | 说明 | | ------------------ | ---- | ------------- | ---------- | | `/bug/list` | GET | `bug:list` | Bug 列表(分页) | | `/bug/detail` | GET | `bug:detail` | Bug 详情 | | `/bug/create` | POST | `bug:create` | 创建 Bug | | `/bug/update` | POST | `bug:update` | 更新 Bug | | `/bug/delete` | POST | `bug:delete` | 删除 Bug | | `/bug/comment/add` | POST | `bug:comment` | 添加评论 | | `/bug/stats` | GET | `bug:stats` | Bug 统计 | | `/bug/upload` | POST | `bug:create` | 图片上传 | *** ## 二、接口详细说明 ### 1. Bug 列表 **GET /bug/list** 查询 Bug 列表,支持多维度筛选。 #### 请求参数 | 参数名 | 类型 | 必填 | 说明 | | ------------------------- | ------ | -- | ---------- | | productId / product\_id | Number | 否 | 产品 ID | | projectId / project\_id | Number | 否 | 项目 ID | | moduleId / module\_id | Number | 否 | 模块 ID | | bugType / bug\_type | Number | 否 | Bug 类型 | | severity | Number | 否 | 严重程度 | | priority | Number | 否 | 优先级 | | status | Number | 否 | 状态 | | assigneeId / assignee\_id | Number | 否 | 负责人 ID | | keyword | String | 否 | 关键词(标题/描述) | | pageNo / page | Number | 否 | 页码,默认 1 | | pageSize / size | Number | 否 | 每页数量,默认 20 | #### 响应示例 ```json { "code": 20000, "message": "success", "data": { "list": [ { "id": 1, "bug_key": "BUG-001", "title": "登录页面无法加载", "description": "点击登录按钮后页面无响应", "bug_type": 1, "severity": 1, "priority": 1, "status": 2, "assignee_id": 1, "reporter_id": 2, "product_id": 1, "project_id": 1, "module_id": 1, "case_id": 101, "plan_id": 5, "environment": "test", "created_time": "2026-05-06 10:00:00", "updated_time": "2026-05-06 11:00:00" } ], "total": 1 } } ``` *** ### 2. Bug 详情 **GET /bug/detail** 查询 Bug 详细信息,包含评论和历史记录。 #### 请求参数 | 参数名 | 类型 | 必填 | 说明 | | ---------- | ------ | -- | ------ | | bugId / id | Number | 是 | Bug ID | #### 响应示例 ```json { "code": 20000, "message": "success", "data": { "id": 1, "bug_key": "BUG-001", "title": "登录页面无法加载", "description": "点击登录按钮后页面无响应...", "bug_type": 1, "severity": 1, "priority": 1, "status": 2, "assignee_id": 1, "reporter_id": 2, "product_id": 1, "project_id": 1, "module_id": 1, "case_id": 101, "plan_id": 5, "environment": "test", "steps": "1. 打开登录页面\n2. 输入用户名密码\n3. 点击登录", "attachments": [], "created_time": "2026-05-06 10:00:00", "updated_time": "2026-05-06 11:00:00", "comments": [ { "id": 1, "bug_id": 1, "content": "已收到,正在处理", "user_id": 1, "created_time": "2026-05-06 10:30:00" } ], "history": [ { "id": 1, "bug_id": 1, "field_name": "status", "old_value": "0", "new_value": "2", "operator_id": 1, "created_time": "2026-05-06 10:30:00" } ] } } ``` *** ### 3. 创建 Bug **POST /bug/create** 创建新的 Bug 报告。 #### 请求参数 | 参数名 | 类型 | 必填 | 说明 | | ----------------------- | ------ | -- | ----------- | | title | String | 是 | Bug 标题 | | description | String | 否 | Bug 描述 | | bugType / bug\_type | Number | 否 | Bug 类型,默认 1 | | severity | Number | 否 | 严重程度,默认 2 | | priority | Number | 否 | 优先级,默认 2 | | productId / product\_id | Number | 是 | 产品 ID | | projectId / project\_id | Number | 是 | 项目 ID | | moduleId / module\_id | Number | 否 | 模块 ID | | caseId / case\_id | Number | 否 | 关联测试用例 ID | | planId / plan\_id | Number | 否 | 关联测试计划 ID | | environment | String | 否 | 测试环境 | | steps | String | 否 | 复现步骤 | #### 请求体示例 ```json { "title": "登录页面无法加载", "description": "点击登录按钮后页面无响应", "bugType": 1, "severity": 1, "priority": 1, "productId": 1, "projectId": 1, "moduleId": 1, "environment": "test", "steps": "1. 打开登录页面\n2. 输入用户名密码\n3. 点击登录" } ``` #### 响应示例 ```json { "code": 20000, "message": "success", "data": { "id": 1 } } ``` *** ### 4. 更新 Bug **POST /bug/update** 更新 Bug 信息。 #### 请求参数 | 参数名 | 类型 | 必填 | 说明 | | ------------------------- | ------ | -- | --------- | | bugId / id | Number | 是 | Bug ID | | title | String | 否 | Bug 标题 | | description | String | 否 | Bug 描述 | | bugType / bug\_type | Number | 否 | Bug 类型 | | severity | Number | 否 | 严重程度 | | priority | Number | 否 | 优先级 | | status | Number | 否 | 状态 | | assigneeId / assignee\_id | Number | 否 | 负责人 ID | | moduleId / module\_id | Number | 否 | 模块 ID | | caseId / case\_id | Number | 否 | 关联测试用例 ID | | planId / plan\_id | Number | 否 | 关联测试计划 ID | | environment | String | 否 | 测试环境 | | steps | String | 否 | 复现步骤 | #### 请求体示例 ```json { "bugId": 1, "status": 3, "assigneeId": 1 } ``` #### 响应示例 ```json { "code": 20000, "message": "success", "data": { "id": 1 } } ``` *** ### 5. 删除 Bug **POST /bug/delete** 软删除 Bug。 #### 请求参数 | 参数名 | 类型 | 必填 | 说明 | | ---------- | ------ | -- | ------ | | bugId / id | Number | 是 | Bug ID | #### 请求体示例 ```json { "bugId": 1 } ``` #### 响应示例 ```json { "code": 20000, "message": "success", "data": { "id": 1 } } ``` *** ### 6. 添加评论 **POST /bug/comment/add** 为 Bug 添加评论。 #### 请求参数 | 参数名 | 类型 | 必填 | 说明 | | ---------- | ------ | -- | ------ | | bugId / id | Number | 是 | Bug ID | | content | String | 是 | 评论内容 | #### 请求体示例 ```json { "bugId": 1, "content": "已收到,正在处理" } ``` #### 响应示例 ```json { "code": 20000, "message": "success", "data": { "id": 1 } } ``` *** ### 7. Bug 统计 **GET /bug/stats** 获取 Bug 统计信息。 #### 请求参数 | 参数名 | 类型 | 必填 | 说明 | | ----------------------- | ------ | -- | ----- | | productId / product\_id | Number | 否 | 产品 ID | | projectId / project\_id | Number | 否 | 项目 ID | #### 响应示例 ```json { "code": 20000, "message": "success", "data": { "total": 100, "new": 10, "pending": 20, "in_progress": 30, "resolved": 25, "closed": 10, "rejected": 5, "by_severity": { "critical": 15, "major": 30, "medium": 40, "minor": 15 }, "by_priority": { "high": 40, "medium": 45, "low": 15 }, "by_type": { "functional": 40, "ui": 25, "performance": 15, "security": 10, "compatibility": 10 } } } ``` *** ### 8. 图片上传 **POST /bug/upload** 上传 Bug 相关图片,返回图片访问 URL。 #### 请求参数 | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | file | File | 是 | 图片文件 | #### 支持的文件格式 - png - jpg / jpeg - gif - bmp #### 调用示例(curl) ```bash curl -X POST "http://39.170.26.156:8888/it/api/bug/upload" \ -H "accessToken: your_token" \ -F "file=@screenshot.png" ``` #### 响应示例 ```json { "code": 20000, "message": "success", "data": { "url": "http://39.170.26.156:8888/uploads/bug/bug-20260506100000-abc12345.png" } } ``` #### 错误响应 ```json { "code": 40009, "message": "未找到上传文件" } ``` ```json { "code": 40009, "message": "不支持的文件格式,仅支持:png, jpg, jpeg, gif, bmp" } ``` *** ## 三、枚举值说明 ### Bug 类型 (bug\_type) | 值 | 名称 | 说明 | | - | ----- | ---------- | | 1 | 功能缺陷 | 核心功能不能正常工作 | | 2 | UI 问题 | 界面显示、交互问题 | | 3 | 性能问题 | 响应慢、资源占用高 | | 4 | 安全漏洞 | 安全相关问题 | | 5 | 兼容性问题 | 浏览器/平台兼容问题 | ### 严重程度 (severity) | 值 | 名称 | 说明 | | - | -- | --------- | | 1 | 致命 | 系统崩溃、数据丢失 | | 2 | 严重 | 核心功能不可用 | | 3 | 中等 | 功能受限但可用 | | 4 | 轻微 | 小问题,不影响使用 | ### 优先级 (priority) | 值 | 名称 | 说明 | | - | -- | ------ | | 1 | 高 | 需要立即处理 | | 2 | 中 | 按计划处理 | | 3 | 低 | 空闲时处理 | ### 状态 (status) | 值 | 名称 | 说明 | | - | --- | ------------- | | 0 | 新建 | Bug 刚创建,待审核 | | 1 | 待处理 | 已确认,等待分配 | | 2 | 进行中 | 已分配,正在修复 | | 3 | 已解决 | 修复完成,待验证 | | 4 | 已关闭 | 验证通过,已关闭 | | 5 | 已拒绝 | 非 Bug 或重复,已拒绝 | *** ## 四、状态流转规则 ``` ┌─────────────────┐ │ 0-新建 │ └────────┬────────┘ │ ┌──────────────┴──────────────┐ ▼ ▼ ┌─────────────┐ ┌─────────────┐ │ 1-待处理 │ │ 5-已拒绝 │ └──────┬──────┘ └─────────────┘ │ ▼ ┌─────────────┐ │ 2-进行中 │ └──────┬──────┘ │ ▼ ┌─────────────┐ │ 3-已解决 │ └──────┬──────┘ │ ▼ ┌─────────────┐ │ 4-已关闭 │ └─────────────┘ ``` **转换规则:** - 新建 → 待处理 / 已拒绝 - 待处理 → 进行中 / 已拒绝 - 进行中 → 已解决 / 待处理 - 已解决 → 已关闭 / 待处理 - 已关闭 → 待处理(重新打开) - 已拒绝 → 待处理(重新打开) *** ## 五、通用状态码 | 状态码 | 说明 | | ----- | ------------ | | 20000 | 成功 | | 40004 | 未登录或缺少 token | | 40009 | 参数错误或新增失败 | | 40011 | 未查询到对应记录 | | 40012 | 更新或删除失败 | | 40013 | 权限不足 | *** ## 六、认证方式 所有接口(除登录/注册外)需在请求头携带 `accessToken`: ```bash curl -H "accessToken: your_token" http://localhost:8081/it/api/bug/list ``` *** ## 七、权限配置 | 权限编码 | 权限名称 | | ----------- | --------- | | bug:list | 查看 Bug 列表 | | bug:detail | 查看 Bug 详情 | | bug:create | 创建 Bug | | bug:update | 更新 Bug | | bug:delete | 删除 Bug | | bug:comment | 添加评论 | | bug:stats | 查看统计 |