This commit is contained in:
DingZQ
2022-08-29 21:29:40 +08:00
74 changed files with 646 additions and 41 deletions

6
.gitignore vendored Normal file
View File

@@ -0,0 +1,6 @@
# python cache
__pycache__/
# epanet
*.rpt
*.opt

Binary file not shown.

View File

@@ -1,5 +0,0 @@
1、问题描述
在卸载office等应用或电脑崩溃后会出现缺VCRUNTIME140_1.dll的情况
2、解决方法
64位的电脑把“VCRUNTIME140_1.dll”文件放到“C:\Windows\System32”文件夹里即可
32位的电脑把“VCRUNTIME140_1.dll”文件放到“C:\Windows\SysWOW64”文件夹里即可

Binary file not shown.

Binary file not shown.

0
a.rpt
View File

View File

0
n1.rpt
View File

View File

View File

View File

5
script/admin.py Normal file
View File

@@ -0,0 +1,5 @@
from tjnetwork_admin import *
if __name__ == "__main__":
delete_template()
create_template()

View File

@@ -0,0 +1,25 @@
CREATE TYPE _NODE_TYPE AS ENUM ('JUNCTION', 'RESERVOIR', 'TANK');
CREATE TYPE _LINK_TYPE AS ENUM ('PIPE', 'PUMP', 'VALVE');
CREATE TABLE _NODE
(
ID VARCHAR(32) PRIMARY KEY
, Type _NODE_TYPE NOT NULL
);
CREATE TABLE _LINK
(
ID VARCHAR(32) PRIMARY KEY
, Type _LINK_TYPE NOT NULL
);
CREATE TABLE _CURVE
(
ID VARCHAR(32) PRIMARY KEY
);
CREATE TABLE _PATTERN
(
ID VARCHAR(32) PRIMARY KEY
);

11
script/sql/base_drop.sql Normal file
View File

@@ -0,0 +1,11 @@
DROP TABLE IF EXISTS _PATTERN;
DROP TABLE IF EXISTS _CURVE;
DROP TABLE IF EXISTS _LINK;
DROP TABLE IF EXISTS _NODE;
DROP TYPE IF EXISTS _LINK_TYPE;
DROP TYPE IF EXISTS _NODE_TYPE;

View File

@@ -0,0 +1,6 @@
-- [TITLE]
CREATE TABLE TITLE
(
Value TEXT
);

View File

@@ -0,0 +1,29 @@
-- [STATUS]
CREATE TYPE STATUS_PIPE_PUMP_STATUS AS ENUM ('OPEN', 'CLOSED');
CREATE TABLE STATUS_PIPE
(
ID VARCHAR(32) PRIMARY KEY REFERENCES PIPES(ID)
, Status STATUS_PIPE_PUMP_STATUS NOT NULL
);
CREATE TABLE STATUS_PUMP
(
ID VARCHAR(32) PRIMARY KEY REFERENCES PUMPS(ID)
, Status STATUS_PIPE_PUMP_STATUS NOT NULL
);
CREATE TYPE STATUS_VALVE_STATUS AS ENUM ('OPEN', 'CLOSED', 'ACTIVE');
CREATE TABLE STATUS_VALVE
(
ID VARCHAR(32) PRIMARY KEY REFERENCES VALVES(ID)
, Status STATUS_VALVE_STATUS NOT NULL
);
CREATE TABLE STATUS_LINK
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Setting NUMERIC NOT NULL
);

View File

@@ -0,0 +1,7 @@
-- [PATTERNS]
CREATE TABLE PATTERNS
(
ID VARCHAR(32) REFERENCES _PATTERN(ID) NOT NULL
, Multipliers NUMERIC NOT NULL
);

View File

@@ -0,0 +1,8 @@
-- [CURVES]
CREATE TABLE CURVES
(
ID VARCHAR(32) REFERENCES _CURVE(ID) NOT NULL
, X NUMERIC NOT NULL
, Y NUMERIC NOT NULL
);

View File

