__init__.py 6.4 KB

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