wlzboy
5 天以前 7de1396e315896dbc72a9d54e44f77434ea90f18
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
<?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="com.ruoyi.system.mapper.VehicleGpsMapper">
    
    <resultMap type="VehicleGps" id="VehicleGpsResult">
        <result property="gpsId"    column="gps_id"    />
        <result property="vehicleId"    column="vehicle_id"    />
        <result property="deviceId"    column="device_id"    />
        <result property="vehicleNo"    column="vehicle_no"    />
        <result property="longitude"    column="longitude"    />
        <result property="latitude"    column="latitude"    />
        <result property="altitude"    column="altitude"    />
        <result property="speed"    column="speed"    />
        <result property="direction"    column="direction"    />
        <result property="collectTime"    column="collect_time"    />
        <result property="deviceReportTime"    column="device_report_time"    />
        <result property="platformProcessTime"    column="platform_process_time"    />
        <result property="createTime"    column="create_time"    />
    </resultMap>
 
    <sql id="selectVehicleGpsVo">
        select g.gps_id, g.vehicle_id, g.device_id, v.vehicle_no, g.longitude, g.latitude, g.altitude, g.speed, g.direction, 
        g.collect_time, g.device_report_time, g.platform_process_time, g.create_time
        from tb_vehicle_gps g
        left join tb_vehicle_info v on g.vehicle_id = v.vehicle_id
    </sql>
 
    <select id="selectVehicleGpsList" parameterType="VehicleGps" resultMap="VehicleGpsResult">
        <include refid="selectVehicleGpsVo"/>
        <where>  
            <if test="vehicleNo != null  and vehicleNo != ''"> and v.vehicle_no like concat('%', #{vehicleNo}, '%')</if>
            <if test="longitude != null "> and longitude = #{longitude}</if>
            <if test="latitude != null "> and latitude = #{latitude}</if>
            <if test="speed != null "> and speed = #{speed}</if>
            <if test="direction != null "> and direction = #{direction}</if>
            <if test="collectTime != null "> and collect_time = #{collectTime}</if>
            <if test="beginTime != null and beginTime != ''"><!-- 开始时间检索 -->
                AND date_format(collect_time,'%y%m%d') &gt;= date_format(#{beginTime},'%y%m%d')
            </if>
            <if test="endTime != null and endTime != ''"><!-- 结束时间检索 -->
                AND date_format(collect_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
            </if>
        </where>
        order by collect_time desc
    </select>
    
    <select id="selectVehicleGpsById" parameterType="Long" resultMap="VehicleGpsResult">
        <include refid="selectVehicleGpsVo"/>
        where gps_id = #{gpsId}
    </select>
        
    <insert id="insertVehicleGps" parameterType="VehicleGps" useGeneratedKeys="true" keyProperty="gpsId">
        insert into tb_vehicle_gps
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="vehicleId != null">vehicle_id,</if>
            <if test="deviceId != null">device_id,</if>
            <if test="longitude != null">longitude,</if>
            <if test="latitude != null">latitude,</if>
            <if test="altitude != null">altitude,</if>
            <if test="speed != null">speed,</if>
            <if test="direction != null">direction,</if>
            <if test="collectTime != null">collect_time,</if>
            <if test="deviceReportTime != null">device_report_time,</if>
            <if test="platformProcessTime != null">platform_process_time,</if>
            <if test="createTime != null">create_time,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="vehicleId != null">#{vehicleId},</if>
            <if test="deviceId != null">#{deviceId},</if>
            <if test="longitude != null">#{longitude},</if>
            <if test="latitude != null">#{latitude},</if>
            <if test="altitude != null">#{altitude},</if>
            <if test="speed != null">#{speed},</if>
            <if test="direction != null">#{direction},</if>
            <if test="collectTime != null">#{collectTime},</if>
            <if test="deviceReportTime != null">#{deviceReportTime},</if>
            <if test="platformProcessTime != null">#{platformProcessTime},</if>
            <if test="createTime != null">#{createTime},</if>
         </trim>
    </insert>
 
    <update id="updateVehicleGps" parameterType="VehicleGps">
        update tb_vehicle_gps
        <trim prefix="SET" suffixOverrides=",">
            <if test="vehicleId != null">vehicle_id = #{vehicleId},</if>
            <if test="longitude != null">longitude = #{longitude},</if>
            <if test="latitude != null">latitude = #{latitude},</if>
            <if test="altitude != null">altitude = #{altitude},</if>
            <if test="speed != null">speed = #{speed},</if>
            <if test="direction != null">direction = #{direction},</if>
            <if test="collectTime != null">collect_time = #{collectTime},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
        </trim>
        where gps_id = #{gpsId}
    </update>
 
    <delete id="deleteVehicleGpsById" parameterType="Long">
        delete from tb_vehicle_gps where gps_id = #{gpsId}
    </delete>
 
    <delete id="deleteVehicleGpsByIds" parameterType="String">
        delete from tb_vehicle_gps where gps_id in 
        <foreach item="gpsId" collection="array" open="(" separator="," close=")">
            #{gpsId}
        </foreach>
    </delete>
 
    <select id="getVehicleIdByNo" parameterType="String" resultType="Long">
        select vehicle_id from tb_vehicle_info where vehicle_no = #{vehicleNo}
    </select>
 
    <delete id="deleteVehicleGpsBeforeDate">
        delete g from tb_vehicle_gps g
        where g.collect_time &lt; (
            select date_sub(max(collect_time), interval 2 day)
            from tb_vehicle_gps g2
            where g2.vehicle_id = g.vehicle_id
        )
    </delete>
 
    <select id="selectGpsDataByTimeRange" resultMap="VehicleGpsResult">
        select gps_id, vehicle_id, device_id, longitude, latitude, altitude, speed, direction, 
               collect_time, device_report_time, platform_process_time, create_time
        from tb_vehicle_gps
        where vehicle_id = #{vehicleId}
          and collect_time &gt;= #{startTime}
          and collect_time &lt;= #{endTime}
        order by collect_time
    </select>
 
    <!-- 查询活跃车辆ID(优化:使用GROUP BY替代DISTINCT,提升性能) -->
    <select id="selectActiveVehicleIds" resultType="Long">
        select vehicle_id
        from tb_vehicle_gps
        where collect_time &gt;= #{startTime}
        group by vehicle_id
        order by vehicle_id
    </select>
    
    <!-- 查询未被计算的GPS坐标(优化:使用NOT EXISTS替代LEFT JOIN ... IS NULL) -->
    <select id="selectUncalculatedGps" resultMap="VehicleGpsResult">
        SELECT g.gps_id, g.vehicle_id, g.device_id, g.longitude, g.latitude, g.altitude, 
               g.speed, g.direction, g.collect_time, g.device_report_time, 
               g.platform_process_time, g.create_time, v.vehicle_no
        FROM tb_vehicle_gps g
        INNER JOIN tb_vehicle_info v ON g.vehicle_id = v.vehicle_id
        WHERE g.vehicle_id = #{vehicleId}
          AND g.collect_time &gt;= #{startTime}
          AND g.collect_time &lt;= #{endTime}
          AND NOT EXISTS (
              SELECT 1 FROM tb_vehicle_gps_calculated c 
              WHERE c.gps_id = g.gps_id
          )
        ORDER BY g.collect_time
    </select>
</mapper>