@@ -0,0 +1,30 @@
-- [CONTROLS]
CREATE TYPE CONTROLS_1_PREP AS ENUM ('ABOVE', 'BELOW');
-- LINK linkID status IF NODE nodeID ABOVE / BELOW value
CREATE TABLE CONTROLS_1
(
LinkID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Status TEXT NOT NULL -- OPEN / CLOSED, a pump speed setting, or a control valve setting
, NodeID VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
, Prep CONTROLS_1_PREP NOT NULL
, Value NUMERIC NOT NULL
);
-- LINK linkID status AT TIME time
CREATE TABLE CONTROLS_2
(
LinkID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Status TEXT NOT NULL -- OPEN / CLOSED, a pump speed setting, or a control valve setting
, Time INTERVAL HOUR
);
-- LINK linkID status AT CLOCKTIME clocktime AM / PM
CREATE TABLE CONTROLS_3
(
LinkID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Status TEXT NOT NULL -- OPEN / CLOSED, a pump speed setting, or a control valve setting
, ClockTimeHour INTERVAL HOUR -- get AM/PM from it
, ClockTimeMin INTERVAL MINUTE
);

View File

@@ -0,0 +1,6 @@
-- [RULES]
CREATE TABLE RULES
(
Content TEXT PRIMARY KEY
);

View File

@@ -0,0 +1,24 @@
-- [ENERGY]
CREATE TYPE ENERGY_PARAM AS ENUM ('PRICE', 'PATTERN', 'EFFIC');
-- GLOBAL PRICE / PATTERN / EFFIC value
CREATE TABLE ENERGY_GLOBAL
(
Param ENERGY_PARAM NOT NULL
, Value NUMERIC NOT NULL
);
-- PUMP pumpID PRICE / PATTERN / EFFIC value
CREATE TABLE ENERGY_PUMP
(
ID VARCHAR(32) REFERENCES PUMPS(ID) NOT NULL
, Param ENERGY_PARAM NOT NULL
, Value NUMERIC NOT NULL
);
-- DEMAND CHARGE value
CREATE TABLE ENERGY_DEMAND_CHARGE
(
Value NUMERIC NOT NULL
);

View File

@@ -0,0 +1,7 @@
-- [EMITTERS]
CREATE TABLE EMITTERS
(
Junction VARCHAR(32) PRIMARY KEY REFERENCES JUNCTIONS(ID)
, Coefficient NUMERIC NOT NULL
);

View File

@@ -0,0 +1,7 @@
-- [QUALITY]
CREATE TABLE QUALITY
(
Node VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, InitialQual NUMERIC NOT NULL
);

View File

@@ -0,0 +1,11 @@
-- [SOURCES]
CREATE TYPE SOURCES_TYPE AS ENUM ('CONCEN', 'MASS', 'FLOWPACED', 'SETPOINT');
CREATE TABLE SOURCES
(
Node VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, Type SOURCES_TYPE NOT NULL
, Strength NUMERIC NOT NULL
, TimePattern VARCHAR(32) REFERENCES _PATTERN(ID)
);

View File

@@ -0,0 +1,42 @@
-- [REACTIONS]
CREATE TYPE REACTIONS_ORDER_PARAM AS ENUM ('BULK', 'WALL', 'TANK');
CREATE TABLE REACTIONS_ORDER
(
Key REACTIONS_ORDER_PARAM NOT NULL
, Value NUMERIC NOT NULL
);
CREATE TYPE REACTIONS_GLOBAL_PARAM AS ENUM ('BULK', 'WALL');
CREATE TABLE REACTIONS_GLOBAL
(
Key REACTIONS_GLOBAL_PARAM NOT NULL
, Value NUMERIC NOT NULL
);
CREATE TYPE REACTIONS_PIPE_PARAM AS ENUM ('BULK', 'WALL');
CREATE TABLE REACTIONS_PIPE
(
Key REACTIONS_PIPE_PARAM NOT NULL
, Pipe VARCHAR(32) REFERENCES PIPES(ID) NOT NULL
, Value NUMERIC NOT NULL
);
CREATE TABLE REACTIONS_TANK
(
Tank VARCHAR(32) REFERENCES TANKS(ID) NOT NULL
, Value NUMERIC NOT NULL
);
CREATE TABLE REACTIONS_LIMITING_POTENTIAL
(
Value NUMERIC NOT NULL
);
CREATE TABLE REACTIONS_ROUGHNESS_CORRELATION
(
Value NUMERIC NOT NULL
);

