MesAdw300DataDao.xml 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.jeesite.modules.mes.dao.MesAdw300DataDao">
  4. <select id="findDeviceSnList" resultType="String">
  5. SELECT DISTINCT device_sn
  6. FROM mes_adw300_data
  7. WHERE status = '0'
  8. AND device_sn IS NOT NULL
  9. AND device_sn != ''
  10. ORDER BY device_sn
  11. </select>
  12. <select id="countByDeviceAndReportTimeRange" resultType="Long">
  13. SELECT COUNT(1)
  14. FROM mes_adw300_data
  15. WHERE status = '0'
  16. AND device_sn = #{deviceSn}
  17. AND report_time &gt;= #{startTime}
  18. AND report_time &lt; #{endTime}
  19. </select>
  20. <select id="findLatestSnapshot" resultType="java.util.Map">
  21. SELECT
  22. a.device_sn AS deviceSn,
  23. a.report_time AS reportTime,
  24. DATE_FORMAT(a.report_time, '%Y-%m-%d %H:%i:%s') AS reportTimeText,
  25. a.topic AS topic,
  26. a.point_id AS pointId,
  27. a.point_name AS pointName,
  28. a.point_value AS pointValue,
  29. a.unit AS unit
  30. FROM mes_adw300_data a
  31. INNER JOIN (
  32. SELECT device_sn, MAX(report_time) AS report_time
  33. FROM mes_adw300_data
  34. WHERE status = '0'
  35. AND device_sn IS NOT NULL
  36. AND device_sn != ''
  37. GROUP BY device_sn
  38. ) b ON a.device_sn = b.device_sn AND a.report_time = b.report_time
  39. WHERE a.status = '0'
  40. ORDER BY a.device_sn, a.point_id
  41. </select>
  42. <select id="findTodayEnergy" resultType="java.util.Map">
  43. SELECT
  44. first_t.device_sn AS deviceSn,
  45. ROUND(CAST(last_t.point_value AS DECIMAL(18, 4)) - CAST(first_t.point_value AS DECIMAL(18, 4)), 3) AS energy
  46. FROM mes_adw300_data first_t
  47. INNER JOIN (
  48. SELECT device_sn, MIN(report_time) AS report_time
  49. FROM mes_adw300_data
  50. WHERE status = '0'
  51. AND point_id = 28
  52. AND report_time &gt;= #{startTime}
  53. AND report_time &lt; #{endTime}
  54. AND point_value REGEXP '^-?[0-9]+(\\.[0-9]+)?$'
  55. GROUP BY device_sn
  56. ) first_x ON first_x.device_sn = first_t.device_sn AND first_x.report_time = first_t.report_time
  57. INNER JOIN (
  58. SELECT device_sn, MAX(report_time) AS report_time
  59. FROM mes_adw300_data
  60. WHERE status = '0'
  61. AND point_id = 28
  62. AND report_time &gt;= #{startTime}
  63. AND report_time &lt; #{endTime}
  64. AND point_value REGEXP '^-?[0-9]+(\\.[0-9]+)?$'
  65. GROUP BY device_sn
  66. ) last_x ON last_x.device_sn = first_t.device_sn
  67. INNER JOIN mes_adw300_data last_t
  68. ON last_t.device_sn = last_x.device_sn
  69. AND last_t.report_time = last_x.report_time
  70. AND last_t.point_id = 28
  71. WHERE first_t.status = '0'
  72. AND first_t.point_id = 28
  73. AND first_t.point_value REGEXP '^-?[0-9]+(\\.[0-9]+)?$'
  74. </select>
  75. <select id="findHourlyEnergy" resultType="java.util.Map">
  76. SELECT
  77. last_t.device_sn AS deviceSn,
  78. DATE_FORMAT(last_t.report_time, '%H:00') AS hourLabel,
  79. ROUND(GREATEST(CAST(last_t.point_value AS DECIMAL(18, 4)) - CAST(first_t.point_value AS DECIMAL(18, 4)), 0), 3) AS energy
  80. FROM mes_adw300_data last_t
  81. INNER JOIN (
  82. SELECT device_sn, DATE_FORMAT(report_time, '%H:00') AS hour_label, MAX(report_time) AS report_time
  83. FROM mes_adw300_data
  84. WHERE status = '0'
  85. AND point_id = 28
  86. AND report_time &gt;= #{startTime}
  87. AND report_time &lt; #{endTime}
  88. AND point_value REGEXP '^-?[0-9]+(\\.[0-9]+)?$'
  89. GROUP BY device_sn, DATE_FORMAT(report_time, '%H:00')
  90. ) last_x ON last_x.device_sn = last_t.device_sn AND last_x.report_time = last_t.report_time
  91. INNER JOIN (
  92. SELECT device_sn, MIN(report_time) AS report_time
  93. FROM mes_adw300_data
  94. WHERE status = '0'
  95. AND point_id = 28
  96. AND report_time &gt;= #{startTime}
  97. AND report_time &lt; #{endTime}
  98. AND point_value REGEXP '^-?[0-9]+(\\.[0-9]+)?$'
  99. GROUP BY device_sn
  100. ) first_x ON first_x.device_sn = last_t.device_sn
  101. INNER JOIN mes_adw300_data first_t
  102. ON first_t.device_sn = first_x.device_sn
  103. AND first_t.report_time = first_x.report_time
  104. AND first_t.point_id = 28
  105. WHERE last_t.status = '0'
  106. AND last_t.point_id = 28
  107. AND last_t.point_value REGEXP '^-?[0-9]+(\\.[0-9]+)?$'
  108. AND first_t.status = '0'
  109. AND first_t.point_value REGEXP '^-?[0-9]+(\\.[0-9]+)?$'
  110. ORDER BY hourLabel, deviceSn
  111. </select>
  112. <select id="findDailyEnergy" resultType="java.util.Map">
  113. SELECT
  114. first_t.device_sn AS deviceSn,
  115. DATE_FORMAT(first_x.day_start, '%m-%d') AS dayLabel,
  116. ROUND(GREATEST(CAST(last_t.point_value AS DECIMAL(18, 4)) - CAST(first_t.point_value AS DECIMAL(18, 4)), 0), 3) AS energy
  117. FROM mes_adw300_data first_t
  118. INNER JOIN (
  119. SELECT
  120. device_sn,
  121. DATE_FORMAT(report_time, '%Y-%m-%d') AS day_start,
  122. MIN(report_time) AS report_time
  123. FROM mes_adw300_data
  124. WHERE status = '0'
  125. AND point_id = 28
  126. AND report_time &gt;= #{startTime}
  127. AND report_time &lt; #{endTime}
  128. AND point_value REGEXP '^-?[0-9]+(\\.[0-9]+)?$'
  129. GROUP BY device_sn, DATE_FORMAT(report_time, '%Y-%m-%d')
  130. ) first_x ON first_x.device_sn = first_t.device_sn AND first_x.report_time = first_t.report_time
  131. INNER JOIN (
  132. SELECT
  133. device_sn,
  134. DATE_FORMAT(report_time, '%Y-%m-%d') AS day_start,
  135. MAX(report_time) AS report_time
  136. FROM mes_adw300_data
  137. WHERE status = '0'
  138. AND point_id = 28
  139. AND report_time &gt;= #{startTime}
  140. AND report_time &lt; #{endTime}
  141. AND point_value REGEXP '^-?[0-9]+(\\.[0-9]+)?$'
  142. GROUP BY device_sn, DATE_FORMAT(report_time, '%Y-%m-%d')
  143. ) last_x ON last_x.device_sn = first_t.device_sn AND last_x.day_start = first_x.day_start
  144. INNER JOIN mes_adw300_data last_t
  145. ON last_t.device_sn = last_x.device_sn
  146. AND last_t.report_time = last_x.report_time
  147. AND last_t.point_id = 28
  148. WHERE first_t.status = '0'
  149. AND first_t.point_id = 28
  150. AND first_t.point_value REGEXP '^-?[0-9]+(\\.[0-9]+)?$'
  151. AND last_t.status = '0'
  152. AND last_t.point_value REGEXP '^-?[0-9]+(\\.[0-9]+)?$'
  153. ORDER BY dayLabel, deviceSn
  154. </select>
  155. <!-- 查询数据
  156. <select id="findList" resultType="MesAdw300Data">
  157. SELECT ${sqlMap.column.toSql()}
  158. FROM ${sqlMap.table.toSql()}
  159. <where>
  160. ${sqlMap.where.toSql()}
  161. </where>
  162. ORDER BY ${sqlMap.order.toSql()}
  163. </select> -->
  164. <select id="findTodayEnergyByPower" resultType="java.util.Map">
  165. SELECT
  166. deviceSn,
  167. ROUND(SUM(energy), 3) AS energy
  168. FROM (
  169. SELECT
  170. t.device_sn AS deviceSn,
  171. ABS(CAST(t.point_value AS DECIMAL(18, 4))) *
  172. LEAST(IFNULL(TIMESTAMPDIFF(SECOND, t.report_time, next_t.next_time), 0), 600) / 3600 AS energy
  173. FROM mes_adw300_data t
  174. LEFT JOIN (
  175. SELECT
  176. a.id,
  177. MIN(b.report_time) AS next_time
  178. FROM mes_adw300_data a
  179. INNER JOIN mes_adw300_data b
  180. ON b.status = '0'
  181. AND b.device_sn = a.device_sn
  182. AND b.point_id = a.point_id
  183. AND b.report_time &gt; a.report_time
  184. WHERE a.status = '0'
  185. AND a.point_id = 13
  186. AND a.report_time &gt;= #{startTime}
  187. AND a.report_time &lt; #{endTime}
  188. GROUP BY a.id
  189. ) next_t ON next_t.id = t.id
  190. WHERE t.status = '0'
  191. AND t.point_id = 13
  192. AND t.report_time &gt;= #{startTime}
  193. AND t.report_time &lt; #{endTime}
  194. AND t.point_value REGEXP '^-?[0-9]+(\\.[0-9]+)?$'
  195. ) x
  196. GROUP BY deviceSn
  197. </select>
  198. <select id="findHourlyEnergyByPower" resultType="java.util.Map">
  199. SELECT
  200. deviceSn,
  201. hourLabel,
  202. ROUND(SUM(energy), 3) AS energy
  203. FROM (
  204. SELECT
  205. t.device_sn AS deviceSn,
  206. DATE_FORMAT(t.report_time, '%H:00') AS hourLabel,
  207. ABS(CAST(t.point_value AS DECIMAL(18, 4))) *
  208. LEAST(IFNULL(TIMESTAMPDIFF(SECOND, t.report_time, next_t.next_time), 0), 600) / 3600 AS energy
  209. FROM mes_adw300_data t
  210. LEFT JOIN (
  211. SELECT
  212. a.id,
  213. MIN(b.report_time) AS next_time
  214. FROM mes_adw300_data a
  215. INNER JOIN mes_adw300_data b
  216. ON b.status = '0'
  217. AND b.device_sn = a.device_sn
  218. AND b.point_id = a.point_id
  219. AND b.report_time &gt; a.report_time
  220. WHERE a.status = '0'
  221. AND a.point_id = 13
  222. AND a.report_time &gt;= #{startTime}
  223. AND a.report_time &lt; #{endTime}
  224. GROUP BY a.id
  225. ) next_t ON next_t.id = t.id
  226. WHERE t.status = '0'
  227. AND t.point_id = 13
  228. AND t.report_time &gt;= #{startTime}
  229. AND t.report_time &lt; #{endTime}
  230. AND t.point_value REGEXP '^-?[0-9]+(\\.[0-9]+)?$'
  231. ) x
  232. GROUP BY deviceSn, hourLabel
  233. ORDER BY hourLabel, deviceSn
  234. </select>
  235. </mapper>