wlzboy
1 天以前 08f95b2f159b56fa3bd4f4b348855989de8aa456
ruoyi-system/src/main/resources/mapper/system/VehicleGpsMapper.xml
@@ -30,7 +30,7 @@
    <select id="selectVehicleGpsList" parameterType="VehicleGps" resultMap="VehicleGpsResult">
        <include refid="selectVehicleGpsVo"/>
        <where>  
            <if test="vehicleNo != null  and vehicleNo != ''"> and vehicle_no = #{vehicleNo}</if>
            <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>
@@ -127,28 +127,29 @@
        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 distinct vehicle_id
        select vehicle_id
        from tb_vehicle_gps
        where collect_time &gt;= DATE_SUB(NOW(), INTERVAL 7 DAY)
        order by vehicle_id
        where collect_time &gt;= #{startTime}
    </select>
    
    <!-- 查询未被计算的GPS坐标(不在tb_vehicle_gps_calculated表中的记录) -->
    <!-- 查询未被计算的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
        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
        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 c.gps_id IS NULL  -- 未被计算的GPS点
          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>