refactor(db)!: clean up business SQL access
- make realtime replacement and analysis result writes transactional\n- consolidate SCADA repositories and remove process-global project state\n- validate SCADA batches and use indexed GIS-backed business queries\n\nBREAKING CHANGE: remove the public analysis result writer and the pipeline-health network_name query parameter.
This commit is contained in:
@@ -10,20 +10,14 @@ import wntr
|
||||
|
||||
from app.algorithms.leakage.identifier import LeakageIdentifier
|
||||
from app.infra.db.timescaledb.internal_queries import InternalQueries
|
||||
from app.services.scheme_management import (
|
||||
query_leakage_identify_scheme_detail,
|
||||
query_leakage_identify_schemes,
|
||||
scheme_name_exists,
|
||||
store_leakage_identify_result,
|
||||
store_scheme_info,
|
||||
)
|
||||
from app.services.scheme_management import store_analysis_run_with_result
|
||||
from app.services.tjnetwork import (
|
||||
dump_inp,
|
||||
get_all_scada_info,
|
||||
get_network_link_nodes,
|
||||
get_network_node_coords,
|
||||
)
|
||||
from app.services.time_api import extract_date, parse_utc_time, utc_now
|
||||
from app.services.time_api import parse_utc_time, utc_now
|
||||
|
||||
DEFAULT_N_WORKERS = max(1, min((os.cpu_count() or 1) - 1, 4))
|
||||
|
||||
@@ -115,8 +109,6 @@ def run_leakage_identification(
|
||||
"rows": rows,
|
||||
}
|
||||
if scheme_name:
|
||||
if scheme_name_exists(network, scheme_name):
|
||||
raise ValueError(f"方案名称已存在: {scheme_name}")
|
||||
scheme_start_time = (
|
||||
_to_datetime(scada_start).isoformat()
|
||||
if scada_start is not None
|
||||
@@ -153,46 +145,29 @@ def run_leakage_identification(
|
||||
),
|
||||
},
|
||||
}
|
||||
store_scheme_info(
|
||||
store_analysis_run_with_result(
|
||||
name=network,
|
||||
scheme_name=scheme_name,
|
||||
scheme_type="dma_leak_identification",
|
||||
username=username,
|
||||
scheme_start_time=scheme_start_time,
|
||||
scheme_detail=scheme_detail,
|
||||
)
|
||||
store_leakage_identify_result(
|
||||
name=network,
|
||||
scheme_name=scheme_name,
|
||||
network=network,
|
||||
sensor_nodes=selected_sensor_nodes,
|
||||
result_rows=rows,
|
||||
node_area_map=area_map,
|
||||
areas=areas,
|
||||
drawing_payload={},
|
||||
result_type="leakage_identification",
|
||||
result_payload={
|
||||
"network": network,
|
||||
"run_status": "completed",
|
||||
"error_message": None,
|
||||
"sensor_nodes": selected_sensor_nodes,
|
||||
"rows": rows,
|
||||
"node_area_map": area_map,
|
||||
"areas": areas,
|
||||
"drawing_payload": {},
|
||||
},
|
||||
)
|
||||
payload["scheme_name"] = scheme_name
|
||||
return payload
|
||||
|
||||
|
||||
def list_leakage_identify_schemes(
|
||||
network: str, query_date: datetime | str | None = None
|
||||
) -> list[dict[str, Any]]:
|
||||
parsed_date = extract_date(query_date, field_name="query_date") if query_date is not None else None
|
||||
return query_leakage_identify_schemes(
|
||||
name=network, network=network, query_date=parsed_date
|
||||
)
|
||||
|
||||
|
||||
def get_leakage_identify_scheme_detail(
|
||||
network: str, scheme_name: str
|
||||
) -> dict[str, Any]:
|
||||
result = query_leakage_identify_scheme_detail(network, scheme_name)
|
||||
if not result:
|
||||
raise ValueError(f"未找到漏损识别方案: {scheme_name}")
|
||||
return result
|
||||
|
||||
|
||||
def _get_pressure_sensor_nodes(network: str) -> list[str]:
|
||||
scada_devices = get_all_scada_info(network)
|
||||
sensor_nodes: list[str] = []
|
||||
|
||||
Reference in New Issue
Block a user