123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- from common.BigDataCenterAPI import *
- from models import *
- from sqlalchemy import text
- import json
- def get_rain_township(db,rn):
- resutl = []
- sql = text(f"""
- 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)
- for i in sqlresult:
- print(i)
- resutl.append({
- 'name':i[0],
- 'value':i[1]
- })
- return resutl
- def get_rain_max_time(db):
- sql = text(f"""
- SELECT MAX(CREATE_TIME) FROM sharedb.govdata_rain_data_info;
- """)
- sqlresult = db.execute(sql).first()[0]
- formatted_dt = sqlresult.strftime('%Y-%m-%d %H:%M')
- return formatted_dt
- def get_forest_max_time(db):
- sql = text(f"""
- SELECT MAX(CREATE_TIME) FROM forest_fire;
- """)
- sqlresult = db.execute(sql).first()[0]
- formatted_dt = sqlresult.strftime('%Y-%m-%d %H:%M')
- return formatted_dt
- def get_max_rain_township(db,rn=1):
- resutl = []
- sql = text(f"""
- SELECT name1,area_name,township,sum(rainfall) as rainfall
- FROM (
- SELECT
- b.`area_name` as `name1`,
- a.`code`,
- a.`area_name` AS `area_name`,
- b.`township`,
- 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 '%茂名%'
- ) AS latest_data
- WHERE
- latest_data.`rn` <= {rn}
- GROUp BY name1,area_name,township
- ORDER BY
- sum(latest_data.`rainfall`) DESC
- LIMIT 1;
- """)
- sqlresult = db.execute(sql)
- for i in sqlresult:
- print(i)
- resutl.append({
- 'name':i[0],
- 'area_name':i[1],
- 'township':i[2],
- 'rainfall':i[3]
- })
- return resutl
- def get_max_forest_level(db):
- sql = text('''
- SELECT MAX(subquery.warning_level) as max_level
- FROM (
- SELECT
- AREA_NAME,
- create_time,
- warning_level,
- ROW_NUMBER() OVER (PARTITION BY AREA_CODE ORDER BY create_time DESC) AS rn
- FROM
- `forest_fire`
- ) AS subquery
- WHERE rn = 1;
- ''')
- sqlresult = db.execute(sql).first()[0]
- return sqlresult
- def get_forest_warring(db):
- result = []
- sql=text(''' SELECT *
- FROM (
- SELECT
- AREA_NAME,
- create_time,
- warning_level,
- ROW_NUMBER() OVER (PARTITION BY AREA_CODE ORDER BY create_time DESC) AS rn
- FROM
- `forest_fire`
- ) AS subquery
- WHERE rn = 1;
- ''')
- sqlresult = db.execute(sql)
- for i in sqlresult:
- print(i)
- result.append({
- 'area_name': i[0],
- 'warning_level': i[2],
- 'rn': i[3]
- })
- return result
- def get_max_hazardous_level(db):
- sql = text('''
- SELECT MAX(subquery.warning_level) as max_level
- FROM (
- SELECT
- AREA_NAME,
- create_time,
- warning_level,
- ROW_NUMBER() OVER (PARTITION BY AREA_CODE ORDER BY create_time DESC) AS rn
- FROM
- `hazardous_chemicals`
- ) AS subquery
- WHERE rn = 1;
- ''')
- sqlresult = db.execute(sql).first()[0]
- return sqlresult
- def get_hazardous_warring(db):
- result = []
- sql=text(''' SELECT *
- FROM (
- SELECT
- AREA_NAME,
- create_time,
- warning_level,
- ROW_NUMBER() OVER (PARTITION BY AREA_CODE ORDER BY create_time DESC) AS rn
- FROM
- `hazardous_chemicals`
- ) AS subquery
- WHERE rn = 1;
- ''')
- sqlresult = db.execute(sql)
- for i in sqlresult:
- print(i)
- result.append({
- 'area_name': i[0],
- 'warning_level': i[2],
- 'rn': i[3]
- })
- return result
- def get_hazardous_warring_count(db):
- result = []
- sql='''
- SELECT '重大风险' AS LEVEL,0 AS VAL
- UNION ALL
- SELECT '较大风险' AS LEVEL,5 AS VAL
- UNION ALL
- SELECT '一般风险' AS LEVEL,6 AS VAL
- UNION ALL
- SELECT '低风险' AS LEVEL,23 AS VAL
- '''
- sqlresult = db.execute(sql)
- for i in sqlresult:
- print(i)
- result.append({
- 'LEVEL': i[0],
- 'VALUES': i[1]})
- return result
|