|  |  | 
 |  |  |         LEFT JOIN ba_district town ON ge.townId = town.id | 
 |  |  |         LEFT JOIN ba_district village ON ge.villageId = village.id | 
 |  |  |         LEFT JOIN pr_controller cont ON ge.id = cont.intakeId | 
 |  |  |         left 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 cont.rtuAddr = rtus.rtuAddr | 
 |  |  |         <if test = "bindNumber != null and bindNumber > 0"> | 
 |  |  |             JOIN (SELECT intakeId, COUNT(*) num FROM pr_intake_controller WHERE operateType = 1 group by intakeId) AS bindNumTb on bindNumTb.intakeId= ge.id | 
 |  |  |         </if> | 
 |  |  |         <where> | 
 |  |  |             ge.deleted = 0 | 
 |  |  |             AND divi.deleted = 0 | 
 |  |  | 
 |  |  |                 AND blo.id = #{blockId} | 
 |  |  |             </if> | 
 |  |  |  | 
 |  |  |             <if test="isBinded == 0"> | 
 |  |  |             <if test="isBinded != null and isBinded == 0"> | 
 |  |  |                 AND ge.id NOT IN (SELECT intakeId FROM pr_controller where deleted = 0) | 
 |  |  |             </if> | 
 |  |  |             <if test="isBinded == 1"> | 
 |  |  |             <if test="isBinded != null and isBinded == 1"> | 
 |  |  |                 AND ge.id IN (SELECT intakeId FROM pr_controller where deleted = 0) | 
 |  |  |             </if> | 
 |  |  |             <if test="isBinded == null"> | 
 |  |  | 
 |  |  |             <if test = "rtuAddr != null and rtuAddr !=''"> | 
 |  |  |                 AND cont.rtuAddr like CONCAT('%',#{rtuAddr},'%') | 
 |  |  |             </if> | 
 |  |  |             <if test="isOnLine != null and isOnLine !='' "> | 
 |  |  |                 AND rtus.isOnLine = #{isOnLine} | 
 |  |  |             </if> | 
 |  |  |             <if test="protocol != null and protocol !='' "> | 
 |  |  |                 AND cont.protocol = #{protocol} | 
 |  |  |             </if> | 
 |  |  |             <if test = "bindNumber != null and bindNumber > 0"> | 
 |  |  |                 AND (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) = ${bindNumber} | 
 |  |  |                 AND bindNumTb.num = #{bindNumber} | 
 |  |  |             </if> | 
 |  |  |         </where> | 
 |  |  |     </select> | 
 |  |  |  | 
 |  |  |     <!--根据指定条件获取取水口记录--> | 
 |  |  |     <select id="getIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoIntake"> | 
 |  |  |         SELECT CAST(ge.id AS char)                                 AS intakeId, | 
 |  |  |         WITH intakeIds AS(SELECT intakeId FROM pr_controller where deleted = 0) | 
 |  |  |  | 
 |  |  |         SELECT CAST(ge.id AS char)                          AS intakeId, | 
 |  |  |         ge.`name`                                           AS intakeName, | 
 |  |  |         CAST(divi.id AS char)                               AS divideId, | 
 |  |  |         divi.`name`                                         AS divideName, | 
 |  |  | 
 |  |  |         cont.rtuAddr                                        AS rtuAddr, | 
 |  |  |         cont.protocol                                       AS protocol, | 
 |  |  |         cont.findDt                                         AS findDt, | 
 |  |  |         rtus.isOnLine                                       AS isOnLine, | 
 |  |  |         (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) AS bindNumber, | 
 |  |  |         bindNumTb.num                                       AS bindNumber, | 
 |  |  |         ge.lng, | 
 |  |  |         ge.lat, | 
 |  |  |         ge.remarks, | 
 |  |  |         ge.operator, | 
 |  |  |         ge.operateDt                                        As operateDt, | 
 |  |  |         (CASE | 
 |  |  |         WHEN ge.id NOT IN (SELECT intakeId FROM pr_controller where deleted = 0) THEN '未绑定' | 
 |  |  |         WHEN ge.id IN (SELECT intakeId FROM pr_controller where deleted = 0) THEN '已绑定' | 
 |  |  |         END)                                            AS isBind, | 
 |  |  |         CONCAT(country.`name`, town.`name`, village.`name`) AS address | 
 |  |  |         IF(ge.id IN (SELECT intakeId FROM intakeIds),'已绑定','未绑定')    AS isBind, | 
 |  |  |         CONCAT(country.`name`, town.`name`, village.`name`)              AS address | 
 |  |  |         FROM pr_intake ge | 
 |  |  |         INNER JOIN pr_divide divi ON ge.divideId = divi.id | 
 |  |  |         INNER JOIN ba_block blo ON divi.blockId = blo.id | 
 |  |  | 
 |  |  |         LEFT JOIN ba_district town ON ge.townId = town.id | 
 |  |  |         LEFT JOIN ba_district village ON ge.villageId = village.id | 
 |  |  |         LEFT JOIN pr_controller cont ON ge.id = cont.intakeId | 
 |  |  |         left 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 cont.rtuAddr = rtus.rtuAddr | 
 |  |  |         JOIN (SELECT intakeId, COUNT(*) num FROM pr_intake_controller WHERE operateType = 1 group by intakeId) AS bindNumTb on bindNumTb.intakeId= ge.id | 
 |  |  |         <where> | 
 |  |  |             ge.deleted = 0 | 
 |  |  |             AND divi.deleted = 0 | 
 |  |  | 
 |  |  |             <if test="intakeName != null and intakeName != ''"> | 
 |  |  |                 AND ge.name LIKE CONCAT('%', #{intakeName}, '%') | 
 |  |  |             </if> | 
 |  |  |  | 
 |  |  |             <if test="divideId != null and divideId != ''"> | 
 |  |  |                 AND divi.id = #{divideId} | 
 |  |  |             </if> | 
 |  |  |  | 
 |  |  |             <if test="blockId != null and blockId != ''"> | 
 |  |  |                 AND blo.id = #{blockId} | 
 |  |  |             </if> | 
 |  |  |  | 
 |  |  |             <if test="isBinded == 0"> | 
 |  |  |             <if test="isBinded != null and isBinded == 0"> | 
 |  |  |                 AND ge.id NOT IN (SELECT intakeId FROM pr_controller where deleted = 0) | 
 |  |  |             </if> | 
 |  |  |             <if test="isBinded == 1"> | 
 |  |  |             <if test="isBinded != null and isBinded == 1"> | 
 |  |  |                 AND ge.id IN (SELECT intakeId FROM pr_controller where deleted = 0) | 
 |  |  |             </if> | 
 |  |  |             <if test="isBinded == null"> | 
 |  |  | 
 |  |  |             <if test="address != null and address != ''"> | 
 |  |  |                 AND CONCAT(country.`name`, town.`name`, village.`name`) LIKE CONCAT('%', #{address}, '%') | 
 |  |  |             </if> | 
 |  |  |             <if test = "rtuAddr != null and rtuAddr !=''"> | 
 |  |  |             <if test="rtuAddr != null and rtuAddr !=''"> | 
 |  |  |                 AND cont.rtuAddr like CONCAT('%',#{rtuAddr},'%') | 
 |  |  |             </if> | 
 |  |  |             <if test="isOnLine != null and isOnLine !='' "> | 
 |  |  |                 AND rtus.isOnLine = #{isOnLine} | 
 |  |  |             </if> | 
 |  |  |             <if test="protocol != null and protocol !='' "> | 
 |  |  |                 AND cont.protocol = #{protocol} | 
 |  |  |             </if> | 
 |  |  |             <if test = "bindNumber != null and bindNumber > 0"> | 
 |  |  |                 AND (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) = ${bindNumber} | 
 |  |  |             <if test="bindNumber != null and bindNumber > 0"> | 
 |  |  |                 AND bindNumTb.num = #{bindNumber} | 
 |  |  |             </if> | 
 |  |  |         </where> | 
 |  |  |         ORDER BY ge.operateDt DESC | 
 |  |  | 
 |  |  |         INNER JOIN pr_controller con ON con.intakeId = inta.id | 
 |  |  |         <if test="onLineMap != null and onLineMap !='' and isOnLine != null"> | 
 |  |  |             LEFT 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' | 
 |  |  |             ) | 
 |  |  |                 <!--'[{"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 con.rtuAddr = rtus.rtuAddr | 
 |  |  |         </if> | 
 |  |  |         WHERE con.intakeId is not null | 
 |  |  | 
 |  |  |         INNER JOIN pr_controller con ON con.intakeId = inta.id | 
 |  |  |         LEFT JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id | 
 |  |  |         LEFT JOIN( | 
 |  |  |         SELECT intake_id AS intakeId, | 
 |  |  |         CONCAT( | 
 |  |  |         IF(alarm_loss = 1, '漏损报警,', ''), | 
 |  |  |         IF(alarm_battery_volt = 1, '电池电压报警,', ''), | 
 |  |  |         IF(alarm_valve = 1, '阀门报警,', ''), | 
 |  |  |         IF(alarm_water_meter_fault = 1, '流量计故障报警,', '') | 
 |  |  |         ) AS alarm | 
 |  |  |         FROM rm_alarm_state_last | 
 |  |  |         WHERE (alarm_loss = 1 OR alarm_battery_volt = 1 OR alarm_valve = 1 OR alarm_water_meter_fault = 1) | 
 |  |  |         AND dt >= DATE_SUB(NOW(), INTERVAL 12 HOUR) | 
 |  |  |             SELECT intake_id AS intakeId, | 
 |  |  |             CONCAT( | 
 |  |  |                 IF(alarm_loss = 1, '漏损报警,', ''), | 
 |  |  |                 IF(alarm_battery_volt = 1, '电池电压报警,', ''), | 
 |  |  |                 IF(alarm_valve = 1, '阀门报警,', ''), | 
 |  |  |                 IF(alarm_water_meter_fault = 1, '流量计故障报警,', '') | 
 |  |  |             ) AS alarm | 
 |  |  |             FROM rm_alarm_state_last | 
 |  |  |             WHERE (alarm_loss = 1 OR alarm_battery_volt = 1 OR alarm_valve = 1 OR alarm_water_meter_fault = 1) | 
 |  |  |             AND dt >= DATE_SUB(NOW(), INTERVAL 12 HOUR) | 
 |  |  |         ) alarm ON alarm.intakeId = inta.id | 
 |  |  |         <if test="onLineMap != null and onLineMap !='' and isOnLine != null"> | 
 |  |  |             LEFT 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' | 
 |  |  |             ) | 
 |  |  |                 <!--'[{"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 con.rtuAddr = rtus.rtuAddr | 
 |  |  |         </if> | 
 |  |  |         WHERE con.intakeId is not null | 
 |  |  | 
 |  |  |  | 
 |  |  |     <!--根据操作员获取常用取水口--> | 
 |  |  |     <select id="getUsedIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake"> | 
 |  |  |         SELECT DISTINCT con.intakeId, | 
 |  |  |         con.rtuAddr, | 
 |  |  |         inta.name AS intakeNum, | 
 |  |  |         rtus.isOnLine | 
 |  |  |         FROM pr_controller con | 
 |  |  |         INNER JOIN pr_intake inta ON con.intakeId = inta.id | 
 |  |  |         INNER JOIN rm_command_history com ON con.rtuAddr = com.rtu_addr | 
 |  |  |         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 con.rtuAddr = rtus.rtuAddr | 
 |  |  |         SELECT | 
 |  |  |             com.intake_id AS intakeId, | 
 |  |  |             con.rtuAddr, | 
 |  |  |             inta.name AS intakeNum, | 
 |  |  |             rtus.isOnLine | 
 |  |  |         FROM pr_common_intakes com | 
 |  |  |             INNER JOIN pr_intake inta ON inta.id = com.intake_id | 
 |  |  |             INNER JOIN pr_controller con ON con.intakeId = com.intake_id | 
 |  |  |             LEFT JOIN JSON_TABLE( | 
 |  |  |                 <!--'[{"rtuAddr":"530115059980","isOnLine":true},{"rtuAddr":"620201000030","isOnLine":true}]',--> | 
 |  |  |                 #{onLineMap}, | 
 |  |  |                 '$[*]' COLUMNS ( | 
 |  |  |                     rtuAddr VARCHAR(20) PATH '$.rtuAddr', | 
 |  |  |                     isOnLine BOOLEAN PATH '$.isOnLine' | 
 |  |  |                 ) | 
 |  |  |             ) rtus ON con.rtuAddr = rtus.rtuAddr | 
 |  |  |         <where> | 
 |  |  |             <if test="operator != null"> | 
 |  |  |                 com.operator = #{operator} | 
 |  |  |             <if test="operatorId != null"> | 
 |  |  |                 AND com.operator_id = #{operatorId} | 
 |  |  |             </if> | 
 |  |  |         </where> | 
 |  |  |         ORDER BY com.last_used_time DESC,com.usage_count DESC | 
 |  |  |     </select> | 
 |  |  |  | 
 |  |  |     <!--取水口名称换取水口ID,扫码开阀使用--> |