# 安全责任清单表结构设计

## 一、需求概述

### 1.1 业务流程

1. **股份端创建任务清单** → 填写（名称，级别，责任岗位，开关，创建公司，创建部门，创建人）
2. **根据任务清单ID进入任务列表** → 新建、查看
3. **下发** → 给某公司的执行人
4. **执行人按反馈周期按时提交反馈**
5. **清单已完成或已关闭后可评分**

### 1.2 反馈周期规则

| 周期类型 | 规则说明 |
|---------|---------|
| 每月 | 每个月必须要有反馈，否则判定为有异常并记录 |
| 每季度 | 按自然季度划分（3个月为一个季度），每个季度必须有一次反馈，否则判定为异常 |
| 半年 | 按自然年划分（6个月为半年），每半年必须有一次反馈，否则判定为异常 |
| 年 | 按自然年划分，每年必须有一次反馈，否则判定为异常 |

> **备注**：周期内可多次提交反馈

### 1.3 状态说明

- **已完成**：清单的周期时间结束
- **已关闭**：手动关闭

---

## 二、表结构设计

### 2.1 ER关系图

```
safety_accountability_task_list (任务清单表)
    │
    ├── 1:N ──→ safety_accountability_task_detail (任务清单详细表)
    │                   │
    │                   ├── 1:N ──→ safety_accountability_feedback (执行反馈表)
    │                   │
    │                   └── 1:N ──→ safety_accountability_feedback_exception (反馈异常信息表)
    │
    └── 关联 ──→ 执行人信息（user表）
```

### 2.2 表清单

| 序号 | 表名 | 表中文名 | 说明 |
|-----|------|---------|------|
| 1 | safety_accountability_task_list | 任务清单表 | 存储任务清单主信息 |
| 2 | safety_accountability_task_detail | 任务清单详细表 | 存储任务详情及执行内容 |
| 3 | safety_accountability_feedback | 执行反馈表 | 存储执行人提交的反馈 |
| 4 | safety_accountability_feedback_exception | 反馈异常信息表 | 记录反馈异常信息 |

---

## 三、详细表结构

### 3.1 任务清单表 (safety_accountability_task_list)

**功能说明**：存储任务清单主信息，包括创建、下发、执行、评分等完整生命周期。

| 字段名 | 类型 | 是否必填 | 默认值 | 说明 |
|-------|------|---------|-------|------|
| id | bigint(20) | 是 | 自增 | 主键 |
| task_list_id | varchar(64) | 是 | - | 清单UUID（业务主键） |
| task_list_name | varchar(255) | 是 | - | 清单名称 |
| task_level | tinyint(4) | 是 | - | 任务级别：1-企业级 2-部门级 3-班组级 |
| responsibility_post | varchar(255) | 否 | NULL | 责任岗位 |
| switch_flag | tinyint(4) | 是 | 1 | 开启/关闭：0-关 1-开 |
| status | tinyint(4) | 是 | 1 | 状态：1-进行中 2-已完成 3-已关闭 |
| period_start_time | datetime | 是 | - | 执行周期开始时间 |
| period_end_time | datetime | 是 | - | 执行周期结束时间 |
| feedback_status | tinyint(4) | 否 | 1 | 反馈状态：1-正常 2-存在异常 |
| score | decimal(5,2) | 否 | NULL | 评分数 |
| score_time | datetime | 否 | NULL | 评分时间 |
| score_user_id | bigint(20) | 否 | NULL | 评分人ID |
| score_user_name | varchar(50) | 否 | NULL | 评分人姓名 |
| score_department_id | bigint(20) | 否 | NULL | 评分部门ID |
| score_department_name | varchar(100) | 否 | NULL | 评分部门名称 |
| create_corp_id | bigint(20) | 否 | NULL | 创建公司ID |
| create_corp_name | varchar(100) | 否 | NULL | 创建公司名称 |
| create_department_id | bigint(20) | 否 | NULL | 创建部门ID |
| create_department_name | varchar(100) | 否 | NULL | 创建部门名称 |
| create_user_id | bigint(20) | 否 | NULL | 创建人ID |
| create_user_name | varchar(50) | 否 | NULL | 创建人姓名 |
| issue_status | tinyint(4) | 否 | 0 | 下发状态：0-未下发 1-已下发 |
| issue_time | datetime | 否 | NULL | 下发时间 |
| issue_user_id | bigint(20) | 否 | NULL | 下发人ID |
| issue_user_name | varchar(50) | 否 | NULL | 下发人姓名 |
| execute_corp_id | bigint(20) | 否 | NULL | 执行公司ID |
| execute_corp_name | varchar(100) | 否 | NULL | 执行公司名称 |
| execute_department_id | bigint(20) | 否 | NULL | 执行部门ID |
| execute_department_name | varchar(100) | 否 | NULL | 执行部门名称 |
| execute_user_id | bigint(20) | 否 | NULL | 执行人员ID |
| execute_user_name | varchar(50) | 否 | NULL | 执行人员姓名 |
| close_time | datetime | 否 | NULL | 关闭时间 |
| close_user_id | bigint(20) | 否 | NULL | 关闭人ID |
| close_user_name | varchar(50) | 否 | NULL | 关闭人姓名 |
| close_reason | varchar(500) | 否 | NULL | 关闭原因 |

