diff --git a/app/api/comprehensive_data.py b/app/api/comprehensive_data.py index cafa808..8a81962 100644 --- a/app/api/comprehensive_data.py +++ b/app/api/comprehensive_data.py @@ -9,8 +9,11 @@ from ..schemas.comprehensive_data import ( BatchLevelDataImportRequest, BatchOriginalDataImportRequest, DataImportResponse, - ComprehensiveDataImportRequest, - ComprehensiveDataImportResponse + DataResponse, + SectionDataQueryRequest, + SettlementDataQueryRequest, + OriginalDataQueryRequest, + LevelDataQueryRequest ) from ..services.section_data import SectionDataService from ..services.checkpoint import CheckpointService @@ -134,20 +137,30 @@ def batch_import_original_data(request: BatchOriginalDataImportRequest, db: Sess detail=f"批量导入原始数据失败: {str(e)}" ) -# 保留原有接口以保持兼容性 -@router.post("/data_settlement_import", response_model=ComprehensiveDataImportResponse) -def data_import(request: ComprehensiveDataImportRequest, db: Session = Depends(get_db)): - """导入综合数据 (兼容旧接口)""" - try: - logger.info("Using legacy data import interface") - # 这里可以根据需要实现旧接口的兼容逻辑 - return ComprehensiveDataImportResponse( - success=True, - message="请使用新的批量导入接口" - ) - except Exception as e: - logger.error(f"Legacy data import failed: {str(e)}") - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=f"数据导入失败: {str(e)}" - ) \ No newline at end of file +# 查询断面数据对应观察点数据 +@router.post("/get_section", response_model = DataResponse) +def get_section(request: SectionDataQueryRequest, db: Session = Depends(get_db)): + """获取断面数据 + 观测点""" + section_service.search_section_data(db, + id=request.id, + section_id=request.section_id, + mileage=request.mileage, + work_site=request.work_site + ) + + + +# 根据观测点id查询沉降数据 +@router.post("/get_section", response_model = DataResponse) +def get_settlenment(request: SettlementDataQueryRequest, db: Session = Depends(get_db)): + """获取沉降数据""" + + +# 查询水准数据 +@router.post("/get_level", response_model = DataResponse) +def get_level(request: LevelDataQueryRequest, db: Session = Depends(get_db)): + """查询水准数据""" + +# 根据期数id获取原始数据 +def get_original(request: OriginalDataQueryRequest, db: Session = Depends(get_db)): + """获取原始数据 + 水准数据""" diff --git a/app/models/section_data.py b/app/models/section_data.py index 95011ea..db45c4b 100644 --- a/app/models/section_data.py +++ b/app/models/section_data.py @@ -1,5 +1,6 @@ -from sqlalchemy import Column, Integer, String +from sqlalchemy import Column, Integer, String, List from ..core.database import Base +from .checkpoint import Checkpoint class SectionData(Base): __tablename__ = "section_data" @@ -12,4 +13,6 @@ class SectionData(Base): status = Column(String(100), nullable=False, comment="断面状态") number = Column(String(100), nullable=False, comment="所在桥梁墩(台)编号", index=True) transition_paragraph = Column(String(100), comment="过渡段") - section_id = Column(String(100), nullable=False, comment="断面id", index=True) \ No newline at end of file + section_id = Column(String(100), nullable=False, comment="断面id", index=True) + + Checkpoints = List[Checkpoint] \ No newline at end of file diff --git a/app/schemas/comprehensive_data.py b/app/schemas/comprehensive_data.py index 4a55e55..052cefd 100644 --- a/app/schemas/comprehensive_data.py +++ b/app/schemas/comprehensive_data.py @@ -61,6 +61,61 @@ class SectionDataImportRequest(BaseModel): height: Optional[str] = None transition_paragraph: Optional[str] = None +# 原始数据查询请求 +class OriginalDataQueryRequest(BaseModel): + id: Optional[int] = None + bfpcode: Optional[str] = None + mtime: Optional[str] = None + bffb: Optional[str] = None + bfpl: Optional[str] = None + bfpvalue: Optional[str] = None + times: Optional[str] = None + NYID: str + sort: Optional[int] = None + +# 沉降数据查询请求 +class SettlementDataQueryRequest(BaseModel): + id: Optional[int] = None + point_id: Optional[int] = None + 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 SectionDataQueryRequest(BaseModel): + id: Optional[int] = None + 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 + +# 水准数据查询请求 +class LevelDataQueryRequest(BaseModel): + linecode: Optional[str] = None + NYID: Optional[str] = None + benchmarkids: Optional[str] = None + wsphigh: Optional[str] = None + createDate: Optional[str] = None + # 批量导入请求 class BatchSectionDataImportRequest(BaseModel): data: List[SectionDataImportRequest] @@ -77,7 +132,7 @@ class BatchLevelDataImportRequest(BaseModel): class BatchOriginalDataImportRequest(BaseModel): data: List[OriginalDataImportRequest] -# 响应模型 +# 新增响应模型 class DataImportResponse(BaseModel): success: bool message: str @@ -86,6 +141,13 @@ class DataImportResponse(BaseModel): failed_count: int failed_items: List[Dict[str, Any]] = [] +# 查询响应模型 +class DataResponse(BaseModel): + success: bool + message: str + count: int + data: List[Dict[str, Any]] = [] + # 兼容旧接口的模型 class ComprehensiveDataImportRequest(BaseModel): data: Dict[str, Any] diff --git a/app/services/section_data.py b/app/services/section_data.py index 533e026..164118d 100644 --- a/app/services/section_data.py +++ b/app/services/section_data.py @@ -26,7 +26,9 @@ class SectionDataService(BaseService[SectionData]): return self.get_by_field(db, "number", number) def search_section_data(self, db: Session, + id: Optional[int] = None, section_id: Optional[str] = None, + mileage: Optional[str] = None, work_site: Optional[str] = None, number: Optional[str] = None, status: Optional[str] = None, @@ -43,8 +45,14 @@ class SectionDataService(BaseService[SectionData]): conditions["status"] = status if basic_types is not None: conditions["basic_types"] = basic_types - - return self.search_by_conditions(db, conditions) + if id is not None: + conditions['id'] = id + if mileage is not None: + conditions['mileage'] = mileage + + section_data = self.search_by_conditions(db, conditions) + # 查询对应观察点数据 + if len(section_data) > 0: def get_section_with_checkpoints(self, db: Session, section_id: str) -> Dict[str, Any]: """获取断面数据及其关联的观测点""" diff --git a/app/utils/scheduler.py b/app/utils/scheduler.py index 59cf8cd..e73791f 100644 --- a/app/utils/scheduler.py +++ b/app/utils/scheduler.py @@ -81,6 +81,24 @@ class TaskScheduler: except Exception as e: logger.error(f"设置系统定时任务失败: {e}") + # 设置测试任务 + try: + existing_job = self.scheduler.get_job("test_task") + if not existing_job: + # 添加每天每小时重置today_updated字段的任务 + self.scheduler.add_job( + reset_today_updated_task, + 'cron', + id='test_task', + hour='*', + minute=0, + second=0, + name='测试任务' + ) + logger.info("系统定时任务:测试任务已添加") + except Exception as e: + logger.error(f"设置测试任务失败: {e}") + def add_cron_job(self, func, job_id: str, **kwargs): """添加cron定时任务""" return self.scheduler.add_job(func, 'cron', id=job_id, **kwargs) @@ -142,6 +160,7 @@ def reset_today_updated_task(): logger.info("开始执行每日重置账号更新状态任务") # 更新所有账号的today_updated字段为0 + updated_need_count = db.query(Account).filter(Account.today_updated == 1).count() updated_count = db.query(Account).update({Account.today_updated: 0}) db.commit()