吉安感知网项目-后端
linwei
5 hours ago 51a551a7f8eae7654f973d45cd2fa2952774673d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.sxkj.fw.area.mapper.FwDefenseSceneManageMapper">
 
    <!-- 通用查询映射结果 -->
    <resultMap id="fwDefenseSceneManageResultMap" type="org.sxkj.fw.area.vo.FwDefenseSceneManageVO">
        <result column="id" property="id"/>
        <result column="defense_scene_id" property="defenseSceneId"/>
        <result column="defense_scene_name" property="defenseSceneName"/>
        <result column="scene_name" property="sceneName"/>
        <result column="longitude" property="longitude"/>
        <result column="latitude" property="latitude"/>
        <result column="defense_leader" property="defenseLeader"/>
        <result column="leader_phone" property="leaderPhone"/>
        <result column="effective_date_start" property="effectiveDateStart"/>
        <result column="effective_date_end" property="effectiveDateEnd"/>
        <result column="area_code" property="areaCode"/>
        <result column="scene_type" property="sceneType"/>
        <result column="area_count" property="areaCount"/>
        <result column="device_count" property="deviceCount"/>
    </resultMap>
 
 
    <select id="selectFwDefenseSceneManagePage" resultMap="fwDefenseSceneManageResultMap">
        select
            dsm.*,
            ds.scene_name as defense_scene_name
        from ja_fw_defense_scene_manage dsm
        left join ja_fw_defense_scene ds on ds.id::VARCHAR = dsm.defense_scene_id::VARCHAR and ds.is_deleted = 0
        <where>
            dsm.is_deleted = 0
            <if test="param2.sceneName != null and param2.sceneName != ''">
                and dsm.scene_name like concat('%', #{param2.sceneName}, '%')
            </if>
            <if test="param2.deptList != null and param2.deptList.size > 0">
                and dsm.create_dept in
                <foreach collection="param2.deptList" item="deptId" open="(" separator="," close=")">
                    #{deptId}
                </foreach>
            </if>
        </where>
    </select>
 
    <select id="selectFwDefenseSceneManageDetail" resultMap="fwDefenseSceneManageResultMap">
        select
            dsm.*,
            ds.scene_name as defense_scene_name
        from ja_fw_defense_scene_manage dsm
        left join ja_fw_defense_scene ds on ds.id::VARCHAR = dsm.defense_scene_id::VARCHAR and ds.is_deleted = 0
        where dsm.is_deleted = 0
          and dsm.id = #{id}
    </select>
 
    <select id="selectFwDefenseSceneManageList" resultMap="fwDefenseSceneManageResultMap">
        select
            dsm.*,
        ds.scene_name as defense_scene_name,
        ds.scene_type as scene_type,
        case
        when ds.area_divide_ids is null or ds.area_divide_ids = '' then 0
        else length(ds.area_divide_ids) - length(replace(ds.area_divide_ids, ',', '')) + 1
        end as area_count,
        (
        SELECT COALESCE(
            SUM( -- 这里已经删除了那两个反引号 ``
                CASE
                    WHEN ad.device_ids IS NULL OR ad.device_ids = '' THEN 0
                    ELSE length(ad.device_ids) - length(replace(ad.device_ids, ',', '')) + 1
                END
            ), 0
        )
        from ja_fw_area_divide ad
        where ad.is_deleted = 0
        and ad.id::VARCHAR = ANY(string_to_array(ds.area_divide_ids, ','))
        ) as device_count
        from ja_fw_defense_scene_manage dsm
        left join ja_fw_defense_scene ds on ds.id::VARCHAR = dsm.defense_scene_id::VARCHAR and ds.is_deleted = 0
        <where>
            dsm.is_deleted = 0
            <if test="time != null">
                and (dsm.effective_date_start is null or dsm.effective_date_start &lt;= #{time}::timestamp)
                and (dsm.effective_date_end is null or dsm.effective_date_end &gt;= #{time}::timestamp)
            </if>
        </where>
    </select>
 
 
    <select id="exportFwDefenseSceneManage" resultType="org.sxkj.fw.area.excel.FwDefenseSceneManageExcel">
        SELECT * FROM ja_fw_defense_scene_manage ${ew.customSqlSegment}
    </select>
 
    <select id="selectDeviceId" parameterType="java.lang.Long" resultType="java.lang.Long">
        /* Kingbase 适配说明:
           1. 使用 string_to_array + unnest 替代 SUBSTRING_INDEX,直接将逗号字符串转为行。
           2. 去掉数字表 (numbers),Kingbase 内置函数自动处理拆分。
           3. 所有的 ID 关联统一使用 ::text 强转,规避 bigint = varchar 错误。
           4. replace(..., ' ', '') 用于防止字符串中包含空格导致转 bigint 失败。
        */
        SELECT DISTINCT
            unnest(string_to_array(replace(ad.device_ids, ' ', ''), ','))::bigint AS device_id
        FROM ja_fw_defense_scene_manage dsm
                 LEFT JOIN ja_fw_defense_scene ds
                           ON ds.id::text = dsm.defense_scene_id::text
        AND ds.is_deleted = 0
    LEFT JOIN ja_fw_area_divide ad
        ON ad.id::text = ANY(string_to_array(replace(ds.area_divide_ids, ' ', ''), ','))
            AND ad.is_deleted = 0
        WHERE
            dsm.id::text = #{id}::text
          AND ad.device_ids IS NOT NULL
          AND ad.device_ids != ''
    </select>
 
    <select id="selectFwDefenseSceneManageCockpitList" resultType="org.sxkj.fw.area.vo.FwDefenseSceneManageVO">
        select
        dsm.*,
        ds.scene_name as defense_scene_name
        from ja_fw_defense_scene_manage dsm
        left join ja_fw_defense_scene ds on ds.id::text = dsm.defense_scene_id::text and ds.is_deleted = 0
        left join ja_fw_area_divide ad on ad.id::text = ANY(string_to_array(replace(ds.area_divide_ids, ' ', ''), ',')) and ad.is_deleted = 0
        inner join (
        SELECT
        d.id
        FROM
        ja_fw_device d
        WHERE
        d.is_deleted = 0
        AND d.is_enabled = 1
        AND d.final_outbound_area IS NOT NULL
        <if test="fwBaseInfo.regionCode != null and fwBaseInfo.regionCode != ''">
            and ( d.final_outbound_area_code like concat(#{fwBaseInfo.regionCode},'%')
            <if test="fwBaseInfo.currentDeptId != null and fwBaseInfo.currentDeptId != '' ">
                or d.id in (
                SELECT device_id FROM ja_fw_device_per_share
                WHERE
                loan_to_dept_id = #{fwBaseInfo.currentDeptId}::bigint
                AND is_deleted = 0
                )
            </if>
            )
        </if>
        GROUP BY
        d.id
        ) dd ON dd.id::text = ANY(string_to_array(replace(ad.device_ids, ' ', ''), ','))
        <where>
            dsm.is_deleted = 0
            <if test="time != null">
                and (dsm.effective_date_start is null or dsm.effective_date_start &lt;= #{time})
                and (dsm.effective_date_end is null or dsm.effective_date_end &gt;= #{time})
            </if>
        </where>
    </select>
 
</mapper>