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 normalize_compare_payload(self, data: dict | None, data_id_map=None) -> dict: payload = super().normalize_compare_payload(data, data_id_map) 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