# 租户域模板管理模块优化方案清单

## 1. 适用范围

- 本清单仅针对**租户域模板管理模块**。
- 不包含平台域统一模板治理、跨租户模板审计、平台级模板库等能力。
- 目标是把租户域模板管理从“能上传、能发布”升级为“可治理、可检索、可追踪、可联动”。

## 2. 优化目标

- 提升模板管理页面的信息架构与使用效率。
- 提升模板生命周期治理能力，包括草稿、发布、停用、归档、回滚。
- 提升模板与会议、审核、结算等业务场景的联动准确性。
- 提升模板下载留痕、权限控制、时效控制和风险控制能力。
- 提升后端接口一致性、可扩展性和并发安全。
- 提升数据库模型的多租户适配性与查询性能。

## 3. 现状问题归纳

### 3.1 前端页面布局

- 一个页面同时承载模板类型开关、模板列表、流程绑定、版本回滚、版本差异、上传建版，信息密度过高。
- 缺少统一筛选区，用户只能翻表找模板。
- 创建模板时需要手填 `projectId`、`meetingId`、`objectKey`，使用门槛高。
- 模板列表缺少关键治理字段展示，例如生效时间、水印开关、下载限制、最近更新时间、维护人。

### 3.2 显示内容

- 当前列表更偏“技术字段展示”，不够业务化。
- 版本信息展示不完整，无法快速判断“当前发布版”和“历史草稿版”差异。
- 下载日志页展示维度少，问题排查效率低。

### 3.3 用户操作

- 缺少按业务对象选择模板适用范围的交互。
- 流程绑定操作没有足够的场景提示和影响提示。
- 水印下载、普通下载、发布、回滚等高风险操作缺少确认与说明。
- 缺少预览、复制模板、批量筛选、快速查看版本历史等高频能力。

### 3.4 后端逻辑

- 模板流程绑定与业务消费链路没有完全闭环。
- 模板创建和新增版本存在并发安全风险。
- 有效期、水印、下载限流等字段虽然存在，但未完整落地到业务逻辑。
- 下载日志缺少标准分页、标准筛选和关联名称字段返回。

### 3.5 数据库设计

- 模板类型配置表的主键设计与多租户语义不完全一致。
- 日志和版本表索引偏弱，后续数据量上来后容易退化。
- 模板主表、版本表、流程绑定表的约束还不够完整。

## 4. 租户域模板管理优化方案

## 4.1 前端页面布局优化

### 4.1.1 页面结构重构

- 将当前单页改为“三级结构”：
  - 一级：模板管理首页
  - 二级：模板详情页
  - 二级：模板下载日志页
- 模板管理首页仅保留：
  - 查询筛选区
  - 模板列表区
  - 快捷操作区
- 版本历史、版本差异、流程绑定改为详情抽屉或详情页的子区块，不与主列表混排。

### 4.1.2 首页布局建议

- 顶部操作栏：
  - 新建模板
  - 刷新
  - 导出模板清单
- 查询筛选区：
  - 模板名称
  - 模板类型
  - 模板状态
  - 适用范围
  - 业务场景
  - 是否启用水印
  - 生效状态
  - 最近更新时间范围
- 列表区：
  - 默认按“最近更新时间倒序”
  - 支持分页
  - 支持空态提示

### 4.1.3 详情页布局建议

- 基本信息卡片：
  - 模板名称、类型、状态、业务场景、适用范围、生效时间、水印、下载限制
- 当前版本卡片：
  - 当前版本号、对象文件、变更说明、创建时间、创建人
- 版本历史区：
  - 版本号、状态、是否生效、变更说明、回滚原因、创建时间
- 流程联动区：
  - 当前已绑定场景
  - 是否允许绑定
  - 绑定影响说明
- 下载记录区：
  - 最近下载记录摘要

## 4.2 显示内容优化

### 4.2.1 模板列表字段建议

- 模板名称
- 模板类型
- 业务场景
- 适用范围
- 关联项目/会议名称
- 当前版本号
- 当前状态
- 生效开始时间
- 生效结束时间
- 水印开关
- 下载限流
- 最近更新时间
- 更新人

### 4.2.2 版本列表字段建议

