IotRhDailyReportMapper.xml 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  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="cn.iocoder.yudao.module.pms.dal.mysql.iotrhdailyreport.IotRhDailyReportMapper">
  4. <!-- 基础结果映射 -->
  5. <resultMap id="BaseResultMap" type="cn.iocoder.yudao.module.pms.dal.dataobject.iotrhdailyreport.IotRhDailyReportDO">
  6. <!-- 根据实际字段配置 -->
  7. <id column="id" property="id" />
  8. <result column="dept_id" property="deptId" />
  9. <result column="project_id" property="projectId" />
  10. <result column="task_id" property="taskId" />
  11. <result column="construction_status" property="constructionStatus" />
  12. <result column="construction_start_date" property="constructionStartDate" />
  13. <result column="construction_end_date" property="constructionEndDate" />
  14. <result column="relocation_days" property="relocationDays" />
  15. <!-- 其他字段映射 -->
  16. <result column="project_classification" property="projectClassification" />
  17. <result column="transit_time" property="transitTime" />
  18. <result column="daily_gas_injection" property="dailyGasInjection" />
  19. <result column="daily_water_injection" property="dailyWaterInjection" />
  20. <result column="daily_inject_gas_time" property="dailyInjectGasTime" />
  21. <result column="daily_inject_water_time" property="dailyInjectWaterTime" />
  22. <result column="daily_power_usage" property="dailyPowerUsage" />
  23. <!-- 其他字段映射 -->
  24. <result column="non_production_time" property="nonProductionTime" />
  25. <result column="npt_reason" property="nptReason" />
  26. <result column="production_status" property="productionStatus" />
  27. <result column="next_plan" property="nextPlan" />
  28. <result column="total_water_injection" property="totalWaterInjection" />
  29. <result column="personnel" property="personnel" />
  30. <result column="total_gas_injection" property="totalGasInjection" />
  31. <!-- 其他字段映射 -->
  32. <result column="cumulative_completion" property="cumulativeCompletion" />
  33. <result column="remark" property="remark" />
  34. <result column="status" property="status" />
  35. <result column="creator" property="creator" />
  36. <result column="create_time" property="createTime" />
  37. <result column="updater" property="updater" />
  38. <result column="update_time" property="updateTime" />
  39. </resultMap>
  40. <!-- 使用窗口函数实现分组查询 -->
  41. <select id="selectListGroupedBack" resultMap="BaseResultMap"
  42. parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotrhdailyreport.vo.IotRhDailyReportPageReqVO">
  43. WITH rq_iot_rh_daily_report AS (
  44. SELECT
  45. *,
  46. ROW_NUMBER() OVER (
  47. PARTITION BY construction_status
  48. ORDER BY construction_start_date
  49. ) as row_num,
  50. MIN(construction_start_date) OVER (
  51. PARTITION BY construction_status
  52. ) as min_start_date
  53. FROM rq_iot_rh_daily_report
  54. <where>
  55. <if test="reqVO.deptId != null">
  56. AND dept_id = #{reqVO.deptId}
  57. </if>
  58. <if test="reqVO.projectId != null">
  59. AND project_id = #{reqVO.projectId}
  60. </if>
  61. <if test="reqVO.taskId != null">
  62. AND task_id = #{reqVO.taskId}
  63. </if>
  64. </where>
  65. )
  66. SELECT *
  67. FROM rq_iot_rh_daily_report
  68. WHERE row_num = 1
  69. ORDER BY min_start_date ASC
  70. </select>
  71. <select id="selectYearTotalGas" parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotrhdailyreport.vo.IotRhDailyReportPageReqVO"
  72. resultType="cn.iocoder.yudao.module.pms.controller.admin.stat.vo.YearTotalGas">
  73. SELECT
  74. DATE_FORMAT(create_time, '%Y-%m') AS month,
  75. SUM(IFNULL(daily_gas_injection, 0)) AS total_gas
  76. FROM
  77. rq_iot_rh_daily_report a
  78. WHERE
  79. a.create_time >= DATE_SUB(NOW(), INTERVAL 1 YEAR)
  80. GROUP BY
  81. month
  82. ORDER BY
  83. month ASC;
  84. </select>
  85. <select id="selectListGrouped" resultMap="BaseResultMap"
  86. parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotrhdailyreport.vo.IotRhDailyReportPageReqVO">
  87. SELECT t1.*, g.min_start_date
  88. FROM rq_iot_rh_daily_report t1
  89. INNER JOIN (
  90. SELECT
  91. construction_status,
  92. MIN(construction_start_date) as min_start_date
  93. FROM rq_iot_rh_daily_report
  94. <where>
  95. <if test="reqVO.deptId != null">
  96. AND dept_id = #{reqVO.deptId}
  97. </if>
  98. <if test="reqVO.projectId != null">
  99. AND project_id = #{reqVO.projectId}
  100. </if>
  101. <if test="reqVO.taskId != null">
  102. AND task_id = #{reqVO.taskId}
  103. </if>
  104. </where>
  105. GROUP BY construction_status
  106. ) g ON t1.construction_status = g.construction_status
  107. AND t1.construction_start_date = g.min_start_date
  108. WHERE NOT EXISTS (
  109. SELECT 1 FROM rq_iot_rh_daily_report t2
  110. WHERE t2.construction_status = t1.construction_status
  111. AND t2.construction_start_date &lt; t1.construction_start_date
  112. <if test="reqVO.deptId != null">
  113. AND t2.dept_id = #{reqVO.deptId}
  114. </if>
  115. <if test="reqVO.projectId != null">
  116. AND t2.project_id = #{reqVO.projectId}
  117. </if>
  118. <if test="reqVO.taskId != null">
  119. AND t2.task_id = #{reqVO.taskId}
  120. </if>
  121. )
  122. <if test="reqVO.deptId != null">
  123. AND t1.dept_id = #{reqVO.deptId}
  124. </if>
  125. <if test="reqVO.projectId != null">
  126. AND t1.project_id = #{reqVO.projectId}
  127. </if>
  128. <if test="reqVO.taskId != null">
  129. AND t1.task_id = #{reqVO.taskId}
  130. </if>
  131. ORDER BY g.min_start_date ASC
  132. </select>
  133. <select id="relocationDays" resultMap="BaseResultMap"
  134. parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotrhdailyreport.vo.IotRhDailyReportPageReqVO">
  135. SELECT
  136. dept_id,
  137. DATEDIFF(
  138. MIN(CASE WHEN construction_status = 'sg' THEN construction_start_date END),
  139. MIN(CASE WHEN construction_status = 'dq' THEN construction_start_date END)
  140. ) AS relocation_days
  141. FROM rq_iot_rh_daily_report
  142. WHERE construction_status IN ('dq', 'sg')
  143. AND deleted = 0
  144. GROUP BY dept_id;
  145. </select>
  146. <select id="rhDailyReports" resultMap="BaseResultMap"
  147. parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotrhdailyreport.vo.IotRhDailyReportPageReqVO">
  148. SELECT
  149. rdr.*
  150. FROM
  151. rq_iot_rh_daily_report rdr
  152. INNER JOIN system_dept d ON d.id = rdr.dept_id
  153. LEFT JOIN system_dept pd ON pd.id = d.parent_id
  154. WHERE
  155. rdr.deleted = 0
  156. AND rdr.dept_id IS NOT NULL
  157. <if test="deptIds != null and deptIds.size &gt; 0">
  158. AND rdr.dept_id IN
  159. <foreach collection="deptIds" index="index" item="key" open="(" separator="," close=")">
  160. #{key}
  161. </foreach>
  162. </if>
  163. <if test="projectIds != null and projectIds.size &gt; 0">
  164. AND rdr.project_id IN
  165. <foreach collection="projectIds" index="index" item="key" open="(" separator="," close=")">
  166. #{key}
  167. </foreach>
  168. </if>
  169. <if test="taskIds != null and taskIds.size &gt; 0">
  170. AND rdr.task_id IN
  171. <foreach collection="taskIds" index="index" item="key" open="(" separator="," close=")">
  172. #{key}
  173. </foreach>
  174. </if>
  175. <if test="reqVO.createTime != null and reqVO.createTime.length > 0">
  176. <!-- 处理“开始时间”(数组第1位,如 createTime[0] = 2024-01-01 00:00:00) -->
  177. <if test="reqVO.createTime[0] != null">
  178. AND rdr.create_time &gt;= #{reqVO.createTime[0]}
  179. </if>
  180. <!-- 处理“结束时间”(数组第2位,如 createTime[1] = 2024-01-31 23:59:59) -->
  181. <if test="reqVO.createTime.length > 1 and reqVO.createTime[1] != null">
  182. AND rdr.create_time &lt;= #{reqVO.createTime[1]}
  183. </if>
  184. </if>
  185. ORDER BY
  186. DATE(rdr.create_time) DESC,
  187. COALESCE(pd.sort, 999999) ASC,
  188. d.sort ASC;
  189. </select>
  190. <!-- 瑞恒日报汇总统计 -->
  191. <select id="rhReportStatistics" resultMap="BaseResultMap"
  192. parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotrhdailyreport.vo.IotRhDailyReportPageReqVO">
  193. SELECT
  194. *
  195. FROM
  196. rq_iot_rh_daily_report rdr
  197. INNER JOIN system_dept d ON d.id = rdr.dept_id
  198. WHERE
  199. rdr.deleted = 0
  200. AND rdr.dept_id IS NOT NULL
  201. <if test="deptIds != null and deptIds.size &gt; 0">
  202. AND rdr.dept_id IN
  203. <foreach collection="deptIds" index="index" item="key" open="(" separator="," close=")">
  204. #{key}
  205. </foreach>
  206. </if>
  207. <if test="projectIds != null and projectIds.size &gt; 0">
  208. AND rdr.project_id IN
  209. <foreach collection="projectIds" index="index" item="key" open="(" separator="," close=")">
  210. #{key}
  211. </foreach>
  212. </if>
  213. <if test="taskIds != null and taskIds.size &gt; 0">
  214. AND rdr.task_id IN
  215. <foreach collection="taskIds" index="index" item="key" open="(" separator="," close=")">
  216. #{key}
  217. </foreach>
  218. </if>
  219. <if test="reqVO.createTime != null and reqVO.createTime.length > 0">
  220. <!-- 处理“开始时间”(数组第1位,如 createTime[0] = 2024-01-01 00:00:00) -->
  221. <if test="reqVO.createTime[0] != null">
  222. AND rdr.create_time &gt;= #{reqVO.createTime[0]}
  223. </if>
  224. <!-- 处理“结束时间”(数组第2位,如 createTime[1] = 2024-01-31 23:59:59) -->
  225. <if test="reqVO.createTime.length > 1 and reqVO.createTime[1] != null">
  226. AND rdr.create_time &lt;= #{reqVO.createTime[1]}
  227. </if>
  228. </if>
  229. </select>
  230. </mapper>