From a37b1508d7a121c38138369d26052d44436d6223 Mon Sep 17 00:00:00 2001 From: root <13910913995@163.com> Date: Fri, 12 Jun 2026 11:32:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/schemas/platform.py | 1 + backend/app/services/platform_service.py | 29 ++++++++++++++++++--- backend/config/setting.json | 32 ++++++++++++++++++++++++ backend/tests/test_api.py | 2 ++ 4 files changed, 60 insertions(+), 4 deletions(-) diff --git a/backend/app/schemas/platform.py b/backend/app/schemas/platform.py index 73401f2..50cfa6f 100644 --- a/backend/app/schemas/platform.py +++ b/backend/app/schemas/platform.py @@ -121,6 +121,7 @@ class LineAlarmSettingIn(BaseModel): line_no: int over_limit_alarm: List[AlarmRule] = Field(default_factory=list) fault_alarm: List[AlarmRule] = Field(default_factory=list) + transformer_change: List[AlarmRule] = Field(default_factory=list) class AiAlarmSettingIn(BaseModel): diff --git a/backend/app/services/platform_service.py b/backend/app/services/platform_service.py index 0f894b6..98ec2c7 100644 --- a/backend/app/services/platform_service.py +++ b/backend/app/services/platform_service.py @@ -331,6 +331,10 @@ class PlatformService: {"category": "频率", "limit": 180, "delay": 180, "output_node": "开出1", "enabled": False}, ], "fault_alarm": [{"category": "PT断线", "delay": 180, "output_node": "开出1", "enabled": True}], + "transformer_change": [ + {"category": "PT变化", "limit": 0.0, "delay": 0, "output_node": "", "enabled": False}, + {"category": "CT变化", "limit": 0.0, "delay": 0, "output_node": "", "enabled": False}, + ], } def _normalize_line_alarm_settings(self, raw: Any) -> List[Dict[str, Any]]: @@ -345,16 +349,28 @@ class PlatformService: if not isinstance(current, dict): current = {} line_alarm_list = self._normalize_line_alarm_settings(current.get("line_alarm_setting")) - payload_data = payload.model_dump() + payload_data = payload.model_dump(exclude_unset=True) + payload_data["line_no"] = payload.line_no updated = False for index, item in enumerate(line_alarm_list): if item.get("line_no") == payload.line_no: - line_alarm_list[index] = payload_data + merged = dict(item) + merged.update(payload_data) + default = self._default_line_alarm_setting(payload.line_no) + for key in ("over_limit_alarm", "fault_alarm", "transformer_change"): + if not isinstance(merged.get(key), list): + merged[key] = default[key] + line_alarm_list[index] = merged updated = True break if not updated: - line_alarm_list.append(payload_data) + merged = self._default_line_alarm_setting(payload.line_no) + merged.update(payload_data) + for key in ("over_limit_alarm", "fault_alarm", "transformer_change"): + if not isinstance(merged.get(key), list): + merged[key] = self._default_line_alarm_setting(payload.line_no)[key] + line_alarm_list.append(merged) current["line_alarm_setting"] = line_alarm_list path = self.config_repo.write_setting_config(current) @@ -366,7 +382,12 @@ class PlatformService: line_alarm_list = self._normalize_line_alarm_settings(current) for item in line_alarm_list: if item.get("line_no") == line_no: - return item + merged = self._default_line_alarm_setting(line_no) + merged.update(item) + for key in ("over_limit_alarm", "fault_alarm", "transformer_change"): + if not isinstance(merged.get(key), list): + merged[key] = self._default_line_alarm_setting(line_no)[key] + return merged return self._default_line_alarm_setting(line_no) def save_ai_alarm_setting(self, payload: List[AiAlarmSettingIn]) -> Dict[str, Any]: diff --git a/backend/config/setting.json b/backend/config/setting.json index e12770f..25fede0 100644 --- a/backend/config/setting.json +++ b/backend/config/setting.json @@ -54,6 +54,22 @@ "output_node": "", "enabled": false } + ], + "transformer_change": [ + { + "category": "PT变化", + "limit": 0.0, + "delay": 0, + "output_node": "", + "enabled": false + }, + { + "category": "CT变化", + "limit": 0.0, + "delay": 0, + "output_node": "", + "enabled": false + } ] }, { @@ -110,6 +126,22 @@ "output_node": "", "enabled": false } + ], + "transformer_change": [ + { + "category": "PT变化", + "limit": 0.0, + "delay": 0, + "output_node": "", + "enabled": false + }, + { + "category": "CT变化", + "limit": 0.0, + "delay": 0, + "output_node": "", + "enabled": false + } ] } ], diff --git a/backend/tests/test_api.py b/backend/tests/test_api.py index 4d8bf18..27e4734 100644 --- a/backend/tests/test_api.py +++ b/backend/tests/test_api.py @@ -223,6 +223,8 @@ def test_save_line_alarm_setting_stores_list(tmp_path) -> None: saved = platform_service.config_repo.read_setting_config() assert isinstance(saved["line_alarm_setting"], list) assert saved["line_alarm_setting"][0]["line_no"] == 3 + assert "transformer_change" in saved["line_alarm_setting"][0] + assert len(saved["line_alarm_setting"][0]["transformer_change"]) == 2 finally: platform_service.config_repo = old_repo