from pydantic import BaseModel from typing import Any, Dict, List, Optional, Union # 原始数据导入请求 class OriginalDataImportRequest(BaseModel): account_id: int # 账号ID,必填 bfpcode: Optional[str] = None mtime: Optional[str] = None bffb: Optional[str] = None bfpl: Optional[str] = None bfpvalue: Optional[str] = None NYID: str sort: Optional[int] = None # 水准数据导入请求 class LevelDataImportRequest(BaseModel): linecode: str NYID: str benchmarkids: Optional[str] = None wsphigh: Optional[str] = None mtype: Optional[str] = None createDate: Optional[str] = None # 水准数据导入请求 class NYIDRequest(BaseModel): NYID: Optional[str] = None point_id: Optional[str] = None # 今日数据请求 class TodayDataRequest(BaseModel): account_id: str start: Optional[int] = None end: Optional[int] = None # 沉降数据导入请求 class SettlementDataImportRequest(BaseModel): point_id: str NYID: str CVALUE: Optional[str] = None MAVALUE: Optional[str] = None MTIME_W: Optional[str] = None PRELOADH: Optional[str] = None PSTATE: Optional[str] = None createdate: Optional[str] = None day: Optional[str] = None day_jg: Optional[str] = None REMARK: Optional[str] = None WORKINFO: Optional[str] = None useflag: Optional[str] = None mavalue_lj: Optional[str] = None mavalue_bc: Optional[str] = None sjName: Optional[str] = None workinfoname: Optional[str] = None isgzjdxz: Optional[str] = None upd_remark: Optional[str] = None # 观测点数据导入请求 class CheckpointDataImportRequest(BaseModel): point_id: str aname: Optional[str] = None section_id: str burial_date: Optional[str] = None # 断面数据导入请求 class SectionDataImportRequest(BaseModel): section_id: str mileage: Optional[str] = None work_site: Optional[str] = None status: Optional[str] = None number: Optional[str] = None basic_types: Optional[str] = None height: Optional[str] = None transition_paragraph: Optional[str] = None design_fill_height: Optional[str] = None compression_layer_thickness: Optional[str] = None treatment_depth: Optional[str] = None foundation_treatment_method: Optional[str] = None rock_mass_classification: Optional[str] = None account_id: Optional[str] = None # 原始数据查询请求 class OriginalDataQueryRequest(BaseModel): account_id: Optional[int] = None # 账号ID,可选。不填则查询所有分表 linecode: Optional[str] = None id: Optional[int] = None bfpcode: Optional[str] = None mtime: Optional[str] = None bffb: Optional[str] = None bfpl: Optional[str] = None bfpvalue: Optional[str] = None NYID: Optional[str] = None sort: Optional[int] = None # 沉降数据查询请求 class SettlementDataQueryRequest(BaseModel): id: Optional[int] = None point_id: Optional[int] = None NYID: Optional[int] = None account_id: Optional[str] = None # 账号ID,可选,不填则按原来逻辑查询 CVALUE: Optional[str] = None MAVALUE: Optional[str] = None MTIME_W: Optional[str] = None PRELOADH: Optional[str] = None PSTATE: Optional[str] = None createdate: Optional[str] = None day: Optional[str] = None day_jg: Optional[str] = None REMARK: Optional[str] = None WORKINFO: Optional[str] = None useflag: Optional[str] = None mavalue_lj: Optional[str] = None mavalue_bc: Optional[str] = None sjName: Optional[str] = None workinfoname: Optional[str] = None isgzjdxz: Optional[str] = None upd_remark: Optional[str] = None limit: Optional[int] = None # 限制返回数量,None表示返回全部 skip: Optional[int] = 0 # 跳过数量,用于分页,默认0 # 沉降数据查询请求——水准线路编码 class SettlementDataCheckpointQueryRequest(BaseModel): id: Optional[int] = None point_id: Optional[int] = None NYID: Optional[int] = None CVALUE: Optional[str] = None MAVALUE: Optional[str] = None MTIME_W: Optional[str] = None PRELOADH: Optional[str] = None PSTATE: Optional[str] = None createdate: Optional[str] = None day: Optional[str] = None day_jg: Optional[str] = None REMARK: Optional[str] = None WORKINFO: Optional[str] = None useflag: Optional[str] = None mavalue_lj: Optional[str] = None mavalue_bc: Optional[str] = None sjName: Optional[str] = None workinfoname: Optional[str] = None isgzjdxz: Optional[str] = None upd_remark: Optional[str] = None linecode: Optional[str] = None limit: Optional[int] = None # 限制返回数量,None表示返回全部 # 断面数据导入请求 class SectionDataQueryRequest(BaseModel): id: Optional[int] = None section_id: Optional[int] = None mileage: Optional[str] = None work_site: Optional[str] = None status: Optional[str] = None number: Optional[str] = None basic_types: Optional[str] = None height: Optional[str] = None transition_paragraph: Optional[str] = None design_fill_height: Optional[str] = None compression_layer_thickness: Optional[str] = None treatment_depth: Optional[str] = None foundation_treatment_method: Optional[str] = None rock_mass_classification: Optional[str] = None account_id: Optional[str] = None limit: Optional[int] = None # 限制返回数量,None表示返回全部 skip: Optional[int] = 0 # 跳过数量,用于分页,默认0 # 断面数据导入请求 class SectionByAccountRequest(BaseModel): account_id: Optional[str] = None section_id: Optional[str] = None # 测点数据 class PointByAccountRequest(BaseModel): point_id: Optional[str] = None # 水准数据查询请求 class LevelDataQueryRequest(BaseModel): linecode: Optional[str] = None NYID: Optional[str] = None benchmarkids: Optional[str] = None wsphigh: Optional[str] = None mtype: Optional[str] = None createDate: Optional[str] = None # 批量导入请求 - 灵活字段版本,允许传入任意字段 class BatchSectionDataImportRequest(BaseModel): data: List[Dict[str, Any]] class Config: extra = "allow" # 允许额外字段 class BatchCheckpointDataImportRequest(BaseModel): data: List[Dict[str, Any]] class Config: extra = "allow" # 允许额外字段 class BatchSettlementDataImportRequest(BaseModel): data: List[Dict[str, Any]] class Config: extra = "allow" # 允许额外字段 class BatchLevelDataImportRequest(BaseModel): data: List[Dict[str, Any]] class Config: extra = "allow" # 允许额外字段 class BatchOriginalDataImportRequest(BaseModel): data: List[Dict[str, Any]] class Config: extra = "allow" # 允许额外字段 class BatchOriginalDataImportRequestNew(BaseModel): """ 新版原始数据批量导入请求模型 支持格式:data:[[{},{},{}],[{},{}]] 里层一个[{},{}]称为一组数据,数据{}内容与旧接口一致 一组数据全部记录的NYID与account_id将会一样 """ data: List[List[Dict[str, Any]]] class Config: extra = "allow" # 允许额外字段 # 新增响应模型 class DataImportResponse(BaseModel): code: int = 0 # 响应状态码,0表示成功 message: str data: Optional[Dict[str, Any]] = None # 将详细信息放入data中 class Config: schema_extra = { "example": { "code": 0, "message": "批量导入完成", "data": { "total_count": 100, "success_count": 100, "failed_count": 0, "failed_items": [] } } } # 查询响应模型 class DataResponse(BaseModel): code: int = 0 # 响应状态码,0表示成功 message: str # 关键:用Union允许data为两种格式(列表套字典 或 列表套列表套字典) data: Union[List[Dict[str, Any]], List[List[Dict[str, Any]]]] = [] total: Optional[int] = None # 总数 class Config: schema_extra = { "example": { "code": 0, "message": "查询成功", "total": 10, "data": [ # 示例1:List[dict]格式 {"id": 1, "point_id": 100, "NYID": 50}, {"id": 2, "point_id": 200, "NYID": 60} ] }, "another_example": { "code": 0, "message": "查询成功", "total": 2, "data": [ # 示例2:List[List[dict]]格式 [{"id": 1, "point_id": 100, "NYID": 50}], [{"id": 2, "point_id": 200, "NYID": 60}] ] } } # 兼容旧接口的模型 class ComprehensiveDataImportRequest(BaseModel): data: Dict[str, Any] class LinecodeRequest(BaseModel): linecode: str class ComprehensiveDataImportResponse(BaseModel): success: bool message: str