675 lines
37 KiB
Markdown
675 lines
37 KiB
Markdown
# 安全责任清单 - 多公司下发改动分析
|
||
|
||
## 一、需求变更说明
|
||
|
||
| 项目 | 原需求 | 新需求 |
|
||
|------|--------|--------|
|
||
| 下发对象 | 一张清单只能下发给一个公司/部门/人员 | 一张清单(含所有任务)作为整体,可下发给多个公司 |
|
||
| 数据关系 | 清单与执行方是一对一关系 | 清单与执行方是一对多关系 |
|
||
| 表职责 | 清单表和任务表混合了模板定义与执行数据 | 清单表/任务表纯粹作为模板定义,执行数据独立到下发表和任务执行表 |
|
||
|
||
## 二、当前数据模型分析
|
||
|
||
### 2.1 当前表结构
|
||
|
||
```
|
||
safety_accountability_task_list(清单表 - 模板+执行混合)
|
||
├── task_list_id → 清单UUID
|
||
├── task_list_name → 清单名称
|
||
├── task_level → 任务级别
|
||
├── responsibility_post → 责任岗位
|
||
├── switch_flag → 开关
|
||
├── status → 状态(执行相关)
|
||
├── period_start_time → 周期开始时间(执行相关)
|
||
├── period_end_time → 周期结束时间(执行相关)
|
||
├── execute_corp_id → 执行公司ID(执行相关)
|
||
├── execute_department_id → 执行部门ID(执行相关)
|
||
├── execute_user_id → 执行人员ID(执行相关)
|
||
├── issue_status → 下发状态(执行相关)
|
||
├── issue_time → 下发时间(执行相关)
|
||
├── rating_score → 评分数(执行相关)
|
||
├── rating_user_id → 评分人ID(执行相关)
|
||
├── rating_department_id → 评分部门ID(执行相关)
|
||
├── close_time → 关闭时间(执行相关)
|
||
|
||
safety_accountability_task_detail(任务详情表 - 模板+执行混合)
|
||
├── task_detail_id → 任务UUID
|
||
├── task_list_id → 关联清单UUID
|
||
├── execute_content → 执行内容(模板)
|
||
├── feedback_cycle_type → 反馈周期类型(模板)
|
||
├── task_score → 任务分值(模板)
|
||
├── task_status → 任务状态(执行相关)
|
||
├── feedback_status → 反馈状态(执行相关)
|
||
├── task_rating → 任务评分(执行相关)
|
||
├── rating_time → 评分时间(执行相关)
|
||
├── rating_department_id → 评分部门ID(执行相关)
|
||
├── rating_user_id → 评分人ID(执行相关)
|
||
|
||
safety_accountability_feedback(反馈表)
|
||
├── feedback_id → 反馈UUID
|
||
├── task_detail_id → 关联任务详情UUID
|
||
├── task_list_id → 关联清单UUID(冗余)
|
||
└── ...
|
||
|
||
safety_accountability_feedback_exception(反馈异常表)
|
||
├── feedback_exception_id → 反馈异常UUID
|
||
├── task_detail_id → 关联任务详情UUID
|
||
├── task_list_id → 关联清单UUID(冗余)
|
||
└── ...
|
||
```
|
||
|
||
### 2.2 当前模型的问题
|
||
|
||
1. **清单表混合了模板定义和执行数据**:`execute_corp_id`、`issue_status`、`status`、`period_*`、`rating_*` 等执行相关字段与模板定义字段混在一起
|
||
2. **任务详情表混合了模板定义和执行数据**:`task_status`、`feedback_status`、`task_rating`、`rating_*` 等执行相关字段与模板定义字段混在一起
|
||
3. **清单与执行方是一对一关系**:无法支持多公司下发
|
||
4. **反馈和异常表直接关联任务模板**:应关联到具体的任务执行实例
|
||
|
||
## 三、新数据模型设计
|
||
|
||
### 3.1 核心思路:模板与实例分离
|
||
|
||
将现有模型拆分为**模板层**和**实例层**:
|
||
|
||
```
|
||
模板层(定义"是什么") 实例层(定义"执行得怎样")
|
||
┌──────────────┐ ┌──────────────────────┐
|
||
│ task_list │ 1 ────── N │ task_list_issue │
|
||
│ 清单模板 │ │ 清单下发记录 │
|
||
└──────┬───────┘ └──────────┬───────────┘
|
||
│ 1 │ 1
|
||
│ │
|
||
│ N │ N
|
||
┌──────┴───────┐ ┌──────────┴───────────┐
|
||
│ task_detail │ 1 ────── N │ task_execution │
|
||
│ 任务模板 │ │ 任务执行记录 │
|
||
└──────────────┘ └──────────┬───────────┘
|
||
│ 1
|
||
│
|
||
│ N
|
||
┌──────────┴───────────┐
|
||
│ feedback │
|
||
│ 执行反馈 │
|
||
└──────────────────────┘
|
||
│ 1
|
||
│
|
||
│ N
|
||
┌──────────┴───────────┐
|
||
│ feedback_exception │
|
||
│ 反馈异常 │
|
||
└──────────────────────┘
|
||
```
|
||
|
||
**关键原则**:
|
||
- **清单表(task_list)**:纯粹的清单模板定义,不含任何执行相关字段
|
||
- **任务详情表(task_detail)**:纯粹的任务模板定义,不含任何执行相关字段
|
||
- **清单下发记录表(task_list_issue)**:清单的一次下发实例,包含执行方、周期、状态、评分
|
||
- **任务执行表(task_execution)**:任务的一次执行实例,包含执行状态、反馈状态、评分
|
||
- **反馈表/异常表**:直接关联任务执行表,不再关联任务模板表
|
||
|
||
### 3.2 新增表:清单下发记录表
|
||
|
||
```sql
|
||
CREATE TABLE `safety_accountability_task_list_issue` (
|
||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`task_issue_id` varchar(64) NOT NULL COMMENT '下发记录UUID(业务主键)',
|
||
`task_list_id` varchar(64) NOT NULL COMMENT '清单UUID(关联清单模板表)',
|
||
`execute_corp_id` bigint DEFAULT NULL COMMENT '执行公司ID',
|
||
`execute_department_id` bigint DEFAULT NULL COMMENT '执行部门ID',
|
||
`execute_user_id` bigint DEFAULT NULL COMMENT '执行人员ID',
|
||
`issue_status` tinyint DEFAULT '0' COMMENT '下发状态:0-未下发 1-已下发',
|
||
`issue_time` datetime DEFAULT NULL COMMENT '下发时间',
|
||
`period_start_time` datetime DEFAULT NULL COMMENT '执行周期开始时间',
|
||
`period_end_time` datetime DEFAULT NULL COMMENT '执行周期结束时间',
|
||
`status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1-进行中 2-已完成 3-已关闭',
|
||
`close_time` datetime DEFAULT NULL COMMENT '关闭时间',
|
||
`rating_score` decimal(5,2) DEFAULT NULL COMMENT '评分数(汇总所有任务执行评分)',
|
||
`rating_user_id` bigint DEFAULT NULL COMMENT '评分人ID',
|
||
`rating_department_id` bigint DEFAULT NULL COMMENT '评分部门ID',
|
||
`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 DEFAULT NULL COMMENT '租户ID',
|
||
`org_id` bigint DEFAULT NULL COMMENT '单位ID',
|
||
`version` int DEFAULT '0' COMMENT '版本',
|
||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||
`create_id` bigint DEFAULT NULL COMMENT '创建人ID',
|
||
`update_id` bigint DEFAULT NULL COMMENT '修改人ID',
|
||
`env` varchar(50) DEFAULT NULL COMMENT '环境标识',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_task_issue_id` (`task_issue_id`),
|
||
KEY `idx_task_list_id` (`task_list_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 COLLATE=utf8mb4_0900_ai_ci COMMENT='清单下发记录表';
|
||
```
|
||
|
||
### 3.3 新增表:任务执行表
|
||
|
||
```sql
|
||
CREATE TABLE `safety_accountability_task_execution` (
|
||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`task_execution_id` varchar(64) NOT NULL COMMENT '任务执行UUID(业务主键)',
|
||
`task_issue_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(冗余,便于查询)',
|
||
`task_status` tinyint NOT NULL DEFAULT '1' COMMENT '任务状态:1-进行中 2-已完成 3-已关闭',
|
||
`feedback_status` tinyint DEFAULT '1' COMMENT '反馈状态:1-正常 2-异常',
|
||
`task_rating` decimal(5,2) DEFAULT NULL COMMENT '任务评分',
|
||
`rating_time` datetime DEFAULT NULL COMMENT '评分时间',
|
||
`rating_department_id` bigint DEFAULT NULL COMMENT '评分部门ID',
|
||
`rating_user_id` bigint DEFAULT NULL COMMENT '评分人ID',
|
||
`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 DEFAULT NULL COMMENT '租户ID',
|
||
`org_id` bigint DEFAULT NULL COMMENT '单位ID',
|
||
`version` int DEFAULT '0' COMMENT '版本',
|
||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||
`create_id` bigint DEFAULT NULL COMMENT '创建人ID',
|
||
`update_id` bigint DEFAULT NULL COMMENT '修改人ID',
|
||
`env` varchar(50) DEFAULT NULL COMMENT '环境标识',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_task_execution_id` (`task_execution_id`),
|
||
KEY `idx_task_issue_id` (`task_issue_id`),
|
||
KEY `idx_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`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='任务执行记录表';
|
||
```
|
||
|
||
### 3.4 修改表:清单表(瘦身为纯模板)
|
||
|
||
```sql
|
||
-- 从 safety_accountability_task_list 中移除执行相关字段:
|
||
ALTER TABLE `safety_accountability_task_list`
|
||
DROP COLUMN `execute_corp_id`,
|
||
DROP COLUMN `execute_department_id`,
|
||
DROP COLUMN `execute_user_id`,
|
||
DROP COLUMN `issue_status`,
|
||
DROP COLUMN `issue_time`,
|
||
DROP COLUMN `period_start_time`,
|
||
DROP COLUMN `period_end_time`,
|
||
DROP COLUMN `rating_score`,
|
||
DROP COLUMN `rating_user_id`,
|
||
DROP COLUMN `rating_department_id`,
|
||
DROP COLUMN `status`,
|
||
DROP COLUMN `close_time`;
|
||
```
|
||
|
||
瘦身后的清单表只保留:
|
||
```
|
||
safety_accountability_task_list(清单模板表)
|
||
├── id
|
||
├── task_list_id → 清单UUID
|
||
├── task_list_name → 清单名称
|
||
├── task_level → 任务级别:1-企业级 2-部门级 3-班组级
|
||
├── responsibility_post → 责任岗位
|
||
├── switch_flag → 开启/关闭:0-关 1-开
|
||
├── create_corp_id → 创建公司ID
|
||
├── create_department_id → 创建部门ID
|
||
├── create_user_id → 创建人ID
|
||
└── (基础审计字段)
|
||
```
|
||
|
||
### 3.5 修改表:任务详情表(瘦身为纯模板)
|
||
|
||
```sql
|
||
-- 从 safety_accountability_task_detail 中移除执行相关字段:
|
||
ALTER TABLE `safety_accountability_task_detail`
|
||
DROP COLUMN `task_status`,
|
||
DROP COLUMN `feedback_status`,
|
||
DROP COLUMN `task_rating`,
|
||
DROP COLUMN `rating_time`,
|
||
DROP COLUMN `rating_department_id`,
|
||
DROP COLUMN `rating_user_id`;
|
||
```
|
||
|
||
瘦身后的任务详情表只保留:
|
||
```
|
||
safety_accountability_task_detail(任务模板表)
|
||
├── id
|
||
├── task_detail_id → 任务UUID
|
||
├── task_list_id → 关联清单UUID
|
||
├── execute_content → 执行内容
|
||
├── feedback_cycle_type → 反馈周期类型:1-每月 2-季度 3-半年 4-年
|
||
├── task_score → 任务分值
|
||
└── (基础审计字段)
|
||
```
|
||
|
||
### 3.6 修改表:反馈表(关联任务执行表)
|
||
|
||
```sql
|
||
-- 反馈表改为关联任务执行表
|
||
ALTER TABLE `safety_accountability_feedback`
|
||
ADD COLUMN `task_execution_id` varchar(64) DEFAULT NULL COMMENT '任务执行UUID(关联任务执行表)' AFTER `task_detail_id`,
|
||
ADD COLUMN `task_issue_id` varchar(64) DEFAULT NULL COMMENT '清单下发记录UUID(冗余)' AFTER `task_list_id`,
|
||
ADD KEY `idx_task_execution_id` (`task_execution_id`),
|
||
ADD KEY `idx_task_issue_id` (`task_issue_id`);
|
||
```
|
||
|
||
> `task_detail_id` 和 `task_list_id` 可保留作为冗余字段便于查询,也可后续移除。
|
||
|
||
### 3.7 修改表:反馈异常表(关联任务执行表)
|
||
|
||
```sql
|
||
-- 反馈异常表改为关联任务执行表
|
||
ALTER TABLE `safety_accountability_feedback_exception`
|
||
ADD COLUMN `task_execution_id` varchar(64) DEFAULT NULL COMMENT '任务执行UUID(关联任务执行表)' AFTER `task_detail_id`,
|
||
ADD COLUMN `task_issue_id` varchar(64) DEFAULT NULL COMMENT '清单下发记录UUID(冗余)' AFTER `task_list_id`,
|
||
ADD KEY `idx_task_execution_id` (`task_execution_id`),
|
||
ADD KEY `idx_task_issue_id` (`task_issue_id`);
|
||
```
|
||
|
||
## 四、新数据模型总览
|
||
|
||
### 4.1 表结构变更总览
|
||
|
||
| 表名 | 变更类型 | 定位 | 说明 |
|
||
|------|----------|------|------|
|
||
| `safety_accountability_task_list` | **修改** | 模板层 | 移除执行方、下发、周期、状态、评分相关字段,仅保留清单定义 |
|
||
| `safety_accountability_task_detail` | **修改** | 模板层 | 移除状态、反馈状态、评分相关字段,仅保留任务定义 |
|
||
| `safety_accountability_task_list_issue` | **新增** | 实例层 | 清单下发记录,承载执行方/下发/周期/状态/评分 |
|
||
| `safety_accountability_task_execution` | **新增** | 实例层 | 任务执行记录,承载任务执行状态/反馈状态/评分 |
|
||
| `safety_accountability_feedback` | **修改** | 实例层 | 新增 `task_execution_id`、`task_issue_id` 字段 |
|
||
| `safety_accountability_feedback_exception` | **修改** | 实例层 | 新增 `task_execution_id`、`task_issue_id` 字段 |
|
||
|
||
### 4.2 字段迁移对照
|
||
|
||
**清单表 → 下发记录表**
|
||
|
||
| 原位置(task_list) | 新位置(task_list_issue) | 说明 |
|
||
|---------------------|--------------------------|------|
|
||
| execute_corp_id | execute_corp_id | 执行公司ID |
|
||
| execute_department_id | execute_department_id | 执行部门ID |
|
||
| execute_user_id | execute_user_id | 执行人员ID |
|
||
| issue_status | issue_status | 下发状态 |
|
||
| issue_time | issue_time | 下发时间 |
|
||
| period_start_time | period_start_time | 周期开始时间 |
|
||
| period_end_time | period_end_time | 周期结束时间 |
|
||
| status | status | 状态 |
|
||
| close_time | close_time | 关闭时间 |
|
||
| rating_score | rating_score | 评分数 |
|
||
| rating_user_id | rating_user_id | 评分人ID |
|
||
| rating_department_id | rating_department_id | 评分部门ID |
|
||
|
||
**任务详情表 → 任务执行表**
|
||
|
||
| 原位置(task_detail) | 新位置(task_execution) | 说明 |
|
||
|-----------------------|-------------------------|------|
|
||
| task_status | task_status | 任务状态 |
|
||
| feedback_status | feedback_status | 反馈状态 |
|
||
| task_rating | task_rating | 任务评分 |
|
||
| rating_time | rating_time | 评分时间 |
|
||
| rating_department_id | rating_department_id | 评分部门ID |
|
||
| rating_user_id | rating_user_id | 评分人ID |
|
||
|
||
### 4.3 完整数据模型关系图
|
||
|
||
```
|
||
┌─────────────────────────┐
|
||
│ task_list(清单模板) │
|
||
│ - task_list_id (UK) │
|
||
│ - task_list_name │
|
||
│ - task_level │
|
||
│ - responsibility_post │
|
||
│ - switch_flag │
|
||
│ - create_corp_id │
|
||
└────────┬────────────────┘
|
||
│ 1:N
|
||
│
|
||
┌────────┴────────────────┐ ┌──────────────────────────────┐
|
||
│ task_detail(任务模板) │ │ task_list_issue(下发记录) │
|
||
│ - task_detail_id (UK) │ │ - task_issue_id (UK) │
|
||
│ - task_list_id (FK) │ │ - task_list_id (FK→模板) │
|
||
│ - execute_content │ │ - execute_corp_id │
|
||
│ - feedback_cycle_type │ │ - execute_department_id │
|
||
│ - task_score │ │ - execute_user_id │
|
||
└──────────────────────────┘ │ - issue_status │
|
||
│ - issue_time │
|
||
│ 1:N │ - period_start_time │
|
||
│ │ - period_end_time │
|
||
│ │ - status │
|
||
│ │ - close_time │
|
||
│ │ - rating_score │
|
||
│ │ - rating_user_id │
|
||
│ │ - rating_department_id │
|
||
│ └──────────┬───────────────────┘
|
||
│ │ 1:N
|
||
│ │
|
||
│ ┌─────────────────────────┴───────────────────┐
|
||
│ │ task_execution(任务执行记录) │
|
||
│ │ - task_execution_id (UK) │
|
||
├───────────│ - task_issue_id (FK→下发记录) │
|
||
│ N:1 │ - task_detail_id (FK→任务模板) │
|
||
│ │ - task_list_id (冗余FK→清单模板) │
|
||
│ │ - task_status │
|
||
│ │ - feedback_status │
|
||
│ │ - task_rating │
|
||
│ │ - rating_time │
|
||
│ │ - rating_department_id │
|
||
│ │ - rating_user_id │
|
||
│ └──────────────────────┬──────────────────────┘
|
||
│ │ 1:N
|
||
│ │
|
||
│ ┌──────────────┴──────────────┐
|
||
│ │ │
|
||
│ ┌───────┴────────┐ ┌────────┴──────────┐
|
||
│ │ feedback │ │ feedback_ │
|
||
│ │ (执行反馈) │ │ exception │
|
||
│ │ - feedback_id │ │ (反馈异常) │
|
||
│ │ - task_ │ │ - feedback_ │
|
||
│ │ execution_id│ │ exception_id │
|
||
│ │ - task_list_ │ │ - task_ │
|
||
│ │ issue_id │ │ execution_id │
|
||
│ │ - task_detail_│ │ - task_list_ │
|
||
│ │ id (冗余) │ │ issue_id │
|
||
│ │ - task_list_id│ │ - task_detail_id │
|
||
│ │ (冗余) │ │ (冗余) │
|
||
│ └────────────────┘ └───────────────────┘
|
||
│
|
||
(task_detail 与 task_execution 通过 task_detail_id 关联,
|
||
同一任务模板可被多个下发记录实例化为多条执行记录)
|
||
```
|
||
|
||
## 五、代码改动点
|
||
|
||
### 5.1 领域层(web-domain)
|
||
|
||
| 文件 | 改动类型 | 说明 |
|
||
|------|----------|------|
|
||
| `domain/model/tasklist/TaskListE.java` | 修改 | 移除执行方、下发、周期、状态、评分相关字段 |
|
||
| `domain/model/tasklist/TaskDetailE.java` | 修改 | 移除状态、反馈状态、评分相关字段,仅保留模板字段 |
|
||
| `domain/model/tasklist/TaskListIssueE.java` | **新增** | 清单下发记录领域模型 |
|
||
| `domain/model/tasklist/TaskExecutionE.java` | **新增** | 任务执行记录领域模型 |
|
||
| `domain/gateway/tasklist/TaskListIssueGateway.java` | **新增** | 清单下发记录网关接口 |
|
||
| `domain/gateway/tasklist/TaskExecutionGateway.java` | **新增** | 任务执行记录网关接口 |
|
||
| `domain/gateway/tasklist/TaskListGateway.java` | 修改 | 移除 `listExpiredInProgress`、`listIssuedWithPeriod` 等方法(迁移到 TaskListIssueGateway) |
|
||
| `domain/gateway/tasklist/TaskDetailGateway.java` | 修改 | 移除 `listInProgress` 等方法(迁移到 TaskExecutionGateway) |
|
||
| `domain/model/tasklist/FeedbackE.java` | 修改 | 新增 `taskExecutionId`、`taskListIssueId` 字段 |
|
||
| `domain/model/tasklist/FeedbackExceptionE.java` | 修改 | 新增 `taskExecutionId`、`taskListIssueId` 字段 |
|
||
|
||
### 5.2 基础设施层(web-infrastructure)
|
||
|
||
| 文件 | 改动类型 | 说明 |
|
||
|------|----------|------|
|
||
| `persistence/dataobject/tasklist/TaskListDO.java` | 修改 | 移除执行方、下发、周期、状态、评分相关字段 |
|
||
| `persistence/dataobject/tasklist/TaskDetailDO.java` | 修改 | 移除状态、反馈状态、评分相关字段 |
|
||
| `persistence/dataobject/tasklist/TaskListIssueDO.java` | **新增** | 清单下发记录数据对象 |
|
||
| `persistence/dataobject/tasklist/TaskExecutionDO.java` | **新增** | 任务执行记录数据对象 |
|
||
| `persistence/dataobject/tasklist/FeedbackDO.java` | 修改 | 新增 `taskExecutionId`、`taskListIssueId` 字段 |
|
||
| `persistence/dataobject/tasklist/FeedbackExceptionDO.java` | 修改 | 新增 `taskExecutionId`、`taskListIssueId` 字段 |
|
||
| `persistence/mapper/tasklist/TaskListMapper.xml` | 修改 | 移除执行方相关联表查询和统计SQL |
|
||
| `persistence/mapper/tasklist/TaskDetailMapper.xml` | 修改 | 移除执行状态相关查询 |
|
||
| `persistence/mapper/tasklist/TaskListIssueMapper.java` | **新增** | 清单下发记录Mapper接口 |
|
||
| `persistence/mapper/tasklist/TaskListIssueMapper.xml` | **新增** | 清单下发记录Mapper XML(含联表查询和统计SQL) |
|
||
| `persistence/mapper/tasklist/TaskExecutionMapper.java` | **新增** | 任务执行记录Mapper接口 |
|
||
| `persistence/mapper/tasklist/TaskExecutionMapper.xml` | **新增** | 任务执行记录Mapper XML |
|
||
| `persistence/repository/tasklist/TaskListIssueRepository.java` | **新增** | 清单下发记录Repository |
|
||
| `persistence/repository/tasklist/TaskExecutionRepository.java` | **新增** | 任务执行记录Repository |
|
||
| `gatewayimpl/tasklist/TaskListIssueGatewayImpl.java` | **新增** | 清单下发记录网关实现 |
|
||
| `gatewayimpl/tasklist/TaskExecutionGatewayImpl.java` | **新增** | 任务执行记录网关实现 |
|
||
| `gatewayimpl/tasklist/TaskListGatewayImpl.java` | 修改 | 移除与执行方相关的方法实现 |
|
||
| `gatewayimpl/tasklist/TaskDetailGatewayImpl.java` | 修改 | 移除与执行状态相关的方法实现 |
|
||
|
||
### 5.3 客户端层(web-client)
|
||
|
||
| 文件 | 改动类型 | 说明 |
|
||
|------|----------|------|
|
||
| `dto/clientobject/tasklist/TaskListCO.java` | 修改 | 移除执行方、下发、周期、状态、评分相关字段 |
|
||
| `dto/clientobject/tasklist/TaskDetailCO.java` | 修改 | 移除状态、反馈状态、评分相关字段 |
|
||
| `dto/clientobject/tasklist/TaskListIssueCO.java` | **新增** | 清单下发记录客户端对象 |
|
||
| `dto/clientobject/tasklist/TaskExecutionCO.java` | **新增** | 任务执行记录客户端对象 |
|
||
| `dto/tasklist/TaskListIssueCmd.java` | 修改 | 改为支持多公司下发(接收公司列表) |
|
||
| `dto/tasklist/TaskListPageQry.java` | 修改 | 移除 executeCorpId、executeUserId 查询条件 |
|
||
| `dto/tasklist/TaskListIssuePageQry.java` | **新增** | 下发记录分页查询参数 |
|
||
| `dto/tasklist/TaskExecutionPageQry.java` | **新增** | 任务执行记录分页查询参数 |
|
||
| `dto/tasklist/TaskDetailUpdateScoreCmd.java` | 修改 | 改为传 `taskExecutionId` 而非 `taskDetailId` |
|
||
|
||
### 5.4 应用层(web-app)
|
||
|
||
| 文件 | 改动类型 | 说明 |
|
||
|------|----------|------|
|
||
| `command/tasklist/TaskListIssueExe.java` | **重写** | 核心改动:下发时为每个公司创建一条下发记录,并为每条记录复制所有任务模板为任务执行记录 |
|
||
| `command/tasklist/TaskListCloseExe.java` | 修改 | 关闭下发记录而非清单 |
|
||
| `command/tasklist/TaskListStatusUpdateExe.java` | 修改 | 定时任务1:查询并更新过期的下发记录和任务执行记录 |
|
||
| `command/tasklist/FeedbackExceptionCheckExe.java` | 修改 | 定时任务2:查询已下发的下发记录,检查任务执行记录的反馈 |
|
||
| `command/tasklist/TaskDetailUpdateScoreExe.java` | 修改 | 评分操作的是任务执行记录,评分汇总同步到下发记录 |
|
||
| `command/tasklist/TaskListAddExe.java` | 修改 | 新增清单时不再设置下发相关字段 |
|
||
| `command/tasklist/TaskListUpdateExe.java` | 修改 | 修改清单时不再涉及执行方字段 |
|
||
| `command/tasklist/TaskListSwitchExe.java` | 修改 | 关闭清单时需考虑是否影响所有下发记录 |
|
||
| `command/tasklist/TaskListRemoveExe.java` | 修改 | 删除清单时需级联删除下发记录和任务执行记录 |
|
||
| `command/tasklist/TaskDetailSaveExe.java` | 修改 | 保存任务模板,不再涉及执行状态 |
|
||
| `command/tasklist/TaskDetailSaveBatchExe.java` | 修改 | 批量保存任务模板 |
|
||
| `command/tasklist/TaskDetailEditExe.java` | 修改 | 编辑任务模板 |
|
||
| `command/tasklist/TaskDetailCloseExe.java` | 修改 | 关闭任务执行记录而非任务模板 |
|
||
| `command/tasklist/FeedbackAddExe.java` | 修改 | 反馈关联到任务执行记录 |
|
||
| `command/tasklist/FeedbackDeleteExe.java` | 修改 | 删除反馈关联到任务执行记录 |
|
||
| `command/tasklist/FeedbackEditExe.java` | 修改 | 编辑反馈关联到任务执行记录 |
|
||
| `command/query/tasklist/TaskListQueryExe.java` | 修改 | 清单列表查询不再关联执行方信息 |
|
||
| `command/query/tasklist/TaskDetailQueryExe.java` | 修改 | 任务查询拆分为模板查询和执行记录查询 |
|
||
| `command/query/tasklist/TaskListIssueQueryExe.java` | **新增** | 下发记录查询执行器 |
|
||
| `command/query/tasklist/TaskExecutionQueryExe.java` | **新增** | 任务执行记录查询执行器 |
|
||
| `command/query/tasklist/StatisticsQueryExe.java` | 修改 | 统计SQL改为基于下发记录表 |
|
||
| `command/query/tasklist/FeedbackQueryExe.java` | 修改 | 反馈查询关联到任务执行记录 |
|
||
|
||
### 5.5 适配层(web-adapter)
|
||
|
||
| 文件 | 改动类型 | 说明 |
|
||
|------|----------|------|
|
||
| `web/tasklist/TaskListController.java` | 修改 | 下发接口参数变更,清单CRUD仅操作模板 |
|
||
| `web/tasklist/TaskListIssueController.java` | **新增** | 清单下发记录控制器(查询/关闭下发记录等) |
|
||
| `web/tasklist/TaskDetailController.java` | 修改 | 任务模板CRUD + 评分/关闭改为操作任务执行记录 |
|
||
| `web/tasklist/TaskExecutionController.java` | **新增** | 任务执行记录控制器(查询/关闭/评分等) |
|
||
| `web/tasklist/FeedbackController.java` | 修改 | 反馈接口关联到任务执行记录 |
|
||
|
||
## 六、核心业务逻辑变更
|
||
|
||
### 6.1 下发流程(变更最大)
|
||
|
||
**原流程**:
|
||
1. 选择清单 → 选择一个公司/部门/人员 → 设置周期 → 更新清单的执行方字段和下发状态
|
||
|
||
**新流程**:
|
||
1. 选择清单 → 选择多个公司 → 设置周期
|
||
2. 为每个公司创建一条 `task_list_issue` 记录(含执行方、周期、下发状态)
|
||
3. 为每条下发记录,遍历清单下所有 `task_detail`(任务模板),创建对应的 `task_execution`(任务执行记录)
|
||
4. 清单模板本身不变
|
||
|
||
### 6.2 反馈流程
|
||
|
||
**原流程**:反馈关联到 `task_detail_id`
|
||
|
||
**新流程**:反馈关联到 `task_execution_id`(任务执行记录),同时冗余 `task_issue_id` 和 `task_detail_id`
|
||
|
||
### 6.3 评分流程
|
||
|
||
**原流程**:对任务评分 → 汇总到清单的 `rating_score`
|
||
|
||
**新流程**:
|
||
1. 对任务执行记录(`task_execution`)评分
|
||
2. 检查该下发记录下所有任务执行记录是否都已评分
|
||
3. 若全部已评分 → 汇总到下发记录(`task_list_issue`)的 `rating_score`
|
||
|
||
### 6.4 定时任务1(过期状态更新)
|
||
|
||
**原流程**:查询 `task_list` 中 `status=1` 且过期的清单 → 更新清单和任务状态
|
||
|
||
**新流程**:查询 `task_issue` 中 `status=1` 且过期的下发记录 → 更新下发记录状态和对应任务执行记录状态
|
||
|
||
### 6.5 定时任务2(反馈异常检测)
|
||
|
||
**原流程**:查询已下发的清单 → 检查任务反馈
|
||
|
||
**新流程**:查询已下发的下发记录 → 检查对应任务执行记录的反馈
|
||
|
||
### 6.6 统计查询
|
||
|
||
**原流程**:按 `task_list.execute_corp_id` 分组统计
|
||
|
||
**新流程**:按 `task_issue.execute_corp_id` 分组统计
|
||
|
||
### 6.7 清单修改对已下发记录的影响
|
||
|
||
修改清单模板(增删改任务)时,需要考虑是否影响已下发的记录:
|
||
- **方案A(推荐)**:已下发的记录不受影响,修改模板只影响后续新下发
|
||
- **方案B**:修改模板时同步更新所有进行中的下发记录(复杂度高)
|
||
|
||
## 七、接口变更
|
||
|
||
### 7.1 清单模板接口(简化)
|
||
|
||
| 接口 | 变更类型 | 说明 |
|
||
|------|----------|------|
|
||
| `POST /taskList/list` | 修改 | 返回数据移除执行方相关字段 |
|
||
| `POST /taskList/save` | 修改 | 仅保存清单模板 |
|
||
| `POST /taskList/edit` | 修改 | 仅修改清单模板 |
|
||
| `POST /taskList/delete/{id}` | 修改 | 删除时级联检查下发记录 |
|
||
| `POST /taskList/switchFlag` | 修改 | 开关仅影响模板 |
|
||
| `POST /taskList/issue` | **重写** | 参数从单个公司改为公司列表 |
|
||
|
||
### 7.2 清单下发记录接口(新增)
|
||
|
||
| 接口 | 变更类型 | 说明 |
|
||
|------|----------|------|
|
||
| `POST /taskListIssue/list` | **新增** | 查询下发记录列表 |
|
||
| `GET /taskListIssue/{issueId}` | **新增** | 获取下发记录详情 |
|
||
| `POST /taskListIssue/close` | **新增** | 关闭某条下发记录 |
|
||
|
||
### 7.3 任务模板接口(简化)
|
||
|
||
| 接口 | 变更类型 | 说明 |
|
||
|------|----------|------|
|
||
| `POST /taskDetail/save` | 修改 | 仅保存任务模板 |
|
||
| `POST /taskDetail/saveBatch` | 修改 | 仅批量保存任务模板 |
|
||
| `GET /taskDetail/{detailId}` | 修改 | 获取任务模板详情 |
|
||
|
||
### 7.4 任务执行记录接口(新增)
|
||
|
||
| 接口 | 变更类型 | 说明 |
|
||
|------|----------|------|
|
||
| `POST /taskExecution/list` | **新增** | 查询任务执行记录列表 |
|
||
| `GET /taskExecution/{executionId}` | **新增** | 获取任务执行记录详情 |
|
||
| `POST /taskExecution/close` | **新增** | 关闭任务执行记录 |
|
||
| `POST /taskExecution/updateScore` | **新增** | 对任务执行记录评分 |
|
||
|
||
### 7.5 反馈接口(修改)
|
||
|
||
| 接口 | 变更类型 | 说明 |
|
||
|------|----------|------|
|
||
| `POST /feedback/add` | 修改 | 关联到 `taskExecutionId` |
|
||
| `POST /feedback/edit` | 修改 | 关联到 `taskExecutionId` |
|
||
| `POST /feedback/list` | 修改 | 按 `taskExecutionId` 查询 |
|
||
|
||
### 7.6 统计接口(修改)
|
||
|
||
| 接口 | 变更类型 | 说明 |
|
||
|------|----------|------|
|
||
| 统计相关接口 | 修改 | 改为基于下发记录表统计 |
|
||
|
||
## 八、数据迁移方案
|
||
|
||
```sql
|
||
-- =============================================
|
||
-- 1. 创建新表
|
||
-- =============================================
|
||
|
||
-- 1.1 创建清单下发记录表(见 3.2)
|
||
-- 1.2 创建任务执行记录表(见 3.3)
|
||
|
||
-- =============================================
|
||
-- 2. 迁移清单执行数据 → 下发记录表
|
||
-- =============================================
|
||
INSERT INTO safety_accountability_task_list_issue (
|
||
task_issue_id, task_list_id,
|
||
execute_corp_id, execute_department_id, execute_user_id,
|
||
issue_status, issue_time, period_start_time, period_end_time,
|
||
status, close_time, rating_score, rating_user_id, rating_department_id,
|
||
delete_enum, remarks, create_name, update_name,
|
||
tenant_id, org_id, version, create_time, update_time, create_id, update_id, env
|
||
)
|
||
SELECT
|
||
task_list_id AS task_issue_id, -- 用原task_list_id作为下发记录ID,保持兼容
|
||
task_list_id,
|
||
execute_corp_id, execute_department_id, execute_user_id,
|
||
issue_status, issue_time, period_start_time, period_end_time,
|
||
status, close_time, rating_score, rating_user_id, rating_department_id,
|
||
delete_enum, remarks, create_name, update_name,
|
||
tenant_id, org_id, version, create_time, update_time, create_id, update_id, env
|
||
FROM safety_accountability_task_list
|
||
WHERE issue_status = 1 AND delete_enum = 'FALSE';
|
||
|
||
-- =============================================
|
||
-- 3. 迁移任务执行数据 → 任务执行记录表
|
||
-- =============================================
|
||
INSERT INTO safety_accountability_task_execution (
|
||
task_execution_id, task_issue_id, task_detail_id, task_list_id,
|
||
task_status, feedback_status, task_rating, rating_time,
|
||
rating_department_id, rating_user_id,
|
||
delete_enum, remarks, create_name, update_name,
|
||
tenant_id, org_id, version, create_time, update_time, create_id, update_id, env
|
||
)
|
||
SELECT
|
||
td.task_detail_id AS task_execution_id, -- 用原task_detail_id作为执行记录ID
|
||
td.task_list_id AS task_issue_id, -- 关联到下发记录
|
||
td.task_detail_id, -- 关联到任务模板
|
||
td.task_list_id,
|
||
td.task_status, td.feedback_status, td.task_rating, td.rating_time,
|
||
td.rating_department_id, td.rating_user_id,
|
||
td.delete_enum, td.remarks, td.create_name, td.update_name,
|
||
td.tenant_id, td.org_id, td.version, td.create_time, td.update_time, td.create_id, td.update_id, td.env
|
||
FROM safety_accountability_task_detail td
|
||
INNER JOIN safety_accountability_task_list tl ON td.task_list_id = tl.task_list_id
|
||
WHERE tl.issue_status = 1 AND td.delete_enum = 'FALSE';
|
||
|
||
-- =============================================
|
||
-- 4. 补充反馈表关联字段
|
||
-- =============================================
|
||
UPDATE safety_accountability_feedback fb
|
||
INNER JOIN safety_accountability_task_execution te ON fb.task_detail_id = te.task_detail_id
|
||
SET fb.task_execution_id = te.task_execution_id,
|
||
fb.task_issue_id = te.task_issue_id
|
||
WHERE fb.delete_enum = 'FALSE';
|
||
|
||
-- =============================================
|
||
-- 5. 补充反馈异常表关联字段
|
||
-- =============================================
|
||
UPDATE safety_accountability_feedback_exception fe
|
||
INNER JOIN safety_accountability_task_execution te ON fe.task_detail_id = te.task_detail_id
|
||
SET fe.task_execution_id = te.task_execution_id,
|
||
fe.task_issue_id = te.task_issue_id
|
||
WHERE fe.delete_enum = 'FALSE';
|
||
|
||
-- =============================================
|
||
-- 6. 迁移完成后,清理原表中的执行相关字段
|
||
-- =============================================
|
||
-- 见 3.4 和 3.5 的 ALTER TABLE 语句
|
||
```
|
||
|
||
## 九、改动优先级与建议
|
||
|
||
### 高优先级(核心改动)
|
||
1. 创建 `task_list_issue` 表和 `task_execution` 表及对应的领域模型、网关、Repository
|
||
2. 重写 `TaskListIssueExe`(下发逻辑:创建下发记录 + 复制任务模板为执行记录)
|
||
3. 新增 `TaskExecutionUpdateScoreExe`(评分操作任务执行记录,汇总同步到下发记录)
|
||
4. 修改 `TaskListStatusUpdateExe`(定时任务1:操作下发记录和任务执行记录)
|
||
5. 修改 `FeedbackExceptionCheckExe`(定时任务2:操作下发记录和任务执行记录)
|
||
|
||
### 中优先级(查询和统计)
|
||
6. 修改所有 Mapper XML 中的联表查询和统计 SQL
|
||
7. 修改查询执行器(TaskListQueryExe、TaskDetailQueryExe、StatisticsQueryExe)
|
||
8. 新增下发记录和任务执行记录的查询接口
|
||
9. 修改反馈相关查询(关联到任务执行记录)
|
||
|
||
### 低优先级(DTO和前端适配)
|
||
10. 修改所有 DTO/CO 对象
|
||
11. 修改 Controller 接口
|
||
12. 前端页面适配
|