- 版本号
- 版本状态
- 是否当前生效
- 文件名
- 对象存储路径
- 变更说明
- 回滚原因
- 创建人
- 创建时间

### 4.2.3 下载日志字段建议

- 模板名称
- 模板版本号
- 下载人姓名
- 下载人账号/手机号
- 下载时间
- IP
- User-Agent
- 下载方式
  - 普通下载
  - 水印下载
- 水印文案
- 关联项目/会议

## 4.3 用户操作优化

### 4.3.1 新建模板

- 取消手填 `objectKey` 为主的方式，改为：
  - 选择模板类型
  - 选择业务场景
  - 选择适用范围
  - 若为项目级，选择项目
  - 若为会议级，选择会议
  - 上传文件
  - 填写变更说明
  - 配置生效时间、水印、下载限流
- 上传成功后由系统自动回填对象存储路径。

### 4.3.2 模板列表操作

- 为每条模板提供分层操作：
  - 查看详情
  - 新增版本
  - 发布
  - 停用
  - 归档
  - 下载
  - 水印下载
  - 查看版本差异
  - 查看下载记录
  - 复制模板
- 对危险操作增加二次确认：
  - 发布
  - 回滚
  - 停用
  - 归档

### 4.3.3 版本管理

- 新增版本时默认继承模板基础配置，不重复填写范围与场景。
- 增加“与当前发布版对比”快捷入口。
- 回滚时必须填写回滚原因。
- 已归档模板不可新增版本。

### 4.3.4 流程联动

- 流程绑定独立为一个区块或独立弹窗。
- 绑定时只允许选择：
  - 已发布
  - 未停用
  - 场景一致
  - 当前生效
  的模板。
- 显示绑定影响提示，例如：
  - 绑定后将用于会议推荐
  - 绑定后将用于审核通知
  - 绑定后将用于结算材料

### 4.3.5 下载日志

- 支持按以下条件筛选：
  - 模板名称
  - 模板 ID
  - 下载人
  - 版本号
  - 下载时间范围
  - IP
  - 下载方式
- 支持跳转查看“该模板全部下载记录”。

## 4.4 后端逻辑优化

### 4.4.1 查询接口

- 模板列表接口增加标准分页与筛选参数：
  - `templateName`
  - `templateType`
  - `status`
  - `scopeType`
  - `bizScene`
  - `watermarkEnabled`
  - `effectiveStatus`
  - `pageNo`
  - `pageSize`
- 下载日志接口增加标准分页与筛选参数，并返回关联名称字段，不再依赖前端二次查用户和模板列表补名。

### 4.4.2 模板生命周期校验

- 发布校验：
  - 当前版本文件存在
  - 模板类型已启用
  - 若配置有效期，开始时间不能晚于结束时间
- 停用校验：
  - 若被流程联动使用，需提示影响
- 归档校验：
  - 已归档模板不可再发布、不可新增版本
- 回滚校验：
  - 只能回滚到本模板已有版本
  - 回滚原因必填

### 4.4.3 流程联动闭环

- 流程绑定时增加强校验：
  - `sceneCode` 必须与模板 `bizScene` 一致
  - 模板必须为 `PUBLISHED`
  - 模板必须在生效期内
- 业务消费链路按联动关系读模板，不允许页面配置和实际业务读取脱节。
- 会议推荐、审核通知、结算模板获取逻辑统一经过模板服务，不各自散落实现。

### 4.4.4 下载能力治理

- 普通下载与水印下载分开记录下载类型。
- 若模板启用下载限流，则下载前校验单位时间内下载次数。
- 若模板配置有效期，则过期后禁止下载。
- 若模板启用水印下载，则需要真正生成带水印文件或带水印预签名资源，而不是只回传文案。

### 4.4.5 并发与事务安全

- 创建模板后获取主键不要再用 `MAX(id)`，改为标准主键回填。
- 新增版本号不要再用 `MAX(version_no)+1` 裸算，改为：
  - 悲观锁
  - 或唯一约束重试
  - 或独立版本号分配策略
- 发布、回滚、建版操作保持事务一致性，避免主表状态和版本表状态不一致。

### 4.4.6 可测试性

