__init__.py 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  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):
  147. resutl = []
  148. sql = text(f"""
  149. SELECT name1,area_name,township,rainfall
  150. FROM (
  151. SELECT
  152. b.`area_name` as `name1`,
  153. a.`code`,
  154. MAX(a.`area_name`) AS `area_name`,
  155. MAX(a.`update_time`) AS `update_time`,
  156. MAX(a.`address`) AS `address`,
  157. b.`township`,
  158. a.`create_time`,
  159. AVG(a.`rainfall`) AS `rainfall`,
  160. ROW_NUMBER() OVER (PARTITION BY a.`code` ORDER BY a.`create_time` DESC) AS `rn`
  161. FROM
  162. sharedb.`govdata_rain_data_info` a
  163. LEFT JOIN
  164. sharedb.`govdata_real_time_address` b ON a.`code` = b.`code`
  165. WHERE
  166. a.`address` LIKE '%茂名%'
  167. GROUP BY
  168. b.`area_name`,a.`code`, b.`township`, a.`create_time`
  169. ) AS latest_data
  170. WHERE
  171. latest_data.`rn` = 1
  172. ORDER BY
  173. latest_data.`rainfall` DESC
  174. LIMIT 1;
  175. """)
  176. sqlresult = db.execute(sql)
  177. for i in sqlresult:
  178. print(i)
  179. resutl.append({
  180. 'name':i[0],
  181. 'area_name':i[1],
  182. 'township':i[2],
  183. 'rainfall':i[3]
  184. })
  185. return resutl
  186. def get_max_forest_level(db):
  187. sql = text('''
  188. SELECT MAX(subquery.warning_level) as max_level
  189. FROM (
  190. SELECT
  191. AREA_NAME,
  192. create_time,
  193. warning_level,
  194. ROW_NUMBER() OVER (PARTITION BY AREA_CODE ORDER BY create_time DESC) AS rn
  195. FROM
  196. `forest_fire`
  197. ) AS subquery
  198. WHERE rn = 1;
  199. ''')
  200. sqlresult = db.execute(sql).first()[0]
  201. return sqlresult
  202. def get_forest_warring(db):
  203. result = []
  204. sql=text(''' SELECT *
  205. FROM (
  206. SELECT
  207. AREA_NAME,
  208. create_time,
  209. warning_level,
  210. ROW_NUMBER() OVER (PARTITION BY AREA_CODE ORDER BY create_time DESC) AS rn
  211. FROM
  212. `forest_fire`
  213. ) AS subquery
  214. WHERE rn = 1;
  215. ''')
  216. sqlresult = db.execute(sql)
  217. for i in sqlresult:
  218. print(i)
  219. result.append({
  220. 'area_name': i[0],
  221. 'warning_level': i[2],
  222. 'rn': i[3]
  223. })
  224. return result
  225. def get_max_hazardous_level(db):
  226. sql = text('''
  227. SELECT MAX(subquery.warning_level) as max_level
  228. FROM (
  229. SELECT
  230. AREA_NAME,
  231. create_time,
  232. warning_level,
  233. ROW_NUMBER() OVER (PARTITION BY AREA_CODE ORDER BY create_time DESC) AS rn
  234. FROM
  235. `hazardous_chemicals`
  236. ) AS subquery
  237. WHERE rn = 1;
  238. ''')
  239. sqlresult = db.execute(sql).first()[0]
  240. return sqlresult
  241. def get_hazardous_warring(db):
  242. result = []
  243. sql=text(''' SELECT *
  244. FROM (
  245. SELECT
  246. AREA_NAME,
  247. create_time,
  248. warning_level,
  249. ROW_NUMBER() OVER (PARTITION BY AREA_CODE ORDER BY create_time DESC) AS rn
  250. FROM
  251. `hazardous_chemicals`
  252. ) AS subquery
  253. WHERE rn = 1;
  254. ''')
  255. sqlresult = db.execute(sql)
  256. for i in sqlresult:
  257. print(i)
  258. result.append({
  259. 'area_name': i[0],
  260. 'warning_level': i[2],
  261. 'rn': i[3]
  262. })
  263. return result
  264. def get_hazardous_warring_count(db):
  265. result = []
  266. sql='''
  267. SELECT '重大风险' AS LEVEL,0 AS VAL
  268. UNION ALL
  269. SELECT '较大风险' AS LEVEL,5 AS VAL
  270. UNION ALL
  271. SELECT '一般风险' AS LEVEL,6 AS VAL
  272. UNION ALL
  273. SELECT '低风险' AS LEVEL,23 AS VAL
  274. '''
  275. sqlresult = db.execute(sql)
  276. for i in sqlresult:
  277. print(i)
  278. result.append({
  279. 'LEVEL': i[0],
  280. 'VALUES': i[1]})
  281. return result