<?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 
 | 
        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.id = #{id,jdbcType=BIGINT} 
 | 
        AND ge.deleted = 0 
 | 
        AND divi.deleted = 0 
 | 
        AND blo.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.operateDt 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, 
 | 
        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> 
 |