diff --git a/app/api/v1/endpoints/events.py b/app/api/v1/endpoints/events.py index cde34e8..c52372d 100644 --- a/app/api/v1/endpoints/events.py +++ b/app/api/v1/endpoints/events.py @@ -104,14 +104,17 @@ async def delete_event( return BaseResponse(code=404,msg="事件不存在") return BaseResponse(code=200, msg="success", data=EventDetail.model_validate(event_obj)) +# 获取告警消息列表 @router.get("/events/messages", response_model=BaseResponse[List[OcrAlertMessage]]) async def get_messages( - db: AsyncSession = Depends(get_db) + db: AsyncSession = Depends(get_db), + skip: int = Query(0, ge=0), + limit: int = Query(100, ge=1, le=1000) ): """_summary_ 获取告警消息列表 """ - message = await event.get_messages(db) + message = await event.get_messages(db, skip=skip, limit=limit) return BaseResponse(code=200, msg="success", data=message) # 批量处理告警数据--传递messageId List @@ -160,6 +163,19 @@ async def handle_ocr_alert( if flag: return BaseResponse(code=200, msg="success") return BaseResponse(code=500, msg="fail to update data") + + +# 查看告警详情 +@router.get("/events/alert/{messageId}", response_model=BaseResponse[OcrAlertMessage]) +async def get_alert_detail( + messageId:int, + db: AsyncSession = Depends(get_db), +): + + alert_message = await event.get_alert_detail(db, messageId=messageId) + + return BaseResponse(code=200, msg="success", data=alert_message) + diff --git a/app/core/config.py b/app/core/config.py index 183d6fd..a66c714 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -2,10 +2,10 @@ from pydantic_settings import BaseSettings class Settings(BaseSettings): # 数据库配置 - DB_HOST: str = "10.0.0.17" + DB_HOST: str = "14.103.162.172" DB_PORT: int = 3306 DB_USER: str = "root" - DB_PASSWORD: str = "root" + DB_PASSWORD: str = "dnxxkj" DB_NAME: str = "kangda" # DB_NAME: str = "kangda_test" # 测试数据库 diff --git a/app/crud/event.py b/app/crud/event.py index a7d86eb..0e5b2e7 100644 --- a/app/crud/event.py +++ b/app/crud/event.py @@ -190,6 +190,8 @@ class CRUDEvent(CRUDBase[Event, EventUpdate, EventUpdate]): async def get_messages( self, db: AsyncSession, + skip:int, + limit:int ) -> Optional[List[OcrAlertMessage]]: query_stmt = ( select(Message.messageId,Message.eventId ,Message.messageType, Message.eventType, Message.handle, Message.remark, Message.createTime, @@ -200,6 +202,8 @@ class CRUDEvent(CRUDBase[Event, EventUpdate, EventUpdate]): .outerjoin(Event, Message.eventId == Event.eventId) .outerjoin(Image, Message.eventId == Image.eventId) .outerjoin(Temperature, Message.eventId == Temperature.eventId) + .offset(skip) + .limit(limit) ) messages = await db.execute(query_stmt) @@ -293,9 +297,33 @@ class CRUDEvent(CRUDBase[Event, EventUpdate, EventUpdate]): return True except Exception as e: - print(f"处理单个消息失败: {str(e)}") + print(f"处理单个消息失败: {e}") await db.rollback() return False + + async def get_alert_detail( + self, + db: AsyncSession, + messageId: int + ) ->Optional[OcrAlertMessage]: + try: + select_stmt = ( + select(Message.messageId,Message.eventId ,Message.messageType, Message.eventType, Message.handle, Message.remark, Message.createTime, + Event.number,Event.name, + Image.imageUrl, Image.localPath, + Temperature.temperature) + .select_from(Message) + .outerjoin(Event, Message.eventId == Event.eventId) + .outerjoin(Image, Message.eventId == Image.eventId) + .outerjoin(Temperature, Message.eventId == Temperature.eventId) + .where(Message.messageId == messageId) + ) + + result = await db.execute(select_stmt) + return result.mappings().first() + except Exception as e: + print(f"获取告警详情失败: {e}") +