liurunyu
2024-10-25 126c2efc23cb8a02e4ff4d300050a590b8a0f1fa
pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml
@@ -231,14 +231,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">
            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 +250,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 +264,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 +287,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 +302,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
        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 +310,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 +327,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