- 增加自动化测试覆盖：
  - 创建模板
  - 并发新增版本
  - 发布/停用/归档/回滚
  - 流程绑定场景校验
  - 有效期校验
  - 下载限流
  - 日志分页与筛选

## 4.5 数据库设计优化

### 4.5.1 `template`

- 建议补充或强化约束：
  - `tenant_id + template_name + scope_type + scope_id + biz_scene` 可考虑唯一性策略
  - 状态字段增加明确枚举约束
- 建议补充索引：
  - `(tenant_id, status, updated_at)`
  - `(tenant_id, template_type, status)`
  - `(tenant_id, biz_scene, status)`
  - `(tenant_id, scope_type, scope_id)`

### 4.5.2 `template_version`

- 建议保留唯一约束：
  - `(tenant_id, template_id, version_no)`
- 建议新增索引：
  - `(tenant_id, template_id, is_effective)`
  - `(tenant_id, template_id, created_at)`
- 建议增加字段：
  - `file_name`
  - `file_size`
  - `content_type`
  - `checksum`

### 4.5.3 `template_download_log`

- 建议新增字段：
  - `download_type`
  - `watermark_text`
  - `project_id`
  - `meeting_id`
- 建议新增索引：
  - `(tenant_id, template_id, downloaded_at)`
  - `(tenant_id, user_id, downloaded_at)`
  - `(tenant_id, downloaded_at)`

### 4.5.4 `template_type_option`

- 现有主键建议调整为适合多租户的联合唯一约束：
  - 主键独立 `id`
  - 唯一键 `(tenant_id, type_code)`
- 避免 `type_code` 全局唯一导致多租户扩展受限。

### 4.5.5 `template_flow_link`

- 建议保留：
  - `(tenant_id, scene_code)` 唯一
- 建议增加：
  - 绑定来源
  - 绑定说明
  - 最近绑定人
  - 最近绑定时间

## 4.6 权限与风控优化

- 继续保留租户域权限拆分：
  - 查询
  - 创建
  - 发布
  - 停用
  - 归档
  - 回滚
  - 下载
  - 流程绑定
- 补充细粒度操作审计：
  - 模板创建
  - 版本新增
  - 发布
  - 回滚
  - 流程绑定
  - 普通下载
  - 水印下载
- 对高风险操作输出审计原因字段：
  - 回滚原因
  - 归档原因
  - 水印下载说明

## 4.7 交互与体验优化

- 统一中文文案，避免技术字段直接暴露给业务用户。
- 统一状态文案与颜色：
  - 草稿
  - 已发布
  - 已停用
  - 已归档
- 对空数据场景增加引导：
  - 暂无模板，请先创建
  - 暂无下载记录
- 对失败场景返回可理解提示：
  - 模板已归档，不能新增版本
  - 模板未在生效期内，不能绑定流程
  - 当前小时下载次数已达上限

## 5. 分期实施建议

## 5.1 P0：必须先做

- 模板列表筛选与标准分页
- 下载日志标准分页与筛选
- 创建模板交互优化，取消手填 `objectKey`
- 流程绑定强校验
- 模板创建/新增版本并发安全修复
- 发布/停用/归档/回滚状态机校验补齐

## 5.2 P1：强烈建议做

- 模板详情页与版本历史重构
- 有效期控制落地
- 水印下载真实落地
- 下载限流落地
- 下载日志返回关联名称，去掉前端补查
- 复制模板能力

## 5.3 P2：体验增强

- 模板预览
- 模板变更摘要对比优化
- 关联业务影响提示
- 模板清单导出
- 模板治理仪表盘

## 6. 验收标准建议

- 用户可以在 3 步内完成模板创建，不需要手填对象存储路径。
- 用户可以在列表中快速筛出“某场景、某状态、某范围”的模板。
- 流程绑定后，业务读取到的模板与绑定配置一致。
- 并发建版不会出现版本号冲突或串模板。
- 下载日志可分页、可筛选、可定位到具体用户与版本。
- 有效期、水印、下载限流配置能被真实执行，而不是只存库不生效。

## 7. 推荐实施顺序

1. 先改后端查询、状态机、并发安全、日志接口。
2. 再改前端页面结构与创建流程。
3. 再补流程联动闭环、水印、限流、有效期。
4. 最后补预览、复制、导出、治理报表等增强能力。

