From 40a8157440e3b906da8f52e07d939d78c3f4c313 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期日, 12 四月 2026 16:14:06 +0800
Subject: [PATCH] feat: 任务增加统计、同步增加通知

---
 ruoyi-system/src/main/resources/mapper/system/VehicleGpsMapper.xml |   38 ++++++++++++++++++++++----------------
 1 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/ruoyi-system/src/main/resources/mapper/system/VehicleGpsMapper.xml b/ruoyi-system/src/main/resources/mapper/system/VehicleGpsMapper.xml
index 2c78bdf..df86c7f 100644
--- a/ruoyi-system/src/main/resources/mapper/system/VehicleGpsMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/VehicleGpsMapper.xml
@@ -37,10 +37,10 @@
             <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')
+                AND collect_time &gt;= #{beginTime}
             </if>
             <if test="endTime != null and endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� -->
-                AND date_format(collect_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
+                AND collect_time &lt;= #{endTime}
             </if>
         </where>
         order by collect_time desc
@@ -112,13 +112,19 @@
     </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 from tb_vehicle_gps
+        where collect_time &lt; DATE_SUB(NOW(), INTERVAL 2 MONTH)
     </delete>
+
+    <delete id="deleteVehicleGpsBeforeDateBatch">
+        delete from tb_vehicle_gps
+        where collect_time &lt; DATE_SUB(NOW(), INTERVAL 2 MONTH)
+        LIMIT #{batchSize}
+    </delete>
+
+    <update id="optimizeVehicleGpsTable">
+        OPTIMIZE TABLE tb_vehicle_gps
+    </update>
 
     <select id="selectGpsDataByTimeRange" resultMap="VehicleGpsResult">
         select gps_id, vehicle_id, device_id, longitude, latitude, altitude, speed, direction, 
@@ -127,29 +133,29 @@
         where vehicle_id = #{vehicleId}
           and collect_time &gt;= #{startTime}
           and collect_time &lt;= #{endTime}
-        order by collect_time
     </select>
 
-    <!-- 鏌ヨ娲昏穬杞﹁締ID锛堜紭鍖栵細娣诲姞LIMIT闄愬埗锛岄伩鍏嶅ぇ琛ㄦ壂鎻忥級 -->
+    <!-- 鏌ヨ娲昏穬杞﹁締ID锛堜紭鍖栵細浣跨敤GROUP BY鏇夸唬DISTINCT锛屾彁鍗囨�ц兘锛� -->
     <select id="selectActiveVehicleIds" resultType="Long">
-        select distinct vehicle_id
+        select vehicle_id
         from tb_vehicle_gps
         where collect_time &gt;= #{startTime}
-        order by vehicle_id
     </select>
     
-    <!-- 鏌ヨ鏈璁$畻鐨凣PS鍧愭爣锛堜笉鍦╰b_vehicle_gps_calculated琛ㄤ腑鐨勮褰曪級 -->
+    <!-- 鏌ヨ鏈璁$畻鐨凣PS鍧愭爣锛堜紭鍖栵細浣跨敤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  -- 鏈璁$畻鐨凣PS鐐�
+          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> 
\ No newline at end of file

--
Gitblit v1.9.1