Files
ecm_sync_system/docs/enum_refactor/field_config_draft.md
T
2026-03-18 11:34:02 +08:00

6.8 KiB
Raw Blame History

项目侧字段分流总表草案

1. 目的

这份总表只回答一件事:

  • 哪些字段继续保留为代码 enum / 代码常量。
  • 哪些字段应迁到 field_config
  • 哪些字段暂时不能直接收口,必须先补领域边界或映射关系。

2. 分流原则

优先按三类处理:

  • 保留代码 enum:值域固定、语义稳定、业务分支已直接依赖。
  • 迁到 field_config:值域跟 project_type、初始化模板或业务配置强相关。
  • 暂缓收口:当前 backend 与 sync schema 映射不完整,或领域边界本身还没定。

3. 总表

领域 字段 当前主要来源 建议归类 备注
project project_type 代码 enum + 初始化字典 保留代码 enum 核心路由字段
project project_subtype 自由字符串 迁到 field_config 建议 keyproject.project_subtype
project syxs 自由字符串 迁到 field_config 建议 keyproject.syxs
project status 代码 enum + 服务推导 保留代码 enum 正式集合含 early,并清理历史 NULL
project progress_type 代码 enum + DB enum 保留代码 enum 已与 sync schema 对齐
project key_constraints 代码 enum 分叉 + DB enum 保留代码 enum 项目侧保留 OTHER,备注集团侧使用 QT
contract contract_type 代码 enum 保留代码 enum 先确认是否保留 project
contract code 初始化字典 / config / 自由字符串 迁到 field_config 建议 keycontract.code
contract currency 自由字符串 暂不处理 当前仅见 CNY
construction_task section_type_code 硬编码 dict + config 迁到 field_config 建议 keyconstruction.section_type_code
construction_task task_type 类型树 + 字符串字段 暂缓收口 先拆 category 与真实任务类型
construction_task status 数值字段 + dict 保留代码常量 先统一常量定义源
material material_type 本地列表 + 自由字符串 迁到 field_config 建议 keymaterial.material_type
material status 数值字段 暂缓收口 先和 supply_status 划边界
material supply_status 代码 enum 保留代码常量 先确认是否为正式推送字段
material approval_party 本地候选项 暂不处理 当前无集团侧对应
contract_settlement contract_type 跟随合同主表 暂缓收口 先确认是否允许 project
contract_settlement status 数值字段 保留代码常量 需补统一定义源
contract_settlement payment_method 代码 enum 保留代码 enum 不建议迁 field_config
personnel personnel_type 本地代码常量 保留代码 enum 本地真实领域是人员资质
personnel task_type 本地候选项常量 保留代码常量 先补 schema 白名单
personnel is_duty 数值常量 保留代码常量 与集团侧 status 不是同一字段
preparation code 初始化字典 + 自由字符串 迁到 field_config 建议 keypreparation.code
preparation approval_status 通用审批体系 接入通用审批定义 不单独建 field_config
preparation is_exist 布尔字段 暂不处理 不属于候选项字段
production code 初始化字典 + 自由字符串 迁到 field_config 建议 keyproduction.code
production approval_status 通用审批体系 接入通用审批定义 不单独建 field_config
production is_exist 布尔字段 暂不处理 不属于候选项字段

4. 第一批建议落地项

优先进入 field_config 的字段:

  • project.project_subtype
  • project.syxs
  • contract.code
  • construction.section_type_code
  • material.material_type
  • preparation.code
  • production.code

优先保留并收紧 schema 的代码 enum 字段:

  • project.project_type
  • project.status
  • project.progress_type
  • project.key_constraints
  • contract.contract_type
  • contract_settlement.payment_method

优先先做边界确认、暂不直接配置化的字段:

  • construction.task_type
  • material.status
  • contract_settlement.contract_type

5. 使用方式

这份表可以直接作为后续代码改造顺序的输入:

  1. 先处理“迁到 field_config”的一组字段。
  2. 再处理“保留代码 enum,但 schema 还没收口”的一组字段。
  3. 最后处理“暂缓收口”的结构性问题字段。

6. 按本轮目标拆出的第一批字段

这次不是单纯做字段分类,而是要直接服务于 3 条链路:

  • 项目初始化
  • create 业务校验
  • 前端下拉列表

因此第一批字段不能只看“适不适合进 field_config”,还要看它能不能尽快把这 3 条链路收口到同一真源。

6.1 第一批优先收口字段

建议第一批优先处理:

  • contract.code
  • material.material_type
  • construction.section_type_code
  • preparation.code
  • production.code
  • power.code

原因:

  • 都属于 code 类字段
  • 都直接影响初始化、创建或下拉其中至少两条链路
  • 当前都存在 config / dict / 代码常量混用问题,或者已具备明显收口价值

6.2 每个字段要同时回答的 3 个问题

对上面每个字段,后续文档和代码改造都应同时回答:

  1. 初始化时从哪里拿候选项。
  2. create service 开头用哪个 config key 做校验。
  3. 前端下拉接口用哪个 config key 返回选项。

如果这 3 个问题的答案不是同一个 key,就说明还没有真正收口。

6.3 本轮不优先收口但要避免误迁的字段

下面这些字段虽然也和 enum 有关,但本轮不应抢先塞进字段级配置:

  • project.status
  • project.progress_type
  • project.key_constraints
  • contract.contract_type
  • contract_settlement.payment_method

原因是:

  • 这些字段语义更固定
  • 业务分支已经直接依赖
  • 本轮重点是先把“按项目类型变化的 code 类字段”收口,而不是把固定状态类枚举全部配置化

6.4 对物资字段的特别说明

material.material_type 虽然在表里只是一行,但它实际上牵扯 4 套来源:

  • 初始化合同候选项:contract_config
  • 物资初始化补充:material_contract_*
  • 前端下拉:material_types
  • create 内部默认展示/单位:contract_product_type_list

所以 material.material_type 不是简单迁一个 key,而是本轮最需要先统一真源的一项。

6.5 本轮完成后的字段判定标准

一个字段只有同时满足下面 3 条,才算本轮真正完成收口:

  • 初始化使用它对应的 field config
  • create 校验使用它对应的 field config
  • 下拉列表返回也使用它对应的 field config