rain_condition.py 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends, Query, HTTPException, status
  4. from common.security import valid_access_token
  5. from sqlalchemy.orm import Session
  6. from sqlalchemy.sql import func
  7. from common.auth_user import *
  8. from sqlalchemy import text
  9. from pydantic import BaseModel
  10. from common.BigDataCenterAPI import *
  11. from database import get_db
  12. from typing import List
  13. from utils import *
  14. from utils.risk import *
  15. import json
  16. import traceback
  17. router = APIRouter()
  18. @router.post('/get_township_rain')
  19. async def mine(request: Request,db: Session = Depends(get_db)):
  20. try:
  21. body = await request.json()
  22. rn = body.get('rn')
  23. result = get_rain_township(db,rn)
  24. #print(result)
  25. return {
  26. "code": 200,
  27. "msg": "成功",
  28. "data":
  29. result
  30. }
  31. except Exception as e:
  32. db.rollback()
  33. traceback.print_exc()
  34. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  35. @router.post('/township_rain_warrning')
  36. async def mine(request: Request,body = Depends(remove_xss_json),db: Session = Depends(get_db)):
  37. try:
  38. body = await request.json()
  39. rn = body.get('rn')
  40. if rn is None:
  41. rn=1
  42. rain_data = get_rain_township(db,rn)
  43. raining_township = sum([i['value'] for i in rain_data])
  44. rain_dict = {i['name']:i['value'] for i in rain_data}
  45. max_rain = get_max_rain_township(db,rn)
  46. max_time = get_rain_max_time(db)
  47. max_rain_township = max_rain[0]["township"]
  48. max_rain_name = max_rain[0]["name"]
  49. max_rain_value = max_rain[0]["rainfall"]
  50. if raining_township==0:
  51. result = f'''截至{max_time},近{rn}小时内,当前无地区下雨 。'''
  52. else:
  53. result = f'''截至{max_time},近{rn}小时内,全市有 {raining_township}个站点发生降雨, 最大降雨出现在 {max_rain_township} {max_rain_name} 站点,累计雨量为{max_rain_value}毫米 。\n
  54. 其中,'''
  55. if rain_dict['小雨(0.1-10)']>0:
  56. result+=f"降雨量在0.1-10毫米之间的站点有 {rain_dict['小雨(0.1-10)']} 个;"
  57. if rain_dict['中雨(10-25)']>0:
  58. result+=f"降雨量在10-25毫米之间的站点有 {rain_dict['中雨(10-25)']} 个;"
  59. if rain_dict['大雨(25-50)']>0:
  60. result+=f"降雨量在25-50毫米之间的站点有 {rain_dict['大雨(25-50)']} 个;"
  61. if rain_dict['暴雨(50-100)']>0:
  62. result+=f"降雨量在50-100毫米之间的站点有 {rain_dict['暴雨(50-100)']} 个;"
  63. if rain_dict['大暴雨(100-250)']>0:
  64. result+=f"降雨量在100-250毫米之间的站点有 {rain_dict['大暴雨(100-250)']} 个;"
  65. if rain_dict['特大暴雨(>250)']>0:
  66. result+=f"降雨量大于250毫米的站点有 {rain_dict['特大暴雨(>250)']} 个;"
  67. result= result[:-1]+"。"
  68. #print(result)
  69. return {
  70. "code": 200,
  71. "msg": "成功",
  72. "data":
  73. {"result":result}
  74. }
  75. except Exception as e:
  76. db.rollback()
  77. traceback.print_exc()
  78. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")