重构SCADA信息获取,移除旧的数据库接口

This commit is contained in:
2026-03-13 11:25:48 +08:00
parent 9aa0646bc6
commit 83a6143146
4 changed files with 51 additions and 63 deletions
+5 -2
View File
@@ -1,9 +1,10 @@
from fastapi import APIRouter, Depends, HTTPException from fastapi import APIRouter, Depends, HTTPException
from psycopg import AsyncConnection from psycopg import AsyncConnection
from app.infra.db.postgresql.scada_info import ScadaRepository import app.native.wndb as wndb
from app.infra.db.postgresql.scheme import SchemeRepository from app.infra.db.postgresql.scheme import SchemeRepository
from app.auth.project_dependencies import get_project_pg_connection from app.auth.project_dependencies import get_project_pg_connection
from app.services import project_info
router = APIRouter() router = APIRouter()
@@ -22,7 +23,9 @@ async def get_scada_info_with_connection(
使用连接池查询所有SCADA信息 使用连接池查询所有SCADA信息
""" """
try: try:
scada_data = await ScadaRepository.get_scadas(conn) _ = conn
network_name = project_info.name
scada_data = wndb.get_all_scada_info(network_name) if network_name else []
return {"success": True, "data": scada_data, "count": len(scada_data)} return {"success": True, "data": scada_data, "count": len(scada_data)}
except Exception as e: except Exception as e:
raise HTTPException( raise HTTPException(
-36
View File
@@ -1,36 +0,0 @@
from typing import List, Optional, Any
from psycopg import AsyncConnection
class ScadaRepository:
@staticmethod
async def get_scadas(conn: AsyncConnection) -> List[dict]:
"""
查询pg数据库中,scada_info 的所有记录
:param conn: 异步数据库连接
:return: 包含所有记录的列表,每条记录为一个字典
"""
async with conn.cursor() as cur:
await cur.execute(
"""
SELECT id, type, associated_element_id, transmission_mode, transmission_frequency, reliability
FROM public.scada_info
"""
)
records = await cur.fetchall()
# 将查询结果转换为字典列表(假设 record 是字典)
scada_infos = []
for record in records:
scada_infos.append(
{
"id": record["id"], # 使用字典键
"type": record["type"],
"associated_element_id": record["associated_element_id"],
"transmission_mode": record["transmission_mode"],
"transmission_frequency": record["transmission_frequency"],
"reliability": record["reliability"],
}
)
return scada_infos
+10 -5
View File
@@ -7,12 +7,13 @@ import numpy as np
from app.algorithms.cleaning.flow import clean_flow_data_df_kf from app.algorithms.cleaning.flow import clean_flow_data_df_kf
from app.algorithms.cleaning.pressure import clean_pressure_data_df_km from app.algorithms.cleaning.pressure import clean_pressure_data_df_km
from app.algorithms.health.analyzer import PipelineHealthAnalyzer from app.algorithms.health.analyzer import PipelineHealthAnalyzer
import app.native.wndb as wndb
from app.infra.db.postgresql.internal_queries import InternalQueries from app.infra.db.postgresql.internal_queries import InternalQueries
from app.infra.db.postgresql.scada_info import ScadaRepository as PostgreScadaRepository
from app.infra.db.timescaledb.repositories.realtime import RealtimeRepository from app.infra.db.timescaledb.repositories.realtime import RealtimeRepository
from app.infra.db.timescaledb.repositories.scheme import SchemeRepository from app.infra.db.timescaledb.repositories.scheme import SchemeRepository
from app.infra.db.timescaledb.repositories.scada import ScadaRepository from app.infra.db.timescaledb.repositories.scada import ScadaRepository
from app.services import project_info
class CompositeQueries: class CompositeQueries:
@@ -49,7 +50,8 @@ class CompositeQueries:
""" """
result = {} result = {}
# 1. 查询所有 SCADA 信息 # 1. 查询所有 SCADA 信息
scada_infos = await PostgreScadaRepository.get_scadas(postgres_conn) network_name = project_info.name
scada_infos = wndb.get_all_scada_info(network_name) if network_name else []
for device_id in device_ids: for device_id in device_ids:
# 2. 根据 device_id 找到对应的 SCADA 信息 # 2. 根据 device_id 找到对应的 SCADA 信息
@@ -115,7 +117,8 @@ class CompositeQueries:
""" """
result = {} result = {}
# 1. 查询所有 SCADA 信息 # 1. 查询所有 SCADA 信息
scada_infos = await PostgreScadaRepository.get_scadas(postgres_conn) network_name = project_info.name
scada_infos = wndb.get_all_scada_info(network_name) if network_name else []
for device_id in device_ids: for device_id in device_ids:
# 2. 根据 device_id 找到对应的 SCADA 信息 # 2. 根据 device_id 找到对应的 SCADA 信息
@@ -300,7 +303,8 @@ class CompositeQueries:
""" """
# 1. 查询所有 SCADA 信息 # 1. 查询所有 SCADA 信息
scada_infos = await PostgreScadaRepository.get_scadas(postgres_conn) network_name = project_info.name
scada_infos = wndb.get_all_scada_info(network_name) if network_name else []
# 2. 根据 element_type 和 element_id 找到关联的 SCADA 设备 # 2. 根据 element_type 和 element_id 找到关联的 SCADA 设备
associated_scada = None associated_scada = None
@@ -352,7 +356,8 @@ class CompositeQueries:
""" """
try: try:
# 获取所有 SCADA 信息 # 获取所有 SCADA 信息
scada_infos = await PostgreScadaRepository.get_scadas(postgres_conn) network_name = project_info.name
scada_infos = wndb.get_all_scada_info(network_name) if network_name else []
# 将列表转换为字典,以 device_id 为键 # 将列表转换为字典,以 device_id 为键
scada_device_info_dict = {info["id"]: info for info in scada_infos} scada_device_info_dict = {info["id"]: info for info in scada_infos}
+36 -20
View File
@@ -2,12 +2,17 @@ from .database import *
def get_scada_info_schema(name: str) -> dict[str, dict[str, Any]]: def get_scada_info_schema(name: str) -> dict[str, dict[str, Any]]:
return { 'id' : {'type': 'str' , 'optional': False , 'readonly': True }, return {
'type' : {'type': 'str' , 'optional': False , 'readonly': True }, "id": {"type": "str", "optional": False, "readonly": True},
'x' : {'type': 'float' , 'optional': False , 'readonly': False}, "type": {"type": "str", "optional": False, "readonly": True},
'y' : {'type': 'float' , 'optional': False , 'readonly': False}, "x": {"type": "float", "optional": False, "readonly": False},
'query_api_id' : {'type': 'str' , 'optional': False , 'readonly': False}, "y": {"type": "float", "optional": False, "readonly": False},
'associated_element_id' : {'type': 'str' , 'optional': False , 'readonly': True } } "query_api_id": {"type": "str", "optional": False, "readonly": False},
"transmission_mode": {"type": "str", "optional": True, "readonly": True},
"transmission_frequency": {"type": "float", "optional": True, "readonly": True},
"reliability": {"type": "float", "optional": True, "readonly": True},
"associated_element_id": {"type": "str", "optional": False, "readonly": True},
}
def get_scada_info(name: str, id: str) -> dict[str, Any]: def get_scada_info(name: str, id: str) -> dict[str, Any]:
@@ -16,15 +21,19 @@ def get_scada_info(name: str, id: str) -> dict[str, Any]:
return {} return {}
d = {} d = {}
d['id'] = si['id'] d["id"] = si["id"]
d['type'] = si['type'] d["type"] = si["type"]
d['x'] = float(si['x_coor']) d["x"] = float(si["x_coor"])
d['y'] = float(si['y_coor']) d["y"] = float(si["y_coor"])
d['api_query_id'] = si['api_query_id'] d["api_query_id"] = si["api_query_id"]
d['associated_element_id'] = si['associated_element_id'] d["transmission_mode"] = si.get("transmission_mode")
d["transmission_frequency"] = si.get("transmission_frequency")
d["reliability"] = si.get("reliability")
d["associated_element_id"] = si["associated_element_id"]
return d return d
def get_all_scada_info(name: str) -> list[dict[str, Any]]: def get_all_scada_info(name: str) -> list[dict[str, Any]]:
sis = read_all(name, f"select * from scada_info") sis = read_all(name, f"select * from scada_info")
if sis is None: if sis is None:
@@ -32,11 +41,18 @@ def get_all_scada_info(name: str) -> list[dict[str, Any]]:
d = [] d = []
for si in sis: for si in sis:
d.append({ 'id': si['id'], d.append(
'type': si['type'], {
'x': float(si['x_coor']), "id": si["id"],
'y': float(si['y_coor']), "type": si["type"],
'api_query_id': si['api_query_id'], "x": float(si["x_coor"]),
'associated_element_id': si['associated_element_id'] }) "y": float(si["y_coor"]),
"api_query_id": si["api_query_id"],
return d "transmission_mode": si.get("transmission_mode"),
"transmission_frequency": si.get("transmission_frequency"),
"reliability": si.get("reliability"),
"associated_element_id": si["associated_element_id"],
}
)
return d