| <?xml version="1.0" encoding="UTF-8"?> | 
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 
| <mapper namespace="com.dy.pipIrrGlobal.daoPr.PrIntakeMapper"> | 
|     <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoPr.PrIntake"> | 
|         <!--@mbg.generated--> | 
|         <!--@Table pr_intake--> | 
|         <id column="id" jdbcType="BIGINT" property="id"/> | 
|         <result column="countyId" jdbcType="BIGINT" property="countyId"/> | 
|         <result column="townId" jdbcType="BIGINT" property="townId"/> | 
|         <result column="villageId" jdbcType="BIGINT" property="villageId"/> | 
|         <result column="divideId" jdbcType="BIGINT" property="divideId"/> | 
|         <result column="blockId" jdbcType="BIGINT" property="blockId"/> | 
|         <result column="name" jdbcType="VARCHAR" property="name"/> | 
|         <result column="lng" jdbcType="DOUBLE" property="lng"/> | 
|         <result column="lat" jdbcType="DOUBLE" property="lat"/> | 
|         <result column="remarks" jdbcType="VARCHAR" property="remarks"/> | 
|         <result column="operator" jdbcType="BIGINT" property="operator"/> | 
|         <result column="operateDt" jdbcType="TIMESTAMP" property="operateDt"/> | 
|         <result column="deleted" jdbcType="TINYINT" property="deleted"/> | 
|     </resultMap> | 
|     <sql id="Base_Column_List"> | 
|         <!--@mbg.generated--> | 
|         id, | 
|         countyId, | 
|         townId, | 
|         villageId, | 
|         divideId, | 
|         blockId, | 
|         `name`, | 
|         lng, | 
|         lat, | 
|         remarks, | 
|         `operator`, | 
|         operateDt, | 
|         deleted | 
|     </sql> | 
|     <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultType="com.dy.pipIrrGlobal.voPr.VoAllIntake"> | 
|         <!--@mbg.generated--> | 
|         select | 
|         ge.id, | 
|         ge.countyId, | 
|         ge.townId, | 
|         ge.villageId, | 
|         ge.divideId, | 
|         ge.blockId, | 
|         ge.`name`, | 
|         ge.lng, | 
|         ge.lat, | 
|         ge.remarks, | 
|         ge.`operator`, | 
|         ge.operateDt, | 
|         blo.`name`                                          AS blockName, | 
|         CONCAT(country.`name`, town.`name`, village.`name`)              AS address, | 
|         con.id AS controllerId, | 
|         con.rtuAddr, | 
|         con.protocol | 
|         FROM pr_intake ge | 
|         LEFT JOIN pr_divide divi ON ge.divideId = divi.id | 
|         LEFT JOIN ba_block blo ON divi.blockId = blo.id | 
|         LEFT JOIN ba_district country ON ge.countyId = country.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 con ON con.intakeId = ge.id | 
|         where ge.id = #{id,jdbcType=BIGINT} | 
|         AND ge.deleted = 0 | 
|     </select> | 
|   | 
|     <delete id="deleteLogicById" parameterType="java.lang.Long"> | 
|         <!--@mbg.generated--> | 
|         update pr_intake | 
|         set deleted = 1 | 
|         where id = #{id,jdbcType=BIGINT} | 
|     </delete> | 
|   | 
|     <select id="selectAll"  resultType="com.dy.pipIrrGlobal.voPr.VoAllIntake"> | 
|         <!--@mbg.generated--> | 
|         select | 
|         ge.id, | 
|         ge.countyId, | 
|         ge.townId, | 
|         ge.villageId, | 
|         ge.divideId, | 
|         ge.blockId, | 
|         ge.`name`, | 
|         ge.lng, | 
|         ge.lat, | 
|         ge.remarks, | 
|         ge.`operator`, | 
|         ge.operateDt, | 
|         blo.`name`                                          AS blockName, | 
|         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 country ON ge.countyId = country.id | 
|         LEFT JOIN ba_district town ON ge.townId = town.id | 
|         LEFT JOIN ba_district village ON ge.villageId = village.id | 
|         where | 
|         ge.deleted = 0 | 
|         AND divi.deleted = 0 | 
|         AND blo.deleted = 0 | 
|     </select> | 
|     <delete id="deleteByPrimaryKey" parameterType="java.lang.Long"> | 
|         <!--@mbg.generated--> | 
|         delete | 
|         from pr_intake | 
|         where id = #{id,jdbcType=BIGINT} | 
|     </delete> | 
|     <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoPr.PrIntake"> | 
|         <!--@mbg.generated--> | 
|         insert into pr_intake (id, countyId, townId, | 
|         villageId, divideId, blockId, | 
|         `name`, lng, lat, remarks, | 
|         `operator`, operateDt, deleted) | 
|         values (#{id,jdbcType=BIGINT}, #{countyId,jdbcType=BIGINT}, #{townId,jdbcType=BIGINT}, | 
|         #{villageId,jdbcType=BIGINT}, #{divideId,jdbcType=BIGINT}, #{blockId,jdbcType=BIGINT}, | 
|         #{name,jdbcType=VARCHAR}, #{lng,jdbcType=DOUBLE}, #{lat,jdbcType=DOUBLE}, #{remarks,jdbcType=VARCHAR}, | 
|         #{operator,jdbcType=BIGINT}, #{operateDt,jdbcType=TIMESTAMP}, #{deleted,jdbcType=TINYINT}) | 
|     </insert> | 
|     <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoPr.PrIntake"> | 
|         <!--@mbg.generated--> | 
|         insert into pr_intake | 
|         <trim prefix="(" suffix=")" suffixOverrides=","> | 
|             <if test="id != null"> | 
|                 id, | 
|             </if> | 
|             <if test="countyId != null"> | 
|                 countyId, | 
|             </if> | 
|             <if test="townId != null"> | 
|                 townId, | 
|             </if> | 
|             <if test="villageId != null"> | 
|                 villageId, | 
|             </if> | 
|             <if test="divideId != null"> | 
|                 divideId, | 
|             </if> | 
|             <if test="blockId != null"> | 
|                 blockId, | 
|             </if> | 
|             <if test="name != null"> | 
|                 `name`, | 
|             </if> | 
|             <if test="lng != null"> | 
|                 lng, | 
|             </if> | 
|             <if test="lat != null"> | 
|                 lat, | 
|             </if> | 
|             <if test="remarks != null"> | 
|                 remarks, | 
|             </if> | 
|             <if test="operator != null"> | 
|                 `operator`, | 
|             </if> | 
|             <if test="operateDt != null"> | 
|                 operateDt, | 
|             </if> | 
|             <if test="deleted != null"> | 
|                 deleted, | 
|             </if> | 
|         </trim> | 
|         <trim prefix="values (" suffix=")" suffixOverrides=","> | 
|             <if test="id != null"> | 
|                 #{id,jdbcType=BIGINT}, | 
|             </if> | 
|             <if test="countyId != null"> | 
|                 #{countyId,jdbcType=BIGINT}, | 
|             </if> | 
|             <if test="townId != null"> | 
|                 #{townId,jdbcType=BIGINT}, | 
|             </if> | 
|             <if test="villageId != null"> | 
|                 #{villageId,jdbcType=BIGINT}, | 
|             </if> | 
|             <if test="divideId != null"> | 
|                 #{divideId,jdbcType=BIGINT}, | 
|             </if> | 
|             <if test="blockId != null"> | 
|                 #{blockId,jdbcType=BIGINT}, | 
|             </if> | 
|             <if test="name != null"> | 
|                 #{name,jdbcType=VARCHAR}, | 
|             </if> | 
|             <if test="lng != null"> | 
|                 #{lng,jdbcType=DOUBLE}, | 
|             </if> | 
|             <if test="lat != null"> | 
|                 #{lat,jdbcType=DOUBLE}, | 
|             </if> | 
|             <if test="remarks != null"> | 
|                 #{remarks,jdbcType=VARCHAR}, | 
|             </if> | 
|             <if test="operator != null"> | 
|                 #{operator,jdbcType=BIGINT}, | 
|             </if> | 
|             <if test="operateDt != null"> | 
|                 #{operateDt,jdbcType=TIMESTAMP}, | 
|             </if> | 
|             <if test="deleted != null"> | 
|                 #{deleted,jdbcType=TINYINT}, | 
|             </if> | 
|         </trim> | 
|     </insert> | 
|     <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoPr.PrIntake"> | 
|         <!--@mbg.generated--> | 
|         update pr_intake | 
|         <set> | 
|             <if test="countyId != null"> | 
|                 countyId = #{countyId,jdbcType=BIGINT}, | 
|             </if> | 
|             <if test="townId != null"> | 
|                 townId = #{townId,jdbcType=BIGINT}, | 
|             </if> | 
|             <if test="villageId != null"> | 
|                 villageId = #{villageId,jdbcType=BIGINT}, | 
|             </if> | 
|             <if test="divideId != null"> | 
|                 divideId = #{divideId,jdbcType=BIGINT}, | 
|             </if> | 
|             <if test="blockId != null"> | 
|                 blockId = #{blockId,jdbcType=BIGINT}, | 
|             </if> | 
|             <if test="name != null"> | 
|                 `name` = #{name,jdbcType=VARCHAR}, | 
|             </if> | 
|             <if test="lng != null"> | 
|                 lng = #{lng,jdbcType=DOUBLE}, | 
|             </if> | 
|             <if test="lat != null"> | 
|                 lat = #{lat,jdbcType=DOUBLE}, | 
|             </if> | 
|             <if test="remarks != null"> | 
|                 remarks = #{remarks,jdbcType=VARCHAR}, | 
|             </if> | 
|             <if test="operator != null"> | 
|                 `operator` = #{operator,jdbcType=BIGINT}, | 
|             </if> | 
|             <if test="operateDt != null"> | 
|                 operateDt = #{operateDt,jdbcType=TIMESTAMP}, | 
|             </if> | 
|             <if test="deleted != null"> | 
|                 deleted = #{deleted,jdbcType=TINYINT}, | 
|             </if> | 
|         </set> | 
|         where id = #{id,jdbcType=BIGINT} | 
|     </update> | 
|     <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoPr.PrIntake"> | 
|         <!--@mbg.generated--> | 
|         update pr_intake | 
|         set countyId   = #{countyId,jdbcType=BIGINT}, | 
|         townId     = #{townId,jdbcType=BIGINT}, | 
|         villageId  = #{villageId,jdbcType=BIGINT}, | 
|         divideId   = #{divideId,jdbcType=BIGINT}, | 
|         blockId    = #{blockId,jdbcType=BIGINT}, | 
|         `name`     = #{name,jdbcType=VARCHAR}, | 
|         lng        = #{lng,jdbcType=DOUBLE}, | 
|         lat        = #{lat,jdbcType=DOUBLE}, | 
|         remarks    = #{remarks,jdbcType=VARCHAR}, | 
|         `operator` = #{operator,jdbcType=BIGINT}, | 
|         operateDt  = #{operateDt,jdbcType=TIMESTAMP}, | 
|         deleted    = #{deleted,jdbcType=TINYINT} | 
|         where id = #{id,jdbcType=BIGINT} | 
|     </update> | 
|   | 
|     <!--根据指定条件获取取水口记录数--> | 
|     <select id="getRecordCount" parameterType="java.util.Map" resultType="java.lang.Long"> | 
|         SELECT COUNT(*) AS recordCount | 
|         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 country ON ge.countyId = country.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 | 
|         <if test = "bindNumber != null and bindNumber > 0"> | 
|             LEFT 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.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 != null and isBinded == 0"> | 
|                 AND ge.id NOT IN (SELECT intakeId FROM pr_controller where deleted = 0) | 
|             </if> | 
|             <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> | 
|             <if test="address != null and address != ''"> | 
|                 AND CONCAT(country.`name`, town.`name`, village.`name`) LIKE CONCAT('%', #{address}, '%') | 
|             </if> | 
|             <if test = "rtuAddr != null and rtuAddr !=''"> | 
|                 AND cont.rtuAddr like CONCAT('%',#{rtuAddr},'%') | 
|             </if> | 
|             <if test="protocol != null and protocol !='' "> | 
|                 AND cont.protocol = #{protocol} | 
|             </if> | 
|             <if test = "bindNumber != null and bindNumber > 0"> | 
|                 AND bindNumTb.num = #{bindNumber} | 
|             </if> | 
|         </where> | 
|     </select> | 
|   | 
|     <!--根据指定条件获取取水口记录--> | 
|     <select id="getIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoIntake"> | 
|         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, | 
|         CAST(blo.id AS char)                                AS blockId, | 
|         blo.`name`                                          AS blockName, | 
|         CAST(cont.id AS char)                               AS controllerId, | 
|         cont.rtuAddr                                        AS rtuAddr, | 
|         cont.protocol                                       AS protocol, | 
|         cont.findDt                                         AS findDt, | 
|         bindNumTb.num                                       AS bindNumber, | 
|         ge.lng, | 
|         ge.lat, | 
|         ge.remarks, | 
|         ge.operator, | 
|         ge.operateDt                                        As operateDt, | 
|         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 country ON ge.countyId = country.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 (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 | 
|             AND blo.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 != null and isBinded == 0"> | 
|                 AND ge.id NOT IN (SELECT intakeId FROM pr_controller where deleted = 0) | 
|             </if> | 
|             <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> | 
|             <if test="address != null and address != ''"> | 
|                 AND CONCAT(country.`name`, town.`name`, village.`name`) LIKE CONCAT('%', #{address}, '%') | 
|             </if> | 
|             <if test="rtuAddr != null and rtuAddr !=''"> | 
|                 AND cont.rtuAddr like CONCAT('%',#{rtuAddr},'%') | 
|             </if> | 
|             <if test="protocol != null and protocol !='' "> | 
|                 AND cont.protocol = #{protocol} | 
|             </if> | 
|             <if test="bindNumber != null and bindNumber > 0"> | 
|                 AND bindNumTb.num = #{bindNumber} | 
|             </if> | 
|         </where> | 
|         ORDER BY ge.divideId DESC, ge.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> | 
|   | 
|     <!--根据下级获取上一级地址--> | 
|     <select id="getSupperByVillageId" parameterType="_long" resultType="java.lang.Long"> | 
|         select dis_tow.* | 
|         from ba_district dis_vil | 
|         inner join | 
|         ba_district dis_tow | 
|         on dis_vil.supperId = dis_tow.id | 
|         where dis_vil.id = #{vaId,jdbcType=BIGINT} | 
|     </select> | 
|   | 
|     <!--根据取水口编号获取未删除的取水口数量--> | 
|     <select id="getRecordCountOfIntake" resultType="java.lang.Integer"> | 
|         SELECT COUNT(*) AS recordCount | 
|         FROM pr_intake | 
|         WHERE deleted = 0 | 
|         AND id = #{intakeId} | 
|     </select> | 
|   | 
|     <!--根据村ID获取全部地址--> | 
|     <select id="getNameById" resultType="java.lang.String"> | 
|         select name | 
|         from pr_intake | 
|         where id = #{intakeId, jdbcType=BIGINT} | 
|     </select> | 
|   | 
|     <!--根据村ID获取全部地址--> | 
|     <select id="getAddressByVillageId" parameterType="_long" resultType="java.lang.String"> | 
|         select CONCAT(dis_province.`name`, dis_city.`name`, dis_county.`name`, dis_town.`name`, | 
|         dis_village.`name`) AS address | 
|         from ba_district dis_village | 
|         inner join ba_district dis_town on dis_village.supperId = dis_town.id | 
|         inner join ba_district dis_county on dis_town.supperId = dis_county.id | 
|         inner join ba_district dis_city on dis_county.supperId = dis_city.id | 
|         inner join ba_district dis_province on dis_city.supperId = dis_province.id | 
|         where dis_village.id = #{villageId,jdbcType=BIGINT} | 
|     </select> | 
|   | 
|     <!--根据区域Id获取区域等级--> | 
|     <select id="getLevelByRegionId" parameterType="_long" resultType="java.lang.Integer"> | 
|         select region.level | 
|         from ba_district region | 
|         where region.id = #{regionId,jdbcType=BIGINT} | 
|     </select> | 
|   | 
|     <!--获取未绑控制器的取水口列表--> | 
|     <select id="getNoBindingIntakes" resultType="java.util.HashMap"> | 
|         SELECT CAST(inta.id AS char) AS intakeId, | 
|                name                  AS intakeName | 
|         FROM pr_intake inta | 
|         WHERE id NOT IN (SELECT intakeId FROM pr_controller) | 
|           AND deleted = 0 | 
|     </select> | 
|   | 
|     <!--获取取水口数量(在线和不在先)--> | 
|     <select id="getOnLineIntakesCount" resultType="java.lang.Long"> | 
|         SELECT COUNT(*) AS recordCount | 
|         FROM pr_intake inta | 
|         LEFT 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_water_meter_fault = 1, '流量计故障,', ''), | 
|         IF(alarm_water_meter_fault = 1, '流量计故障', '')), | 
|         IF(alarm_battery_volt = 1, IF(alarm_loss = 1, '漏损(偷水)报警,', ''), | 
|         IF(alarm_loss = 1, '漏损(偷水)报警', '')), | 
|         IF(alarm_valve = 1, IF(alarm_battery_volt = 1, '蓄电池电压报警,', ''), | 
|         IF(alarm_battery_volt = 1, '蓄电池电压报警', '')), | 
|         IF(alarm_valve = 1, '阀门报警', '') | 
|         )     AS alarm | 
|         FROM rm_alarm_state_last | 
|         WHERE (alarm_water_meter_fault = 1 OR alarm_loss = 1 OR alarm_battery_volt = 1 OR alarm_valve = 1) | 
|         AND dt >= DATE_SUB(NOW(), INTERVAL 12 HOUR) | 
|         ) alarm ON alarm.intakeId = inta.id | 
|         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 con.rtuAddr = rtus.rtuAddr | 
|         <where> | 
|             <if test="isOnLine != null"> | 
|                 rtus.isOnLine = #{isOnLine} | 
|             </if> | 
|             <if test="intakeNum != null and intakeNum != ''"> | 
|                 AND inta.name = #{intakeNum} | 
|             </if> | 
|             <if test="isBinded == false"> | 
|                 AND con.rtuAddr IS NULL | 
|             </if> | 
|             <if test="isBinded == true"> | 
|                 AND con.rtuAddr IS NOT NULL | 
|             </if> | 
|         </where> | 
|     </select> | 
|   | 
|     <!--获取取水口列表(在线和不在先)--> | 
|     <select id="getOnLineIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake"> | 
|         SELECT | 
|             inta.id AS intakeId, | 
|             con.rtuAddr, | 
|             inta.name AS intakeNum, | 
|             inta.lng, | 
|             inta.lat, | 
|             IFNULL(hou.total_amount, 0) AS totalAmount, | 
|             (CASE | 
|                 WHEN con.rtuAddr IS NULL THEN false | 
|                 WHEN con.rtuAddr IS NOT NULL THEN true | 
|             END) AS isBinded, | 
|             rtus.isOnLine, | 
|             alarm.alarm | 
|         FROM pr_intake inta | 
|             LEFT 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_water_meter_fault = 1, '流量计故障,', ''), | 
|                         IF(alarm_water_meter_fault = 1, '流量计故障', '')), | 
|                         IF(alarm_battery_volt = 1, IF(alarm_loss = 1, '漏损(偷水)报警,', ''), | 
|                         IF(alarm_loss = 1, '漏损(偷水)报警', '')), | 
|                         IF(alarm_valve = 1, IF(alarm_battery_volt = 1, '蓄电池电压报警,', ''), | 
|                         IF(alarm_battery_volt = 1, '蓄电池电压报警', '')), | 
|                         IF(alarm_valve = 1, '阀门报警', '') | 
|                     ) AS alarm | 
|                 FROM rm_alarm_state_last | 
|                 WHERE (alarm_water_meter_fault = 1 OR alarm_loss = 1 OR alarm_battery_volt = 1 OR alarm_valve = 1) | 
|                     AND dt >= DATE_SUB(NOW(), INTERVAL 12 HOUR) | 
|             ) alarm ON alarm.intakeId = inta.id | 
|             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 con.rtuAddr = rtus.rtuAddr | 
|         <where> | 
|             <if test="isOnLine != null"> | 
|                 rtus.isOnLine = #{isOnLine} | 
|             </if> | 
|             <if test="intakeNum != null and intakeNum != ''"> | 
|                 AND inta.name = #{intakeNum} | 
|             </if> | 
|             <if test="isBinded == false"> | 
|                 AND con.rtuAddr IS NULL | 
|             </if> | 
|             <if test="isBinded == true"> | 
|                 AND con.rtuAddr IS NOT NULL | 
|             </if> | 
|         </where> | 
|         order by con.id ASC | 
|         <trim prefix="limit "> | 
|             <if test="start != null and count != null"> | 
|                 #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER} | 
|             </if> | 
|         </trim> | 
|     </select> | 
|   | 
|   | 
|   | 
|   | 
|   | 
|   | 
|   | 
|     <!--获取取水口数量(在线或离线或不设状态)--> | 
|     <select id="selectIntakesCountForOnLine" resultType="java.lang.Long"> | 
|         SELECT COUNT(*) AS recordCount | 
|         FROM pr_intake inta | 
|         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' | 
|                 ) | 
|             ) rtus ON con.rtuAddr = rtus.rtuAddr | 
|         </if> | 
|         WHERE con.intakeId is not null | 
|         <if test="isOnLine != null and isOnLine == false"> | 
|             <choose> | 
|                 <when test="onLineMap != null and onLineMap !=''"> | 
|                     AND (rtus.isOnLine = false OR rtus.rtuAddr IS NULL) | 
|                 </when> | 
|                 <otherwise> | 
|                     AND rtus.rtuAddr IS NULL | 
|                 </otherwise> | 
|             </choose> | 
|         </if> | 
|         <if test="isOnLine != null and isOnLine == true"> | 
|             AND rtus.isOnLine = true | 
|         </if> | 
|         <if test="intakeNum != null and intakeNum != ''"> | 
|             AND inta.name = #{intakeNum} | 
|         </if> | 
|     </select> | 
|   | 
|   | 
|     <!--获取取水口列表(在线或离线或不设状态)--> | 
|     <select id="selectIntakesForOnLine" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake"> | 
|         SELECT | 
|         inta.id                     AS intakeId, | 
|         con.rtuAddr, | 
|         con.protocol, | 
|         con.protocol_version       AS protocolVersion, | 
|         inta.name                  AS intakeNum, | 
|         inta.lng, | 
|         inta.lat, | 
|         IFNULL(hou.instant_amount, 0) AS instantAmount, | 
|         IFNULL(hou.total_amount, 0) AS totalAmount, | 
|         <if test="onLineMap != null and onLineMap !='' and isOnLine != null"> | 
|             rtus.isOnLine, | 
|         </if> | 
|         alarm.alarm, | 
|         alarm.alarmDt | 
|         FROM pr_intake inta | 
|         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, | 
|             dt AS alarmDt | 
|             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' | 
|                 ) | 
|             ) rtus ON con.rtuAddr = rtus.rtuAddr | 
|         </if> | 
|         WHERE con.intakeId is not null | 
|         <if test="isOnLine != null and isOnLine == false"> | 
|             <choose> | 
|                 <when test="onLineMap != null and onLineMap !=''"> | 
|                     AND (rtus.isOnLine = false OR rtus.rtuAddr IS NULL) | 
|                 </when> | 
|                 <otherwise> | 
|                     AND rtus.rtuAddr IS NULL | 
|                 </otherwise> | 
|             </choose> | 
|         </if> | 
|         <if test="isOnLine != null and isOnLine == true"> | 
|             AND rtus.isOnLine = true | 
|         </if> | 
|         <if test="intakeNum != null and intakeNum != ''"> | 
|             AND inta.name = #{intakeNum} | 
|         </if> | 
|         order by inta.id ASC | 
|         <trim prefix="limit "> | 
|             <if test="start != null and count != null"> | 
|                 #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER} | 
|             </if> | 
|         </trim> | 
|     </select> | 
|   | 
|     <!--根据取水口编号获取取水口对象--> | 
|     <select id="getIntakeByName" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake"> | 
|         SELECT | 
|             con.intakeId, | 
|             con.rtuAddr, | 
|             inta.name AS intakeNum | 
|         FROM pr_controller con | 
|             INNER JOIN pr_intake inta ON con.intakeId = inta.id | 
|         <where> | 
|             <if test="intakeNum != null and intakeNum != ''"> | 
|                 AND LOWER(inta.name) = #{intakeNum} | 
|             </if> | 
|         </where> | 
|         LIMIT 0,1 | 
|     </select> | 
|   | 
|     <!--根据操作员获取常用取水口--> | 
|     <select id="getUsedIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake"> | 
|         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="operatorId != null"> | 
|                 AND com.operator_id = #{operatorId} | 
|             </if> | 
|         </where> | 
|         ORDER BY com.last_used_time DESC,com.usage_count DESC | 
|     </select> | 
|   | 
|     <!--取水口名称换取水口ID,扫码开阀使用--> | 
|     <select id="getIntakeIdByName" resultType="java.lang.Long"> | 
|         SELECT id AS intakeId | 
|         FROM pr_intake | 
|         WHERE `name` = #{intakeName} | 
|     </select> | 
|   | 
|     <!--取水口名称换取水口ID,验证是否重复名称使用--> | 
|     <select id="getIntakeIdsByName" resultType="java.lang.Long"> | 
|         SELECT id AS intakeId | 
|         FROM pr_intake | 
|         WHERE `name` = #{intakeName} | 
|     </select> | 
|   | 
|     <!--取水口名称换取水口ID,验证是否重复名称使用--> | 
|     <select id="getIntakeIdByNameExcludeId" resultType="java.lang.Long"> | 
|         SELECT id AS intakeId | 
|         FROM pr_intake | 
|         WHERE id != #{id} | 
|         and `name` = #{intakeName} | 
|     </select> | 
|     <!--app修改取水口经纬度--> | 
|     <update id="updateByPrimaryKeySelective1" parameterType="com.dy.pipIrrGlobal.voPr.IntakeUpdateLngLat"> | 
|         <!--@mbg.generated--> | 
|         update pr_intake | 
|         <set> | 
|             <if test="lng != null"> | 
|                 lng = #{lng,jdbcType=DOUBLE}, | 
|             </if> | 
|             <if test="lat != null"> | 
|                 lat = #{lat,jdbcType=DOUBLE}, | 
|             </if> | 
|             <if test="operator != null"> | 
|                 `operator` = #{operator,jdbcType=BIGINT}, | 
|             </if> | 
|             <if test="operateDt != null"> | 
|                 operateDt = #{operateDt,jdbcType=TIMESTAMP}, | 
|             </if> | 
|         </set> | 
|         where id = #{id,jdbcType=BIGINT} | 
|     </update> | 
|   | 
|     <!--获取未绑定到轮灌组的取水口列表--> | 
|     <select id="getFreeIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoIntakeSimple"> | 
|         SELECT | 
|             id AS intakeId, | 
|             name AS intakeName | 
|         FROM pr_intake inta | 
|         <where> | 
|             AND inta.deleted = 0 | 
|             AND NOT EXISTS (SELECT 1 FROM ir_group_intake gi WHERE gi.intake_id = inta.id) | 
|             <if test="intakeName != null and intakeName != ''"> | 
|                 AND LOWER(inta.name) LIKE CONCAT('%', #{intakeName}, '%') | 
|             </if> | 
|         </where> | 
|     </select> | 
|   | 
|     <!--获取未绑定虚拟卡的取水口列表,给取水口绑虚拟卡使用--> | 
|     <select id="getNotLinkVcIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoIntakeSimple"> | 
|         SELECT | 
|             id AS intakeId, | 
|             name AS intakeName | 
|         FROM pr_intake inta | 
|         WHERE NOT EXISTS ( | 
|                 SELECT 1 | 
|                 FROM pr_intake_vc iv | 
|                 WHERE iv.intake_id = inta.id | 
|             ) AND inta.deleted = 0 | 
|     </select> | 
|   | 
|   | 
|   | 
|     <!-- 为wechat,根据指定取水口名称模糊(后端)查询水口记录数 --> | 
|     <select id="getSomeIntakesCount4Wx" parameterType="java.util.Map" resultType="java.lang.Long"> | 
|         SELECT COUNT(*) AS recordCount | 
|         FROM pr_intake tb | 
|         <where> | 
|             tb.deleted = 0 | 
|             <if test="intakeNum != null and intakeNum != ''"> | 
|                 AND tb.name LIKE CONCAT('%', #{intakeNum}) | 
|             </if> | 
|         </where> | 
|     </select> | 
|   | 
|     <!-- 为wechat,根据指定取水口名称模糊(后端)查询水口记录 --> | 
|     <select id="getSomeIntakes4Wx" parameterType="java.util.Map" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake"> | 
|         SELECT | 
|         inta.id AS intakeId, | 
|         con.rtuAddr, | 
|         inta.name AS intakeNum | 
|         FROM pr_intake inta | 
|         INNER JOIN pr_controller con ON con.intakeId = inta.id | 
|         <where> | 
|             inta.deleted = 0 | 
|             <if test="intakeNum != null and intakeNum != ''"> | 
|                 AND inta.name LIKE CONCAT('%', #{intakeNum}) | 
|             </if> | 
|         </where> | 
|         ORDER BY inta.id DESC | 
|     </select> | 
|   | 
|   | 
| </mapper> |