guoshilong
2023-05-18 6cd2da8eb7d7aefecd96a19ebbfe9caba59ea88c
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
<?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="cn.gistack.sm.patrol.mapper.PatrolInfoMapper">
    <resultMap id="patrolInfoResultMap" type="cn.gistack.sm.patrol.vo.PatrolInfoVO">
        <result column="id" property="id"/>
        <result column="project_id" property="projectId"/>
        <result column="check_date" property="checkDate"/>
        <result column="weather" property="weather"/>
        <result column="inspection_person" property="inspectionPerson"/>
        <result column="record_person" property="recordPerson"/>
        <result column="reservoir_water_level" property="reservoirWaterLevel"/>
        <result column="patrol_type" property="patrolType"/>
        <result column="report_type" property="reportType"/>
        <result column="project_items" property="projectItems"
                typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
        <result column="image_urls" property="imageUrls"
                typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
    </resultMap>
 
 
    <!--分页列表查询-->
    <select id="selectPatrolInfoPage" resultMap="patrolInfoResultMap">
        SELECT info.*
        FROM sm_patrol_info info
        WHERE 1=1 AND info.is_deleted = 0
        <if test="patrolInfo.checkDateStart!=null and patrolInfo.checkDateStart!=''">
            AND date_format(info.check_date,'%Y-%m-%d') &gt;= #{patrolInfo.checkDateStart}
        </if>
        <if test="patrolInfo.checkDateEnd!=null and patrolInfo.checkDateEnd!=''">
            AND date_format(info.check_date,'%Y-%m-%d') &lt;= #{patrolInfo.checkDateEnd}
        </if>
        <if test="patrolInfo.projectId !=null and patrolInfo.projectId !=''">
            AND info.project_id = #{patrolInfo.projectId}
        </if>
 
        ORDER BY info.id desc
    </select>
 
    <select id="getAllUserTimes" resultType="cn.gistack.sm.patrol.vo.PatrolStatisticsVO">
            SELECT
                u.id userId,u.realname,
                (CASE a.patrolTimes WHEN a.patrolTimes  THEN a.patrolTimes ELSE 0 END) patrolTimes,
                (CASE b.dangerNumber WHEN b.dangerNumber  THEN b.dangerNumber ELSE 0 END) dangerMangeNumber,
                (CASE c.finishNumber WHEN c.finishNumber  THEN c.finishNumber ELSE 0 END) finished,
                (CASE d.handlingNumber WHEN d.handlingNumber  THEN d.handlingNumber ELSE 0 END) processing,
                (CASE e.waitingNumber WHEN e.waitingNumber  THEN e.waitingNumber ELSE 0 END) waiting
            FROM sys_user u
--             巡检次数
            LEFT JOIN
            (
                SELECT user.id,COUNT( user.id ) patrolTimes
                FROM sys_user user,sm_patrol_info info
                WHERE del_flag = 0 AND info.is_deleted = 0 AND FIND_IN_SET( user.id, inspection_person )
                GROUP BY user.id
            ) a ON u.id = a.id
--             隐患数量
            LEFT JOIN
            (
                SELECT user.id,COUNT(user.id) dangerNumber
                FROM sys_user user,sm_danger_management danger
                WHERE del_flag = 0 AND danger.is_deleted = 0 AND FIND_IN_SET( user.id, danger.check_user )
                GROUP BY user.id
            ) b ON u.id = b.id
--             已处理
            LEFT JOIN
            (
                SELECT user.id,COUNT(user.id) finishNumber
                FROM sys_user user,sm_danger_management danger
                WHERE del_flag = 0 AND danger.is_deleted = 0 AND danger.status=99 AND FIND_IN_SET( user.id, danger.check_user )
                GROUP BY user.id
            ) c ON u.id = c.id
--             处理中
            LEFT JOIN
            (
                SELECT user.id,COUNT(user.id) handlingNumber
                FROM sys_user user,sm_danger_management danger
                WHERE del_flag = 0 AND danger.is_deleted = 0 AND (danger.status&gt;1 AND danger.status&lt;99) AND FIND_IN_SET( user.id, danger.check_user )
                GROUP BY user.id
            ) d ON u.id = d.id
