From 09faa36132c8cbada5327649875534ef01c1a3b1 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期四, 11 十二月 2025 20:44:31 +0800
Subject: [PATCH] feat: 优化任务里程统计

---
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/VehicleMileageStatsTask.java |   86 ++++++++++++++++++++++++++++++++++++-------
 1 files changed, 72 insertions(+), 14 deletions(-)

diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/VehicleMileageStatsTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/VehicleMileageStatsTask.java
index 22cd0b8..68b9c2c 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/VehicleMileageStatsTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/VehicleMileageStatsTask.java
@@ -1,5 +1,7 @@
 package com.ruoyi.quartz.task;
 
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
 import org.slf4j.Logger;
@@ -38,7 +40,7 @@
             // 鎵归噺璁$畻閲岀▼缁熻
             int successCount = vehicleMileageStatsService.batchCalculateMileageStats(yesterday);
             
-            logger.info("杞﹁締閲岀▼缁熻瀹氭椂浠诲姟鎵ц瀹屾垚 - 鎴愬姛缁熻: {} 杈嗚溅", successCount);
+//            logger.info("杞﹁締閲岀▼缁熻瀹氭椂浠诲姟鎵ц瀹屾垚 - 鎴愬姛缁熻: {} 杈嗚溅", successCount);
             
         } catch (Exception e) {
             logger.error("杞﹁締閲岀▼缁熻瀹氭椂浠诲姟鎵ц澶辫触", e);
@@ -55,30 +57,86 @@
         logger.info("寮�濮嬫墽琛岃溅杈嗛噷绋嬬粺璁″畾鏃朵换鍔� - 缁熻鏃ユ湡: {}", dateStr);
         
         try {
-            // 瑙f瀽鏃ユ湡瀛楃涓�
-            String[] parts = dateStr.split("-");
-            if (parts.length != 3) {
-                throw new IllegalArgumentException("鏃ユ湡鏍煎紡閿欒锛屽簲涓�: yyyy-MM-dd");
+            if (dateStr == null || dateStr.trim().isEmpty()) {
+                throw new IllegalArgumentException("鏃ユ湡涓嶈兘涓虹┖");
             }
             
-            Calendar calendar = Calendar.getInstance();
-            calendar.set(Calendar.YEAR, Integer.parseInt(parts[0]));
-            calendar.set(Calendar.MONTH, Integer.parseInt(parts[1]) - 1); // 鏈堜唤浠�0寮�濮�
-            calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(parts[2]));
-            calendar.set(Calendar.HOUR_OF_DAY, 0);
-            calendar.set(Calendar.MINUTE, 0);
-            calendar.set(Calendar.SECOND, 0);
-            calendar.set(Calendar.MILLISECOND, 0);
-            Date targetDate = calendar.getTime();
+            // 浣跨敤SimpleDateFormat瑙f瀽鏃ユ湡瀛楃涓�
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            sdf.setLenient(false); // 涓ユ牸瑙f瀽鏃ユ湡
+            Date targetDate = sdf.parse(dateStr.trim());
             
             // 鎵归噺璁$畻閲岀▼缁熻
             int successCount = vehicleMileageStatsService.batchCalculateMileageStats(targetDate);
             
             logger.info("杞﹁締閲岀▼缁熻瀹氭椂浠诲姟鎵ц瀹屾垚 - 鏃ユ湡: {}, 鎴愬姛缁熻: {} 杈嗚溅", dateStr, successCount);
             
+        } catch (ParseException e) {
+            logger.error("杞﹁締閲岀▼缁熻瀹氭椂浠诲姟鎵ц澶辫触 - 鏃ユ湡鏍煎紡閿欒: {}", dateStr, e);
+            throw new RuntimeException("瀹氭椂浠诲姟鎵ц澶辫触: 鏃ユ湡鏍煎紡閿欒锛屽簲涓� yyyy-MM-dd");
         } catch (Exception e) {
             logger.error("杞﹁締閲岀▼缁熻瀹氭椂浠诲姟鎵ц澶辫触 - 鏃ユ湡: {}", dateStr, e);
             throw new RuntimeException("瀹氭椂浠诲姟鎵ц澶辫触: " + e.getMessage());
         }
     }
