# 安全责任清单 - 前端联调接口文档

> 基于模板与实例分离的新模型，同一清单可下发给多个公司。
>
> **核心变更**：清单（task_list）和任务（task_detail）为模板，下发（task_list_issue）和执行（task_execution）为实例。

---

## 变更总览

| 序号 | 接口 | 变更类型 | 主要变更点 |
|------|------|----------|-----------|
| 1 | 获取清单列表 | **重构** | 主表由 task_list_issue 改为 task_list，返回 TaskListCO（纯模板），新增 status 字段 |
| 2 | 新增清单 | 不变 | - |
| 3 | 修改清单 | **新增** | 修改清单模板信息 |
| 4 | 删除清单 | **新增** | 删除清单模板 |
| 5 | 开关切换 | **新增** | 开启/关闭清单 |
| 6 | 获取任务列表 | **重构** | 主表由 task_execution 改为 task_detail，返回 TaskDetailCO（纯模板），传参由 taskIssueId 改为 taskListId，新增 taskStatus 字段 |
| 7 | 批量保存任务 | **新增** | 批量新增/修改任务模板 |
| 8 | 获取任务详情 | 不变 | - |
| 9 | 企业落实情况 | **重构** | 路径由 /taskList/issueList 改为 /taskListIssue/list，以 task_list_issue 为主表 |
| 10 | 获取下发记录详情 | **新增** | 通过 taskIssueId 获取下发记录详情 |
| 11 | 任务执行列表 | **重构** | 路径由 /taskDetail/executionList 改为 /taskExecution/list |
| 12 | 获取执行记录详情 | **新增** | 通过 taskExecutionId 获取执行记录详情 |
| 13 | 反馈周期分组 | 不变 | 传参 taskExecutionId |
| 14 | 反馈列表 | 不变 | 传参 taskExecutionId + feedbackPeriodFlag |
| 15 | 反馈详情 | **修改** | 返回 FeedbackInfoCO（含任务信息+反馈信息），非 FeedbackCO |
| 16 | 编辑反馈 | **新增** | 修改反馈内容 |
| 17 | 删除反馈 | **新增** | 删除反馈记录 |
| 18 | 企业评价列表 | 不变 | - |
| 19 | 更新任务评分 | **重构** | 路径由 /taskDetail/updateScore 改为 /taskExecution/updateScore |
| 20 | 提交反馈 | 不变 | - |
| 21 | 企业任务下发统计 | 不变 | - |
| 22 | 企业统计（股份端） | **新增** | 按企业统计已完成/已关闭/总任务数 |
| 23 | 关闭清单 | **修改** | 传参 taskListId，同步关闭下发表+执行表状态 |
| 24 | 关闭任务 | **修改** | 传参 taskDetailId，同步关闭执行表状态 |
| 25 | 任务下发 | **新增** | 新增 executeDepartmentId 字段 |

---

## 枚举值

| 枚举 | 值 | 说明 |
|------|------|------|
| task_level | 1/2/3 | 企业级/部门级/班组级 |
| switch_flag | 0/1 | 关闭/开启 |
| task_list.status | 1/2/3 | 进行中/已完成/已关闭 |
| task_detail.task_status | 1/2/3 | 进行中/已完成/已关闭 |
| task_list_issue.status | 1/2/3 | 进行中/已完成/已关闭 |
| issue_status | 0/1 | 未下发/已下发 |
| task_execution.task_status | 1/2/3 | 进行中/已完成/已关闭 |
| task_execution.feedback_status | 1/2 | 正常/异常 |
| feedback_cycle_type | 1/2/3/4 | 每月/每季度/每半年/每年 |

---

## 一、获取任务清单列表

`POST /safetyDutyList/taskList/list`

### 请求参数

