IotRyDailyReportMapper.xml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  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.iotrydailyreport.IotRyDailyReportMapper">
  4. <!-- 基础结果映射 -->
  5. <resultMap id="BaseResultMap" type="cn.iocoder.yudao.module.pms.dal.dataobject.iotrydailyreport.IotRyDailyReportDO">
  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="rig_status" property="rigStatus" />
  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="current_depth" property="currentDepth" />
  18. <result column="daily_footage" property="dailyFootage" />
  19. <result column="monthly_footage" property="monthlyFootage" />
  20. <result column="annual_footage" property="annualFootage" />
  21. <result column="daily_power_usage" property="dailyPowerUsage" />
  22. <result column="daily_fuel" property="dailyFuel" />
  23. <result column="production_time" property="productionTime" />
  24. <result column="non_production_time" property="nonProductionTime" />
  25. <result column="ry_npt_reason" property="ryNptReason" />
  26. <result column="drilling_working_time" property="drillingWorkingTime" />
  27. <result column="other_production_time" property="otherProductionTime" />
  28. <result column="accident_time" property="accidentTime" />
  29. <result column="repair_time" property="repairTime" />
  30. <result column="self_stop_time" property="selfStopTime" />
  31. <result column="complexity_time" property="complexityTime" />
  32. <result column="relocation_time" property="relocationTime" />
  33. <result column="rectification_time" property="rectificationTime" />
  34. <result column="waiting_stop_time" property="waitingStopTime" />
  35. <result column="winter_break_time" property="winterBreakTime" />
  36. <result column="production_status" property="productionStatus" />
  37. <result column="current_operation" property="currentOperation" />
  38. <result column="next_plan" property="nextPlan" />
  39. <result column="rig_status" property="rigStatus" />
  40. <result column="repair_status" property="repairStatus" />
  41. <result column="personnel" property="personnel" />
  42. <result column="total_staff_num" property="totalStaffNum" />
  43. <result column="leave_staff_num" property="leaveStaffNum" />
  44. <result column="mud_density" property="mudDensity" />
  45. <result column="mud_viscosity" property="mudViscosity" />
  46. <result column="lateral_length" property="lateralLength" />
  47. <result column="well_inclination" property="wellInclination" />
  48. <result column="azimuth" property="azimuth" />
  49. <result column="mud_density" property="mudDensity" />
  50. <result column="mud_viscosity" property="mudViscosity" />
  51. <result column="lateral_length" property="lateralLength" />
  52. </resultMap>
  53. <select id="selectListGrouped" resultMap="BaseResultMap"
  54. parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotrhdailyreport.vo.IotRhDailyReportPageReqVO">
  55. SELECT t1.*, g.min_start_date
  56. FROM rq_iot_ry_daily_report t1
  57. INNER JOIN (
  58. SELECT
  59. rig_status,
  60. MIN(construction_start_date) as min_start_date
  61. FROM rq_iot_ry_daily_report
  62. <where>
  63. <if test="reqVO.deptId != null">
  64. AND dept_id = #{reqVO.deptId}
  65. </if>
  66. <if test="reqVO.projectId != null">
  67. AND project_id = #{reqVO.projectId}
  68. </if>
  69. <if test="reqVO.taskId != null">
  70. AND task_id = #{reqVO.taskId}
  71. </if>
  72. </where>
  73. GROUP BY rig_status
  74. ) g ON t1.rig_status = g.rig_status
  75. AND t1.construction_start_date = g.min_start_date
  76. WHERE NOT EXISTS (
  77. SELECT 1 FROM rq_iot_ry_daily_report t2
  78. WHERE t2.rig_status = t1.rig_status
  79. AND t2.construction_start_date &lt; t1.construction_start_date
  80. <if test="reqVO.deptId != null">
  81. AND t2.dept_id = #{reqVO.deptId}
  82. </if>
  83. <if test="reqVO.projectId != null">
  84. AND t2.project_id = #{reqVO.projectId}
  85. </if>
  86. <if test="reqVO.taskId != null">
  87. AND t2.task_id = #{reqVO.taskId}
  88. </if>
  89. )
  90. <if test="reqVO.deptId != null">
  91. AND t1.dept_id = #{reqVO.deptId}
  92. </if>
  93. <if test="reqVO.projectId != null">
  94. AND t1.project_id = #{reqVO.projectId}
  95. </if>
  96. <if test="reqVO.taskId != null">
  97. AND t1.task_id = #{reqVO.taskId}
  98. </if>
  99. ORDER BY g.min_start_date ASC
  100. </select>
  101. <select id="latestWellDoneTimes" resultMap="BaseResultMap"
  102. parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreport.vo.IotRyDailyReportPageReqVO">
  103. SELECT r1.dept_id,
  104. r1.task_id,
  105. r1.construction_start_date
  106. FROM rq_iot_ry_daily_report r1
  107. INNER JOIN (
  108. SELECT
  109. dept_id,
  110. MAX(create_time) AS max_create_time
  111. FROM rq_iot_ry_daily_report
  112. WHERE rig_status = 'wg'
  113. GROUP BY dept_id
  114. ) r2 ON r1.dept_id = r2.dept_id AND r1.create_time = r2.max_create_time
  115. WHERE r1.rig_status = 'wg';
  116. </select>
  117. <select id="ryWellNameDailyReports" resultMap="BaseResultMap"
  118. parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreport.vo.IotRyDailyReportPageReqVO">
  119. SELECT
  120. rdr.*
  121. FROM
  122. rq_iot_ry_daily_report rdr
  123. INNER JOIN system_dept d ON d.id = rdr.dept_id
  124. LEFT JOIN system_dept pd ON pd.id = d.parent_id
  125. WHERE
  126. rdr.deleted = 0
  127. AND rdr.dept_id IS NOT NULL
  128. <if test="deptIds != null and deptIds.size &gt; 0">
  129. AND rdr.dept_id IN
  130. <foreach collection="deptIds" index="index" item="key" open="(" separator="," close=")">
  131. #{key}
  132. </foreach>
  133. </if>
  134. <if test="projectIds != null and projectIds.size &gt; 0">
  135. AND rdr.project_id IN
  136. <foreach collection="projectIds" index="index" item="key" open="(" separator="," close=")">
  137. #{key}
  138. </foreach>
  139. </if>
  140. <if test="taskIds != null and taskIds.size &gt; 0">
  141. AND rdr.task_id IN
  142. <foreach collection="taskIds" index="index" item="key" open="(" separator="," close=")">
  143. #{key}
  144. </foreach>
  145. </if>
  146. <if test="reqVO.createTime != null and reqVO.createTime.length > 0">
  147. <!-- 处理“开始时间”(数组第1位,如 createTime[0] = 2024-01-01 00:00:00) -->
  148. <if test="reqVO.createTime[0] != null">
  149. AND rdr.create_time &gt;= #{reqVO.createTime[0]}
  150. </if>
  151. <!-- 处理“结束时间”(数组第2位,如 createTime[1] = 2024-01-31 23:59:59) -->
  152. <if test="reqVO.createTime.length > 1 and reqVO.createTime[1] != null">
  153. AND rdr.create_time &lt;= #{reqVO.createTime[1]}
  154. </if>
  155. </if>
  156. ORDER BY
  157. COALESCE(pd.sort, 999999) ASC,
  158. d.sort ASC,
  159. DATE(rdr.create_time) DESC;
  160. </select>
  161. <select id="ryWellNameDailyReportsGroupIds" resultMap="BaseResultMap"
  162. parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreport.vo.IotRyDailyReportPageReqVO">
  163. WITH sorted_data AS (
  164. SELECT
  165. rdr.id,
  166. rdr.dept_id,
  167. rdr.task_id,
  168. ROW_NUMBER() OVER (
  169. PARTITION BY rdr.dept_id, rdr.task_id
  170. ORDER BY
  171. COALESCE(pd.sort, 999999) DESC, -- 反转:ASC -> DESC
  172. d.sort DESC, -- 反转:ASC -> DESC
  173. rdr.task_id ASC, -- 反转:DESC -> ASC
  174. DATE(rdr.create_time) ASC -- 反转:DESC -> ASC
  175. ) AS rn
  176. FROM
  177. rq_iot_ry_daily_report rdr
  178. INNER JOIN system_dept d ON d.id = rdr.dept_id
  179. LEFT JOIN system_dept pd ON pd.id = d.parent_id
  180. WHERE
  181. rdr.deleted = 0
  182. AND rdr.dept_id IS NOT NULL
  183. <if test="deptIds != null and deptIds.size &gt; 0">
  184. AND rdr.dept_id IN
  185. <foreach collection="deptIds" index="index" item="key" open="(" separator="," close=")">
  186. #{key}
  187. </foreach>
  188. </if>
  189. <if test="projectIds != null and projectIds.size &gt; 0">
  190. AND rdr.project_id IN
  191. <foreach collection="projectIds" index="index" item="key" open="(" separator="," close=")">
  192. #{key}
  193. </foreach>
  194. </if>
  195. <if test="taskIds != null and taskIds.size &gt; 0">
  196. AND rdr.task_id IN
  197. <foreach collection="taskIds" index="index" item="key" open="(" separator="," close=")">
  198. #{key}
  199. </foreach>
  200. </if>
  201. <if test="reqVO.createTime != null and reqVO.createTime.length > 0">
  202. <!-- 处理“开始时间”(数组第1位,如 createTime[0] = 2024-01-01 00:00:00) -->
  203. <if test="reqVO.createTime[0] != null">
  204. AND rdr.create_time &gt;= #{reqVO.createTime[0]}
  205. </if>
  206. <!-- 处理“结束时间”(数组第2位,如 createTime[1] = 2024-01-31 23:59:59) -->
  207. <if test="reqVO.createTime.length > 1 and reqVO.createTime[1] != null">
  208. AND rdr.create_time &lt;= #{reqVO.createTime[1]}
  209. </if>
  210. </if>
  211. )
  212. SELECT
  213. id,
  214. dept_id,
  215. task_id
  216. FROM sorted_data
  217. WHERE rn = 1
  218. </select>
  219. <select id="ryDeptDailyReports" resultMap="BaseResultMap"
  220. parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreport.vo.IotRyDailyReportPageReqVO">
  221. SELECT
  222. rdr.*
  223. FROM
  224. rq_iot_ry_daily_report rdr
  225. INNER JOIN system_dept d ON d.id = rdr.dept_id
  226. LEFT JOIN system_dept pd ON pd.id = d.parent_id
  227. WHERE
  228. rdr.deleted = 0
  229. AND rdr.dept_id IS NOT NULL
  230. <if test="deptIds != null and deptIds.size &gt; 0">
  231. AND rdr.dept_id IN
  232. <foreach collection="deptIds" index="index" item="key" open="(" separator="," close=")">
  233. #{key}
  234. </foreach>
  235. </if>
  236. <if test="projectIds != null and projectIds.size &gt; 0">
  237. AND rdr.project_id IN
  238. <foreach collection="projectIds" index="index" item="key" open="(" separator="," close=")">
  239. #{key}
  240. </foreach>
  241. </if>
  242. <if test="taskIds != null and taskIds.size &gt; 0">
  243. AND rdr.task_id IN
  244. <foreach collection="taskIds" index="index" item="key" open="(" separator="," close=")">
  245. #{key}
  246. </foreach>
  247. </if>
  248. <if test="reqVO.createTime != null and reqVO.createTime.length > 0">
  249. <!-- 处理“开始时间”(数组第1位,如 createTime[0] = 2024-01-01 00:00:00) -->
  250. <if test="reqVO.createTime[0] != null">
  251. AND rdr.create_time &gt;= #{reqVO.createTime[0]}
  252. </if>
  253. <!-- 处理“结束时间”(数组第2位,如 createTime[1] = 2024-01-31 23:59:59) -->
  254. <if test="reqVO.createTime.length > 1 and reqVO.createTime[1] != null">
  255. AND rdr.create_time &lt;= #{reqVO.createTime[1]}
  256. </if>
  257. </if>
  258. ORDER BY
  259. rdr.task_id DESC,
  260. COALESCE(pd.sort, 999999) ASC,
  261. d.sort ASC,
  262. DATE(rdr.create_time) DESC;
  263. </select>
  264. <select id="ryDeptDailyReportsGroupIds" resultMap="BaseResultMap"
  265. parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreport.vo.IotRyDailyReportPageReqVO">
  266. WITH sorted_data AS (
  267. SELECT
  268. rdr.id,
  269. rdr.dept_id,
  270. rdr.task_id,
  271. ROW_NUMBER() OVER (
  272. PARTITION BY rdr.dept_id, rdr.task_id
  273. ORDER BY
  274. rdr.task_id ASC, -- 反转:DESC -> ASC
  275. COALESCE(pd.sort, 999999) DESC, -- 反转:ASC -> DESC
  276. d.sort DESC, -- 反转:ASC -> DESC
  277. DATE(rdr.create_time) ASC -- 反转:DESC -> ASC
  278. ) AS rn
  279. FROM
  280. rq_iot_ry_daily_report rdr
  281. INNER JOIN system_dept d ON d.id = rdr.dept_id
  282. LEFT JOIN system_dept pd ON pd.id = d.parent_id
  283. WHERE
  284. rdr.deleted = 0
  285. AND rdr.dept_id IS NOT NULL
  286. <if test="deptIds != null and deptIds.size &gt; 0">
  287. AND rdr.dept_id IN
  288. <foreach collection="deptIds" index="index" item="key" open="(" separator="," close=")">
  289. #{key}
  290. </foreach>
  291. </if>
  292. <if test="projectIds != null and projectIds.size &gt; 0">
  293. AND rdr.project_id IN
  294. <foreach collection="projectIds" index="index" item="key" open="(" separator="," close=")">
  295. #{key}
  296. </foreach>
  297. </if>
  298. <if test="taskIds != null and taskIds.size &gt; 0">
  299. AND rdr.task_id IN
  300. <foreach collection="taskIds" index="index" item="key" open="(" separator="," close=")">
  301. #{key}
  302. </foreach>
  303. </if>
  304. <if test="reqVO.createTime != null and reqVO.createTime.length > 0">
  305. <!-- 处理“开始时间”(数组第1位,如 createTime[0] = 2024-01-01 00:00:00) -->
  306. <if test="reqVO.createTime[0] != null">
  307. AND rdr.create_time &gt;= #{reqVO.createTime[0]}
  308. </if>
  309. <!-- 处理“结束时间”(数组第2位,如 createTime[1] = 2024-01-31 23:59:59) -->
  310. <if test="reqVO.createTime.length > 1 and reqVO.createTime[1] != null">
  311. AND rdr.create_time &lt;= #{reqVO.createTime[1]}
  312. </if>
  313. </if>
  314. )
  315. SELECT
  316. id,
  317. dept_id,
  318. task_id
  319. FROM sorted_data
  320. WHERE rn = 1
  321. </select>
  322. <select id="selectStatusNumber" parameterType="cn.iocoder.yudao.module.pms.controller.admin.maintain.vo.IotMaintainPageReqVO"
  323. resultType="cn.iocoder.yudao.module.pms.controller.admin.stat.vo.AllOrderResp">
  324. SELECT status AS status, COUNT(status) AS num FROM rq_iot_ry_daily_report a
  325. <where>
  326. a.deleted = 0
  327. <if test="reqVO.createTime[0] != null">
  328. AND a.create_time &gt;= #{reqVO.createTime[0]}
  329. </if>
  330. <if test="reqVO.createTime.length > 1 and reqVO.createTime[1] != null">
  331. AND a.create_time &lt;= #{reqVO.createTime[1]}
  332. </if>
  333. <if test="reqVO.deptIds != null and reqVO.deptIds.size &gt; 0">
  334. AND a.dept_id IN
  335. <foreach collection="reqVO.deptIds" index="index" item="key" open="(" separator="," close=")">
  336. #{key}
  337. </foreach>
  338. </if>
  339. </where>
  340. GROUP BY status
  341. </select>
  342. </mapper>