rainfall_util.py 2.9 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 fastapi.responses import JSONResponse
  6. from sqlalchemy.orm import Session
  7. from sqlalchemy import and_, or_,text
  8. from sqlalchemy.sql import func
  9. from sqlalchemy.future import select
  10. from common.auth_user import *
  11. from pydantic import BaseModel
  12. from database import get_db
  13. from typing import List
  14. from models import *
  15. from utils import *
  16. from utils.ry_system_util import *
  17. from utils.video_util import *
  18. from collections import defaultdict
  19. import traceback
  20. from concurrent.futures import ThreadPoolExecutor, as_completed
  21. from jobs.rainfall_conditions_job import get_stcd_data
  22. from multiprocessing import Pool, cpu_count
  23. import json
  24. import time
  25. import math
  26. def get_real_code(db,longitude,latitude):
  27. sql = text("""
  28. SELECT area_name, `code`, longitude, latitude, distance FROM (
  29. SELECT
  30. area_name,
  31. `code`,
  32. longitude,
  33. latitude,
  34. ST_Distance_Sphere(
  35. ST_GeomFromText(CONCAT('POINT(', longitude, ' ', latitude, ')')),
  36. ST_GeomFromText(:point)
  37. ) AS distance
  38. FROM govdata_real_time_address
  39. WHERE longitude IS NOT NULL AND latitude IS NOT NULL
  40. ORDER BY distance ASC
  41. LIMIT 1
  42. ) T
  43. """).bindparams(point=f"POINT({longitude} {latitude})")
  44. # 执行查询
  45. result = db.execute(sql).fetchone()
  46. # 处理结果
  47. if result:
  48. return dict(result)['code']
  49. else:
  50. return None
  51. # def get_rainfall(
  52. # code: str,num:int,
  53. # db: Session = Depends(get_db)
  54. # ):
  55. # value=0
  56. # rainfulldata = get_stcd_data(code,num+1)
  57. # for i in rainfulldata:
  58. # value += i['F3070220000034_000018005']
  59. #
  60. # return value
  61. def get_rainfall(
  62. code: str,num:int=24,
  63. db: Session = Depends(get_db)
  64. ):
  65. value=0
  66. now = datetime.now()
  67. twenty_four_hours_ago = now - timedelta(hours=num+1)
  68. formatted_now = f"{now.strftime('%Y-%m-%d %H')}:00:00"
  69. formatted_twenty_four_hours_ago = f"{twenty_four_hours_ago.strftime('%Y-%m-%d %H')}:00:00"
  70. sql = text("""SELECT SUM(rainfall) as rainfall FROM `govdata_rain_data_info` where `code`=:code and create_time BETWEEN :formatted_twenty_four_hours_ago and :formatted_now""").bindparams(code=code,formatted_twenty_four_hours_ago=formatted_twenty_four_hours_ago,formatted_now=formatted_now)
  71. # 执行查询
  72. result = db.execute(sql).fetchone()
  73. # 处理结果
  74. if result:
  75. return dict(result)['rainfall']
  76. else:
  77. return 0
  78. # rainfulldata = get_stcd_data(code,num+1)
  79. # for i in rainfulldata:
  80. # value += i['F3070220000034_000018005']
  81. #
  82. # return value