# Production 领域重构指南 ## 1. 范围 本文档对应 backend 的 `production` 投产节点表。 当前优先关注: - `production.code` - `production.approval_status` - `production.is_exist` ## 2. 字段盘点 ### 2.1 `code` 当前实现: - 模型里是 `String` - 没有本地 enum 类 - 项目初始化时,节点集合来自 `production_{project_type}` 字典数据 - 同步 schema `project_extensions/production.py` 里也是 `str` 项目侧取值范围: - 当前无法从单一 enum 文件列出完整范围 - 已知典型值包括:`SYZDSD`、`SPBW`、`QBBW`、`KHWC240`、`YJSC`、`DBTC`、`CQZS`、`WGJS`、`JGJS` 集团侧差异: - 集团侧 `enum_config.Production.code` 已把该字段按项目类型列成正式候选项 - 本地仍主要靠初始化字典和自由字符串 结论: - 更适合迁到 `field_config` ### 2.2 `approval_status` 当前实现: - backend 依赖 `ApprovalMixin` - 本地 `ProductionApproval` schema 仍使用 int - 同步 schema `ProductionDetail` 里是 `Optional[str]` 项目侧取值范围: - 当前本地未在 production 模块中沉成独立 enum 集团侧差异: - 同步 schema 有字段,但没有正式 enum 结论: - 应统一接入通用审批状态体系 ### 2.3 `is_exist` 当前实现: - 模型里是 `Boolean` - backend 和 sync schema 都有 项目侧取值范围: - `true` - `false` 集团侧差异: - 当前没看到 enum_config 对该字段给候选项 结论: - 保持布尔字段即可 ## 3. 重点结论 - `production.code` 和 `preparation.code` 一样,属于典型的初始化节点编码字段,应迁到 `field_config`。 - `approval_status` 仍应走通用审批体系,而不是 production 自己维护一套值域。 - `is_exist` 不属于本轮需要抽成字段候选表的重点字段。 ## 4. 待修改项清单 1. 将 `production.code` 正式迁到 `field_config`。 2. 将项目初始化里对 `production_{project_type}` 的依赖逐步收敛到统一字段配置入口。 3. 将 `approval_status` 接入通用审批状态定义。 ## 5. 按本轮要求的改造落点 production 和 preparation 一样,属于本轮适合优先收口的平铺型节点编码领域。 ### 5.1 初始化 当前 production 初始化直接来自 `production_{project_type}` dict。 同时本地还存在: - `ProductionCode` enum - `dict_to_production_code_name` - `list_to_production_code_name` - 列表排序里的 `sort_code` 本轮目标是: - 把 `production.code` 迁到 field config - 初始化改成通过 config 工具读取候选项后批量创建 - 不再依赖 dict 作为初始化真源 ### 5.2 Create 校验 当前 production 领域也没有统一的 code 候选项校验入口。 本轮目标是: - 在 create / update 的 service 入口开头,基于 config 校验 `production.code` - 不再继续用本地硬编码列表承担合法值白名单职责 ### 5.3 下拉列表 production 当前也没有单独的 code 候选项下拉接口,更多是返回项目实例列表 `/production/list`。 本轮要求是: - 如果需要单独 code 候选项下拉,应直接从 `production.code` field config 返回 - 不再把 `list_to_production_code_name` 当成前端下拉真源 ### 5.4 清理项 production 领域本轮改造完成后,应优先清理: - `production_{project_type}` dict 的初始化真源职责 - `ProductionCode` 相关重复映射和展示列表 - 列表排序中写死的 `sort_code` 排序如果仍需要固定顺序,也应迁到配置附属字段中表达。 ## 6. 测试关注点 production 领域 service 层集成测试至少覆盖: 1. 初始化:项目初始化时生成的投产节点是否来自目标 field config。 2. Create / Update:合法 `code` 可以写入,非法 `code` 明确报错。 3. 列表:项目实例列表顺序是否来自配置顺序,而不是硬编码 `sort_code`。