فهرست منبع

250621-1代码。

baoyubo 1 هفته پیش
والد
کامیت
d5d4c10f06
2فایلهای تغییر یافته به همراه32 افزوده شده و 46 حذف شده
  1. 23 33
      routers/api/riskMonitor/rain_condition.py
  2. 9 13
      utils/risk/__init__.py

+ 23 - 33
routers/api/riskMonitor/rain_condition.py

@@ -46,45 +46,35 @@ async def mine(request: Request,body = Depends(remove_xss_json),db: Session = De
     try:
         body = await request.json()
         rn = body.get('rn')
-        one_hour = get_rain_township(db,1)
-        three_hour = get_rain_township(db,3)
-        max_rain = get_max_rain_township(db)
-        # print(one_hour)
-        # print(three_hour)
-        one_hour_rain = 6
-        one_hour_more_50 = 0
-        three_hour_more_50 = 0
+        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)
-        result = ''
-        raining_township = 0
-        for i in range(len(one_hour)):
-            if one_hour[i]["value"] == 0:
-                one_hour_rain-=1
-            elif one_hour[i]["value"] != 0:
-                raining_township+=1
-            elif one_hour[i]['name'] in ['暴雨(50-100)','大暴雨(100-250)','特大暴雨(>250)']:
-                one_hour_more_50+=one_hour[i]["value"]
-            elif three_hour[i]['name'] in ['大暴雨(100-250)','特大暴雨(>250)']:
-                three_hour_more_50+=one_hour[i]["value"]
-        print(max_rain[0])
         max_rain_township = max_rain[0]["township"]
         max_rain_name = max_rain[0]["name"]
         max_rain_value = max_rain[0]["rainfall"]
-        # print(one_hour_rain)
-        # print(one_hour_more_50)
-        # print(three_hour_more_50)
-        # print(max_rain_township)
-        # print(max_rain_value)
-        if one_hour_rain==0:
-            result = '''{}至当前,当前无地区下雨 。
-                    '''.format(max_time)
 
+        if raining_township==0:
+            result = f'''截至{max_time},近{rn}小时内,当前无地区下雨 。'''
         else:
-            result = '''{}至当前,全市有 {}个站点发生降雨, 最大降雨出现在 {} {} 站点,累计雨量为{}毫米 。
-            当前1小时降雨量大于50毫米的站点 {}个;
-            当前3小时降雨量大于100毫米的站点 {}个;
-        '''.format(max_time,one_hour_rain,max_rain_township,max_rain_name,max_rain_value,one_hour_more_50,three_hour_more_50)
-
+            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 {

+ 9 - 13
utils/risk/__init__.py

@@ -157,34 +157,30 @@ def get_forest_max_time(db):
 
     return formatted_dt
 
-def get_max_rain_township(db):
+def get_max_rain_township(db,rn=1):
     resutl = []
     sql = text(f"""
-        SELECT name1,area_name,township,rainfall
+        SELECT name1,area_name,township,sum(rainfall) as rainfall
 FROM (
     SELECT 
-				b.`area_name` as `name1`,
+		b.`area_name` as `name1`,
         a.`code`,
-        MAX(a.`area_name`) AS `area_name`,
-        MAX(a.`update_time`) AS `update_time`,
-        MAX(a.`address`) AS `address`,
+        a.`area_name` AS `area_name`,
         b.`township`,
-        a.`create_time`,
-        AVG(a.`rainfall`) AS `rainfall`,
+        a.`rainfall` AS `rainfall`,
         ROW_NUMBER() OVER (PARTITION BY a.`code` ORDER BY a.`create_time` DESC) AS `rn`
     FROM 
         sharedb.`govdata_rain_data_info` a
     LEFT JOIN 
         sharedb.`govdata_real_time_address` b ON a.`code` = b.`code`
     WHERE 
-        a.`address` LIKE '%茂名%'
-    GROUP BY 
-        b.`area_name`,a.`code`, b.`township`, a.`create_time`
+        a.`address` LIKE '%茂名%' 
 ) AS latest_data
 WHERE 
-    latest_data.`rn` = 1
+    latest_data.`rn` <= {rn}
+GROUp BY name1,area_name,township
 ORDER BY 
-    latest_data.`rainfall` DESC
+    sum(latest_data.`rainfall`) DESC
 LIMIT 1;
 """)