You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

274 lines
8.1 KiB

  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.iformall.mapper.KwMeterDataMapper">
  4. <resultMap id="BaseResultMap" type="com.iformall.domain.po.KwMeterData">
  5. <id column="id" jdbcType="BIGINT" property="id"/>
  6. <result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/>
  7. <result column="meter_id" jdbcType="BIGINT" property="meterId"/>
  8. <result column="box_id" jdbcType="BIGINT" property="boxId"/>
  9. <result column="address" jdbcType="VARCHAR" property="address"/>
  10. <result column="total_power" jdbcType="INTEGER" property="totalPower"/>
  11. <result column="device_time" jdbcType="TIMESTAMP" property="deviceTime"/>
  12. <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
  13. <result column="used_power" jdbcType="INTEGER" property="usedPower"/>
  14. <result column="last_device_time" jdbcType="TIMESTAMP" property="lastDeviceTime"/>
  15. <result column="last_total_power" jdbcType="INTEGER" property="lastTotalPower"/>
  16. </resultMap>
  17. <sql id="allColumns">
  18. `id`,`tenant_id`,`meter_id`,`box_id`,`address`,`total_power`,`device_time`,`create_time`,`used_power`,`last_device_time`,`last_total_power`
  19. </sql>
  20. <sql id="dynamicWhereConditions">
  21. where 1 = 1
  22. <if test=" null != id ">
  23. and `id` = #{id}
  24. </if>
  25. <if test=" null != tenantId ">
  26. and `tenant_id` = #{tenantId}
  27. </if>
  28. <if test=" null != boxId ">
  29. and `box_id` = #{boxId}
  30. </if>
  31. <if test=" null != meterId ">
  32. and `meter_id` = #{meterId}
  33. </if>
  34. <if test=" null != address ">
  35. and `address` = #{address}
  36. </if>
  37. <if test=" null != totalPower ">
  38. and `total_power` is not null
  39. </if>
  40. <if test=" null != ids ">
  41. and id in
  42. <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
  43. #{idItem}
  44. </foreach>
  45. </if>
  46. <if test=" null != sortColumns">order by ${sortColumns}</if>
  47. </sql>
  48. <select id="findList" parameterType="com.iformall.domain.po.KwMeterData" resultMap="BaseResultMap">
  49. select
  50. <include refid="allColumns"/>
  51. from kw_meter_data
  52. <include refid="dynamicWhereConditions"/>
  53. </select>
  54. <select id="findLastRecordList" parameterType="com.iformall.domain.po.KwMeterData" resultMap="BaseResultMap">
  55. select
  56. <include refid="allColumns"/>
  57. from kw_meter_data
  58. join
  59. (
  60. select
  61. `meter_id` as maxMeterId,
  62. max(`create_time`) as maxTime
  63. from kw_meter_data
  64. where
  65. `total_power` is not null
  66. <if test=" null != meterId ">
  67. and `meter_id` = #{meterId}
  68. </if>
  69. <if test=" null != ids ">
  70. and `meter_id` in
  71. <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
  72. #{idItem}
  73. </foreach>
  74. </if>
  75. group by `meter_id`
  76. ) temp
  77. where
  78. create_time = temp.maxTime
  79. and meter_id = temp.maxMeterId
  80. group by `meter_id`
  81. </select>
  82. <resultMap id="VoResultMap" type="com.iformall.domain.vo.KwMeterDataVo">
  83. <result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/>
  84. <result column="totalPower" jdbcType="INTEGER" property="totalPower"/>
  85. <result column="lastTotalPower" jdbcType="INTEGER" property="lastTotalPower"/>
  86. <result column="usedPower" jdbcType="INTEGER" property="usedPower"/>
  87. <result column="reportTime" jdbcType="VARCHAR" property="reportTime"/>
  88. <result column="recordStartTime" jdbcType="TIMESTAMP" property="recordStartTime"/>
  89. <result column="recordEndTime" jdbcType="TIMESTAMP" property="recordEndTime"/>
  90. </resultMap>
  91. <sql id="dynamicWhereConditionsVo">
  92. where 1 = 1
  93. <if test=" null != tenantId ">
  94. and `tenant_id` = #{tenantId}
  95. </if>
  96. <if test=" null != boxId ">
  97. and `box_id` = #{boxId}
  98. </if>
  99. <if test=" null != meterId ">
  100. and `meter_id` = #{meterId}
  101. </if>
  102. <if test=" null != address ">
  103. and `address` = #{address}
  104. </if>
  105. <if test=" null != startTime and null != endTime ">
  106. and `create_time` between #{startTime} and #{endTime}
  107. </if>
  108. <if test=" null == reportType and null != reportTime">
  109. and date_format(`create_time`, '%Y-%m-%d %H:00') = #{reportTime}
  110. </if>
  111. <if test=" 1 == reportType and null != reportTime">
  112. and date_format(`create_time`, '%Y-%m-%d') = #{reportTime}
  113. </if>
  114. <if test=" 2 == reportType and null != reportTime">
  115. and date_format(`create_time`, '%Y-%m') = #{reportTime}
  116. </if>
  117. <if test=" 3 == reportType and null != reportTime">
  118. and date_format(`create_time`, '%Y') = #{reportTime}
  119. </if>
  120. <if test=" 4 == reportType and null != reportTime">
  121. and date_format(`create_time`, '%Y-%m') = #{reportTime}
  122. </if>
  123. </sql>
  124. <select id="findVoList" parameterType="com.iformall.domain.dto.KwMeterDataDto" resultMap="VoResultMap">
  125. select
  126. temp.tenant_id,
  127. temp.reportTime,
  128. <if test="4 != reportType ">
  129. min(temp.recordStartTime) as recordStartTime,
  130. max(temp.recordEndTime) as recordEndTime,
  131. sum(temp.totalPower) as totalPower,
  132. sum(temp.lastTotalPower) as lastTotalPower,
  133. </if>
  134. sum(temp.usedPower) as usedPower
  135. from
  136. (SELECT
  137. tenant_id,box_id,meter_id,
  138. <if test=" null == reportType">
  139. create_time as reportTime,
  140. </if>
  141. <if test="1 == reportType ">
  142. date_format(create_time, '%Y-%m-%d %H:00') as reportTime,
  143. </if>
  144. <if test="2 == reportType ">
  145. date_format(create_time, '%Y-%m-%d') as reportTime,
  146. </if>
  147. <if test="3 == reportType ">
  148. date_format(create_time, '%Y-%m') as reportTime,
  149. </if>
  150. <if test="4 == reportType ">
  151. date_format(create_time, '%H:00') as reportTime,
  152. </if>
  153. <if test="4 != reportType ">
  154. min(last_device_time) as recordStartTime,
  155. min(last_total_power) as lastTotalPower,
  156. max(device_time) as recordEndTime,
  157. max(total_power) as totalPower,
  158. </if>
  159. sum(used_power) as usedPower
  160. FROM kw_meter_data
  161. <include refid="dynamicWhereConditionsVo"/>
  162. group by reportTime,meter_id
  163. ) as temp
  164. group by
  165. temp.reportTime,
  166. temp.tenant_id
  167. <if test=" null != boxId ">
  168. ,temp.box_id
  169. </if>
  170. <if test=" null != meterId ">
  171. ,temp.meter_id
  172. </if>
  173. <if test=" null != sortColumns">order by ${sortColumns}</if>
  174. </select>
  175. <select id="getPower" parameterType="com.iformall.domain.dto.KwMeterDataDto" resultMap="VoResultMap">
  176. SELECT
  177. <if test=" null == reportType">
  178. #{reportTime} as reportTime,
  179. </if>
  180. <if test=" 1 == reportType ">
  181. date_format(create_time, '%Y-%m-%d %H:00') as reportTime,
  182. </if>
  183. <if test=" 2 == reportType ">
  184. date_format(create_time, '%Y-%m-%d') as reportTime,
  185. </if>
  186. <if test=" 3 == reportType ">
  187. date_format(create_time, '%Y-%m') as reportTime,
  188. </if>
  189. <if test=" null != startTime">
  190. min(device_time) as recordStartTime,
  191. min(total_power) as totalPower,
  192. </if>
  193. <if test=" null != endTime">
  194. max(device_time) as recordEndTime,
  195. max(total_power) as totalPower,
  196. </if>
  197. <if test=" null != endTime and null != endTime">
  198. sum(used_power) as usedPower,
  199. </if>
  200. tenant_id,box_id,meter_id
  201. FROM kw_meter_data
  202. where 1 = 1
  203. <if test=" null != tenantId ">
  204. and `tenant_id` = #{tenantId}
  205. </if>
  206. <if test=" null != meterId ">
  207. and `meter_id` = #{meterId}
  208. </if>
  209. <if test=" null != address ">
  210. and `address` = #{address}
  211. </if>
  212. <if test=" null != startTime">
  213. <if test=" null == reportType">
  214. and create_time &gt; #{startTime}
  215. </if>
  216. <if test=" 1 == reportType ">
  217. and date_format(create_time, '%Y-%m-%d %H:00') = date_format(#{startTime}, '%Y-%m-%d %H:00')
  218. </if>
  219. <if test=" 2 == reportType ">
  220. and date_format(create_time, '%Y-%m-%d') = date_format(#{startTime}, '%Y-%m-%d')
  221. </if>
  222. <if test=" 3 == reportType ">
  223. and date_format(create_time, '%Y-%m') = date_format(#{startTime}, '%Y-%m')
  224. </if>
  225. </if>
  226. <if test=" null != endTime">
  227. <if test=" null == reportType">
  228. and create_time &lt; #{endTime}
  229. </if>
  230. <if test=" 1 == reportType ">
  231. and date_format(create_time, '%Y-%m-%d %H:00') = date_format(#{endTime}, '%Y-%m-%d %H:00')
  232. </if>
  233. <if test=" 2 == reportType ">
  234. and date_format(create_time, '%Y-%m-%d') = date_format(#{endTime}, '%Y-%m-%d')
  235. </if>
  236. <if test=" 3 == reportType ">
  237. and date_format(create_time, '%Y-%m') = date_format(#{endTime}, '%Y-%m')
  238. </if>
  239. </if>
  240. group by reportTime
  241. <if test=" null != meterId ">
  242. ,meter_id
  243. </if>
  244. </select>
  245. </mapper>