Files
ecm_sync_system/sync_state_machine/domain/construction/sync_strategy.py
T
2026-03-24 08:40:40 +08:00

31 lines
1.1 KiB
Python

from ...sync_system.strategy import DefaultSyncStrategy
from ...sync_system.config import StrategyConfig, OrphanAction, UpdateDirection
from schemas.construction.construction import ConstructionResponse
class ConstructionTaskSyncStrategy(DefaultSyncStrategy[ConstructionResponse]):
"""
Construction Task 同步策略(合同子业务)。
"""
schema = ConstructionResponse
default_config = StrategyConfig(
auto_bind=True,
auto_bind_fields=["contract_id", "task_type"],
depend_fields={"contract_id": "contract", "project_id": "project"},
local_orphan_action=OrphanAction.CREATE_REMOTE,
remote_orphan_action=OrphanAction.NONE,
update_direction=UpdateDirection.PUSH,
)
def preprocess_compare_payload(self, payload: dict) -> dict:
plan_nodes = payload.get("plan_node")
if not isinstance(plan_nodes, list):
return payload
payload["plan_node"] = [
{key: value for key, value in item.items() if key != "is_audit"} if isinstance(item, dict) else item
for item in plan_nodes
]
return payload