pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml
@@ -40,7 +40,7 @@
        <include refid="Base_Column_List"/>
        from pr_intake
        where id = #{id,jdbcType=BIGINT}
          and deleted = 0
        and deleted = 0
    </select>
    <delete id="deleteLogicById" parameterType="java.lang.Long">
@@ -50,12 +50,33 @@
        where id = #{id,jdbcType=BIGINT}
    </delete>
    <select id="selectAll" resultMap="BaseResultMap">
    <select id="selectAll"  resultType="com.dy.pipIrrGlobal.voPr.VoAllIntake">
        <!--@mbg.generated-->
        select
        <include refid="Base_Column_List"/>
        from pr_intake
        where deleted != 1
        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-->
@@ -66,13 +87,13 @@
    <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)
        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})
        #{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-->
@@ -207,17 +228,17 @@
        <!--@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}
        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>
@@ -231,14 +252,9 @@
        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">
            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
@@ -255,10 +271,10 @@
                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">
@@ -269,57 +285,45 @@
            <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,
               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,
                rtus.isOnLine                                       AS isOnLine,
                (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) 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
        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 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
        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
@@ -327,19 +331,16 @@
            <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">
@@ -347,17 +348,14 @@
            <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
@@ -372,9 +370,9 @@
    <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
        inner join
        ba_district dis_tow
        on dis_vil.supperId = dis_tow.id
        where dis_vil.id = #{vaId,jdbcType=BIGINT}
    </select>
@@ -383,18 +381,18 @@
        SELECT COUNT(*) AS recordCount
        FROM pr_intake
        WHERE deleted = 0
          AND id = #{intakeId}
        AND id = #{intakeId}
    </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
        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
        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>
@@ -418,31 +416,31 @@
    <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
        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}
@@ -461,43 +459,44 @@
    <!--获取取水口列表(在线和不在先)-->
    <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
        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
                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'
            )
                <!--'[{"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">
@@ -543,8 +542,18 @@
            ) rtus ON con.rtuAddr = rtus.rtuAddr
        </if>
        WHERE con.intakeId is not null
        <if test="isOnLine != null">
            AND rtus.isOnLine = #{isOnLine}
        <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}
@@ -561,7 +570,11 @@
        inta.lng,
        inta.lat,
        IFNULL(hou.total_amount, 0) AS totalAmount,
        alarm.alarm
        <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
@@ -572,7 +585,8 @@
                IF(alarm_battery_volt = 1, '电池电压报警,', ''),
                IF(alarm_valve = 1, '阀门报警,', ''),
                IF(alarm_water_meter_fault = 1, '流量计故障报警,', '')
            ) AS alarm
            ) 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)
@@ -588,8 +602,18 @@
            ) rtus ON con.rtuAddr = rtus.rtuAddr
        </if>
        WHERE con.intakeId is not null
        <if test="isOnLine != null">
            AND rtus.isOnLine = #{isOnLine}
        <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}
@@ -602,31 +626,14 @@
        </trim>
    </select>
    <!--根据取水口编号获取取水口对象-->
    <select id="getIntakeByName" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake">
        SELECT con.intakeId,
               con.rtuAddr,
               inta.name AS intakeNum,
               rtus.isOnLine
        SELECT
            con.intakeId,
            con.rtuAddr,
            inta.name AS intakeNum
        FROM pr_controller con
                 INNER JOIN pr_intake inta ON con.intakeId = inta.id
                 left JOIN JSON_TABLE(
                #{onLineMap},
                '$[*]' COLUMNS (
                    rtuAddr VARCHAR(20) PATH '$.rtuAddr',
                    isOnLine BOOLEAN PATH '$.isOnLine'
                    )
            ) rtus ON con.rtuAddr = rtus.rtuAddr
            INNER JOIN pr_intake inta ON con.intakeId = inta.id
        <where>
            <if test="intakeNum != null and intakeNum != ''">
                AND LOWER(inta.name) = #{intakeNum}
@@ -637,26 +644,28 @@
    <!--根据操作员获取常用取水口-->
    <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'
            )
        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,扫码开阀使用-->
@@ -678,6 +687,6 @@
        SELECT id AS intakeId
        FROM pr_intake
        WHERE id != #{id}
          and `name` = #{intakeName}
        and `name` = #{intakeName}
    </select>
</mapper>