```json
{
  "pageIndex": 1,
  "pageSize": 10,
  "taskListName": "安全",
  "taskLevel": 1
}
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| pageIndex | Integer | 否 | 页码（默认1） |
| pageSize | Integer | 否 | 每页条数（默认10） |
| taskListName | String | 否 | 清单名称（模糊查询） |
| taskLevel | Integer | 否 | 任务级别：1-企业级 2-部门级 3-班组级 |

### 响应字段

```json
{
  "success": true,
  "data": [
    {
      "id": 1,
      "taskListId": "uuid-xxx",
      "taskListName": "安全生产责任清单",
      "taskLevel": 1,
      "responsibilityPost": "安全主管",
      "switchFlag": 1,
      "status": 1,
      "createCorpId": 100,
      "createDepartmentId": 200,
      "createUserId": 300
    }
  ],
  "totalCount": 1,
  "pageSize": 10,
  "pageIndex": 1
}
```

| 字段 | 类型 | 说明 |
|------|------|------|
| id | Long | 主键 |
| taskListId | String | 清单UUID（业务主键） |
| taskListName | String | 清单名称 |
| taskLevel | Integer | 任务级别：1-企业级 2-部门级 3-班组级 |
| responsibilityPost | String | 责任岗位 |
| switchFlag | Integer | 是否启用：0-关 1-开 |
| status | Integer | 状态：1-进行中 2-已完成 3-已关闭 |
| createCorpId | Long | 创建公司ID |
| createDepartmentId | Long | 创建部门ID |
| createUserId | Long | 创建人ID |

---

## 二、新增任务清单

`POST /safetyDutyList/taskList/save`

### 请求参数

```json
{
  "taskListName": "安全生产责任清单",
  "taskLevel": 1,
  "responsibilityPost": "安全主管",
  "switchFlag": 1
}
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| taskListName | String | **是** | 清单名称 |
| taskLevel | Integer | **是** | 任务级别：1-企业级 2-部门级 3-班组级 |
| responsibilityPost | String | **是** | 责任岗位 |
| switchFlag | Integer | **是** | 是否启用：1-启用 0-不启用 |

### 响应字段

同接口一的单条 TaskListCO 对象。

---

## 三、修改任务清单

`POST /safetyDutyList/taskList/edit`

### 请求参数

```json
{
  "taskListId": "uuid-xxx",
  "taskListName": "安全生产责任清单（修改）",
  "taskLevel": 2,
  "responsibilityPost": "安全总监",
  "switchFlag": 1
}
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| taskListId | String | **是** | 清单UUID（业务主键） |
| taskListName | String | **是** | 清单名称 |
| taskLevel | Integer | **是** | 任务级别：1-企业级 2-部门级 3-班组级 |
| responsibilityPost | String | **是** | 责任岗位 |
| switchFlag | Integer | **是** | 是否启用：1-启用 0-不启用 |

### 响应

```json
{
  "success": true
}
```

---

## 四、删除任务清单

`POST /safetyDutyList/taskList/delete/{id}`

### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | Long | **是** | 清单主键ID（路径参数） |

### 响应

```json
{
  "success": true
}
```

---

## 五、开启/关闭任务清单

`POST /safetyDutyList/taskList/switchFlag`

> 调用此接口即表示要关闭任务清单（switchFlag 传 0 关闭）

### 请求参数

```json
{
  "taskListId": "uuid-xxx",
  "switchFlag": 0
}
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| taskListId | String | **是** | 清单UUID（业务主键） |
| switchFlag | Integer | **是** | 开启/关闭：0-关 1-开 |

### 响应

```json
{
  "success": true
}
```

---

## 六、获取任务列表（模板）

`POST /safetyDutyList/taskDetail/list`

### 请求参数

