wlzboy
2025-12-02 d294abb765e4ed349907c92ce313689c6299ba7d
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
<?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(优化:添加LIMIT限制,避免大表扫描) -->
    <select id="selectActiveVehicleIds" resultType="Long">
        select distinct vehicle_id
        from tb_vehicle_gps
        where collect_time &gt;= #{startTime}
        order by vehicle_id
    </select>
    
    <!-- 查询未被计算的GPS坐标(不在tb_vehicle_gps_calculated表中的记录) -->
    <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
        LEFT JOIN tb_vehicle_info v ON g.vehicle_id = v.vehicle_id
        LEFT JOIN tb_vehicle_gps_calculated c ON g.gps_id = c.gps_id
        WHERE g.vehicle_id = #{vehicleId}
          AND g.collect_time &gt;= #{startTime}
          AND g.collect_time &lt;= #{endTime}
          AND c.gps_id IS NULL  -- 未被计算的GPS点
        ORDER BY g.collect_time
    </select>
</mapper>