**索引设计**：

| 索引名 | 索引类型 | 字段 |
|-------|---------|------|
| PRIMARY | 主键 | id |
| uk_task_list_id | 唯一索引 | task_list_id |
| idx_create_corp_id | 普通索引 | create_corp_id |
| idx_execute_corp_id | 普通索引 | execute_corp_id |
| idx_execute_user_id | 普通索引 | execute_user_id |
| idx_status | 普通索引 | status |
| idx_period_time | 普通索引 | period_start_time, period_end_time |

---

### 3.2 任务清单详细表 (safety_accountability_task_detail)

**功能说明**：存储任务详情，关联任务清单表，包含执行内容、反馈周期、评分等信息。

| 字段名 | 类型 | 是否必填 | 默认值 | 说明 |
|-------|------|---------|-------|------|
| id | bigint(20) | 是 | 自增 | 主键 |
| task_detail_id | varchar(64) | 是 | - | 任务详情UUID（业务主键） |
| task_list_id | varchar(64) | 是 | - | 任务清单主键（关联任务清单表） |
| execute_content | text | 否 | NULL | 执行内容 |
| feedback_cycle | tinyint(4) | 是 | - | 反馈周期：1-每月 2-季度 3-半年 4-年 |
| task_status | tinyint(4) | 是 | 1 | 任务状态：1-进行中 2-已完成 3-已关闭 |
| feedback_status | tinyint(4) | 否 | 1 | 反馈状态：1-正常 2-存在异常 |
| task_score | decimal(5,2) | 否 | NULL | 任务分值 |
| task_rating | decimal(5,2) | 否 | NULL | 任务评分 |
| score_time | datetime | 否 | NULL | 评分时间 |
| score_department_id | bigint(20) | 否 | NULL | 评分部门ID |
| score_department_name | varchar(100) | 否 | NULL | 评分部门名称 |
| score_user_id | bigint(20) | 否 | NULL | 评分人ID |
| score_user_name | varchar(50) | 否 | NULL | 评分人姓名 |
| current_period | varchar(20) | 否 | NULL | 当前周期标识 |
| last_feedback_time | datetime | 否 | NULL | 上次反馈时间 |
| last_feedback_period | varchar(20) | 否 | NULL | 上次反馈周期标识 |
| abnormal_count | int(11) | 否 | 0 | 异常次数（未按时反馈累计次数） |

**索引设计**：

| 索引名 | 索引类型 | 字段 |
|-------|---------|------|
| PRIMARY | 主键 | id |
| uk_task_detail_id | 唯一索引 | task_detail_id |
| idx_task_list_id | 普通索引 | task_list_id |
| idx_task_status | 普通索引 | task_status |
| idx_feedback_status | 普通索引 | feedback_status |
| idx_current_period | 普通索引 | current_period |

---

### 3.3 执行反馈表 (safety_accountability_feedback)

**功能说明**：存储执行人提交的反馈信息，支持周期内多次反馈。