```json
{
  "pageIndex": 1,
  "pageSize": 10,
  "taskListId": "uuid-xxx",
  "taskContent": "巡检",
  "feedbackCycleType": 1
}
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| pageIndex | Integer | 否 | 页码（默认1） |
| pageSize | Integer | 否 | 每页条数（默认10） |
| taskListId | String | **是** | 清单表主键ID |
| taskContent | String | 否 | 执行内容（模糊查询） |
| feedbackCycleType | Integer | 否 | 反馈周期类型：1-每月 2-季度 3-半年 4-年 |

### 响应字段

```json
{
  "success": true,
  "data": [
    {
      "id": 1,
      "taskDetailId": "uuid-detail-1",
      "taskListId": "uuid-xxx",
      "executeContent": "每日安全巡检",
      "feedbackCycleType": 1,
      "feedbackCycleName": "每月",
      "taskScore": 10.00,
      "taskStatus": 1,
      "taskListName": "安全生产责任清单",
      "taskLevel": 1,
      "responsibilityPost": "安全主管"
    }
  ],
  "totalCount": 1,
  "pageSize": 10,
  "pageIndex": 1
}
```

| 字段 | 类型 | 说明 |
|------|------|------|
| id | Long | 主键 |
| taskDetailId | String | 任务模板UUID |
| taskListId | String | 清单UUID |
| executeContent | String | 执行内容 |
| feedbackCycleType | Integer | 反馈周期类型：1-每月 2-季度 3-半年 4-年 |
| feedbackCycleName | String | 反馈周期名称 |
| taskScore | BigDecimal | 任务分值 |
| taskStatus | Integer | 任务状态：1-进行中 2-已完成 3-已关闭 |
| taskListName | String | 清单名称 |
| taskLevel | Integer | 任务级别 |
| responsibilityPost | String | 责任岗位 |

---

## 七、批量保存任务

`POST /safetyDutyList/taskDetail/saveBatch`

> 传入数组，批量新增/修改任务模板。有 id 为修改，无 id 为新增。

### 请求参数

```json
[
  {
    "taskListId": "uuid-xxx",
    "taskDetailId": "uuid-detail-1",
    "executeContent": "每日安全巡检",
    "feedbackCycleType": 1,
    "taskScore": 10.00
  },
  {
    "taskListId": "uuid-xxx",
    "executeContent": "每周安全会议",
    "feedbackCycleType": 2,
    "taskScore": 15.00
  }
]
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | Long | 否 | 主键ID（有值则修改，无值则新增） |
| taskListId | String | **是** | 清单表主键ID |
| taskDetailId | String | 否 | 任务表ID（修改时传入） |
| executeContent | String | 否 | 执行内容 |
| feedbackCycleType | Integer | **是** | 反馈周期类型：1-每月 2-季度 3-半年 4-年 |
| taskScore | BigDecimal | 否 | 任务分值 |

### 响应字段

返回 TaskDetailCO 数组，字段同接口六的单条对象。

---

## 八、获取任务详情

`GET /safetyDutyList/taskDetail/{detailId}`

### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| detailId | String | **是** | 任务模板UUID（路径参数） |

### 响应字段

```json
{
  "success": true,
  "data": {
    "id": 1,
    "taskDetailId": "uuid-detail-1",
    "taskListId": "uuid-xxx",
    "taskListName": "安全生产责任清单",
    "taskLevel": 1,
    "responsibilityPost": "安全主管",
    "feedbackCycleType": 1,
    "taskScore": 10.00,
    "executeContent": "每日安全巡检"
  }
}
```

| 字段 | 类型 | 说明 |
|------|------|------|
| id | Long | 主键ID |
| taskDetailId | String | 任务详情UUID |
| taskListId | String | 清单表主键ID |
| taskListName | String | 清单名称 |
| taskLevel | Integer | 任务级别 |
| responsibilityPost | String | 责任岗位 |
| feedbackCycleType | Integer | 反馈周期类型 |
| taskScore | BigDecimal | 任务分值 |
| executeContent | String | 执行内容 |

---

## 九、企业落实情况（获取所有下发清单列表）

`POST /safetyDutyList/taskListIssue/list`

### 请求参数