--             待处理
            LEFT JOIN
            (
                SELECT user.id,COUNT(user.id) waitingNumber
                FROM sys_user user,sm_danger_management danger
                WHERE del_flag = 0 AND danger.is_deleted = 0 AND danger.status=1 AND FIND_IN_SET( user.id, danger.check_user )
                GROUP BY user.id
            ) e ON u.id = e.id
            WHERE u.del_flag = 0
            <if test="patrolStatisticsVO.realname != null and patrolStatisticsVO.realname != '' ">
                AND u.realname LIKE CONCAT('%',#{patrolStatisticsVO.realname},'%')
            </if>
            ORDER BY a.patrolTimes DESC
    </select>
 
    <select id="getAllProjectTimes" resultType="cn.gistack.sm.patrol.vo.PatrolStatisticsVO">
        SELECT
            project.id projectId,
            project.name projectName,
            item.item_text projectType,
            CONCAT(p.region_name,c.region_name,a.region_name,t.region_name) region,
            COUNT( info.project_id) patrolTimes,
            dangers.dangerNumber dangerMangeNumber,
            finish.finishNumber finished,
            handling.handlingNumber processing,
            waiting.waitingNumber waiting
        FROM
            sm_water_conservancy_project project
            LEFT JOIN sm_patrol_info info ON info.project_id= project.id AND info.is_deleted = 0
            LEFT JOIN sys_dict dict ON dict.dict_code = "oa_project_type"
            LEFT JOIN sys_dict_item item ON dict.id = item.dict_id AND item.item_value = project.project_type
            LEFT JOIN sys_region p ON p.region_id = project.region->'$.province'+0
            LEFT JOIN sys_region c ON c.region_id = project.region->'$.city'+0
            LEFT JOIN sys_region a ON a.region_id = project.region->'$.area'+0
            LEFT JOIN sys_region t ON t.region_id = project.region->'$.town'+0
--             隐患数量
            LEFT JOIN
            (
                SELECT
                project.id projectId,
                COUNT( danger.project_id) dangerNumber
                FROM
                sm_water_conservancy_project project
                LEFT JOIN sm_danger_management danger ON danger.project_id = project.id AND danger.is_deleted = 0
                WHERE
                project.is_deleted = 0
                GROUP BY
                danger.project_id,
                project.id
            )dangers ON dangers.projectId = project.id
--             已处理
            LEFT JOIN
            (
                SELECT
                project.id projectId,
                COUNT( danger.project_id) finishNumber
                FROM
                sm_water_conservancy_project project
                LEFT JOIN sm_danger_management danger ON danger.project_id = project.id AND danger.is_deleted = 0 AND danger.status = 99
                WHERE
                project.is_deleted = 0
                GROUP BY
                danger.project_id,
                project.id
            )finish ON finish.projectId = project.id
--             处理中
            LEFT JOIN
            (
                SELECT
                project.id projectId,
                COUNT( danger.project_id) handlingNumber
                FROM
                sm_water_conservancy_project project
                LEFT JOIN sm_danger_management danger ON danger.project_id = project.id AND danger.is_deleted = 0 AND (danger.status  &gt;=1 AND danger.status&lt;=99)
                WHERE
                project.is_deleted = 0
                GROUP BY
                danger.project_id,
                project.id
            )handling ON handling.projectId = project.id
--             待处理
            LEFT JOIN
            (
                SELECT
                project.id projectId,
                COUNT( danger.project_id) waitingNumber
                FROM
                sm_water_conservancy_project project
                LEFT JOIN sm_danger_management danger ON danger.project_id = project.id AND danger.is_deleted = 0 AND danger.status = 1
                WHERE
                project.is_deleted = 0
                GROUP BY
                danger.project_id,
                project.id
            )waiting ON waiting.projectId = project.id
        WHERE
            project.is_deleted = 0
            <if test="patrolStatisticsVO.projectName !=null and patrolStatisticsVO.projectName != '' ">
                AND project.name LIKE CONCAT('%',#{patrolStatisticsVO.projectName},'%')
            </if>
        GROUP BY
            info.project_id,
            project.id,
            dangers.dangerNumber,
            finish.finishNumber,
            handling.handlingNumber,
            waiting.waitingNumber,
            dict.id,
            item.id,
            p.region_id,
            c.region_id,
            a.region_id,
            t.region_id
        ORDER BY patrolTimes DESC
    </select>
 
</mapper>