liurunyu
3 天以前 bb5c0ca59fd23ca6c4b8184023d8707d9d506826
pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml
@@ -34,13 +34,33 @@
        operateDt,
        deleted
    </sql>
    <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
    <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultType="com.dy.pipIrrGlobal.voPr.VoAllIntake">
        <!--@mbg.generated-->
        select
        <include refid="Base_Column_List"/>
        from pr_intake
        where id = #{id,jdbcType=BIGINT}
        and deleted = 0
        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">
@@ -50,12 +70,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-->
@@ -232,7 +273,7 @@
        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">
            JOIN (SELECT intakeId, COUNT(*) num FROM pr_intake_controller WHERE operateType = 1 group by intakeId) AS bindNumTb on bindNumTb.intakeId= ge.id
            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
@@ -302,7 +343,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
        JOIN (SELECT intakeId, COUNT(*) num FROM pr_intake_controller WHERE operateType = 1 group by intakeId) AS bindNumTb on bindNumTb.intakeId= ge.id
        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
@@ -361,6 +402,13 @@
        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获取全部地址-->
@@ -438,44 +486,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}
@@ -547,11 +596,13 @@
        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.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
@@ -562,7 +613,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)
@@ -602,31 +654,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}
@@ -645,8 +680,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',
@@ -654,8 +689,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
@@ -682,4 +717,85 @@
        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>