From 11a5bb43330c3b5144bfd3bbbf6f6db51e8df749 Mon Sep 17 00:00:00 2001 From: "WQY\\qiong" Date: Thu, 16 Feb 2023 22:14:07 +0800 Subject: [PATCH] Add more api for scada_data --- api/__init__.py | 2 +- api/s30_scada_data.py | 42 ++++++++++++++++++++++++++++++++++++++++++ tjnetwork.py | 6 ++++++ 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/api/__init__.py b/api/__init__.py index 3dcd269..bdd2505 100644 --- a/api/__init__.py +++ b/api/__init__.py @@ -103,4 +103,4 @@ from .s29_scada_model import SCADA_TYPE_PRESSURE, SCADA_TYPE_DEMAND, SCADA_TYPE_ from .s29_scada_model import SCADA_STATUS_OFFLINE, SCADA_STATUS_ONLINE from .s29_scada_model import get_scada_model_schema, get_scada_model, set_scada_model, add_scada_model, delete_scada_model -from .s30_scada_data import get_scada_data_schema, get_scada_data, set_scada_data +from .s30_scada_data import get_scada_data_schema, get_scada_data, set_scada_data, add_scada_data, delete_scada_data diff --git a/api/s30_scada_data.py b/api/s30_scada_data.py index e222131..14f8f8b 100644 --- a/api/s30_scada_data.py +++ b/api/s30_scada_data.py @@ -49,3 +49,45 @@ def set_scada_data(name: str, cs: ChangeSet) -> ChangeSet: result.redo_cs[0] |= g_update_prefix result.undo_cs[0] |= g_update_prefix return execute_command(name, result) + + +def add_scada_data_cmd(name: str, cs: ChangeSet) -> DbChangeSet: + values = cs.operations[0] + device_id = values['device_id'] + time = values['time'] + value = float(values['value']) + + redo_sql = f"insert into scada_data (device_id, time, value) values ('{device_id}', '{time}', {value});" + undo_sql = f"delete from scada_data where device_id = '{device_id}' and time = '{time}';" + redo_cs = g_add_prefix | { 'type': 'scada_data', 'device_id': device_id, 'time': time, 'value': value } + undo_cs = g_delete_prefix | { 'type': 'scada_data', 'device_id': device_id, 'time': time } + + return DbChangeSet(redo_sql, undo_sql, [redo_cs], [undo_cs]) + + +def add_scada_data(name: str, cs: ChangeSet) -> ChangeSet: + row = try_read(name, f"select * from scada_data where device_id = '{cs.operations[0]['device_id']}' and time = '{cs.operations[0]['time']}'") + if row != None: + return ChangeSet() + return execute_command(name, add_scada_data_cmd(name, cs)) + + +def delete_scada_data_cmd(name: str, cs: ChangeSet) -> DbChangeSet: + values = cs.operations[0] + device_id = values['device_id'] + time = values['time'] + value = float(read(name, f"select * from scada_data where device_id = '{device_id}' and time = '{time}'")['value']) + + redo_sql = f"delete from scada_data where device_id = '{device_id}' and time = '{time}';" + undo_sql = f"insert into scada_data (device_id, time, value) values ('{device_id}', '{time}', {value});" + redo_cs = g_delete_prefix | { 'type': 'scada_data', 'device_id': device_id, 'time': time } + undo_cs = g_add_prefix | { 'type': 'scada_data', 'device_id': device_id, 'time': time, 'value': value } + + return DbChangeSet(redo_sql, undo_sql, [redo_cs], [undo_cs]) + + +def delete_scada_data(name: str, cs: ChangeSet) -> ChangeSet: + row = try_read(name, f"select * from scada_data where device_id = '{cs.operations[0]['device_id']}' and time = '{cs.operations[0]['time']}'") + if row == None: + return ChangeSet() + return execute_command(name, delete_scada_data_cmd(name, cs)) diff --git a/tjnetwork.py b/tjnetwork.py index 4a47c84..ffbba3d 100644 --- a/tjnetwork.py +++ b/tjnetwork.py @@ -767,3 +767,9 @@ def get_scada_data(name: str, device_id: str) -> dict[str, Any]: # time format must be 'YYYY-MM-DD HH:MM:SS' def set_scada_data(name: str, cs: ChangeSet) -> ChangeSet: return api.set_scada_data(name, cs) + +def add_scada_data(name: str, cs: ChangeSet) -> ChangeSet: + return api.add_scada_data(name, cs) + +def delete_scada_data(name: str, cs: ChangeSet) -> ChangeSet: + return api.delete_scada_data(name, cs)