```json
{
  "pageIndex": 1,
  "pageSize": 10,
  "taskListId": "uuid-xxx",
  "executeCorpId": 100,
  "executeUserId": 300,
  "taskListName": "安全",
  "taskLevel": 1,
  "issueStatus": 1,
  "status": 1,
  "feedbackStatus": 2,
  "scoreStatus": 0
}
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| pageIndex | Integer | 否 | 页码（默认1） |
| pageSize | Integer | 否 | 每页条数（默认10） |
| taskListId | String | 否 | 清单UUID |
| executeCorpId | Long | 否 | 执行公司ID |
| executeUserId | Long | 否 | 执行人ID |
| taskListName | String | 否 | 清单名称（模糊查询） |
| taskLevel | Integer | 否 | 任务级别：1-企业级 2-部门级 3-班组级 |
| issueStatus | Integer | 否 | 下发状态：0-未下发 1-已下发 |
| status | Integer | 否 | 状态：1-进行中 2-已完成 3-已关闭 |
| feedbackStatus | Integer | 否 | 反馈状态：1-正常 2-异常 |
| scoreStatus | Integer | 否 | 评分状态：0-未评分 1-已评分 |

### 响应字段

```json
{
  "success": true,
  "data": [
    {
      "id": 1,
      "taskIssueId": "uuid-issue-1",
      "taskListId": "uuid-xxx",
      "taskListName": "安全生产责任清单",
      "taskLevel": 1,
      "responsibilityPost": "安全主管",
      "executeCorpId": 100,
      "executeCorpName": "XX公司",
      "executeDepartmentId": 200,
      "executeDepartmentName": "安全部",
      "executeUserId": 300,
      "executeUserName": "张三",
      "issueStatus": 1,
      "issueTime": "2026-01-01 00:00:00",
      "periodStartTime": "2026-01-01 00:00:00",
      "periodEndTime": "2026-12-31 23:59:59",
      "status": 1,
      "closeTime": null,
      "ratingScore": 85.50,
      "ratingUserId": 400,
      "ratingUserName": "李四",
      "ratingDepartmentId": 500,
      "ratingDepartmentName": "考核部",
      "taskCount": 5,
      "feedbackStatus": 1,
      "switchFlag": 1
    }
  ],
  "totalCount": 1,
  "pageSize": 10,
  "pageIndex": 1
}
```

| 字段 | 类型 | 说明 |
|------|------|------|
| id | Long | 主键 |
| taskIssueId | String | 下发记录UUID（业务主键） |
| taskListId | String | 清单UUID |
| taskListName | String | 任务清单名称 |
| taskLevel | Integer | 任务级别 |
| responsibilityPost | String | 责任岗位 |
| executeCorpId | Long | 执行公司ID |
| executeCorpName | String | 执行公司名称 |
| executeDepartmentId | Long | 执行部门ID |
| executeDepartmentName | String | 执行部门名称 |
| executeUserId | Long | 执行人员ID |
| executeUserName | String | 执行人员名称 |
| issueStatus | Integer | 下发状态：0-未下发 1-已下发 |
| issueTime | String | 下发时间 |
| periodStartTime | String | 执行周期开始时间 |
| periodEndTime | String | 执行周期结束时间 |
| status | Integer | 状态：1-进行中 2-已完成 3-已关闭 |
| closeTime | String | 关闭时间 |
| ratingScore | BigDecimal | 评分数 |
| ratingUserId | Long | 评分人ID |
| ratingUserName | String | 评分人姓名 |
| ratingDepartmentId | Long | 评分部门ID |
| ratingDepartmentName | String | 评分部门名称 |
| taskCount | Integer | 任务数 |
| feedbackStatus | Integer | 反馈状态：1-正常 2-异常 |
| switchFlag | Integer | 是否启用：0-关 1-开 |

---

## 十、获取清单下发记录详情

`GET /safetyDutyList/taskListIssue/{taskIssueId}`

### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| taskIssueId | String | **是** | 下发记录UUID（路径参数） |

### 响应字段

同接口九的单条 TaskListIssueCO 对象。

---

## 十一、获取任务执行记录列表

`POST /safetyDutyList/taskExecution/list`

### 请求参数

```json
{
  "pageIndex": 1,
  "pageSize": 10,
  "taskIssueId": "uuid-issue-1",
  "taskListId": "uuid-xxx",
  "taskContent": "巡检",
  "feedbackCycleType": "1",
  "feedbackStatus": "1",
  "taskStatus": "1"
}
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| pageIndex | Integer | 否 | 页码（默认1） |
| pageSize | Integer | 否 | 每页条数（默认10） |
| taskIssueId | String | 否 | 清单下发记录UUID |
| taskListId | String | 否 | 清单UUID |
| taskContent | String | 否 | 执行内容（模糊查询） |
| feedbackCycleType | String | 否 | 反馈周期类型：1-每月 2-季度 3-半年 4-年 |
| feedbackStatus | String | 否 | 反馈状态：1-正常 2-异常 |
| taskStatus | String | 否 | 任务状态：1-进行中 2-已完成 3-已关闭 |

> **注意**：feedbackCycleType、feedbackStatus、taskStatus 类型为 String，非 Integer。

### 响应字段

```json
{
  "success": true,
  "data": [
    {
      "id": 1,
      "taskExecutionId": "uuid-exec-1",
      "taskIssueId": "uuid-issue-1",
      "taskDetailId": "uuid-detail-1",
      "taskListId": "uuid-xxx",
      "taskStatus": 1,
      "feedbackStatus": 1,
      "taskRating": 8.00,
      "ratingTime": "2026-06-01 10:00:00",
      "ratingDepartmentId": 500,
      "ratingDepartmentName": "考核部",
      "ratingUserId": 400,
      "ratingUserName": "李四",
      "executeContent": "每日安全巡检",
      "feedbackCycleType": 1,
      "taskScore": 10.00,
      "taskListName": "安全生产责任清单",
      "taskLevel": 1,
      "responsibilityPost": "安全主管",
      "feedbackCount": 3,
      "currentPeriodFeedback": 1
    }
  ],
  "totalCount": 1,
  "pageSize": 10,
  "pageIndex": 1
}
```