+
+    /**
+     * 浠嶨PS鍒嗘閲岀▼姹囨�荤敓鎴愭槰鏃ョ粺璁℃暟鎹�
+     * 锛堟帹鑽愪娇鐢ㄦ鏂规硶锛屽熀浜庡凡璁$畻鐨勫垎娈甸噷绋嬫暟鎹眹鎬伙紝鎬ц兘鏇村ソ锛�
+     */
+    public void aggregateYesterdayFromSegments() {
+        logger.info("寮�濮嬫墽琛屼粠鍒嗘閲岀▼姹囨�讳换鍔� - 缁熻鏄ㄦ棩鏁版嵁");
+        
+        try {
+            // 鑾峰彇鏄ㄥぉ鐨勬棩鏈�
+            Calendar calendar = Calendar.getInstance();
+            calendar.add(Calendar.DAY_OF_MONTH, -1);
+            calendar.set(Calendar.HOUR_OF_DAY, 0);
+            calendar.set(Calendar.MINUTE, 0);
+            calendar.set(Calendar.SECOND, 0);
+            calendar.set(Calendar.MILLISECOND, 0);
+            Date yesterday = calendar.getTime();
+            
+            // 浠庡垎娈甸噷绋嬫眹鎬荤敓鎴愮粺璁�
+            int successCount = vehicleMileageStatsService.batchAggregateFromSegmentMileage(yesterday);
+            
+            logger.info("浠庡垎娈甸噷绋嬫眹鎬讳换鍔℃墽琛屽畬鎴� - 鎴愬姛缁熻: {} 杈嗚溅", successCount);
+            
+        } catch (Exception e) {
+            logger.error("浠庡垎娈甸噷绋嬫眹鎬讳换鍔℃墽琛屽け璐�", e);
+            throw new RuntimeException("姹囨�讳换鍔℃墽琛屽け璐�: " + e.getMessage());
+        }
+    }
+
+    /**
+     * 浠嶨PS鍒嗘閲岀▼姹囨�荤敓鎴愭寚瀹氭棩鏈熺殑缁熻鏁版嵁
+     * 
+     * @param dateStr 鏃ユ湡瀛楃涓诧紝鏍煎紡锛歽yyy-MM-dd
+     */
+    public void aggregateFromSegmentsByDate(String dateStr) {
+        logger.info("寮�濮嬫墽琛屼粠鍒嗘閲岀▼姹囨�讳换鍔� - 缁熻鏃ユ湡: {}", dateStr);
+        
+        try {
+            if (dateStr == null || dateStr.trim().isEmpty()) {
+                throw new IllegalArgumentException("鏃ユ湡涓嶈兘涓虹┖");
+            }
+            
+            // 浣跨敤SimpleDateFormat瑙f瀽鏃ユ湡瀛楃涓�
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            sdf.setLenient(false); // 涓ユ牸瑙f瀽鏃ユ湡
+            Date targetDate = sdf.parse(dateStr.trim());
+            
+            // 浠庡垎娈甸噷绋嬫眹鎬荤敓鎴愮粺璁�
+            int successCount = vehicleMileageStatsService.batchAggregateFromSegmentMileage(targetDate);
+            
+            logger.info("浠庡垎娈甸噷绋嬫眹鎬讳换鍔℃墽琛屽畬鎴� - 鏃ユ湡: {}, 鎴愬姛缁熻: {} 杈嗚溅", dateStr, successCount);
+            
+        } catch (ParseException e) {
+            logger.error("浠庡垎娈甸噷绋嬫眹鎬讳换鍔℃墽琛屽け璐� - 鏃ユ湡鏍煎紡閿欒: {}", dateStr, e);
+            throw new RuntimeException("姹囨�讳换鍔℃墽琛屽け璐�: 鏃ユ湡鏍煎紡閿欒锛屽簲涓� yyyy-MM-dd");
+        } catch (Exception e) {
+            logger.error("浠庡垎娈甸噷绋嬫眹鎬讳换鍔℃墽琛屽け璐� - 鏃ユ湡: {}", dateStr, e);
+            throw new RuntimeException("姹囨�讳换鍔℃墽琛屽け璐�: " + e.getMessage());
+        }
+    }
 }

--
Gitblit v1.9.1