| 字段名 | 类型 | 是否必填 | 默认值 | 说明 |
|-------|------|---------|-------|------|
| id | bigint(20) | 是 | 自增 | 主键 |
| feedback_id | varchar(64) | 是 | - | 反馈UUID（业务主键） |
| task_detail_id | varchar(64) | 是 | - | 任务详情UUID（关联任务清单详细表） |
| task_list_id | varchar(64) | 是 | - | 任务清单UUID（冗余字段，便于查询） |
| feedback_period | varchar(20) | 是 | - | 反馈周期标识 |
| feedback_cycle | tinyint(4) | 是 | - | 反馈周期类型：1-每月 2-季度 3-半年 4-年 |
| feedback_content | text | 否 | NULL | 反馈内容 |
| feedback_time | datetime | 是 | - | 反馈时间 |
| feedback_user_id | bigint(20) | 否 | NULL | 反馈人ID |
| feedback_user_name | varchar(50) | 否 | NULL | 反馈人姓名 |
| feedback_corp_id | bigint(20) | 否 | NULL | 反馈人公司ID |
| feedback_corp_name | varchar(100) | 否 | NULL | 反馈人公司名称 |
| feedback_department_id | bigint(20) | 否 | NULL | 反馈人部门ID |
| feedback_department_name | varchar(100) | 否 | NULL | 反馈人部门名称 |
| is_ontime | tinyint(4) | 否 | 1 | 是否按时反馈：1-是 0-否 |

**索引设计**：

| 索引名 | 索引类型 | 字段 |
|-------|---------|------|
| PRIMARY | 主键 | id |
| uk_feedback_id | 唯一索引 | feedback_id |
| idx_task_detail_id | 普通索引 | task_detail_id |
| idx_task_list_id | 普通索引 | task_list_id |
| idx_feedback_period | 普通索引 | feedback_period |
| idx_feedback_user_id | 普通索引 | feedback_user_id |
| idx_feedback_time | 普通索引 | feedback_time |

---

### 3.4 反馈异常信息表 (safety_accountability_feedback_exception)

**功能说明**：记录反馈异常信息，包括未按时反馈等情况。

| 字段名 | 类型 | 是否必填 | 默认值 | 说明 |
|-------|------|---------|-------|------|
| id | bigint(20) | 是 | 自增 | 主键 |
| exception_id | varchar(64) | 是 | - | 反馈异常UUID（业务主键） |
| task_detail_id | varchar(64) | 是 | - | 任务详情主键（关联任务清单详细表） |
| task_list_id | varchar(64) | 否 | NULL | 任务清单主键（冗余字段） |
| feedback_id | varchar(64) | 否 | NULL | 关联的反馈ID（如果是反馈触发的异常） |
| exception_period | varchar(20) | 否 | NULL | 异常周期标识 |
| exception_type | tinyint(4) | 是 | - | 异常类型：1-未按时反馈 2-反馈内容异常 3-其他 |
| exception_info | text | 否 | NULL | 反馈异常信息 |
| exception_time | datetime | 否 | CURRENT_TIMESTAMP | 异常时间 |
| handle_status | tinyint(4) | 否 | 0 | 处理状态：0-未处理 1-已处理 |
| handle_time | datetime | 否 | NULL | 处理时间 |
| handle_user_id | bigint(20) | 否 | NULL | 处理人ID |
| handle_user_name | varchar(50) | 否 | NULL | 处理人姓名 |
| handle_remark | varchar(500) | 否 | NULL | 处理备注 |

**索引设计**：

| 索引名 | 索引类型 | 字段 |
|-------|---------|------|
| PRIMARY | 主键 | id |
| uk_exception_id | 唯一索引 | exception_id |
| idx_task_detail_id | 普通索引 | task_detail_id |
| idx_task_list_id | 普通索引 | task_list_id |
| idx_exception_type | 普通索引 | exception_type |
| idx_exception_period | 普通索引 | exception_period |
| idx_handle_status | 普通索引 | handle_status |

---

## 四、通用字段说明

所有表均包含以下通用字段：

| 字段名 | 类型 | 默认值 | 说明 |
|-------|------|-------|------|
| delete_enum | varchar(32) | 'FALSE' | 删除标识：TRUE/FALSE |
| remarks | varchar(500) | NULL | 备注 |
| create_name | varchar(50) | NULL | 创建人姓名 |
| update_name | varchar(50) | NULL | 更新人姓名 |
| tenant_id | bigint(20) | NULL | 租户ID |
| org_id | bigint(20) | NULL | 单位ID |
| version | int(11) | 0 | 版本 |
| create_time | datetime | CURRENT_TIMESTAMP | 创建时间 |
| update_time | datetime | CURRENT_TIMESTAMP ON UPDATE | 修改时间 |
| create_id | bigint(20) | NULL | 创建人ID |
| update_id | bigint(20) | NULL | 修改人ID |
| env | varchar(50) | NULL | 环境标识 |

---

## 五、周期标识格式说明