View File

@@ -0,0 +1,9 @@
-- [JUNCTIONS]
CREATE TABLE JUNCTIONS
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, Elevation NUMERIC NOT NULL
, Demand NUMERIC
, Pattern VARCHAR(32) REFERENCES _PATTERN(ID)
);

View File

@@ -0,0 +1,10 @@
-- [MIXING]
CREATE TYPE MIXING_Model AS ENUM ('MIXED', '2COMP', 'FIFO', 'LIFO');
CREATE TABLE MIXING
(
Tank VARCHAR(32) PRIMARY KEY REFERENCES TANKS(ID)
, Model MIXING_Model NOT NULL
, Value NUMERIC
);

View File

@@ -0,0 +1,9 @@
-- [TIMES]
-- TODO: constraint
CREATE TABLE TIMES
(
Key TEXT NOT NULL
, Value TEXT NOT NULL
);

View File

@@ -0,0 +1,9 @@
-- [REPORT]
-- TODO: constraint
CREATE TABLE REPORT
(
Key TEXT NOT NULL
, Value TEXT NOT NULL
);

View File

@@ -0,0 +1,9 @@
-- [OPTIONS]
-- TODO: constraint
CREATE TABLE OPTIONS
(
Key TEXT NOT NULL
, Value TEXT NOT NULL
);

View File

@@ -0,0 +1,10 @@
-- [COORDINATES]
CREATE TABLE COORDINATES
(
Node VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, Coord POINT NOT NULL DEFAULT(POINT(0.0, 0.0))
);
CREATE INDEX COORDINATES_SPGIST ON COORDINATES USING SPGIST(Coord);
CREATE INDEX COORDINATES_GIST ON COORDINATES USING GIST(Coord);

View File

@@ -0,0 +1,8 @@
-- [VERTICES]
CREATE TABLE VERTICES
(
Link VARCHAR(32) REFERENCES _LINK(ID) NOT NULL
, X NUMERIC NOT NULL
, Y NUMERIC NOT NULL
);

View File

@@ -0,0 +1,9 @@
-- [LABELS]
CREATE TABLE LABELS
(
X NUMERIC NOT NULL
, Y NUMERIC NOT NULL
, Label TEXT NOT NULL
, AnchorNode VARCHAR(32) REFERENCES _NODE(ID)
);

View File

@@ -0,0 +1,6 @@
-- [BACKDROP]
CREATE TABLE BACKDROP
(
Content TEXT PRIMARY KEY
);

View File

@@ -0,0 +1 @@
-- [END]

View File

@@ -0,0 +1,8 @@
-- [RESERVOIRS]
CREATE TABLE RESERVOIRS
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, Head NUMERIC NOT NULL
, Pattern VARCHAR(32) REFERENCES _PATTERN(ID)
);

View File

@@ -0,0 +1,16 @@
-- [TANKS]
CREATE TYPE TANKS_OVERFLOW AS ENUM ('YES', 'NO');
CREATE TABLE TANKS
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, Elevation NUMERIC NOT NULL
, InitLevel NUMERIC NOT NULL
, MinLevel NUMERIC NOT NULL
, MaxLevel NUMERIC NOT NULL
, Diameter NUMERIC NOT NULL
, MinVol NUMERIC NOT NULL
, VolCurve VARCHAR(32) REFERENCES _CURVE(ID)
, Overflow TANKS_OVERFLOW
);

View File

