refactor(backend)!: separate algorithm and data layers

Reorganize algorithm packages by business responsibility, move orchestration into services, and keep database access behind pooled repositories.

Harden analysis API validation, remove unsafe legacy simulation endpoints, and add regression and architecture boundary coverage.

BREAKING CHANGE: legacy algorithm module paths and obsolete simulation endpoints are removed.
This commit is contained in:
2026-09-04 17:30:55 +08:00
parent 9b095c7439
commit 5966d039de
91 changed files with 1418 additions and 4020 deletions
+13 -26
View File
@@ -1,41 +1,28 @@
import numpy as np
from app.services.tjnetwork import (
ChangeSet,
get_demand,
get_option,
get_pattern,
get_pump,
get_reservoir,
get_status,
get_tank,
get_time,
read_all,
run_project,
set_demand,
set_pattern,
set_status,
set_tank,
set_time,
)
from app.infra.epanet import run_project
from app.native.wndb.core.database import ChangeSet
from app.native.wndb.model.demands import get_demand, set_demand
from app.native.wndb.model.options import get_option
from app.native.wndb.model.patterns import get_pattern, set_pattern
from app.native.wndb.model.pumps import get_pump
from app.native.wndb.model.reservoirs import get_reservoir
from app.native.wndb.model.status import get_status, set_status
from app.native.wndb.model.tanks import get_tank, set_tank
from app.native.wndb.model.times import get_time, set_time
# from get_real_status import *
from datetime import datetime, timedelta
from datetime import datetime
from math import modf
import os
import json
import pytz
import requests
import time
from typing import Optional, Tuple
from uuid import UUID
import typing
import logging
import app.services.project_info as project_info
from app.infra.db.postgresql.scada import (
ScadaElementMappings,
load_realtime_element_mappings,
)
from app.services.time_api import parse_beijing_time, parse_clock_duration_seconds
from app.domain.time import parse_beijing_time, parse_clock_duration_seconds
from app.native.wndb.core.connection import project_transaction
from app.native.wndb.core.database import refresh_materialized_views_after_commit
from app.infra.db.timescaledb.internal_queries import (
@@ -479,7 +466,7 @@ def run_simulation(
cs = ChangeSet()
cs.append(pump_pattern)
set_pattern(name_c, cs)
# 显式阀门控制沿用 run_simulation_ex 的处理顺序和覆盖规则
# 显式阀门控制优先于旧的开度参数
if valve_control is not None:
_apply_valve_control(name_c, valve_control)
# 保留原开度参数逻辑,兼容现有方案调用。