3.5 KiB
3.5 KiB
Preparation 领域重构指南
1. 范围
本文档对应 backend 的 preparation 里程碑节点表。
当前优先关注:
preparation.codepreparation.approval_statuspreparation.is_exist
2. 字段盘点
2.1 code
当前实现:
- 模型里是
String - 没有本地 enum 类
- 项目初始化时,节点集合来自
preparation_{project_type}字典数据 - 同步 schema
project_extensions/preparation.py里也是str
项目侧取值范围:
- 当前无法从单一代码 enum 列出完整范围
- 已知典型值包括:
JSZB、HZBA、KYNS、TZJC、YDYS、LCPF、YDPF、JRPF、HPPF、SGXK、SBPF
集团侧差异:
- 集团侧
enum_config.Preparation.code已明确把该字段作为按项目类型变化的正式候选项 - 本地当前仍主要靠初始化字典/字符串承载
结论:
- 更适合迁到
field_config - 不应继续只靠初始化字典和自由字符串
2.2 approval_status
当前实现:
- backend 依赖
ApprovalMixin - 本地
PreparationApprovalschema 仍使用 int - 同步 schema
PreparationDetail里是Optional[str]
项目侧取值范围:
- 当前本地未在 preparation 模块中沉成独立 enum
集团侧差异:
- 同步 schema 有字段,但没有正式 enum
结论:
- 应统一接入通用审批状态体系
2.3 is_exist
当前实现:
- 模型里是
Boolean - backend 和 sync schema 均有该字段
项目侧取值范围:
truefalse
集团侧差异:
- 当前没看到 enum_config 对这个字段给出候选项
结论:
- 保持布尔字段即可
3. 重点结论
preparation.code是标准的初始化候选项字段,最适合迁到field_config。approval_status不需要在本领域单独发明枚举,应直接接入通用审批体系。is_exist是布尔存在性字段,不在本轮字段级配置重点内。
4. 待修改项清单
- 将
preparation.code正式迁到field_config。 - 区分“节点编码范围”与“审批状态/存在性”这两类字段,不要混在一个配置源里。
- 将
approval_status接入通用审批状态定义。
5. 按本轮要求的改造落点
preparation 属于本轮最适合先收口的一类:
- 初始化平铺
- code 字段明确
- 旧代码里已经出现多份硬编码映射
5.1 初始化
当前 preparation 初始化直接来自 preparation_{project_type} dict。
本轮目标是:
- 把
preparation.code迁到 field config - 初始化改成通过 config 工具读取候选项再批量创建
- 不再依赖 dict 作为初始化真源
5.2 Create 校验
当前 PreparationCreate / PreparationService 没有统一的 code 白名单校验入口。
本轮目标是:
- 在 create / update 对应的 service 入口开头,基于 config 校验
preparation.code - 不再新增本地 code 白名单或名称反查表来兜底
5.3 下拉列表
preparation 当前没有单独的“节点编码下拉接口”,前端更多拿的是项目实例列表 /preparation/list。
这轮文档上的要求是:
- 如果后续需要独立 code 候选项下拉,应直接从
preparation.codefield config 返回
6. 测试关注点
preparation 领域 service 层集成测试至少覆盖:
- 初始化:项目初始化时生成的节点是否来自目标 field config。
- Create / Update:合法
code可以写入,非法code明确报错。 - 列表:项目实例列表顺序是否来自配置顺序,而不是硬编码
sort_code。