### 5.1 周期标识格式定义

| 周期类型 | 周期标识格式 | 示例 | 说明 |
|---------|-------------|------|------|
| 每月 | `yyyy-MM` | `2026-05` | 表示2026年5月 |
| 每季度 | `yyyy-Qn` | `2026-Q1`、`2026-Q2`、`2026-Q3`、`2026-Q4` | Q1-Q4分别表示四个季度 |
| 半年 | `yyyy-Hn` | `2026-H1`、`2026-H2` | H1表示上半年，H2表示下半年 |
| 年 | `yyyy` | `2026` | 表示2026年整年 |

### 5.2 季度划分规则

| 季度 | 包含月份 | 周期标识示例 |
|-----|---------|-------------|
| Q1（第一季度） | 1月、2月、3月 | 2026-Q1 |
| Q2（第二季度） | 4月、5月、6月 | 2026-Q2 |
| Q3（第三季度） | 7月、8月、9月 | 2026-Q3 |
| Q4（第四季度） | 10月、11月、12月 | 2026-Q4 |

### 5.3 半年划分规则

| 半年 | 包含月份 | 周期标识示例 |
|-----|---------|-------------|
| H1（上半年） | 1月-6月 | 2026-H1 |
| H2（下半年） | 7月-12月 | 2026-H2 |

---

## 六、设计优化说明

### 6.1 任务清单表优化

| 优化项 | 原设计 | 优化后 | 优化原因 |
|-------|-------|-------|---------|
| 下发相关字段 | 无 | 新增下发状态、下发时间、下发人 | 支持下发流程跟踪 |
| 关闭相关字段 | 无 | 新增关闭时间、关闭人、关闭原因 | 支持手动关闭记录 |
| 评分相关字段 | 评分数 | 新增评分时间、评分人、评分部门 | 完善评分信息 |
| 名称字段 | 无 | 新增创建公司名称、创建部门名称、执行公司名称等 | 减少关联查询，提升查询效率 |

### 6.2 任务详情表优化

| 优化项 | 原设计 | 优化后 | 优化原因 |
|-------|-------|-------|---------|
| 当前周期标识 | 无 | current_period | 快速判断当前应反馈的周期 |
| 上次反馈信息 | 无 | last_feedback_time, last_feedback_period | 追踪反馈历史 |
| 异常次数统计 | 无 | abnormal_count | 便于统计和展示异常情况 |

### 6.3 反馈表优化

| 优化项 | 原设计 | 优化后 | 优化原因 |
|-------|-------|-------|---------|
| 周期标识 | 反馈周期 | feedback_period（具体周期标识） | 精确判断是否按时反馈 |
| 是否按时 | 无 | is_ontime | 便于统计按时/逾期反馈 |
| 冗余字段 | 无 | task_list_id | 减少关联查询，提升查询效率 |
| 反馈人详细信息 | 反馈人 | 新增反馈人公司、部门信息 | 完整记录反馈人信息 |

### 6.4 异常表优化

| 优化项 | 原设计 | 优化后 | 优化原因 |
|-------|-------|-------|---------|
| 异常类型 | 无 | exception_type | 区分不同类型的异常 |
| 处理相关字段 | 无 | 新增处理状态、处理时间、处理人、处理备注 | 支持异常处理流程 |
| 关联反馈 | 无 | feedback_id | 关联触发异常的反馈记录 |

---

## 七、完整建表SQL

