from pydantic import BaseModel, Field, ConfigDict from typing import Optional, List, Any from datetime import datetime class LevelDataBase(BaseModel): """水准数据基础模型""" linecode: Optional[str] = None benchmarkids: Optional[str] = None wsphigh: Optional[str] = None NYID: Optional[str] = None mtype: Optional[str] = None wspversion: Optional[str] = None barometric: Optional[str] = None equipbrand: Optional[str] = None instrumodel: Optional[str] = None serialnum: Optional[str] = None sjname: Optional[str] = None temperature: Optional[str] = None weather: Optional[str] = None class LevelDataResponse(LevelDataBase): """水准数据响应模型""" id: int createDate: Optional[datetime] = None model_config = ConfigDict( from_attributes=True ) class LevelDataRequest(BaseModel): """水准数据请求模型""" project_name: str = Field(..., description="标段名称") nyid_max: Optional[bool] = Field(False, description="是否只获取最新期数的水准数据") class LevelDataListResponse(BaseModel): """水准数据列表响应格式""" code: int = 0 message: str total: int data: List[LevelDataResponse] = [] class BatchDeleteByLinecodesRequest(BaseModel): """批量删除请求模型""" linecodes: List[str] = Field(..., description="水准线路编码列表") class BatchDeleteByLinecodesResponse(BaseModel): """批量删除响应模型""" code: int = 0 message: str success: bool backup_file: Optional[str] = None deleted_counts: Optional[dict] = None class LinecodeRequest(BaseModel): """按水准线路编码查询请求""" linecode: str = Field(..., description="水准线路编码") class NyidListResponse(BaseModel): """仅返回 NYID 列表的响应""" code: int = 0 message: str data: List[str] = Field(default_factory=list, description="NYID 列表") class SyncLoseDataRequest(BaseModel): """同步缺失数据请求:不传 linecode 表示全量同步,传则只处理该线路""" linecode: Optional[str] = Field(None, description="水准线路编码,不传则处理全部线路") class LoseDataItem(BaseModel): """lose_data 表单条记录""" id: int account_id: int NYID: str linecode: str lose_data: int section_id: Optional[str] = None point_id: str = "" model_config = ConfigDict(from_attributes=True) class SyncLoseDataResponse(BaseModel): """同步缺失数据响应:全量时 data 为是否成功,单线路时 data 为该线路缺失记录列表""" code: int = 0 message: str data: Any = None # 全量时为 {"success": bool},单线路时为 List[LoseDataItem]