@@ -0,0 +1,15 @@
-- [PIPES]
CREATE TYPE PIPES_STATUS AS ENUM ('OPEN', 'CLOSED', 'CV');
CREATE TABLE PIPES
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Node1 VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
, Node2 VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
, Length NUMERIC NOT NULL
, Diameter NUMERIC NOT NULL
, Roughness NUMERIC NOT NULL
, MinorLoss NUMERIC NOT NULL
, Status PIPES_STATUS NOT NULL
);

View File

@@ -0,0 +1,32 @@
-- [PUMPS]
CREATE TABLE PUMPS
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Node1 VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
, Node2 VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
);
CREATE TABLE PUMPS_PROPERTY_POWER
(
ID VARCHAR PRIMARY KEY REFERENCES PUMPS(ID)
, Value VARCHAR(32) NOT NULL
);
CREATE TABLE PUMPS_PROPERTY_SPEED
(
ID VARCHAR PRIMARY KEY REFERENCES PUMPS(ID)
, Value VARCHAR(32) NOT NULL
);
CREATE TABLE PUMPS_PROPERTY_HEAD
(
ID VARCHAR PRIMARY KEY REFERENCES PUMPS(ID)
, Head VARCHAR(32) REFERENCES _CURVE(ID) NOT NULL
);
CREATE TABLE PUMPS_PROPERTY_PATTERN
(
ID VARCHAR PRIMARY KEY REFERENCES PUMPS(ID)
, Pattern VARCHAR(32) REFERENCES _PATTERN(ID) NOT NULL
);

View File

@@ -0,0 +1,14 @@
-- [VALVES]
CREATE TYPE VALVES_TYPE AS ENUM ('PRV', 'PSV', 'PBV', 'FCV', 'TCV', 'GPV');
CREATE TABLE VALVES
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Node1 VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
, Node2 VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
, Diameter NUMERIC NOT NULL
, Type VALVES_TYPE NOT NULL
, Setting NUMERIC NOT NULL
, MinorLoss NUMERIC NOT NULL
);

View File

@@ -0,0 +1,13 @@
-- [TAGS]
CREATE TABLE TAGS_NODE
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, Tag TEXT NOT NULL
);
CREATE TABLE TAGS_LINK
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Tag TEXT NOT NULL
);

View File

@@ -0,0 +1,9 @@
-- [DEMANDS]
CREATE TABLE DEMANDS
(
Junction VARCHAR(32) REFERENCES JUNCTIONS(ID) NOT NULL
, Demand NUMERIC NOT NULL
, Pattern VARCHAR(32) REFERENCES _PATTERN(ID)
, Category TEXT NOT NULL
);

View File

@@ -0,0 +1,3 @@
-- [TITLE]
DROP TABLE TITLE;

View File

@@ -0,0 +1,13 @@
-- [STATUS]
DROP TABLE STATUS_LINK;
DROP TABLE STATUS_VALVE;
DROP TYPE STATUS_VALVE_STATUS;
DROP TABLE STATUS_PUMP;
DROP TABLE STATUS_PIPE;
DROP TYPE STATUS_PIPE_PUMP_STATUS;

View File

@@ -0,0 +1,3 @@
-- [PATTERNS]
DROP TABLE PATTERNS;

View File

@@ -0,0 +1,3 @@
-- [CURVES]
DROP TABLE CURVES;

View File

@@ -0,0 +1,9 @@
-- [CONTROLS]
DROP TABLE CONTROLS_3;
DROP TABLE CONTROLS_2;
DROP TABLE CONTROLS_1;
DROP TYPE CONTROLS_1_PREP;

View File

@@ -0,0 +1,3 @@
-- [RULES]
DROP TABLE RULES;

View File

@@ -0,0 +1,9 @@
-- [ENERGY]
DROP TABLE ENERGY_DEMAND_CHARGE;
DROP TABLE ENERGY_PUMP;
DROP TABLE ENERGY_GLOBAL;
DROP TYPE ENERGY_PARAM;

View File

