refactor(db)!: finalize pooled WNDB v2 migration

This commit is contained in:
2026-08-27 17:26:22 +08:00
parent fa188af0b1
commit b74799a39d
105 changed files with 4988 additions and 5565 deletions
-3
View File
@@ -3,15 +3,12 @@ from Cython.Build import cythonize
setup(ext_modules=cythonize([
"tjnetwork.py",
"online_Analysis.py",
"sensitivity.py",
"run_simlation.py",
"run_simulation.py",
"get_hist_data.py",
"get_realValue.py",
"get_data.py",
"get_current_total_Q.py",
"get_current_status.py",
"simulation.py",
"time_api.py",
"api/*.py",
+25 -4
View File
@@ -1,5 +1,26 @@
from app.services.tjnetwork import clean_project, delete_project
import argparse
from collections.abc import Sequence
import sys
from pathlib import Path
if __name__ == '__main__':
clean_project()
delete_project('project')
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from app.native.wndb.core.projects import clean_project
def parse_args(argv: Sequence[str] | None = None) -> argparse.Namespace:
parser = argparse.ArgumentParser(
description="Delete explicitly named temporary project databases.",
)
parser.add_argument(
"--yes",
action="store_true",
required=True,
help="confirm permanent deletion of every named database",
)
parser.add_argument("projects", nargs="+", help="project database names to delete")
return parser.parse_args(argv)
if __name__ == "__main__":
clean_project(parse_args().projects)
-136
View File
@@ -1,136 +0,0 @@
import psycopg as pg
sql_create = [
"script/sql/create/0.base.sql",
"script/sql/create/1.title.sql",
"script/sql/create/2.junctions.sql",
"script/sql/create/3.reservoirs.sql",
"script/sql/create/4.tanks.sql",
"script/sql/create/5.pipes.sql",
"script/sql/create/6.pumps.sql",
"script/sql/create/7.valves.sql",
"script/sql/create/8.tags.sql",
"script/sql/create/9.demands.sql",
"script/sql/create/10.status.sql",
"script/sql/create/11.patterns.sql",
"script/sql/create/12.curves.sql",
"script/sql/create/13.controls.sql",
"script/sql/create/14.rules.sql",
"script/sql/create/15.energy.sql",
"script/sql/create/16.emitters.sql",
"script/sql/create/17.quality.sql",
"script/sql/create/18.sources.sql",
"script/sql/create/19.reactions.sql",
"script/sql/create/20.mixing.sql",
"script/sql/create/21.times.sql",
"script/sql/create/22.report.sql",
"script/sql/create/23.options.sql",
"script/sql/create/24.coordinates.sql",
"script/sql/create/25.vertices.sql",
"script/sql/create/26.labels.sql",
"script/sql/create/27.backdrop.sql",
"script/sql/create/28.end.sql",
"script/sql/create/29.scada_device.sql",
"script/sql/create/30.scada_device_data.sql",
"script/sql/create/31.scada_element.sql",
"script/sql/create/32.region.sql",
"script/sql/create/33.dma.sql",
"script/sql/create/34.sa.sql",
"script/sql/create/35.vd.sql",
"script/sql/create/36.wda.sql",
"script/sql/create/37.history_patterns_flows.sql",
"script/sql/create/38.scada_info.sql",
"script/sql/create/40.scheme_list.sql",
"script/sql/create/41.pipe_risk_probability.sql",
"script/sql/create/42.sensor_placement.sql",
"script/sql/create/43.burst_locate_result.sql",
"script/sql/create/44.leakage_identify_result.sql",
"script/sql/create/extension_data.sql",
"script/sql/create/operation.sql"
]
sql_drop = [
"script/sql/drop/operation.sql",
"script/sql/drop/extension_data.sql",
"script/sql/drop/43.burst_locate_result.sql",
"script/sql/drop/42.sensor_placement.sql",
"script/sql/drop/44.leakage_identify_result.sql",
"script/sql/drop/41.pipe_risk_probability.sql",
"script/sql/drop/40.scheme_list.sql",
"script/sql/drop/38.scada_info.sql",
"script/sql/drop/37.history_patterns_flows.sql",
"script/sql/drop/36.wda.sql",
"script/sql/drop/35.vd.sql",
"script/sql/drop/34.sa.sql",
"script/sql/drop/33.dma.sql",
"script/sql/drop/32.region.sql",
"script/sql/drop/31.scada_element.sql",
"script/sql/drop/30.scada_device_data.sql",
"script/sql/drop/29.scada_device.sql",
"script/sql/drop/28.end.sql",
"script/sql/drop/27.backdrop.sql",
"script/sql/drop/26.labels.sql",
"script/sql/drop/25.vertices.sql",
"script/sql/drop/24.coordinates.sql",
"script/sql/drop/23.options.sql",
"script/sql/drop/22.report.sql",
"script/sql/drop/21.times.sql",
"script/sql/drop/20.mixing.sql",
"script/sql/drop/19.reactions.sql",
"script/sql/drop/18.sources.sql",
"script/sql/drop/17.quality.sql",
"script/sql/drop/16.emitters.sql",
"script/sql/drop/15.energy.sql",
"script/sql/drop/14.rules.sql",
"script/sql/drop/13.controls.sql",
"script/sql/drop/12.curves.sql",
"script/sql/drop/11.patterns.sql",
"script/sql/drop/10.status.sql",
"script/sql/drop/9.demands.sql",
"script/sql/drop/8.tags.sql",
"script/sql/drop/7.valves.sql",
"script/sql/drop/6.pumps.sql",
"script/sql/drop/5.pipes.sql",
"script/sql/drop/4.tanks.sql",
"script/sql/drop/3.reservoirs.sql",
"script/sql/drop/2.junctions.sql",
"script/sql/drop/1.title.sql",
"script/sql/drop/0.base.sql"
]
def create_template():
with pg.connect(conninfo="dbname=postgres host=127.0.0.1", autocommit=True) as conn:
with conn.cursor() as cur:
cur.execute("create database project")
with pg.connect(conninfo="dbname=project host=127.0.0.1") as conn:
with conn.cursor() as cur:
cur.execute('create extension postgis cascade')
cur.execute('create extension pgrouting cascade')
for sql in sql_create:
with open(sql, "r", encoding="utf-8") as f:
cur.execute(f.read())
print(f'executed {sql}')
conn.commit()
def have_template():
with pg.connect(conninfo="dbname=postgres host=127.0.0.1", autocommit=True) as conn:
with conn.cursor() as cur:
cur.execute("select * from pg_database where datname = 'project'")
return cur.rowcount > 0
def delete_template():
with pg.connect(conninfo="dbname=project host=127.0.0.1") as conn:
with conn.cursor() as cur:
for sql in sql_drop:
with open(sql, "r", encoding="utf-8") as f:
cur.execute(f.read())
print(f'executed {sql}')
conn.commit()
with pg.connect(conninfo="dbname=postgres host=127.0.0.1", autocommit=True) as conn:
with conn.cursor() as cur:
cur.execute("drop database project")
if __name__ == "__main__":
if (have_template()):
delete_template()
create_template()
-2
View File
@@ -1,7 +1,5 @@
from app.services.tjnetwork import list_project, read_inp
read_inp("beibeizone","beibeizone.inp")
#open_project('beibeizone')
#generate_service_area("beibeizone",0.00001)
print(list_project())
-21
View File
@@ -1,21 +0,0 @@
from app.services.tjnetwork import calculate_service_area, open_project, read_inp
p = 'dev'
read_inp(p, f'./inp/net3.inp', '3')
open_project(p)
sass = calculate_service_area(p)
assert len(sass) == 25
assert sass[0]['River'] == ['River', '60', '61', '123', '601']
assert sass[0]['3'] == ['121', '120', '119', '117', '257', '151', '157', '115', '259', '261', '149', '159', '111', '113', '263', '147', '161', '197', '193', '105', '145', '163', '195', '191', '267', '107', '141', '164', '265', '187', '189', '143', '166', '169', '204', '15', '167', '171', '269', '173', '271', '199', '201', '203', '3', '20', '127', '125', '129', '153', '131', '139']
assert sass[0]['1'] == ['185', '184', '205', '273', '1', '40', '179', '177', '183', '181', '35']
assert sass[0]['2'] == ['207', '275', '2', '50', '255', '247', '253', '251', '241', '249', '239', '243', '237', '211', '229', '209', '213', '231', '208', '215', '206', '217', '219', '225']
print(sass[1])
assert sass[0]['River'] == ['River', '60', '61', '123', '601']
assert sass[0]['3'] == ['121', '120', '119', '117', '257', '151', '157', '115', '259', '261', '149', '159', '111', '113', '263', '147', '161', '197', '193', '145', '163', '195', '191', '141', '164', '265', '187', '143', '166', '169', '267', '204', '15', '167', '171', '269', '173', '199', '201', '203', '3', '20', '127', '125', '129', '153', '131', '139']
assert sass[0]['Lake'] == ['105', '107', 'Lake', '10', '101', '103', '109']
assert sass[0]['1'] == ['189', '185', '271', '184', '205', '273', '1', '40', '179', '177', '183', '181', '35']
assert sass[0]['2'] == ['207', '275', '2', '50', '255', '247', '253', '251', '241', '249', '239', '243', '237', '211', '229', '209', '213', '231', '208', '215', '206', '217', '219', '225']
-66
View File
@@ -1,66 +0,0 @@
from app.services.tjnetwork import api, get_all_service_area_ids, open_project
from get_realValue import *
from get_hist_data import *
import datetime
from api.s36_wda_cal import *
ids=['2498','3854','3853','2510','2514','4780','4854']
cur_data=None
def get_latest_cal_time()->datetime:
current_time=datetime.datetime.now()
return current_time
def get_current_data(str_datetime: str=None)->bool:
global cur_data
if str_datetime==None:
cur_data=get_realValue(ids)
else:
cur_date=get_hist_data(ids,str_datetime)
if cur_data ==None:
return False
return True
def get_current_total_Q(str_dt:str='')->float:
q_ids=['2498','3854','3853']
q_dn900=cur_data[q_ids[0]]
q_dn500=cur_data[q_ids[1]]
q_dn1000=cur_data[q_ids[2]]
total_q=q_dn1000+q_dn500+q_dn900
return total_q
def get_h_pressure()->float:
head_id='2510'
h_pressure=cur_data[head_id]
return h_pressure
def get_l_pressure()->float:
head_id='2514'
l_pressure=cur_data[head_id]
return l_pressure
def get_h_tank_leve()->float:
h_tank_id='4780'
h_tank_level=cur_data[h_tank_id]
return h_tank_level
def get_l_tank_leve()->float:
l_tank_id='4854'
l_tank_level=cur_data[l_tank_id]
return l_tank_level
# test interface
if __name__ == '__main__':
# if get_current_data()==True:
# tQ=get_current_total_Q()
# print(f"the current tQ is {tQ}\n")
# data=get_hist_data(ids,conver_beingtime_to_ucttime('2024-04-10 15:05:00'),conver_beingtime_to_ucttime('2024-04-10 15:10:00'))
open_project("beibeizone")
regions=get_all_service_area_ids("beibeizone")
for region in regions:
t_basedmds=api.s36_wda_cal.get_total_base_demand("beibeizone",region)
print(f"{region}:{t_basedmds}")
File diff suppressed because it is too large Load Diff
-8
View File
@@ -1,8 +0,0 @@
import sys
from app.services.tjnetwork import open_project
def main():
open_project('szh')
if __name__ == '__main__':
main()
-15
View File
@@ -1,15 +0,0 @@
import sys
from app.services.tjnetwork import close_project, open_project, restore
def main():
if len(sys.argv) != 2:
print("restore_project name")
return
p = sys.argv[1]
open_project(p)
restore(p)
close_project(p)
if __name__ == '__main__':
main()
-11
View File
@@ -1,11 +0,0 @@
from app.services.tjnetwork import close_project, list_project, open_project, restore
def main():
for p in list_project():
print(f'restore {p}...')
open_project(p)
restore(p)
close_project(p)
if __name__ == '__main__':
main()
-8
View File
@@ -1,8 +0,0 @@
from app.services.tjnetwork import open_project
from get_current_status import *
def run_simulation(cur_datetime:str=None)->str:
open_project('beibei_skeleton')
return