| 字段 | 类型 | 说明 |
|------|------|------|
| id | Long | 主键 |
| taskExecutionId | String | 任务执行UUID（业务主键） |
| taskIssueId | String | 清单下发记录UUID |
| taskDetailId | String | 任务模板UUID |
| taskListId | String | 清单UUID |
| taskStatus | Integer | 任务状态：1-进行中 2-已完成 3-已关闭 |
| feedbackStatus | Integer | 反馈状态：1-正常 2-异常 |
| taskRating | BigDecimal | 任务评分 |
| ratingTime | String | 评分时间 |
| ratingDepartmentId | Long | 评分部门ID |
| ratingDepartmentName | String | 评分部门名称 |
| ratingUserId | Long | 评分人ID |
| ratingUserName | String | 评分人姓名 |
| executeContent | String | 执行内容 |
| feedbackCycleType | Integer | 反馈周期类型 |
| taskScore | BigDecimal | 任务分值 |
| taskListName | String | 清单名称 |
| taskLevel | Integer | 任务级别 |
| responsibilityPost | String | 责任岗位 |
| feedbackCount | Integer | 反馈次数 |
| currentPeriodFeedback | Integer | 当前周期是否已反馈：0-否 1-是 |

---

## 十二、获取任务执行记录详情

`GET /safetyDutyList/taskExecution/{taskExecutionId}`

### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| taskExecutionId | String | **是** | 任务执行UUID（路径参数） |

### 响应字段

同接口十一的单条 TaskExecutionCO 对象。

---

## 十三、获取反馈周期分组列表

`POST /safetyDutyList/feedback/periodGroupList`

### 请求参数

```json
{
  "taskExecutionId": "uuid-exec-1",
  "feedbackTimeStart": "2026-01-01",
  "feedbackTimeEnd": "2026-06-30"
}
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| taskExecutionId | String | **是** | 任务执行业务ID |
| feedbackTimeStart | String | 否 | 反馈时间开始（格式：yyyy-MM-dd） |
| feedbackTimeEnd | String | 否 | 反馈时间结束（格式：yyyy-MM-dd） |

### 响应字段

```json
{
  "success": true,
  "data": [
    {
      "taskExecutionId": "uuid-exec-1",
      "feedbackPeriodStartTime": "2026-05-01 00:00:00",
      "feedbackPeriodEndTime": "2026-05-31 23:59:59",
      "feedbackCount": 3,
      "feedbackUserName": "张三",
      "feedbackPeriodFlag": "2026-05"
    }
  ]
}
```

| 字段 | 类型 | 说明 |
|------|------|------|
| taskExecutionId | String | 任务执行业务ID |
| feedbackPeriodStartTime | String | 反馈周期开始时间 |
| feedbackPeriodEndTime | String | 反馈周期结束时间 |
| feedbackCount | Integer | 反馈次数（以周期标识为维度统计） |
| feedbackUserName | String | 反馈人姓名 |
| feedbackPeriodFlag | String | 周期标识 |

---

## 十四、获取反馈列表

`POST /safetyDutyList/feedback/list`

### 请求参数

```json
{
  "pageIndex": 1,
  "pageSize": 10,
  "taskExecutionId": "uuid-exec-1",
  "feedbackPeriodFlag": "2026-05"
}
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| pageIndex | Integer | 否 | 页码（默认1） |
| pageSize | Integer | 否 | 每页条数（默认10） |
| taskExecutionId | String | **是** | 任务执行业务ID |
| feedbackPeriodFlag | String | **是** | 周期标识 |

### 响应字段

```json
{
  "success": true,
  "data": [
    {
      "id": 1,
      "feedbackId": "uuid-fb-1",
      "taskDetailId": "uuid-detail-1",
      "taskExecutionId": "uuid-exec-1",
      "taskListId": "uuid-xxx",
      "taskIssueId": "uuid-issue-1",
      "feedbackTime": "2026-05-15 14:30:00",
      "feedbackPeriodStartTime": "2026-05-01 00:00:00",
      "feedbackPeriodEndTime": "2026-05-31 23:59:59",
      "feedbackPeriodFlag": "2026-05",
      "feedbackCycleType": 1,
      "feedbackContent": "已完成本月安全巡检",
      "feedbackUserId": 300,
      "feedbackUserName": "张三",
      "feedbackCorpId": 100,
      "feedbackCorpName": "XX公司",
      "feedbackDepartmentId": 200,
      "feedbackDepartmentName": "安全部",
      "executeContent": "每日安全巡检",
      "taskListName": "安全生产责任清单",
      "createTime": "2026-05-15 14:30:00"
    }
  ],
  "totalCount": 1,
  "pageSize": 10,
  "pageIndex": 1
}
```

