__init__.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. from common.BigDataCenterAPI import *
  2. from models import *
  3. from sqlalchemy import text
  4. import json
  5. def get_rain_township(db,rn):
  6. resutl = []
  7. sql = text(f"""
  8. SELECT
  9. T1.`name`,
  10. IFNULL(T2.num, 0) AS num
  11. FROM
  12. (
  13. SELECT
  14. '特大暴雨(>250)' AS `name`
  15. UNION ALL
  16. SELECT
  17. '大暴雨(100-250)' AS `name`
  18. UNION ALL
  19. SELECT
  20. '暴雨(50-100)' AS `name`
  21. UNION ALL
  22. SELECT
  23. '大雨(25-50)' AS `name`
  24. UNION ALL
  25. SELECT
  26. '中雨(10-25)' AS `name`
  27. UNION ALL
  28. SELECT
  29. '小雨(0.1-10)' AS `name`
  30. ) T1
  31. LEFT JOIN (
  32. SELECT
  33. IFNULL(
  34. CASE
  35. WHEN rainfall > 0
  36. AND rainfall < 10 THEN
  37. '小雨(0.1-10)'
  38. WHEN rainfall >= 10
  39. AND rainfall < 25 THEN
  40. '中雨(10-25)'
  41. WHEN rainfall >= 25
  42. AND rainfall < 50 THEN
  43. '大雨(25-50)'
  44. WHEN rainfall >= 50
  45. AND rainfall < 100 THEN
  46. '暴雨(50-100)'
  47. WHEN rainfall >= 100
  48. AND rainfall < 250 THEN
  49. '大暴雨(100-250)'
  50. WHEN rainfall >= 250 THEN
  51. '特大暴雨(>250)'
  52. ELSE
  53. '无雨'
  54. END,
  55. '无雨'
  56. ) AS `name`,
  57. COUNT(1) AS `num`
  58. FROM
  59. (
  60. SELECT
  61. `latest_data`.`code` AS `code`,
  62. sum(`latest_data`.`rainfall`) AS `rainfall`
  63. FROM
  64. (
  65. SELECT
  66. `govdata_rain_data_info`.`code` AS `code`,
  67. `govdata_rain_data_info`.`area_name` AS `area_name`,
  68. `govdata_rain_data_info`.`address` AS `address`,
  69. `govdata_rain_data_info`.`create_time` AS `create_time`,
  70. `govdata_rain_data_info`.`rainfall` AS `rainfall`,
  71. `govdata_rain_data_info`.`update_time` AS `update_time`,
  72. row_number () OVER (
  73. PARTITION BY `govdata_rain_data_info`.`code`
  74. ORDER BY
  75. `govdata_rain_data_info`.`create_time` DESC
  76. ) AS `rn`
  77. FROM
  78. sharedb.`govdata_rain_data_info`
  79. ) `latest_data`
  80. WHERE
  81. (
  82. (
  83. `latest_data`.`rn` <= {rn}
  84. )
  85. AND `latest_data`.`code` IN (
  86. SELECT
  87. `govdata_real_time_address`.`code`
  88. FROM
  89. sharedb.`govdata_real_time_address`
  90. )
  91. )
  92. GROUP BY
  93. `latest_data`.`code`
  94. ORDER BY
  95. `rainfall` DESC
  96. ) A
  97. GROUP BY
  98. IFNULL(
  99. CASE
  100. WHEN rainfall > 0
  101. AND rainfall < 10 THEN
  102. '小雨(0.1-10)'
  103. WHEN rainfall >= 10
  104. AND rainfall < 25 THEN
  105. '中雨(10-25)'
  106. WHEN rainfall >= 25
  107. AND rainfall < 50 THEN
  108. '大雨(25-50)'
  109. WHEN rainfall >= 50
  110. AND rainfall < 100 THEN
  111. '暴雨(50-100)'
  112. WHEN rainfall >= 100
  113. AND rainfall < 250 THEN
  114. '大暴雨(100-250)'
  115. WHEN rainfall >= 250 THEN
  116. '特大暴雨(>250)'
  117. ELSE
  118. '无雨'
  119. END,
  120. '无雨'
  121. )
  122. ) T2 ON T1.`name` = T2.`name`;
  123. """)
  124. sqlresult = db.execute(sql)
  125. for i in sqlresult:
  126. print(i)
  127. resutl.append({
  128. 'name':i[0],
  129. 'value':i[1]
  130. })
  131. return resutl
  132. def get_rain_max_time(db):
  133. sql = text(f"""
  134. SELECT MAX(CREATE_TIME) FROM sharedb.govdata_rain_data_info;
  135. """)
  136. sqlresult = db.execute(sql).first()[0]
  137. formatted_dt = sqlresult.strftime('%Y-%m-%d %H:%M')
  138. return formatted_dt
  139. def get_forest_max_time(db):
  140. sql = text(f"""
  141. SELECT MAX(CREATE_TIME) FROM forest_fire;
  142. """)
  143. sqlresult = db.execute(sql).first()[0]
  144. formatted_dt = sqlresult.strftime('%Y-%m-%d %H:%M')
  145. return formatted_dt
  146. def get_max_rain_township(db,rn=1):
  147. resutl = []
  148. sql = text(f"""
  149. SELECT name1,area_name,township,sum(rainfall) as rainfall
  150. FROM (
  151. SELECT
  152. b.`area_name` as `name1`,
  153. a.`code`,
  154. a.`area_name` AS `area_name`,
  155. b.`township`,
  156. a.`rainfall` AS `rainfall`,
  157. ROW_NUMBER() OVER (PARTITION BY a.`code` ORDER BY a.`create_time` DESC) AS `rn`
  158. FROM
  159. sharedb.`govdata_rain_data_info` a
  160. LEFT JOIN
  161. sharedb.`govdata_real_time_address` b ON a.`code` = b.`code`
  162. WHERE
  163. a.`address` LIKE '%茂名%'
  164. ) AS latest_data
  165. WHERE
  166. latest_data.`rn` <= {rn}
  167. GROUp BY name1,area_name,township
  168. ORDER BY
  169. sum(latest_data.`rainfall`) DESC
  170. LIMIT 1;
  171. """)
  172. sqlresult = db.execute(sql)
  173. for i in sqlresult:
  174. print(i)
  175. resutl.append({
  176. 'name':i[0],
  177. 'area_name':i[1],
  178. 'township':i[2],
  179. 'rainfall':i[3]
  180. })
  181. return resutl
  182. def get_max_forest_level(db):
  183. sql = text('''
  184. SELECT MAX(subquery.warning_level) as max_level
  185. FROM (
  186. SELECT
  187. AREA_NAME,
  188. create_time,
  189. warning_level,
  190. ROW_NUMBER() OVER (PARTITION BY AREA_CODE ORDER BY create_time DESC) AS rn
  191. FROM
  192. `forest_fire`
  193. ) AS subquery
  194. WHERE rn = 1;
  195. ''')
  196. sqlresult = db.execute(sql).first()[0]
  197. return sqlresult
  198. def get_forest_warring(db):
  199. result = []
  200. sql=text(''' SELECT *
  201. FROM (
  202. SELECT
  203. AREA_NAME,
  204. create_time,
  205. warning_level,
  206. ROW_NUMBER() OVER (PARTITION BY AREA_CODE ORDER BY create_time DESC) AS rn
  207. FROM
  208. `forest_fire`
  209. ) AS subquery
  210. WHERE rn = 1;
  211. ''')
  212. sqlresult = db.execute(sql)
  213. for i in sqlresult:
  214. print(i)
  215. result.append({
  216. 'area_name': i[0],
  217. 'warning_level': i[2],
  218. 'rn': i[3]
  219. })
  220. return result
  221. def get_max_hazardous_level(db):
  222. sql = text('''
  223. SELECT MAX(subquery.warning_level) as max_level
  224. FROM (
  225. SELECT
  226. AREA_NAME,
  227. create_time,
  228. warning_level,
  229. ROW_NUMBER() OVER (PARTITION BY AREA_CODE ORDER BY create_time DESC) AS rn
  230. FROM
  231. `hazardous_chemicals`
  232. ) AS subquery
  233. WHERE rn = 1;
  234. ''')
  235. sqlresult = db.execute(sql).first()[0]
  236. return sqlresult
  237. def get_hazardous_warring(db):
  238. result = []
  239. sql=text(''' SELECT *
  240. FROM (
  241. SELECT
  242. AREA_NAME,
  243. create_time,
  244. warning_level,
  245. ROW_NUMBER() OVER (PARTITION BY AREA_CODE ORDER BY create_time DESC) AS rn
  246. FROM
  247. `hazardous_chemicals`
  248. ) AS subquery
  249. WHERE rn = 1;
  250. ''')
  251. sqlresult = db.execute(sql)
  252. for i in sqlresult:
  253. print(i)
  254. result.append({
  255. 'area_name': i[0],
  256. 'warning_level': i[2],
  257. 'rn': i[3]
  258. })
  259. return result
  260. def get_hazardous_warring_count(db):
  261. result = []
  262. sql='''
  263. SELECT '重大风险' AS LEVEL,0 AS VAL
  264. UNION ALL
  265. SELECT '较大风险' AS LEVEL,5 AS VAL
  266. UNION ALL
  267. SELECT '一般风险' AS LEVEL,6 AS VAL
  268. UNION ALL
  269. SELECT '低风险' AS LEVEL,23 AS VAL
  270. '''
  271. sqlresult = db.execute(sql)
  272. for i in sqlresult:
  273. print(i)
  274. result.append({
  275. 'LEVEL': i[0],
  276. 'VALUES': i[1]})
  277. return result