@@ -0,0 +1,3 @@
-- [EMITTERS]
DROP TABLE EMITTERS;

View File

@@ -0,0 +1,3 @@
-- [QUALITY]
DROP TABLE QUALITY;

View File

@@ -0,0 +1,5 @@
-- [SOURCES]
DROP TABLE SOURCES;
DROP TYPE SOURCES_TYPE;

View File

@@ -0,0 +1,19 @@
-- [REACTIONS]
DROP TABLE REACTIONS_ROUGHNESS_CORRELATION;
DROP TABLE REACTIONS_LIMITING_POTENTIAL;
DROP TABLE REACTIONS_TANK;
DROP TABLE REACTIONS_PIPE;
DROP TYPE REACTIONS_PIPE_PARAM;
DROP TABLE REACTIONS_GLOBAL;
DROP TYPE REACTIONS_GLOBAL_PARAM;
DROP TABLE REACTIONS_ORDER;
DROP TYPE REACTIONS_ORDER_PARAM;

View File

@@ -0,0 +1,3 @@
-- [JUNCTIONS]
DROP TABLE JUNCTIONS;

View File

@@ -0,0 +1,5 @@
-- [MIXING]
DROP TABLE MIXING;
DROP TYPE MIXING_Model;

View File

@@ -0,0 +1,3 @@
-- [TIMES]
DROP TABLE TIMES;

View File

@@ -0,0 +1,3 @@
-- [REPORT]
DROP TABLE REPORT;

View File

@@ -0,0 +1,3 @@
-- [OPTIONS]
DROP TABLE OPTIONS;

View File

@@ -0,0 +1,7 @@
-- [COORDINATES]
DROP INDEX COORDINATES_GIST;
DROP INDEX COORDINATES_SPGIST;
DROP TABLE COORDINATES;

View File

@@ -0,0 +1,3 @@
-- [VERTICES]
DROP TABLE VERTICES;

View File

@@ -0,0 +1,3 @@
-- [LABELS]
DROP TABLE LABELS;

View File

@@ -0,0 +1,3 @@
-- [BACKDROP]
DROP TABLE BACKDROP;

View File

@@ -0,0 +1 @@
-- [END]

View File

@@ -0,0 +1,3 @@
-- [RESERVOIRS]
DROP TABLE RESERVOIRS;

View File

@@ -0,0 +1,5 @@
-- [TANKS]
DROP TABLE TANKS;
DROP TYPE TANKS_OVERFLOW;

View File

@@ -0,0 +1,5 @@
-- [PIPES]
DROP TABLE PIPES;
DROP TYPE PIPES_STATUS;

View File

@@ -0,0 +1,11 @@
-- [PUMPS]
DROP TABLE PUMPS_PROPERTY_PATTERN;
DROP TABLE PUMPS_PROPERTY_HEAD;
DROP TABLE PUMPS_PROPERTY_SPEED;
DROP TABLE PUMPS_PROPERTY_POWER;
DROP TABLE PUMPS;

View File

@@ -0,0 +1,5 @@
-- [VALVES]
DROP TABLE VALVES;
DROP TYPE VALVES_TYPE;

View File

@@ -0,0 +1,5 @@
-- [TAGS]
DROP TABLE TAGS_LINK;
DROP TABLE TAGS_NODE;

View File

@@ -0,0 +1,3 @@
-- [DEMANDS]
DROP TABLE DEMANDS;

89
script/tjnetwork_admin.py Normal file
View File