| 字段 | 类型 | 说明 |
|------|------|------|
| id | Long | 主键 |
| feedbackId | String | 反馈UUID（业务主键） |
| taskDetailId | String | 任务详情UUID |
| taskExecutionId | String | 任务执行UUID |
| taskListId | String | 任务清单UUID |
| taskIssueId | String | 清单下发记录UUID |
| feedbackTime | String | 反馈时间 |
| feedbackPeriodStartTime | String | 反馈周期开始时间 |
| feedbackPeriodEndTime | String | 反馈周期结束时间 |
| feedbackPeriodFlag | String | 反馈周期标识 |
| feedbackCycleType | Integer | 反馈周期类型 |
| feedbackContent | String | 反馈内容 |
| feedbackUserId | Long | 反馈人ID |
| feedbackUserName | String | 反馈人姓名 |
| feedbackCorpId | Long | 反馈人公司ID |
| feedbackCorpName | String | 反馈人公司名称 |
| feedbackDepartmentId | Long | 反馈人部门ID |
| feedbackDepartmentName | String | 反馈人部门名称 |
| executeContent | String | 执行内容 |
| taskListName | String | 清单名称 |
| createTime | String | 创建时间 |

---

## 十五、获取反馈详情

`GET /safetyDutyList/feedback/{feedbackId}`

### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| feedbackId | String | **是** | 反馈UUID（路径参数） |

### 响应字段

> 返回 FeedbackInfoCO，包含任务信息和反馈信息。

```json
{
  "success": true,
  "data": {
    "id": 1,
    "feedbackId": "uuid-fb-1",
    "taskDetailId": "uuid-detail-1",
    "executeContent": "每日安全巡检",
    "feedbackCycleType": 1,
    "feedbackContent": "已完成本月安全巡检",
    "feedbackTime": "2026-05-15 14:30:00",
    "feedbackPeriodStartTime": "2026-05-01 00:00:00",
    "feedbackPeriodEndTime": "2026-05-31 23:59:59"
  }
}
```

| 字段 | 类型 | 说明 |
|------|------|------|
| id | Long | 主键ID |
| feedbackId | String | 反馈UUID |
| taskDetailId | String | 任务详情ID |
| executeContent | String | 执行内容 |
| feedbackCycleType | Integer | 反馈周期类型 |
| feedbackContent | String | 反馈内容 |
| feedbackTime | String | 反馈时间 |
| feedbackPeriodStartTime | String | 反馈周期开始时间 |
| feedbackPeriodEndTime | String | 反馈周期结束时间 |

---

## 十六、编辑反馈

`POST /safetyDutyList/feedback/edit`

### 请求参数

```json
{
  "feedbackId": "uuid-fb-1",
  "feedbackContent": "已完成本月安全巡检（修改）"
}
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| feedbackId | String | **是** | 反馈UUID |
| feedbackContent | String | **是** | 反馈内容 |

### 响应

```json
{
  "success": true
}
```

---

## 十七、删除反馈

`POST /safetyDutyList/feedback/delete/{id}`

### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | Long | **是** | 反馈主键ID（路径参数） |

### 响应

```json
{
  "success": true
}
```

---

## 十八、获取企业评价列表

`POST /safetyDutyList/statistics/evaluationList`

### 请求参数

```json
{
  "pageIndex": 1,
  "pageSize": 10,
  "corpName": "XX公司",
  "scoreStatus": 0
}
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| pageIndex | Integer | 否 | 页码（默认1） |
| pageSize | Integer | 否 | 每页条数（默认10） |
| corpName | String | 否 | 企业名称（模糊查询） |
| scoreStatus | Integer | 否 | 评分状态：0-未评分 1-已评分 |

### 响应字段

```json
{
  "success": true,
  "data": [
    {
      "corpId": 100,
      "corpName": "XX公司",
      "pendingScoreCount": 3,
      "scoredCount": 5
    }
  ],
  "totalCount": 1,
  "pageSize": 10,
  "pageIndex": 1
}
```

