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

37 KiB
Raw Blame History

安全责任清单 - 多公司下发改动分析

一、需求变更说明

项目 原需求 新需求
下发对象 一张清单只能下发给一个公司/部门/人员 一张清单(含所有任务)作为整体,可下发给多个公司
数据关系 清单与执行方是一对一关系 清单与执行方是一对多关系
表职责 清单表和任务表混合了模板定义与执行数据 清单表/任务表纯粹作为模板定义,执行数据独立到下发表和任务执行表

二、当前数据模型分析

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_idissue_statusstatusperiod_*rating_* 等执行相关字段与模板定义字段混在一起
  2. 任务详情表混合了模板定义和执行数据task_statusfeedback_statustask_ratingrating_* 等执行相关字段与模板定义字段混在一起
  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 新增表:清单下发记录表

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 新增表:任务执行表

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 修改表:清单表(瘦身为纯模板)

-- 从 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 修改表:任务详情表(瘦身为纯模板)

-- 从 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 修改表:反馈表(关联任务执行表)

-- 反馈表改为关联任务执行表
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_idtask_list_id 可保留作为冗余字段便于查询,也可后续移除。

3.7 修改表:反馈异常表(关联任务执行表)

-- 反馈异常表改为关联任务执行表
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_idtask_issue_id 字段
safety_accountability_feedback_exception 修改 实例层 新增 task_execution_idtask_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 修改 移除 listExpiredInProgresslistIssuedWithPeriod 等方法(迁移到 TaskListIssueGateway
domain/gateway/tasklist/TaskDetailGateway.java 修改 移除 listInProgress 等方法(迁移到 TaskExecutionGateway
domain/model/tasklist/FeedbackE.java 修改 新增 taskExecutionIdtaskListIssueId 字段
domain/model/tasklist/FeedbackExceptionE.java 修改 新增 taskExecutionIdtaskListIssueId 字段

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 修改 新增 taskExecutionIdtaskListIssueId 字段
persistence/dataobject/tasklist/FeedbackExceptionDO.java 修改 新增 taskExecutionIdtaskListIssueId 字段
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_idtask_detail_id

6.3 评分流程

原流程:对任务评分 → 汇总到清单的 rating_score

新流程

  1. 对任务执行记录(task_execution)评分
  2. 检查该下发记录下所有任务执行记录是否都已评分
  3. 若全部已评分 → 汇总到下发记录(task_list_issue)的 rating_score

6.4 定时任务1过期状态更新

原流程:查询 task_liststatus=1 且过期的清单 → 更新清单和任务状态

新流程:查询 task_issuestatus=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 统计接口(修改)

接口 变更类型 说明
统计相关接口 修改 改为基于下发记录表统计

八、数据迁移方案

-- =============================================
-- 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操作下发记录和任务执行记录

中优先级(查询和统计)

  1. 修改所有 Mapper XML 中的联表查询和统计 SQL
  2. 修改查询执行器TaskListQueryExe、TaskDetailQueryExe、StatisticsQueryExe
  3. 新增下发记录和任务执行记录的查询接口
  4. 修改反馈相关查询(关联到任务执行记录)

低优先级DTO和前端适配

  1. 修改所有 DTO/CO 对象
  2. 修改 Controller 接口
  3. 前端页面适配