baoyubo 1 settimana fa
parent
commit
59d8024a26
2 ha cambiato i file con 132 aggiunte e 82 eliminazioni
  1. 10 11
      routers/api/riskMonitor/rain_condition.py
  2. 122 71
      utils/risk/__init__.py

+ 10 - 11
routers/api/riskMonitor/rain_condition.py

@@ -62,13 +62,14 @@ async def mine(request: Request,body = Depends(remove_xss_json),db: Session = De
                 one_hour_rain-=1
             elif one_hour[i]["value"] != 0:
                 raining_township+=1
-            elif one_hour[i]['name'] in ['暴雨(50-100)','大暴雨(100-200)','特大暴雨(>200)']:
+            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-200)','特大暴雨(>200)']:
+            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_value = max_rain[0]["rn"]
+        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)
@@ -76,15 +77,13 @@ async def mine(request: Request,body = Depends(remove_xss_json),db: Session = De
         # print(max_rain_value)
         if one_hour_rain==0:
             result = '''{}至当前,当前无地区下雨 。
-                        当前1小时降雨量大于50毫米的镇街 {}个;
-                        当前3小时降雨量大于100毫米的镇街 {}个;
-                    '''.format(max_time,one_hour_more_50,three_hour_more_50)
+                    '''.format(max_time)
 
         else:
-            result = '''{}至当前,全市有 {}个镇街发生降雨, 最大降雨出现在 {},累计雨量为{}毫米 。
-            当前1小时降雨量大于50毫米的镇街 {}个;
-            当前3小时降雨量大于100毫米的镇街 {}个;
-        '''.format(max_time,one_hour_rain,max_rain_township,max_rain_value,one_hour_more_50,three_hour_more_50)
+            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)
 
         #print(result)
 

+ 122 - 71
utils/risk/__init__.py

@@ -11,72 +11,121 @@ import json
 def get_rain_township(db,rn):
     resutl = []
     sql = text(f"""
-        SELECT T1.`name`,IFNULL(T2.num,0)as num FROM (SELECT '特大暴雨(>200)' as `name` union all
-SELECT '大暴雨(100-200)' as `name` union all
-SELECT '暴雨(50-100)' as `name` union all
-SELECT '大雨(25-50)' as `name` union all
-SELECT '中雨(10-25)' as `name` union all
-SELECT '小雨(<10)' as `name` )T1 left join (
- SELECT IFNULL(CASE 
-	WHEN rainfall>0 and rainfall<10 THEN
-		'小雨(<10)'
-	WHEN rainfall>=10 and rainfall<25 THEN
-		'中雨(10-25)'
-	WHEN rainfall>=25 and rainfall<50 THEN
-		'大雨(25-50)'
-	WHEN rainfall>=50 and rainfall<100 THEN
-		'暴雨(50-100)'
-	WHEN rainfall>=100 and rainfall<200 THEN
-		'大暴雨(100-200)'
-	WHEN rainfall>=200 THEN
-		'特大暴雨(>200)'
-	ELSE
-		'0'
-END,'0') as `name` ,COUNT(1) as `num` FROM (
-SELECT 
-    `latest_data`.`township` AS `township`,
-    SUM(`latest_data`.`rainfall`) AS `rainfall`
-FROM (
-    SELECT 
-        a.`code`,
-        MAX(a.`area_name`) AS `area_name`,
-        MAX(a.`update_time`) AS `update_time`,
-        MAX(a.`address`) AS `address`,
-        b.`township`,
-        a.`create_time`,
-        AVG(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 
-        a.`code`, b.`township`, a.`create_time`
-) `latest_data`
-WHERE 
-    `latest_data`.`rn` = {rn}
-GROUP BY 
-    `latest_data`.`township`
-ORDER BY 
-    `rainfall` DESC
-)A GROUP BY IFNULL(CASE 
-	WHEN rainfall>0 and rainfall<10 THEN
-		'小雨(<10)'
-	WHEN rainfall>=10 and rainfall<25 THEN
-		'中雨(10-25)'
-	WHEN rainfall>=25 and rainfall<50 THEN
-		'大雨(25-50)'
-	WHEN rainfall>=50 and rainfall<100 THEN
-		'暴雨(50-100)'
-	WHEN rainfall>=100 and rainfall<200 THEN
-		'大暴雨(100-200)'
-	WHEN rainfall>=200 THEN
-		'特大暴雨(>200)'
-	ELSE
-		'0'
-END,'0'))T2 on T1.`name`=T2.`name`;
+        SELECT
+	T1.`name`,
+	IFNULL(T2.num, 0) AS num
+FROM
+	(
+		SELECT
+			'特大暴雨(>250)' AS `name`
+		UNION ALL
+			SELECT
+				'大暴雨(100-250)' AS `name`
+			UNION ALL
+				SELECT
+					'暴雨(50-100)' AS `name`
+				UNION ALL
+					SELECT
+						'大雨(25-50)' AS `name`
+					UNION ALL
+						SELECT
+							'中雨(10-25)' AS `name`
+						UNION ALL
+							SELECT
+								'小雨(0.1-10)' AS `name`
+	) T1
+LEFT JOIN (
+	SELECT
+		IFNULL(
+			CASE
+			WHEN rainfall > 0
+			AND rainfall < 10 THEN
+				'小雨(0.1-10)'
+			WHEN rainfall >= 10
+			AND rainfall < 25 THEN
+				'中雨(10-25)'
+			WHEN rainfall >= 25
+			AND rainfall < 50 THEN
+				'大雨(25-50)'
+			WHEN rainfall >= 50
+			AND rainfall < 100 THEN
+				'暴雨(50-100)'
+			WHEN rainfall >= 100
+			AND rainfall < 250 THEN
+				'大暴雨(100-250)'
+			WHEN rainfall >= 250 THEN
+				'特大暴雨(>250)'
+			ELSE
+				'无雨'
+			END,
+			'无雨'
+		) AS `name`,
+		COUNT(1) AS `num`
+	FROM
+		(
+			SELECT
+				`latest_data`.`code` AS `code`,
+				sum(`latest_data`.`rainfall`) AS `rainfall`
+			FROM
+				(
+					SELECT
+						`govdata_rain_data_info`.`code` AS `code`,
+						`govdata_rain_data_info`.`area_name` AS `area_name`,
+						`govdata_rain_data_info`.`address` AS `address`,
+						`govdata_rain_data_info`.`create_time` AS `create_time`,
+						`govdata_rain_data_info`.`rainfall` AS `rainfall`,
+						`govdata_rain_data_info`.`update_time` AS `update_time`,
+						row_number () OVER (
+							PARTITION BY `govdata_rain_data_info`.`code`
+							ORDER BY
+								`govdata_rain_data_info`.`create_time` DESC
+						) AS `rn`
+					FROM
+						sharedb.`govdata_rain_data_info`
+				) `latest_data`
+			WHERE
+				(
+					(
+						`latest_data`.`rn` <= {rn}
+					)
+					AND `latest_data`.`code` IN (
+						SELECT
+							`govdata_real_time_address`.`code`
+						FROM
+							sharedb.`govdata_real_time_address`
+					)
+				)
+			GROUP BY
+				`latest_data`.`code`
+			ORDER BY
+				`rainfall` DESC
+		) A
+	GROUP BY
+		IFNULL(
+			CASE
+			WHEN rainfall > 0
+			AND rainfall < 10 THEN
+				'小雨(0.1-10)'
+			WHEN rainfall >= 10
+			AND rainfall < 25 THEN
+				'中雨(10-25)'
+			WHEN rainfall >= 25
+			AND rainfall < 50 THEN
+				'大雨(25-50)'
+			WHEN rainfall >= 50
+			AND rainfall < 100 THEN
+				'暴雨(50-100)'
+			WHEN rainfall >= 100
+			AND rainfall < 250 THEN
+				'大暴雨(100-250)'
+			WHEN rainfall >= 250 THEN
+				'特大暴雨(>250)'
+			ELSE
+				'无雨'
+			END,
+			'无雨'
+		)
+) T2 ON T1.`name` = T2.`name`;
 """)
 
     sqlresult = db.execute(sql)
@@ -111,9 +160,10 @@ def get_forest_max_time(db):
 def get_max_rain_township(db):
     resutl = []
     sql = text(f"""
-        SELECT area_name,township,rn
+        SELECT name1,area_name,township,rainfall
 FROM (
     SELECT 
+				b.`area_name` as `name1`,
         a.`code`,
         MAX(a.`area_name`) AS `area_name`,
         MAX(a.`update_time`) AS `update_time`,
@@ -129,7 +179,7 @@ FROM (
     WHERE 
         a.`address` LIKE '%茂名%'
     GROUP BY 
-        a.`code`, b.`township`, a.`create_time`
+        b.`area_name`,a.`code`, b.`township`, a.`create_time`
 ) AS latest_data
 WHERE 
     latest_data.`rn` = 1
@@ -142,9 +192,10 @@ LIMIT 1;
     for i in sqlresult:
         print(i)
         resutl.append({
-            'area_name':i[0],
-            'township':i[1],
-            'rn':i[2]
+            'name':i[0],
+            'area_name':i[1],
+            'township':i[2],
+            'rainfall':i[3]
         })
     return resutl