| 字段 | 类型 | 说明 |
|------|------|------|
| corpId | Long | 公司ID |
| corpName | String | 企业名称 |
| pendingScoreCount | Integer | 待评分清单数量（清单分数为0或空的） |
| scoredCount | Integer | 已评分清单数量（清单分数不为0且不为空的） |

---

## 十九、更新任务评分

`POST /safetyDutyList/taskExecution/updateScore`

### 请求参数

```json
{
  "taskExecutionId": "uuid-exec-1",
  "taskRating": 8.00
}
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| taskExecutionId | String | **是** | 任务执行UUID |
| taskRating | BigDecimal | **是** | 分数（不能超过任务分值） |

### 响应

```json
{
  "success": true
}
```

---

## 二十、提交反馈

`POST /safetyDutyList/feedback/save`

### 请求参数

```json
{
  "taskExecutionId": "uuid-exec-1",
  "feedbackContent": "已完成本月安全巡检"
}
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| taskExecutionId | String | **是** | 任务执行ID |
| feedbackContent | String | **是** | 反馈内容 |

### 响应

```json
{
  "success": true,
  "data": {
    "id": 1,
    "feedbackId": "uuid-fb-1",
    "taskDetailId": "uuid-detail-1",
    "taskExecutionId": "uuid-exec-1",
    "taskListId": "uuid-xxx",
    "taskIssueId": "uuid-issue-1",
    "feedbackTime": "2026-05-15 14:30:00",
    "feedbackPeriodStartTime": "2026-05-01 00:00:00",
    "feedbackPeriodEndTime": "2026-05-31 23:59:59",
    "feedbackPeriodFlag": "2026-05",
    "feedbackCycleType": 1,
    "feedbackContent": "已完成本月安全巡检",
    "feedbackUserId": 300,
    "feedbackUserName": "张三",
    "feedbackCorpId": 100,
    "feedbackCorpName": "XX公司",
    "feedbackDepartmentId": 200,
    "feedbackDepartmentName": "安全部",
    "executeContent": "每日安全巡检",
    "taskListName": "安全生产责任清单",
    "createTime": "2026-05-15 14:30:00"
  }
}
```

> 响应为完整 FeedbackCO 对象，字段同接口十四。

---

## 二十一、获取企业任务下发统计数

`POST /safetyDutyList/statistics/issueStatistics`

### 请求参数

```json
{
  "pageIndex": 1,
  "pageSize": 10,
  "corpName": "XX公司"
}
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| pageIndex | Integer | 否 | 页码（默认1） |
| pageSize | Integer | 否 | 每页条数（默认10） |
| corpName | String | 否 | 企业名称（模糊查询） |

### 响应字段

```json
{
  "success": true,
  "data": [
    {
      "corpId": 100,
      "corpName": "XX公司",
      "issueCount": 8
    }
  ],
  "totalCount": 1,
  "pageSize": 10,
  "pageIndex": 1
}
```

| 字段 | 类型 | 说明 |
|------|------|------|
| corpId | Long | 公司ID |
| corpName | String | 公司名称 |
| issueCount | Integer | 任务清单下发数 |

---

## 二十二、获取企业统计（股份端）

`POST /safetyDutyList/statistics/corpStatistics`

### 请求参数

```json
{
  "pageIndex": 1,
  "pageSize": 10,
  "corpName": "XX公司"
}
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| pageIndex | Integer | 否 | 页码（默认1） |
| pageSize | Integer | 否 | 每页条数（默认10） |
| corpName | String | 否 | 企业名称（模糊查询） |

### 响应字段

```json
{
  "success": true,
  "data": [
    {
      "corpId": 100,
      "corpName": "XX公司",
      "completedTaskCount": 15,
      "closedTaskCount": 3,
      "totalTaskCount": 20
    }
  ],
  "totalCount": 1,
  "pageSize": 10,
  "pageIndex": 1
}
```

| 字段 | 类型 | 说明 |
|------|------|------|
| corpId | Long | 公司ID |
| corpName | String | 公司名称 |
| completedTaskCount | Integer | 已完成任务数 |
| closedTaskCount | Integer | 已关闭任务数 |
| totalTaskCount | Integer | 年度执行任务总数 |

---

## 二十三、关闭清单

`POST /safetyDutyList/taskList/close`

### 请求参数

