新增tests;新增管道健康预测方法;更新复合查询函数输出格式
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
from typing import List, Optional, Any
|
||||
from typing import List, Optional, Any, Dict
|
||||
from datetime import datetime
|
||||
from psycopg import AsyncConnection
|
||||
import pandas as pd
|
||||
@@ -23,7 +23,7 @@ class CompositeQueries:
|
||||
device_ids: List[str],
|
||||
start_time: datetime,
|
||||
end_time: datetime,
|
||||
) -> List[Optional[Any]]:
|
||||
) -> Dict[str, List[Dict[str, Any]]]:
|
||||
"""
|
||||
获取 SCADA 关联的 link/node 模拟值
|
||||
|
||||
@@ -39,12 +39,12 @@ class CompositeQueries:
|
||||
field: 要查询的字段名
|
||||
|
||||
Returns:
|
||||
模拟数据值列表,如果没有找到则对应位置返回 None
|
||||
模拟数据字典,以 device_id 为键,值为数据列表,每个数据包含 time, value 和 scada_id
|
||||
|
||||
Raises:
|
||||
ValueError: 当 SCADA 设备未找到或字段无效时
|
||||
"""
|
||||
results = []
|
||||
result = {}
|
||||
# 1. 查询所有 SCADA 信息
|
||||
scada_infos = await PostgreScadaRepository.get_scadas(postgres_conn)
|
||||
|
||||
@@ -75,8 +75,11 @@ class CompositeQueries:
|
||||
)
|
||||
else:
|
||||
raise ValueError(f"Unknown SCADA type: {scada_type}")
|
||||
results.append(res)
|
||||
return results
|
||||
# 添加 scada_id 到每个数据项
|
||||
for item in res:
|
||||
item["scada_id"] = device_id
|
||||
result[device_id] = res
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
async def get_scada_associated_scheme_simulation_data(
|
||||
@@ -87,7 +90,7 @@ class CompositeQueries:
|
||||
end_time: datetime,
|
||||
scheme_type: str,
|
||||
scheme_name: str,
|
||||
) -> List[Optional[Any]]:
|
||||
) -> Dict[str, List[Dict[str, Any]]]:
|
||||
"""
|
||||
获取 SCADA 关联的 link/node 模拟值
|
||||
|
||||
@@ -103,12 +106,12 @@ class CompositeQueries:
|
||||
field: 要查询的字段名
|
||||
|
||||
Returns:
|
||||
模拟数据值列表,如果没有找到则对应位置返回 None
|
||||
模拟数据字典,以 device_id 为键,值为数据列表,每个数据包含 time, value 和 scada_id
|
||||
|
||||
Raises:
|
||||
ValueError: 当 SCADA 设备未找到或字段无效时
|
||||
"""
|
||||
results = []
|
||||
result = {}
|
||||
# 1. 查询所有 SCADA 信息
|
||||
scada_infos = await PostgreScadaRepository.get_scadas(postgres_conn)
|
||||
|
||||
@@ -151,8 +154,11 @@ class CompositeQueries:
|
||||
)
|
||||
else:
|
||||
raise ValueError(f"Unknown SCADA type: {scada_type}")
|
||||
results.append(res)
|
||||
return results
|
||||
# 添加 scada_id 到每个数据项
|
||||
for item in res:
|
||||
item["scada_id"] = device_id
|
||||
result[device_id] = res
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
async def get_element_associated_scada_data(
|
||||
@@ -282,31 +288,31 @@ class CompositeQueries:
|
||||
]
|
||||
|
||||
# 处理pressure数据
|
||||
# if pressure_ids:
|
||||
# pressure_df = df[pressure_ids]
|
||||
# # 重置索引,将 time 变为普通列
|
||||
# pressure_df = pressure_df.reset_index()
|
||||
# # 移除 time 列,准备输入给清洗方法
|
||||
# value_df = pressure_df.drop(columns=["time"])
|
||||
# # 调用清洗方法
|
||||
# cleaned_value_df = clean_pressure_data_df_km(value_df)
|
||||
# # 添加 time 列到首列
|
||||
# cleaned_df = pd.concat([pressure_df["time"], cleaned_value_df], axis=1)
|
||||
# # 将清洗后的数据写回数据库
|
||||
# for device_id in pressure_ids:
|
||||
# if device_id in cleaned_df.columns:
|
||||
# cleaned_values = cleaned_df[device_id].tolist()
|
||||
# time_values = cleaned_df["time"].tolist()
|
||||
# for i, time_str in enumerate(time_values):
|
||||
# time_dt = datetime.fromisoformat(time_str)
|
||||
# value = cleaned_values[i]
|
||||
# await ScadaRepository.update_scada_field(
|
||||
# timescale_conn,
|
||||
# time_dt,
|
||||
# device_id,
|
||||
# "cleaned_value",
|
||||
# value,
|
||||
# )
|
||||
if pressure_ids:
|
||||
pressure_df = df[pressure_ids]
|
||||
# 重置索引,将 time 变为普通列
|
||||
pressure_df = pressure_df.reset_index()
|
||||
# 移除 time 列,准备输入给清洗方法
|
||||
value_df = pressure_df.drop(columns=["time"])
|
||||
# 调用清洗方法
|
||||
cleaned_value_df = clean_pressure_data_df_km(value_df)
|
||||
# 添加 time 列到首列
|
||||
cleaned_df = pd.concat([pressure_df["time"], cleaned_value_df], axis=1)
|
||||
# 将清洗后的数据写回数据库
|
||||
for device_id in pressure_ids:
|
||||
if device_id in cleaned_df.columns:
|
||||
cleaned_values = cleaned_df[device_id].tolist()
|
||||
time_values = cleaned_df["time"].tolist()
|
||||
for i, time_str in enumerate(time_values):
|
||||
time_dt = datetime.fromisoformat(time_str)
|
||||
value = cleaned_values[i]
|
||||
await ScadaRepository.update_scada_field(
|
||||
timescale_conn,
|
||||
time_dt,
|
||||
device_id,
|
||||
"cleaned_value",
|
||||
value,
|
||||
)
|
||||
|
||||
# 处理flow数据
|
||||
if flow_ids:
|
||||
|
||||
Reference in New Issue
Block a user