```sql
-- =============================================
-- 任务清单表
-- =============================================
CREATE TABLE `safety_accountability_task_list` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `task_list_id` varchar(64) NOT NULL COMMENT '清单UUID（业务主键）',
  `task_list_name` varchar(255) NOT NULL COMMENT '清单名称',
  `task_level` tinyint(4) NOT NULL COMMENT '任务级别：1-企业级 2-部门级 3-班组级',
  `responsibility_post` varchar(255) DEFAULT NULL COMMENT '责任岗位',
  `switch_flag` tinyint(4) NOT NULL DEFAULT '1' COMMENT '开启/关闭：0-关 1-开',
  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态：1-进行中 2-已完成 3-已关闭',
  `period_start_time` datetime NOT NULL COMMENT '执行周期开始时间',
  `period_end_time` datetime NOT NULL COMMENT '执行周期结束时间',
  `feedback_status` tinyint(4) DEFAULT '1' COMMENT '反馈状态：1-正常 2-存在异常',
  `score` decimal(5,2) DEFAULT NULL COMMENT '评分数',
  `score_time` datetime DEFAULT NULL COMMENT '评分时间',
  `score_user_id` bigint(20) DEFAULT NULL COMMENT '评分人ID',
  `score_user_name` varchar(50) DEFAULT NULL COMMENT '评分人姓名',
  `score_department_id` bigint(20) DEFAULT NULL COMMENT '评分部门ID',
  `score_department_name` varchar(100) DEFAULT NULL COMMENT '评分部门名称',
  `create_corp_id` bigint(20) DEFAULT NULL COMMENT '创建公司ID',
  `create_corp_name` varchar(100) DEFAULT NULL COMMENT '创建公司名称',
  `create_department_id` bigint(20) DEFAULT NULL COMMENT '创建部门ID',
  `create_department_name` varchar(100) DEFAULT NULL COMMENT '创建部门名称',
  `create_user_id` bigint(20) DEFAULT NULL COMMENT '创建人ID',
  `create_user_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
  `issue_status` tinyint(4) DEFAULT '0' COMMENT '下发状态：0-未下发 1-已下发',
  `issue_time` datetime DEFAULT NULL COMMENT '下发时间',
  `issue_user_id` bigint(20) DEFAULT NULL COMMENT '下发人ID',
  `issue_user_name` varchar(50) DEFAULT NULL COMMENT '下发人姓名',
  `execute_corp_id` bigint(20) DEFAULT NULL COMMENT '执行公司ID',
  `execute_corp_name` varchar(100) DEFAULT NULL COMMENT '执行公司名称',
  `execute_department_id` bigint(20) DEFAULT NULL COMMENT '执行部门ID',
  `execute_department_name` varchar(100) DEFAULT NULL COMMENT '执行部门名称',
  `execute_user_id` bigint(20) DEFAULT NULL COMMENT '执行人员ID',
  `execute_user_name` varchar(50) DEFAULT NULL COMMENT '执行人员姓名',
  `close_time` datetime DEFAULT NULL COMMENT '关闭时间',
  `close_user_id` bigint(20) DEFAULT NULL COMMENT '关闭人ID',
  `close_user_name` varchar(50) DEFAULT NULL COMMENT '关闭人姓名',
  `close_reason` varchar(500) DEFAULT NULL COMMENT '关闭原因',
  `delete_enum` varchar(32) DEFAULT 'FALSE' COMMENT '删除标识：TRUE/FALSE',
  `remarks` varchar(500) DEFAULT NULL COMMENT '备注',
  `create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
  `update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
  `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户ID',
  `org_id` bigint(20) DEFAULT NULL COMMENT '单位ID',
  `version` int(11) DEFAULT '0' COMMENT '版本',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `create_id` bigint(20) DEFAULT NULL COMMENT '创建人ID',
  `update_id` bigint(20) DEFAULT NULL COMMENT '修改人ID',
  `env` varchar(50) DEFAULT NULL COMMENT '环境标识',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_task_list_id` (`task_list_id`),
  KEY `idx_create_corp_id` (`create_corp_id`),
  KEY `idx_execute_corp_id` (`execute_corp_id`),
  KEY `idx_execute_user_id` (`execute_user_id`),
  KEY `idx_status` (`status`),
  KEY `idx_period_time` (`period_start_time`, `period_end_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务清单表';

-- =============================================
-- 任务清单详细表
-- =============================================
CREATE TABLE `safety_accountability_task_detail` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `task_detail_id` varchar(64) NOT NULL COMMENT '任务详情UUID（业务主键）',
  `task_list_id` varchar(64) NOT NULL COMMENT '任务清单主键（关联任务清单表）',
  `execute_content` text COMMENT '执行内容',
  `feedback_cycle` tinyint(4) NOT NULL COMMENT '反馈周期：1-每月 2-季度 3-半年 4-年',
  `task_status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '任务状态：1-进行中 2-已完成 3-已关闭',
  `feedback_status` tinyint(4) DEFAULT '1' COMMENT '反馈状态：1-正常 2-存在异常',
  `task_score` decimal(5,2) DEFAULT NULL COMMENT '任务分值',
  `task_rating` decimal(5,2) DEFAULT NULL COMMENT '任务评分',
  `score_time` datetime DEFAULT NULL COMMENT '评分时间',
  `score_department_id` bigint(20) DEFAULT NULL COMMENT '评分部门ID',
  `score_department_name` varchar(100) DEFAULT NULL COMMENT '评分部门名称',
  `score_user_id` bigint(20) DEFAULT NULL COMMENT '评分人ID',
  `score_user_name` varchar(50) DEFAULT NULL COMMENT '评分人姓名',
  `current_period` varchar(20) DEFAULT NULL COMMENT '当前周期标识（格式：2026-05表示月，2026-Q1表示季度，2026-H1表示半年，2026表示年）',
  `last_feedback_time` datetime DEFAULT NULL COMMENT '上次反馈时间',
  `last_feedback_period` varchar(20) DEFAULT NULL COMMENT '上次反馈周期标识',
  `abnormal_count` int(11) DEFAULT '0' COMMENT '异常次数（未按时反馈累计次数）',
  `delete_enum` varchar(32) DEFAULT 'FALSE' COMMENT '删除标识：TRUE/FALSE',
  `remarks` varchar(500) DEFAULT NULL COMMENT '备注',
  `create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
  `update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
  `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户ID',
  `org_id` bigint(20) DEFAULT NULL COMMENT '单位ID',
  `version` int(11) DEFAULT '0' COMMENT '版本',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `create_id` bigint(20) DEFAULT NULL COMMENT '创建人ID',
  `update_id` bigint(20) DEFAULT NULL COMMENT '修改人ID',
  `env` varchar(50) DEFAULT NULL COMMENT '环境标识',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_task_detail_id` (`task_detail_id`),
  KEY `idx_task_list_id` (`task_list_id`),
  KEY `idx_task_status` (`task_status`),
  KEY `idx_feedback_status` (`feedback_status`),
  KEY `idx_current_period` (`current_period`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务清单详细表';

-- =============================================
-- 执行反馈表
-- =============================================
CREATE TABLE `safety_accountability_feedback` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `feedback_id` varchar(64) NOT NULL COMMENT '反馈UUID（业务主键）',
  `task_detail_id` varchar(64) NOT NULL COMMENT '任务详情UUID（关联任务清单详细表）',
  `task_list_id` varchar(64) NOT NULL COMMENT '任务清单UUID（冗余字段，便于查询）',
  `feedback_period` varchar(20) NOT NULL COMMENT '反馈周期标识（格式：2026-05表示月，2026-Q1表示季度，2026-H1表示半年，2026表示年）',
  `feedback_cycle` tinyint(4) NOT NULL COMMENT '反馈周期类型：1-每月 2-季度 3-半年 4-年',
  `feedback_content` text COMMENT '反馈内容',
  `feedback_time` datetime NOT NULL COMMENT '反馈时间',
  `feedback_user_id` bigint(20) DEFAULT NULL COMMENT '反馈人ID',
  `feedback_user_name` varchar(50) DEFAULT NULL COMMENT '反馈人姓名',
  `feedback_corp_id` bigint(20) DEFAULT NULL COMMENT '反馈人公司ID',
  `feedback_corp_name` varchar(100) DEFAULT NULL COMMENT '反馈人公司名称',
  `feedback_department_id` bigint(20) DEFAULT NULL COMMENT '反馈人部门ID',
  `feedback_department_name` varchar(100) DEFAULT NULL COMMENT '反馈人部门名称',
  `is_ontime` tinyint(4) DEFAULT '1' COMMENT '是否按时反馈：1-是 0-否',
  `delete_enum` varchar(32) DEFAULT 'FALSE' COMMENT '删除标识：TRUE/FALSE',
  `remarks` varchar(500) DEFAULT NULL COMMENT '备注',
  `create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
  `update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
  `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户ID',
  `org_id` bigint(20) DEFAULT NULL COMMENT '单位ID',
  `version` int(11) DEFAULT '0' COMMENT '版本',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `create_id` bigint(20) DEFAULT NULL COMMENT '创建人ID',
  `update_id` bigint(20) DEFAULT NULL COMMENT '修改人ID',
  `env` varchar(50) DEFAULT NULL COMMENT '环境标识',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_feedback_id` (`feedback_id`),
  KEY `idx_task_detail_id` (`task_detail_id`),
  KEY `idx_task_list_id` (`task_list_id`),
  KEY `idx_feedback_period` (`feedback_period`),
  KEY `idx_feedback_user_id` (`feedback_user_id`),
  KEY `idx_feedback_time` (`feedback_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='执行反馈表';

-- =============================================
-- 反馈异常信息表
-- =============================================
CREATE TABLE `safety_accountability_feedback_exception` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `exception_id` varchar(64) NOT NULL COMMENT '反馈异常UUID（业务主键）',
  `task_detail_id` varchar(64) NOT NULL COMMENT '任务详情主键（关联任务清单详细表）',
  `task_list_id` varchar(64) DEFAULT NULL COMMENT '任务清单主键（冗余字段）',
  `feedback_id` varchar(64) DEFAULT NULL COMMENT '关联的反馈ID（如果是反馈触发的异常）',
  `exception_period` varchar(20) DEFAULT NULL COMMENT '异常周期标识',
  `exception_type` tinyint(4) NOT NULL COMMENT '异常类型：1-未按时反馈 2-反馈内容异常 3-其他',
  `exception_info` text COMMENT '反馈异常信息',
  `exception_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '异常时间',
  `handle_status` tinyint(4) DEFAULT '0' COMMENT '处理状态：0-未处理 1-已处理',
  `handle_time` datetime DEFAULT NULL COMMENT '处理时间',
  `handle_user_id` bigint(20) DEFAULT NULL COMMENT '处理人ID',
  `handle_user_name` varchar(50) DEFAULT NULL COMMENT '处理人姓名',
  `handle_remark` varchar(500) DEFAULT NULL COMMENT '处理备注',
  `delete_enum` varchar(32) DEFAULT 'FALSE' COMMENT '删除标识：TRUE/FALSE',
  `remarks` varchar(500) DEFAULT NULL COMMENT '备注',
  `create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
  `update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
  `tenant_id` bigint(20) DEFAULT NULL COMMENT '租户ID',
  `org_id` bigint(20) DEFAULT NULL COMMENT '单位ID',
  `version` int(11) DEFAULT '0' COMMENT '版本',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `create_id` bigint(20) DEFAULT NULL COMMENT '创建人ID',
  `update_id` bigint(20) DEFAULT NULL COMMENT '修改人ID',
  `env` varchar(50) DEFAULT NULL COMMENT '环境标识',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_exception_id` (`exception_id`),
  KEY `idx_task_detail_id` (`task_detail_id`),
  KEY `idx_task_list_id` (`task_list_id`),
  KEY `idx_exception_type` (`exception_type`),
  KEY `idx_exception_period` (`exception_period`),
  KEY `idx_handle_status` (`handle_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='反馈异常信息表';
```

---

## 八、业务流程数据流转示例

### 8.1 创建任务清单流程

```
1. 股份端用户创建任务清单
   ↓
   INSERT INTO safety_accountability_task_list 
   (task_list_id, task_list_name, task_level, ..., status=1, issue_status=0)
   
2. 添加任务详情
   ↓
   INSERT INTO safety_accountability_task_detail 
   (task_detail_id, task_list_id, execute_content, feedback_cycle, ...)
```

### 8.2 下发任务流程

```
1. 选择执行人，下发任务
   ↓
   UPDATE safety_accountability_task_list 
   SET issue_status=1, issue_time=NOW(), 
       execute_corp_id=xxx, execute_user_id=xxx, ...
   WHERE task_list_id=xxx
```

### 8.3 提交反馈流程

```
1. 执行人提交反馈
   ↓
   INSERT INTO safety_accountability_feedback 
   (feedback_id, task_detail_id, feedback_period, feedback_content, ...)
   
2. 更新任务详情
   ↓
   UPDATE safety_accountability_task_detail 
   SET last_feedback_time=NOW(), last_feedback_period='2026-Q1', ...
   WHERE task_detail_id=xxx
```

### 8.4 异常记录流程

```
1. 定时任务检测未按时反馈
   ↓
   INSERT INTO safety_accountability_feedback_exception 
   (exception_id, task_detail_id, exception_type=1, exception_period='2026-Q1', ...)
   
2. 更新异常次数
   ↓
   UPDATE safety_accountability_task_detail 
   SET abnormal_count=abnormal_count+1, feedback_status=2
   WHERE task_detail_id=xxx
```

---

## 九、注意事项

1. **周期判断逻辑**：需要在应用层或定时任务中实现周期判断逻辑，自动检测是否按时反馈
2. **索引优化**：根据实际查询场景，可能需要调整或添加复合索引
3. **数据量预估**：反馈表数据量可能较大，建议定期归档历史数据
4. **并发控制**：使用 `version` 字段实现乐观锁，防止并发更新冲突
