#!/usr/bin/env python3 # -*- coding: utf-8 -*- from fastapi import APIRouter, Request, Depends, Query, HTTPException, status from common.security import valid_access_token from sqlalchemy.orm import Session from sqlalchemy.sql import func from common.auth_user import * from sqlalchemy import text from pydantic import BaseModel from common.BigDataCenterAPI import * from database import get_db from typing import List from utils import * from utils.risk import * import json import traceback router = APIRouter() @router.post('/get_township_rain') async def mine(request: Request,db: Session = Depends(get_db)): try: body = await request.json() rn = body.get('rn') result = get_rain_township(db,rn) #print(result) return { "code": 200, "msg": "成功", "data": result } except Exception as e: db.rollback() traceback.print_exc() raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}") @router.post('/township_rain_warrning') async def mine(request: Request,body = Depends(remove_xss_json),db: Session = Depends(get_db)): try: body = await request.json() rn = body.get('rn') if rn is None: rn=1 rain_data = get_rain_township(db,rn) raining_township = sum([i['value'] for i in rain_data]) rain_dict = {i['name']:i['value'] for i in rain_data} max_rain = get_max_rain_township(db,rn) max_time = get_rain_max_time(db) max_rain_township = max_rain[0]["township"] max_rain_name = max_rain[0]["name"] max_rain_value = max_rain[0]["rainfall"] if raining_township==0: result = f'''截至{max_time},近{rn}小时内,当前无地区下雨 。''' else: result = f'''截至{max_time},近{rn}小时内,全市有 {raining_township}个站点发生降雨, 最大降雨出现在 {max_rain_township} {max_rain_name} 站点,累计雨量为{max_rain_value}毫米 。\n 其中,''' if rain_dict['小雨(0.1-10)']>0: result+=f"降雨量在0.1-10毫米之间的站点有 {rain_dict['小雨(0.1-10)']} 个;" if rain_dict['中雨(10-25)']>0: result+=f"降雨量在10-25毫米之间的站点有 {rain_dict['中雨(10-25)']} 个;" if rain_dict['大雨(25-50)']>0: result+=f"降雨量在25-50毫米之间的站点有 {rain_dict['大雨(25-50)']} 个;" if rain_dict['暴雨(50-100)']>0: result+=f"降雨量在50-100毫米之间的站点有 {rain_dict['暴雨(50-100)']} 个;" if rain_dict['大暴雨(100-250)']>0: result+=f"降雨量在100-250毫米之间的站点有 {rain_dict['大暴雨(100-250)']} 个;" if rain_dict['特大暴雨(>250)']>0: result+=f"降雨量大于250毫米的站点有 {rain_dict['特大暴雨(>250)']} 个;" result= result[:-1]+"。" #print(result) return { "code": 200, "msg": "成功", "data": {"result":result} } except Exception as e: db.rollback() traceback.print_exc() raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")