@@ -0,0 +1,89 @@
import psycopg as pg
sql_create = [
"sql/base_create.sql",
"sql/section_create/1.title.sql",
"sql/section_create/2.junctions.sql",
"sql/section_create/3.reservoirs.sql",
"sql/section_create/4.tanks.sql",
"sql/section_create/5.pipes.sql",
"sql/section_create/6.pumps.sql",
"sql/section_create/7.valves.sql",
"sql/section_create/8.tags.sql",
"sql/section_create/9.demands.sql",
"sql/section_create/10.status.sql",
"sql/section_create/11.patterns.sql",
"sql/section_create/12.curves.sql",
"sql/section_create/13.controls.sql",
"sql/section_create/14.rules.sql",
"sql/section_create/15.energy.sql",
"sql/section_create/16.emitters.sql",
"sql/section_create/17.quality.sql",
"sql/section_create/18.sources.sql",
"sql/section_create/19.reactions.sql",
"sql/section_create/20.mixing.sql",
"sql/section_create/21.times.sql",
"sql/section_create/22.report.sql",
"sql/section_create/23.options.sql",
"sql/section_create/24.coordinates.sql",
"sql/section_create/25.vertices.sql",
"sql/section_create/26.labels.sql",
"sql/section_create/27.backdrop.sql",
"sql/section_create/28.end.sql"
]
sql_drop = [
"sql/section_drop/28.end.sql",
"sql/section_drop/27.backdrop.sql",
"sql/section_drop/26.labels.sql",
"sql/section_drop/25.vertices.sql",
"sql/section_drop/24.coordinates.sql",
"sql/section_drop/23.options.sql",
"sql/section_drop/22.report.sql",
"sql/section_drop/21.times.sql",
"sql/section_drop/20.mixing.sql",
"sql/section_drop/19.reactions.sql",
"sql/section_drop/18.sources.sql",
"sql/section_drop/17.quality.sql",
"sql/section_drop/16.emitters.sql",
"sql/section_drop/15.energy.sql",
"sql/section_drop/14.rules.sql",
"sql/section_drop/13.controls.sql",
"sql/section_drop/12.curves.sql",
"sql/section_drop/11.patterns.sql",
"sql/section_drop/10.status.sql",
"sql/section_drop/9.demands.sql",
"sql/section_drop/8.tags.sql",
"sql/section_drop/7.valves.sql",
"sql/section_drop/6.pumps.sql",
"sql/section_drop/5.pipes.sql",
"sql/section_drop/4.tanks.sql",
"sql/section_drop/3.reservoirs.sql",
"sql/section_drop/2.junctions.sql",
"sql/section_drop/1.title.sql",
"sql/base_drop.sql"
]
def create_template():
with pg.connect(conninfo="dbname=postgres", autocommit=True) as conn:
with conn.cursor() as cur:
cur.execute(f"create database project")
with pg.connect(conninfo=f"dbname=project") as conn:
with conn.cursor() as cur:
for sql in sql_create:
with open(sql, "r") as f:
cur.execute(f.read())
print(f'executed {sql}')
conn.commit()
def delete_template():
with pg.connect(conninfo=f"dbname=project") as conn:
with conn.cursor() as cur:
for sql in sql_drop:
with open(sql, "r") as f:
cur.execute(f.read())
print(f'executed {sql}')
conn.commit()
with pg.connect(conninfo="dbname=postgres", autocommit=True) as conn:
with conn.cursor() as cur:
cur.execute(f"drop database project")

2
script/tool/install.bat Normal file
View File

@@ -0,0 +1,2 @@
pip install --upgrade pip
pip install "psycopg[binary]"

View File

@@ -1,36 +0,0 @@
drop table if exists Link;
drop table if exists Node;
drop type if exists EN_NodeType;
create type EN_NodeType as enum (
'EN_JUNCTION',
'EN_RESERVOIR',
'EN_TANK'
);
drop type if exists EN_LinkType;
create type EN_LinkType as enum (
'EN_CVPIPE',
'EN_PIPE',
'EN_PUMP',
'EN_PRV',
'EN_PSV',
'EN_PBV',
'EN_FCV',
'EN_TCV',
'EN_GPV'
);
create table Node (
Id varchar(32) primary key,
Type EN_NodeType not null,
Coord point not null default(point(0.0, 0.0)),
Elevation numeric not null default(0.0)
);
create table Link (
Id varchar(32) primary key,
Type EN_LinkType not null,
FromNode varchar(32) not null references Node(Id),
ToNode varchar(32) not null references Node(Id)
);