吉安感知网项目-后端
linwei
2026-01-29 ba12d5d8e844146c334223ef5939a51c8e5d76ca
drone-service/drone-fw/src/main/java/org/sxkj/fw/device/mapper/FwDeviceMapper.xml
@@ -244,20 +244,33 @@
            END AS
                split_device_type
            FROM
                ja_fw_device
                ja_fw_device d
            LEFT JOIN (
                SELECT
                    device_id,
                    out_target,
                    ROW_NUMBER() OVER (
                    PARTITION BY
                    device_id
                    ORDER BY
                    create_time DESC
                    ) AS rn
                FROM
                    ja_fw_device_track
                WHERE
                    out_target IS NOT NULL
                ) t ON d.id = t.device_id AND t.rn = 1
            WHERE
                is_deleted = 0
                d.is_deleted = 0
            AND status != 3
            AND track_status = 1
            AND effective_range_km is not null
            AND effective_range_km > 0
            <if test="deptList != null and deptList.size > 0">
                and (create_dept in
                <foreach collection="deptList" item="deptId" open="(" separator="," close=")">
                    #{deptId}
                </foreach>
            <if test="regionName != null and regionName != ''">
                and (t.out_target = #{regionName}
                <!-- 或者设备是共享给当前部门的 -->
                <if test="currentDeptId != null and currentDeptId != '' ">
                    or id in (
                    or d.id in (
                    SELECT device_id FROM ja_fw_device_per_share
                    WHERE loan_to_dept_id = #{currentDeptId}
                    AND is_deleted = 0
@@ -278,21 +291,34 @@
            END AS
                split_device_type
            FROM
                ja_fw_device
                ja_fw_device d
            LEFT JOIN (
                SELECT
                    device_id,
                    out_target,
                    ROW_NUMBER() OVER (
                    PARTITION BY
                    device_id
                    ORDER BY
                    create_time DESC
                ) AS rn
            FROM
                ja_fw_device_track
            WHERE
                is_deleted = 0
                out_target IS NOT NULL
            ) t ON d.id = t.device_id AND t.rn = 1
            WHERE
                d.is_deleted = 0
            AND status != 3
            AND device_type = '3'
            AND track_status = 1
            AND effective_range_km is not null
            AND effective_range_km > 0
            <if test="deptList != null and deptList.size > 0">
                and (create_dept in
                <foreach collection="deptList" item="deptId" open="(" separator="," close=")">
                    #{deptId}
                </foreach>
            <if test="regionName != null and regionName != ''">
                and (t.out_target = #{regionName}
                <!-- 或者设备是共享给当前部门的 -->
                <if test="currentDeptId != null and currentDeptId != '' ">
                    or id in (
                    or d.id in (
                    SELECT device_id FROM ja_fw_device_per_share
                    WHERE loan_to_dept_id = #{currentDeptId}
                    AND is_deleted = 0
@@ -395,21 +421,33 @@
            (SELECT
                 COUNT(*)
             FROM
                 ja_fw_device
                 ja_fw_device d
            LEFT JOIN (
            SELECT
                device_id,
                out_target,
                ROW_NUMBER() OVER (
                PARTITION BY
                device_id
                ORDER BY
                create_time DESC
                ) AS rn
            FROM
                ja_fw_device_track
            WHERE
            out_target IS NOT NULL
            ) t
                ON d.id = t.device_id AND t.rn = 1
             WHERE
                 is_deleted = 0
               and
                 effective_range_km is not null
               and
                 effective_range_km > 0
                <if test="deptList != null and deptList.size > 0">
                    and (create_dept in
                    <foreach collection="deptList" item="deptId" open="(" separator="," close=")">
                        #{deptId}
                    </foreach>
                 d.is_deleted = 0
               and effective_range_km is not null
               and effective_range_km > 0
                AND track_status = 1
                <if test="regionName != null and regionName != ''">
                    and (t.out_target = #{regionName}
                    <!-- 或者设备是共享给当前部门的 -->
                    <if test="currentDeptId != null and currentDeptId != '' ">
                        or id in (
                        or d.id in (
                        SELECT device_id FROM ja_fw_device_per_share
                        WHERE loan_to_dept_id = #{currentDeptId}
                        AND is_deleted = 0
@@ -422,23 +460,34 @@
            (SELECT
                 COUNT(*)
             FROM
                 ja_fw_device
                 ja_fw_device d
            LEFT JOIN (
                SELECT
                    device_id,
                    out_target,
                    ROW_NUMBER() OVER (
                    PARTITION BY
                    device_id
                    ORDER BY
                    create_time DESC
                    ) AS rn
                FROM
                    ja_fw_device_track
                WHERE
                    out_target IS NOT NULL
                ) t
                ON d.id = t.device_id AND t.rn = 1
             WHERE
                 is_deleted = 0
               AND
                 device_att = '1'
               and
                 effective_range_km is not null
               and
                 effective_range_km > 0
                <if test="deptList != null and deptList.size > 0">
                    and (create_dept in
                    <foreach collection="deptList" item="deptId" open="(" separator="," close=")">
                        #{deptId}
                    </foreach>
                    <!-- 或者设备是共享给当前部门的 -->
                 d.is_deleted = 0
               AND device_att = '1'
               and effective_range_km is not null
               and effective_range_km > 0
               AND track_status = 1
                <if test="regionName != null and regionName != ''">
                and (t.out_target = #{regionName}
                <!-- 或者设备是共享给当前部门的 -->
                    <if test="currentDeptId != null and currentDeptId != '' ">
                        or id in (
                        or d.id in (
                        SELECT device_id FROM ja_fw_device_per_share
                        WHERE loan_to_dept_id = #{currentDeptId}
                        AND is_deleted = 0
@@ -451,43 +500,71 @@
            (SELECT
                 COUNT(*)
             FROM
                 ja_fw_device
             WHERE is_deleted = 0
                 ja_fw_device d
            LEFT JOIN (
                SELECT
                    device_id,
                    out_target,
                    ROW_NUMBER() OVER (
                    PARTITION BY
                    device_id
                    ORDER BY
                    create_time DESC
                    ) AS rn
                FROM
                    ja_fw_device_track
                WHERE
                    out_target IS NOT NULL
                ) t
                ON d.id = t.device_id AND t.rn = 1
             WHERE d.is_deleted = 0
               AND device_att = '2'
               and effective_range_km is not null
               and effective_range_km > 0
                <if test="deptList != null and deptList.size > 0">
                    and (create_dept in
                    <foreach collection="deptList" item="deptId" open="(" separator="," close=")">
                        #{deptId}
                    </foreach>
                    <!-- 或者设备是共享给当前部门的 -->
                    <if test="currentDeptId != null and currentDeptId != '' ">
                        or id in (
                        SELECT device_id FROM ja_fw_device_per_share
                        WHERE loan_to_dept_id = #{currentDeptId}
                        AND is_deleted = 0
                        )
                    </if>
               AND track_status = 1
            <if test="regionName != null and regionName != ''">
                and (t.out_target = #{regionName}
                <!-- 或者设备是共享给当前部门的 -->
                <if test="currentDeptId != null and currentDeptId != '' ">
                    or d.id in (
                    SELECT device_id FROM ja_fw_device_per_share
                    WHERE loan_to_dept_id = #{currentDeptId}
                    AND is_deleted = 0
                    )
                </if>
                )
            </if>
             ) AS opticalCount,
            -- 雷达设备数量
            (SELECT
                 COUNT(*)
             FROM ja_fw_device
             WHERE is_deleted = 0
             FROM ja_fw_device d
            LEFT JOIN (
            SELECT
                device_id,
                out_target,
                ROW_NUMBER() OVER (
                PARTITION BY
                device_id
                ORDER BY
                create_time DESC
                ) AS rn
            FROM
                ja_fw_device_track
            WHERE
            out_target IS NOT NULL
            ) t
            ON d.id = t.device_id AND t.rn = 1
             WHERE d.is_deleted = 0
               AND device_att = '3'
               and effective_range_km is not null
               and effective_range_km > 0
                <if test="deptList != null and deptList.size > 0">
                    and (create_dept in
                    <foreach collection="deptList" item="deptId" open="(" separator="," close=")">
                        #{deptId}
                    </foreach>
               AND track_status = 1
                <if test="regionName != null and regionName != ''">
                    and (t.out_target = #{regionName}
                    <!-- 或者设备是共享给当前部门的 -->
                    <if test="currentDeptId != null and currentDeptId != '' ">
                        or id in (
                        or d.id in (
                        SELECT device_id FROM ja_fw_device_per_share
                        WHERE loan_to_dept_id = #{currentDeptId}
                        AND is_deleted = 0
@@ -499,19 +576,33 @@
            -- 设备告警
            (SELECT
                 COUNT(*)
             FROM ja_fw_device
             WHERE is_deleted = 0
             FROM ja_fw_device  d
            LEFT JOIN (
                SELECT
                    device_id,
                    out_target,
                    ROW_NUMBER() OVER (
                    PARTITION BY
                    device_id
                    ORDER BY
                    create_time DESC
                    ) AS rn
                FROM
                    ja_fw_device_track
                WHERE
                    out_target IS NOT NULL
                ) t
                ON d.id = t.device_id AND t.rn = 1
             WHERE d.is_deleted = 0
               AND status in ('1', '2', '3' )
               and effective_range_km is not null
               and effective_range_km > 0
                <if test="deptList != null and deptList.size > 0">
                    and (create_dept in
                    <foreach collection="deptList" item="deptId" open="(" separator="," close=")">
                        #{deptId}
                    </foreach>
               AND track_status = 1
                <if test="regionName != null and regionName != ''">
                    and (t.out_target = #{regionName}
                    <!-- 或者设备是共享给当前部门的 -->
                    <if test="currentDeptId != null and currentDeptId != '' ">
                        or id in (
                        or d.id in (
                        SELECT device_id FROM ja_fw_device_per_share
                        WHERE loan_to_dept_id = #{currentDeptId}
                        AND is_deleted = 0
@@ -524,29 +615,42 @@
    <select id="selectCockpitDevicePage" resultType="org.sxkj.fw.device.vo.CockpitFwDeviceVO">
        select
            d.*,
            fts.longitude,
            fts.latitude
            d.*
        from
            ja_fw_device d
        left join
            (
                SELECT
                    device_id,
                    longitude,
                    latitude,
                    MAX(create_time) AS create_time
                FROM
                    ja_fw_task_schedule
                WHERE
                    is_deleted = 0
                GROUP BY
                    device_id
            ) fts ON fts.device_id = d.id
        LEFT JOIN (
            SELECT
                device_id,
                out_target,
                ROW_NUMBER() OVER (
                PARTITION BY
                device_id
                ORDER BY
                create_time DESC
                ) AS rn
            FROM
                ja_fw_device_track
            WHERE
                out_target IS NOT NULL
            ) t
            ON d.id = t.device_id AND t.rn = 1
        <where>
            d.is_deleted = 0
            and d.effective_range_km is not null
            and d.effective_range_km > 0
            and d.track_status = 1
            <if test="param2.regionName != null and param2.regionName != ''">
                and (t.out_target = #{param2.regionName}
                <!-- 或者设备是共享给当前部门的 -->
                <if test="param2.currentDeptId != null and param2.currentDeptId != '' ">
                    or d.id in (
                    SELECT device_id FROM ja_fw_device_per_share
                    WHERE loan_to_dept_id = #{param2.currentDeptId}
                    AND is_deleted = 0
                    )
                </if>
                )
            </if>
            <if test="param2.id != null and param2.id != ''">
                and d.id = #{param2.id}
            </if>
@@ -602,4 +706,45 @@
          and is_deleted = 0
    </update>
    <!-- 查询非本部门区域的设备 -->
    <select id="selectNonDeptAreaDevices" resultType="org.sxkj.fw.device.vo.FwDeviceVO">
        SELECT
            d.*,
            t.out_target,
            CASE
                WHEN EXISTS (
                    SELECT 1
                    FROM ja_fw_device_per_share ps
                    WHERE ps.device_id = d.id
                    AND ps.loan_to_dept_id = #{currentDeptId}
                    AND ps.is_deleted = 0
                ) THEN TRUE
                ELSE FALSE
            END AS isShared
        FROM
            ja_fw_device d
            LEFT JOIN (
            SELECT
            device_id,
            out_target,
            ROW_NUMBER() OVER (
            PARTITION BY
            device_id
            ORDER BY
            create_time DESC
            ) AS rn
            FROM
            ja_fw_device_track
            WHERE
            out_target IS NOT NULL
            ) t ON d.id = t.device_id
            AND t.rn = 1
        WHERE
            d.is_deleted = 0
          and d.effective_range_km is not null
          and d.effective_range_km > 0
          and d.track_status = 1
          AND t.out_target != #{regionName}
    </select>
</mapper>