|  |  | 
 |  |  |         where com_id = #{comId,jdbcType=BIGINT} | 
 |  |  |     </update> | 
 |  |  |  | 
 |  |  |     <!--根据操作员ID获取未关阀记录(包含在线情况)--> | 
 |  |  |     <!--根据operator获取未关阀的RTU地址及虚拟卡编号数据对,获取未关阀记录使用--> | 
 |  |  |     <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, | 
 |  |  |             IFNULL(rtus.isOnLine, false) AS isOnLine, | 
 |  |  |             com.rtu_addr AS rtuAddr, | 
 |  |  |             com.param ->> '$.icCardNo' AS vcNum, | 
 |  |  |             ( | 
 |  |  | 
 |  |  |             ) AS orderNo, | 
 |  |  |             'toClose'                  AS state, | 
 |  |  |             CASE | 
 |  |  |                 WHEN com.command_code = 'A1' OR com.command_code = 'A2' THEN 0 | 
 |  |  |                 WHEN com.command_code = 'A1' OR com.command_code = 'A2' THEN 1 | 
 |  |  |                 ELSE 0 | 
 |  |  |             END AS planned, | 
 |  |  |             com.send_time AS sendTime | 
 |  |  |             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 | 
 |  |  |             LEFT JOIN JSON_TABLE( | 
 |  |  | <!--                '[{"rtuAddr":"620201000030","isOnLine":true}]',--> | 
 |  |  |                 <!--'[{"rtuAddr":"620201000030","isOnLine":true}]',--> | 
 |  |  |                 #{onLineMap}, | 
 |  |  |                 '$[*]' COLUMNS ( | 
 |  |  |                     rtuAddr VARCHAR(20) PATH '$.rtuAddr', | 
 |  |  |                     isOnLine BOOLEAN PATH '$.isOnLine' | 
 |  |  |                     ) | 
 |  |  |                 ) | 
 |  |  |             ) rtus ON com.rtu_addr = rtus.rtuAddr | 
 |  |  |         <where> | 
 |  |  |             AND com.operator = #{operator} | 
 |  |  |             AND (com.protocol = 'p206V1_0_1' 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 NOT EXISTS( | 
 |  |  |                 SELECT * FROM rm_command_history | 
 |  |  |                 WHERE (result IS NULL OR result = 1) | 
 |  |  |                 AND (com.protocol = 'p206V1_0_1' AND (command_code = '93' OR command_code = '98' OR command_code = '00')) | 
 |  |  |                 AND param ->> '$.orderNo' = com.param ->> '$.orderNo' | 
 |  |  |             ) | 
 |  |  |             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 | 
 |  |  |         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 | 
 |  |  |         LIMIT 1 | 
 |  |  |     </select> | 
 |  |  |  | 
 |  |  |     <!--根据取水口ID获取该取水口未关阀参数--> | 
 |  |  | 
 |  |  |         LIMIT 0,1 | 
 |  |  |     </select> | 
 |  |  |  | 
 |  |  |     <!--根据取水口ID获取该取水口未关阀参数--> | 
 |  |  |     <select id="getUncloseParamByCd" resultType="com.dy.pipIrrGlobal.voRm.VoUnclosedParam"> | 
 |  |  |         SELECT com.rtu_addr               AS rtuAddr, | 
 |  |  |                com.param ->> '$.orderNo'  AS orderNo, | 
 |  |  |                com.param ->> '$.icCardNo' AS vcNum | 
 |  |  |         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":"620201000029","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 com.command_code = #{code} | 
 |  |  |           AND con.intakeId = #{intakeId} | 
 |  |  |           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' | 
 |  |  |             ) | 
 |  |  |         ORDER BY com.send_time DESC | 
 |  |  |         LIMIT 0,1 | 
 |  |  |     </select> | 
 |  |  |  | 
 |  |  |     <!--根据指定条件获取命令日志历史记录总数--> | 
 |  |  |     <select id="getCommandHistoriesCount" resultType="java.lang.Long"> | 
 |  |  |         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} | 
 |  |  | 
 |  |  |     <!--根据指定条件获取命令日志历史记录--> | 
 |  |  |     <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 | 
 |  |  | 
 |  |  |                 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> | 
 |  |  |  | 
 |  |  |     <!--根据命令日志ID获取开阀信息,终止灌溉计划时使用,用来执行远程关阀--> | 
 |  |  |     <select id="getValveOpen" resultType="com.dy.pipIrrGlobal.voRm.VoIntakeVc"> | 
 |  |  |         SELECT | 
 |  |  |             rtu_addr AS rtuAddr, | 
 |  |  |             param ->> '$.icCardNo' AS vcNum, | 
 |  |  |             param ->> '$.orderNo' AS orderNo | 
 |  |  |         FROM rm_command_history | 
 |  |  |         WHERE com_id = #{commandId} | 
 |  |  |         LIMIT 0, 1 | 
 |  |  |     </select> | 
 |  |  | </mapper> |