初始化

This commit is contained in:
lhx
2025-12-12 10:57:31 +08:00
commit f8e85beba1
38 changed files with 2146 additions and 0 deletions

5
app/models/__init__.py Normal file
View File

@@ -0,0 +1,5 @@
from .account import Account
from .work_area import WorkArea
from .section_data import SectionData
from .checkpoint import Checkpoint
from .measurement_data import MeasurementData

18
app/models/account.py Normal file
View File

@@ -0,0 +1,18 @@
from sqlalchemy import Column, Integer, String, DateTime, func
from app.core.database import RailwayBase
class Account(RailwayBase):
"""账号表 - railway数据库"""
__tablename__ = "accounts"
id = Column(Integer, primary_key=True, autoincrement=True)
username = Column(String(100), nullable=False, comment="账号")
password = Column(String(100), nullable=False, comment="密码")
status = Column(String(100), nullable=False, default="1", comment="状态: 1-正常, 0-禁用")
today_updated = Column(String(100), default="0", comment="0->待处理1->在抓取2->抓取错误")
project_name = Column(String(100), comment="标段")
created_at = Column(DateTime, nullable=False, server_default=func.now())
updated_at = Column(DateTime, nullable=False, server_default=func.now(), onupdate=func.now())
update_time = Column(String(1000), comment="更新时间跨度")
max_variation = Column(Integer, nullable=False, default=1, comment="变化量的绝对值,单位是毫米")
yh_id = Column(String(100), comment="永恒一号id")

30
app/models/checkpoint.py Normal file
View File

@@ -0,0 +1,30 @@
from sqlalchemy import Column, Integer, String, DateTime
class Checkpoint:
"""观测点数据表结构定义 - 动态分表"""
@staticmethod
def get_table_name(account_id: int) -> str:
return f"checkpoint_{account_id}"
@staticmethod
def get_create_sql(account_id: int) -> str:
table_name = Checkpoint.get_table_name(account_id)
return f"""
CREATE TABLE IF NOT EXISTS `{table_name}` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '观察点名称',
`burial_date` datetime DEFAULT NULL COMMENT '埋设日期',
`objstate` varchar(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '测点状态',
`monitoring_type` varchar(100) DEFAULT NULL COMMENT '监测类型',
`period_number` int DEFAULT NULL COMMENT '量测期次',
`first_time` datetime DEFAULT NULL COMMENT '首测时间',
`manufacturer` varchar(100) DEFAULT NULL COMMENT '负责厂商',
`point_code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '测点编码',
`point_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '观察点id',
`section_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '所属断面id',
PRIMARY KEY (`id`),
KEY `idx_point_id` (`point_id`),
KEY `idx_section_id` (`section_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='观测点数据表';
"""

View File

@@ -0,0 +1,29 @@
from sqlalchemy import Column, BigInteger, String, DateTime
class MeasurementData:
"""量测数据表结构定义 - 动态分表"""
@staticmethod
def get_table_name(account_id: int) -> str:
return f"measurement_data_{account_id}"
@staticmethod
def get_create_sql(account_id: int) -> str:
table_name = MeasurementData.get_table_name(account_id)
return f"""
CREATE TABLE IF NOT EXISTS `{table_name}` (
`id` bigint NOT NULL AUTO_INCREMENT,
`monitoring_time` datetime DEFAULT NULL COMMENT '监测时间',
`upload_time` datetime DEFAULT NULL COMMENT '上传时间',
`monitoring_value` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '监测值(m)',
`deformation_value` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '变形值(mm)',
`time_interval` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '时间间隔(h)',
`cumulative_deformation` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '累计变形量(mm)',
`deformation_rate` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '变形速率(mm/d)',
`distance_working_face` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '距掌子面距离(m)',
`point_id` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '测点id',
PRIMARY KEY (`id`),
KEY `idx_point_id` (`point_id`),
KEY `idx_monitoring_time` (`monitoring_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='量测数据';
"""

View File

@@ -0,0 +1,33 @@
from sqlalchemy import Column, Integer, String, DECIMAL
class SectionData:
"""断面数据表结构定义 - 动态分表"""
@staticmethod
def get_table_name(account_id: int) -> str:
return f"section_data_{account_id}"
@staticmethod
def get_create_sql(account_id: int) -> str:
table_name = SectionData.get_table_name(account_id)
return f"""
CREATE TABLE IF NOT EXISTS `{table_name}` (
`id` int NOT NULL AUTO_INCREMENT,
`project` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '项目',
`mileage` varchar(100) NOT NULL COMMENT '断面里程',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '断面名称',
`number` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '断面编码',
`status` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '断面状态',
`excavation_method` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '开挖方法',
`rock_mass_classification` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '围岩级别',
`width` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '断面宽度(m)',
`U0` decimal(10,4) DEFAULT NULL COMMENT 'U0(mm)',
`remarks` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'U0备注',
`department_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '工区/工点id',
`section_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '断面id',
PRIMARY KEY (`id`),
KEY `idx_section_id` (`section_id`),
KEY `idx_department_id` (`department_id`),
KEY `idx_number` (`number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='断面数据表';
"""

33
app/models/work_area.py Normal file
View File

@@ -0,0 +1,33 @@
from sqlalchemy import Column, BigInteger, String
class WorkArea:
"""工区表结构定义 - 动态分表"""
@staticmethod
def get_table_name(account_id: int) -> str:
return f"work_area_{account_id}"
@staticmethod
def get_columns():
return {
"id": Column(BigInteger, primary_key=True, autoincrement=True),
"department_id": Column(String(100), comment="标段/工区/工点id"),
"parent_id": Column(String(100), comment="父id"),
"type": Column(String(100), comment="类型"),
"name": Column(String(100), comment="名称"),
}
@staticmethod
def get_create_sql(account_id: int) -> str:
table_name = WorkArea.get_table_name(account_id)
return f"""
CREATE TABLE IF NOT EXISTS `{table_name}` (
`id` bigint NOT NULL AUTO_INCREMENT,
`department_id` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '标段/工区/工点id',
`parent_id` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '父id',
`type` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '类型',
`name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称',
PRIMARY KEY (`id`),
KEY `idx_department_id` (`department_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='标段/工区/工点信息表';
"""