zcloud_gbs_safetyDutyList/docs/多公司下发改动分析.md

675 lines
37 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 安全责任清单 - 多公司下发改动分析
## 一、需求变更说明
| 项目 | 原需求 | 新需求 |
|------|--------|--------|
| 下发对象 | 一张清单只能下发给一个公司/部门/人员 | 一张清单(含所有任务)作为整体,可下发给多个公司 |
| 数据关系 | 清单与执行方是一对一关系 | 清单与执行方是一对多关系 |
| 表职责 | 清单表和任务表混合了模板定义与执行数据 | 清单表/任务表纯粹作为模板定义,执行数据独立到下发表和任务执行表 |
## 二、当前数据模型分析
### 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. 前端页面适配