From 742b6bbac1b4609386817a6e6fb489ec098a5490 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期二, 21 一月 2025 18:29:44 +0800
Subject: [PATCH] 重构获取分水房详情接口
---
pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml | 155 ++++++++++++++++++++++++++++++++-------------------
1 files changed, 96 insertions(+), 59 deletions(-)
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml
index 7888144..992a58e 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml
@@ -195,72 +195,103 @@
where com_id = #{comId,jdbcType=BIGINT}
</update>
- <!--鏍规嵁鎿嶄綔鍛業D鑾峰彇鏈叧闃�璁板綍锛堝寘鍚湪绾挎儏鍐碉級-->
+ <!--鏍规嵁operator鑾峰彇鏈叧闃�鐨凴TU鍦板潃鍙婅櫄鎷熷崱缂栧彿鏁版嵁瀵癸紝鑾峰彇鏈叧闃�璁板綍浣跨敤-->
+ <select id="getUnclosedRtus" resultType="com.dy.pipIrrGlobal.voRm.VoRtuAndVc">
+ SELECT
+ com.rtu_addr AS rtuAddr,
+ com.param ->> '$.icCardNo' AS vcNum
+ FROM rm_command_history com
+ where 1=1
+ AND com.operator = #{operator}
+ AND com.result = 1
+ AND ((com.protocol = 'p206V1' OR com.protocol = 'p206V2') AND (com.command_code = '92' OR com.command_code = '97' OR com.command_code = '99' OR com.command_code = 'A0' OR com.command_code = 'A1' OR com.command_code = 'A2'))
+ AND (
+ SELECT op_dt FROM rm_open_close_valve_last
+ WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo'
+ ORDER BY op_dt DESC
+ LIMIT 1
+ ) IS NOT NULL
+ AND (
+ SELECT cl_dt FROM rm_open_close_valve_last
+ WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo'
+ ORDER BY op_dt DESC
+ LIMIT 1
+ ) IS NULL
+ GROUP BY com.rtu_addr, com.param ->> '$.icCardNo'
+ </select>
+
+ <!--鏍规嵁RTU鍦板潃鍜岃櫄鎷熷崱缂栧彿鑾峰彇鎴愬姛寮�闃�鐨勬渶鍚庝竴鏉¤褰曪紝鑾峰彇鏈叧闃�璁板綍浣跨敤-->
+ <select id="getLastComId" resultType="java.lang.Long">
+ SELECT com_id AS comId
+ FROM rm_command_history
+ WHERE result = 1
+ AND ((protocol = 'p206V1' OR protocol = 'p206V2')
+ AND (command_code = '92' OR command_code = '97' OR command_code = '99' OR command_code = 'A0' OR command_code = 'A1' OR command_code = 'A2'))
+ AND rtu_addr = #{rtuAddr} AND param ->> '$.icCardNo' = #{vcNum}
+ ORDER BY send_time DESC
+ LIMIT 1
+ </select>
+
<select id="getUnclosedValves" resultType="com.dy.pipIrrGlobal.voRm.VoUnclosedValve">
- SELECT inta.name AS intakeNum,
- rtus.isOnLine,
- com.rtu_addr AS rtuAddr,
- com.param ->> '$.icCardNo' AS vcNum,
- (SELECT param ->> '$.orderNo' AS orderNo
+ SELECT
+ inta.name AS intakeNum,
+ IFNULL(rtus.isOnLine, false) AS isOnLine,
+ com.rtu_addr AS rtuAddr,
+ com.param ->> '$.icCardNo' AS vcNum,
+ (
+ SELECT param ->> '$.orderNo' AS orderNo
FROM rm_command_history
WHERE rtu_addr = com.rtu_addr
ORDER BY send_time desc
- LIMIT 0,1) AS orderNo,
- 'toClose' AS state
+ LIMIT 0,1
+ ) AS orderNo,
+ 'toClose' AS state,
+ CASE
+ WHEN com.command_code = 'A1' OR com.command_code = 'A2' THEN 1
+ ELSE 0
+ END AS planned,
+ com.send_time AS sendTime,
+
+ (SELECT dt FROM rm_work_report_last
+ WHERE rtu_addr = com.rtu_addr AND ic_card_no = com.param ->> '$.icCardNo'
+ AND dt > com.send_time
+ ORDER BY dt DESC
+ LIMIT 1) AS dt,
+
+ (SELECT water_instant FROM rm_work_report_last
+ WHERE rtu_addr = com.rtu_addr AND ic_card_no = com.param ->> '$.icCardNo'
+ AND dt > com.send_time
+ ORDER BY dt DESC
+ LIMIT 1) AS waterInstant
FROM rm_command_history com
INNER JOIN pr_controller con ON com.rtu_addr = con.rtuAddr
INNER JOIN pr_intake inta ON con.intakeId = inta.id
- INNER JOIN JSON_TABLE(
- <!--'[{"rtuAddr":"37142501020100215","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',-->
- #{onLineMap},
- '$[*]' COLUMNS (
- rtuAddr VARCHAR(20) PATH '$.rtuAddr',
- isOnLine BOOLEAN PATH '$.isOnLine'
- )
- ) rtus ON com.rtu_addr = rtus.rtuAddr
- <where>
- AND (com.command_code = '92' OR com.command_code = 'A2' OR com.command_code = '97')
- AND com.operator = #{operator}
- AND NOT EXISTS(
- SELECT *
- FROM rm_command_history
- WHERE (result IS NULL OR result = 1)
- AND (command_code = '93' OR command_code = 'A3' OR command_code = '98')
- AND param ->> '$.orderNo' = com.param ->> '$.orderNo'
- )
- </where>
- GROUP BY inta.name, rtus.isOnLine, com.rtu_addr, com.param ->> '$.icCardNo'
-
- UNION ALL
-
- SELECT inta.name AS intakeNum,
- rtus.isOnLine,
- com.rtu_addr AS rtuAddr,
- com.param ->> '$.icCardNo' AS vcNum,
- (SELECT param ->> '$.orderNo' AS orderNo
- FROM rm_command_history
- WHERE rtu_addr = com.rtu_addr
- ORDER BY send_time desc
- LIMIT 0,1) AS orderNo,
- 'toCancel' AS state
- FROM rm_command_history com
- INNER JOIN pr_intake inta ON inta.id = com.intake_id
- INNER JOIN JSON_TABLE(
+ LEFT JOIN JSON_TABLE(
+ <!--'[{"rtuAddr":"620201000030","isOnLine":true}]',-->
#{onLineMap},
'$[*]' COLUMNS (
rtuAddr VARCHAR(20) PATH '$.rtuAddr',
isOnLine BOOLEAN PATH '$.isOnLine'
- )
+ )
) rtus ON com.rtu_addr = rtus.rtuAddr
<where>
- AND (command_code = 'A1' OR command_code = 'A2')
- AND com.operator = #{operator}
- AND DATE_FORMAT(
- CONCAT(com.param ->> '$.year', '-', com.param ->> '$.month', '-', com.param ->> '$.day',
- ' ',
- com.param ->> '$.hour', ':', com.param ->> '$.minute', ':', '0'),
- '%Y-%m-%d %H:%i:%S') > NOW()
+ AND com.com_id in (${comIds})
+ AND (
+ SELECT op_dt FROM rm_open_close_valve_last
+ WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo'
+ ORDER BY op_dt DESC
+ LIMIT 1
+ ) IS NOT NULL
+
+ AND (
+ SELECT cl_dt FROM rm_open_close_valve_last
+ WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo'
+ ORDER BY op_dt DESC
+ LIMIT 1
+ ) IS NULL
</where>
+ GROUP BY inta.name, rtus.isOnLine, com.rtu_addr, com.param ->> '$.icCardNo', com.command_code, com.send_time, dt, waterInstant
+ ORDER BY com.send_time DESC
</select>
<!--鏍规嵁鍙栨按鍙D鑾峰彇璇ュ彇姘村彛鏈叧闃�鍙傛暟-->
@@ -297,8 +328,6 @@
SELECT COUNT(*) AS recordCount
FROM rm_command_history his
INNER JOIN pr_intake inta ON inta.id = his.intake_id
- LEFT JOIN se_client cli ON cli.id = his.operator
- LEFT JOIN ba_user user ON user.id = his.operator
<where>
<if test="intakeId != null">
AND his.intake_id = #{intakeId}
@@ -318,17 +347,17 @@
<!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鍛戒护鏃ュ織鍘嗗彶璁板綍-->
<select id="getCommandHistories" resultType="com.dy.pipIrrGlobal.voRm.VoCommand">
SELECT his.com_id AS comId,
- his.command_name AS commandName,
+ CONCAT(his.command_name, '(', his.command_code, ')') AS commandName,
inta.name AS intakeName,
his.rtu_addr AS rtuAddr,
- his.protocol,
+ his.protocol AS protocol,
his.send_time AS sendTime,
his.result_time AS resultTime,
(CASE
WHEN his.result = 1 THEN '鎴愬姛'
ELSE '澶辫触'
- END) AS result,
- his.result_text,
+ END) AS state,
+ his.result_text AS result,
IFNULL(cli.name, user.name) AS userName
FROM rm_command_history his
INNER JOIN pr_intake inta ON inta.id = his.intake_id
@@ -349,11 +378,19 @@
AND his.send_time BETWEEN #{timeStart} AND #{timeStop}
</if>
</where>
- ORDER BY his.send_time DESC
+ ORDER BY his.com_id DESC
<trim prefix="limit ">
<if test="start != null and count != null">
#{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
</if>
</trim>
</select>
+
+ <!--鏍规嵁鍛戒护鏃ュ織ID鑾峰彇棰勭害鏃堕棿锛屽悜铏氭嫙鍗″啓寮�闃�鏃堕棿鐢�-->
+ <select id="getTimeByCommId" resultType="java.lang.String">
+ SELECT
+ CONCAT(param ->> '$.year', '-', param ->> '$.month', '-', param ->> '$.day', ' ', param ->> '$.hour', ':', param ->> '$.minute', ':00') AS openTime
+ FROM rm_command_history
+ WHERE com_id = #{commId}
+ </select>
</mapper>
\ No newline at end of file
--
Gitblit v1.8.0