__init__.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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. `govdata_rain_data_info` a
  45. LEFT JOIN
  46. `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_max_time(db):
  84. resutl = []
  85. sql = text(f"""
  86. SELECT MAX(CREATE_TIME) FROM govdata_rain_data_info;
  87. """)
  88. sqlresult = db.execute(sql).first()[0]
  89. formatted_dt = sqlresult.strftime('%Y-%m-%d %H:%M')
  90. return formatted_dt
  91. def get_max_rain_township(db):
  92. resutl = []
  93. sql = text(f"""
  94. SELECT area_name,township,rn
  95. FROM (
  96. SELECT
  97. a.`code`,
  98. MAX(a.`area_name`) AS `area_name`,
  99. MAX(a.`update_time`) AS `update_time`,
  100. MAX(a.`address`) AS `address`,
  101. b.`township`,
  102. a.`create_time`,
  103. AVG(a.`rainfall`) AS `rainfall`,
  104. ROW_NUMBER() OVER (PARTITION BY a.`code` ORDER BY a.`create_time` DESC) AS `rn`
  105. FROM
  106. `govdata_rain_data_info` a
  107. LEFT JOIN
  108. `govdata_real_time_address` b ON a.`code` = b.`code`
  109. WHERE
  110. a.`address` LIKE '%茂名%'
  111. GROUP BY
  112. a.`code`, b.`township`, a.`create_time`
  113. ) AS latest_data
  114. WHERE
  115. latest_data.`rn` = 1
  116. ORDER BY
  117. latest_data.`rainfall` DESC
  118. LIMIT 1;
  119. """)
  120. sqlresult = db.execute(sql)
  121. for i in sqlresult:
  122. print(i)
  123. resutl.append({
  124. 'area_name':i[0],
  125. 'township':i[1],
  126. 'rn':i[2]
  127. })
  128. return resutl