pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml
@@ -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-->
@@ -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,21 +285,20 @@
            <if test = "rtuAddr != null and rtuAddr !=''">
                AND cont.rtuAddr like CONCAT('%',#{rtuAddr},'%')
            </if>
            <if test="isOnLine != null and isOnLine !='' ">
                AND rtus.isOnLine = #{isOnLine}
            </if>
            <if test="protocol != null and protocol !='' ">
                AND cont.protocol = #{protocol}
            </if>
            <if test = "bindNumber != null and bindNumber > 0">
                AND (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) = #{bindNumber}
                AND bindNumTb.num = #{bindNumber}
            </if>
        </where>
    </select>
    <!--根据指定条件获取取水口记录-->
    <select id="getIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoIntake">
        SELECT CAST(ge.id AS char)                                 AS intakeId,
        WITH intakeIds AS(SELECT intakeId FROM pr_controller where deleted = 0)
        SELECT CAST(ge.id AS char)                          AS intakeId,
        ge.`name`                                           AS intakeName,
        CAST(divi.id AS char)                               AS divideId,
        divi.`name`                                         AS divideName,
@@ -293,18 +308,14 @@
        cont.rtuAddr                                        AS rtuAddr,
        cont.protocol                                       AS protocol,
        cont.findDt                                         AS findDt,
        rtus.isOnLine                                       AS isOnLine,
        (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) AS bindNumber,
        bindNumTb.num                                       AS bindNumber,
        ge.lng,
        ge.lat,
        ge.remarks,
        ge.operator,
        ge.operateDt                                        As operateDt,
        (CASE
        WHEN ge.id NOT IN (SELECT intakeId FROM pr_controller where deleted = 0) THEN '未绑定'
        WHEN ge.id IN (SELECT intakeId FROM pr_controller where deleted = 0) THEN '已绑定'
        END)                                            AS isBind,
        CONCAT(country.`name`, town.`name`, village.`name`) AS address
        IF(ge.id IN (SELECT intakeId FROM intakeIds),'已绑定','未绑定')    AS isBind,
        CONCAT(country.`name`, town.`name`, village.`name`)              AS address
        FROM pr_intake ge
        INNER JOIN pr_divide divi ON ge.divideId = divi.id
        INNER JOIN ba_block blo ON divi.blockId = blo.id
@@ -312,14 +323,7 @@
        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
        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
@@ -461,44 +459,45 @@
    <!--获取取水口列表(在线和不在先)-->
    <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
        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}
@@ -574,7 +573,8 @@
        <if test="onLineMap != null and onLineMap !='' and isOnLine != null">
            rtus.isOnLine,
        </if>
        alarm.alarm
        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
@@ -585,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)
@@ -625,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}
@@ -668,8 +652,8 @@
        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
            INNER JOIN JSON_TABLE(
                <!--'[{"rtuAddr":"620201000030","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',-->
            LEFT JOIN JSON_TABLE(
                <!--'[{"rtuAddr":"530115059980","isOnLine":true},{"rtuAddr":"620201000030","isOnLine":true}]',-->
                #{onLineMap},
                '$[*]' COLUMNS (
                    rtuAddr VARCHAR(20) PATH '$.rtuAddr',
@@ -677,8 +661,8 @@
                )
            ) rtus ON con.rtuAddr = rtus.rtuAddr
        <where>
            <if test="operator != null">
                com.operator_id = #{operator}
            <if test="operatorId != null">
                AND com.operator_id = #{operatorId}
            </if>
        </where>
        ORDER BY com.last_used_time DESC,com.usage_count DESC