```json
{
  "taskListId": "uuid-xxx"
}
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| taskListId | String | **是** | 清单业务ID |

### 响应

```json
{
  "success": true
}
```

### 业务逻辑

1. 将 task_list.status 更新为 3（已关闭）
2. 同步关闭该清单下所有进行中的下发记录（task_list_issue.status → 3）
3. 同步关闭所有下发记录下进行中的任务执行记录（task_execution.task_status → 3）

---

## 二十四、关闭任务

`POST /safetyDutyList/taskDetail/close`

### 请求参数

```json
{
  "taskDetailId": "uuid-detail-1"
}
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| taskDetailId | String | **是** | 任务业务ID |

### 响应

```json
{
  "success": true
}
```

### 业务逻辑

1. 将 task_detail.task_status 更新为 3（已关闭）
2. 同步关闭关联的所有进行中的任务执行记录（task_execution.task_status → 3）

---

## 二十五、任务下发

`POST /safetyDutyList/taskList/issue`

### 请求参数

```json
{
  "taskListId": "uuid-xxx",
  "executeCorpId": 100,
  "executeDepartmentId": 200,
  "executeUserId": 300,
  "periodStartTime": "2026-01-01 00:00:00",
  "periodEndTime": "2026-12-31 23:59:59"
}
```

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| taskListId | String | **是** | 清单UUID（业务主键），需为开启状态的清单 |
| executeCorpId | Long | **是** | 执行公司ID |
| executeDepartmentId | Long | **是** | 执行部门ID |
| executeUserId | Long | **是** | 执行人员ID |
| periodStartTime | LocalDateTime | **是** | 执行周期开始时间（格式：yyyy-MM-dd HH:mm:ss） |
| periodEndTime | LocalDateTime | **是** | 执行周期结束时间（格式：yyyy-MM-dd HH:mm:ss） |

### 响应

```json
{
  "success": true
}
```

### 业务逻辑

1. 在 task_list_issue 表创建下发记录
2. 根据 task_list 关联的 task_detail 模板，在 task_execution 表创建对应的任务执行记录
3. 下发记录的 issue_status 设为 1（已下发）

---

## 接口路径汇总

| 序号 | 接口 | 路径 | Controller |
|------|------|------|-----------|
| 1 | 获取清单列表 | POST /taskList/list | TaskListController |
| 2 | 新增清单 | POST /taskList/save | TaskListController |
| 3 | 修改清单 | POST /taskList/edit | TaskListController |
| 4 | 删除清单 | POST /taskList/delete/{id} | TaskListController |
| 5 | 开关切换 | POST /taskList/switchFlag | TaskListController |
| 6 | 获取任务列表 | POST /taskDetail/list | TaskDetailController |
| 7 | 批量保存任务 | POST /taskDetail/saveBatch | TaskDetailController |
| 8 | 获取任务详情 | GET /taskDetail/{detailId} | TaskDetailController |
| 9 | 企业落实情况 | POST /taskListIssue/list | TaskListIssueController |
| 10 | 下发记录详情 | GET /taskListIssue/{taskIssueId} | TaskListIssueController |
| 11 | 任务执行列表 | POST /taskExecution/list | TaskExecutionController |
| 12 | 执行记录详情 | GET /taskExecution/{taskExecutionId} | TaskExecutionController |
| 13 | 反馈周期分组 | POST /feedback/periodGroupList | FeedbackController |
| 14 | 反馈列表 | POST /feedback/list | FeedbackController |
| 15 | 反馈详情 | GET /feedback/{feedbackId} | FeedbackController |
| 16 | 编辑反馈 | POST /feedback/edit | FeedbackController |
| 17 | 删除反馈 | POST /feedback/delete/{id} | FeedbackController |
| 18 | 企业评价列表 | POST /statistics/evaluationList | StatisticsController |
| 19 | 更新任务评分 | POST /taskExecution/updateScore | TaskExecutionController |
| 20 | 提交反馈 | POST /feedback/save | FeedbackController |
| 21 | 企业下发统计 | POST /statistics/issueStatistics | StatisticsController |
| 22 | 企业统计（股份端） | POST /statistics/corpStatistics | StatisticsController |
| 23 | 关闭清单 | POST /taskList/close | TaskListController |
| 24 | 关闭任务 | POST /taskDetail/close | TaskDetailController |
| 25 | 任务下发 | POST /taskList/issue | TaskListController |

> 所有路径前缀为 `/safetyDutyList`。
