优化sync_system代码质量

This commit is contained in:
strepsiades
2026-04-01 11:52:57 +08:00
parent eb02fd32a5
commit 8f4727a772
46 changed files with 1431 additions and 890 deletions
+20 -19
View File
@@ -70,10 +70,9 @@ strategies:
local_orphan_action: create_remote
remote_orphan_action: none
update_direction: push
field_direction_key: null
field_direction_overrides: {}
post_check_ignore_fields: []
compare_ignore_fields: []
domain_option: {}
persist:
backend: sqlite
db_path: /abs/path/test_results/sync_state_machine/demo.db
@@ -180,7 +179,6 @@ persist:
- `push`:本地变更推送到远端。
- `pull`:远端变更拉取到本地。
- `bidirectional`:双向更新(需要明确冲突策略,谨慎使用)。
- `none`:关闭 update 阶段。
### 4.2 `local_orphan_action` / `remote_orphan_action`
@@ -228,31 +226,34 @@ persist:
- `remote_datasource.handler_configs.supplier.load_mode: persisted_only`
- `persisted_only` 表示只使用已持久化数据,不主动从外部拉新数据(具体以对应 handler 实现为准)。
### 4.7 `field_direction_key` / `field_direction_overrides`
### 4.7 `domain_option`
- 这两个字段只在少数 node_type 上需要,典型例子是 `project_detail_data`
- `field_direction_key`
- 指定从节点 data 里取哪个字段作为“方向查表键”。
- 例如 `key`,表示用 `data["key"]` 决定这条记录是 push 还是 pull。
- `field_direction_overrides`
- 指定“字段值 -> 更新方向”的映射。
- 没命中的值继续使用默认 `update_direction`
- `domain_option` 用于承载 domain 自己识别的运行时扩展参数
- 通用策略行为仍然放在 `config` 下;只有领域特例才放到 `domain_option`
示例
示例 1`project` 先从远端拉回两个特殊投产日期字段,再执行默认 push
```yaml
project:
domain_option:
pull_group_plan_production_date: true
config:
update_direction: push
```
示例 2`project_detail_data` 用单个开关启用固定业务规则,把集团保供/爬坡/挑战产能计划按 pull 处理
```yaml
project_detail_data:
domain_option:
pull_group_production_plans: true
config:
field_direction_key: key
field_direction_overrides:
ensure_production: pull
climb_production: pull
challenge_production: pull
update_direction: push
```
含义:
- `key=ensure_production/climb_production/challenge_production` 时,从远端拉回本地
- 其余 key 继续按默认 `update_direction=push` 处理
- `project.domain_option.pull_group_plan_production_date=true` 时,`ic_plan_first_production_date``ic_plan_full_production_date` 会先 remote -> local,再执行剩余字段的常规更新
- `project_detail_data.domain_option.pull_group_production_plans=true` 时,固定的 `ensure_production``climb_production``challenge_production` 会先 remote -> local;其余 key 继续沿用 `config.update_direction`
## 5. 阶段行为与配置关系