From af8cab142a6b15c06e131a8474574dd5b00df982 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期四, 04 十二月 2025 22:09:58 +0800
Subject: [PATCH] feat: 改造微信accesstoken存放在系统配置表中

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleMileageStatsServiceImpl.java |   73 +++++++++++++++++++++++++++++-------
 1 files changed, 59 insertions(+), 14 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleMileageStatsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleMileageStatsServiceImpl.java
index e61b9f6..f795378 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleMileageStatsServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleMileageStatsServiceImpl.java
@@ -6,7 +6,9 @@
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -395,26 +397,69 @@
                 }
             }
             
-            // 4. 鏌ヨ璇ユ棩鏈熺殑浠诲姟鏃堕棿鍖洪棿锛岃绠椾换鍔¢噷绋嬪拰闈炰换鍔¢噷绋�
-            List<TaskTimeInterval> taskIntervals = vehicleMileageStatsMapper.selectTaskTimeIntervals(vehicleId, dayStart, dayEnd);
-            
+            // 4. 璁$畻浠诲姟閲岀▼鍜岄潪浠诲姟閲岀▼锛堜紭鍖栵細浼樺厛浣跨敤task_id鐩存帴鑱氬悎锛�
             BigDecimal taskMileage = BigDecimal.ZERO;
             BigDecimal nonTaskMileage = BigDecimal.ZERO;
+            int taskCount = 0;  // 浠诲姟鏁伴噺
             
+            // 4.1 缁熻鏈塼ask_id鐨勫垎娈垫暟閲�
+            int segmentsWithTask = 0;
             for (VehicleGpsSegmentMileage segment : segments) {
-                Date segStart = segment.getSegmentStartTime();
-                Date segEnd = segment.getSegmentEndTime();
-                BigDecimal segDistance = segment.getSegmentDistance() != null ? segment.getSegmentDistance() : BigDecimal.ZERO;
+                if (segment.getTaskId() != null) {
+                    segmentsWithTask++;
+                }
+            }
+            
+            // 4.2 濡傛灉澶ч儴鍒嗗垎娈甸兘鏈塼ask_id锛屼娇鐢ㄤ紭鍖栨柟妗堬紙鐩存帴鎸塼ask_id鑱氬悎锛�
+            if (segmentsWithTask > segments.size() * 0.8) {
+                logger.debug("杞﹁締ID: {} 鏃ユ湡: {} 浣跨敤浼樺寲鏂规锛氱洿鎺ユ寜task_id鑱氬悎锛坽}涓垎娈垫湁task_id锛屽崰姣攞}%锛�", 
+                           vehicleId, statDate, segmentsWithTask, (segmentsWithTask * 100.0 / segments.size()));
                 
-                // 璁$畻璇ュ垎娈典笌浠诲姟鏃舵鐨勯噸鍙犳瘮渚�
-                double taskRatio = calculateTaskOverlapRatio(segStart, segEnd, taskIntervals);
+                // 浣跨敤Set缁熻鍘婚噸鐨勪换鍔D鏁伴噺
+                Set<Long> uniqueTaskIds = new HashSet<>();
                 
-                // 鍒嗘憞閲岀▼
-                BigDecimal taskDist = segDistance.multiply(BigDecimal.valueOf(taskRatio));
-                BigDecimal nonTaskDist = segDistance.multiply(BigDecimal.valueOf(1 - taskRatio));
+                // 鐩存帴鎸塼ask_id鍒嗙粍鑱氬悎
+                for (VehicleGpsSegmentMileage segment : segments) {
+                    BigDecimal segDistance = segment.getSegmentDistance() != null ? segment.getSegmentDistance() : BigDecimal.ZERO;
+                    
+                    if (segment.getTaskId() != null) {
+                        // 鏈変换鍔D锛岃鍏ヤ换鍔¢噷绋�
+                        taskMileage = taskMileage.add(segDistance);
+                        uniqueTaskIds.add(segment.getTaskId());
+                    } else {
+                        // 娌℃湁浠诲姟ID锛岃鍏ラ潪浠诲姟閲岀▼
+                        nonTaskMileage = nonTaskMileage.add(segDistance);
+                    }
+                }
                 
-                taskMileage = taskMileage.add(taskDist);
-                nonTaskMileage = nonTaskMileage.add(nonTaskDist);
+                // 璁剧疆鍘婚噸鍚庣殑浠诲姟鏁伴噺
+                taskCount = uniqueTaskIds.size();
+                
+            } else {
+                // 4.3 闄嶇骇鏂规锛氫娇鐢ㄥ師鏈夌殑鏃堕棿閲嶅彔璁$畻鏂瑰紡
+                logger.debug("杞﹁締ID: {} 鏃ユ湡: {} 浣跨敤闄嶇骇鏂规锛氭椂闂撮噸鍙犺绠楋紙鍙湁{}涓垎娈垫湁task_id锛屽崰姣攞}%锛�", 
+                           vehicleId, statDate, segmentsWithTask, (segmentsWithTask * 100.0 / segments.size()));
+                
+                List<TaskTimeInterval> taskIntervals = vehicleMileageStatsMapper.selectTaskTimeIntervals(vehicleId, dayStart, dayEnd);
+                
+                for (VehicleGpsSegmentMileage segment : segments) {
+                    Date segStart = segment.getSegmentStartTime();
+                    Date segEnd = segment.getSegmentEndTime();
+                    BigDecimal segDistance = segment.getSegmentDistance() != null ? segment.getSegmentDistance() : BigDecimal.ZERO;
+                    
+                    // 璁$畻璇ュ垎娈典笌浠诲姟鏃舵鐨勯噸鍙犳瘮渚�
+                    double taskRatio = calculateTaskOverlapRatio(segStart, segEnd, taskIntervals);
+                    
+                    // 鍒嗘憡閲岀▼
+                    BigDecimal taskDist = segDistance.multiply(BigDecimal.valueOf(taskRatio));
+                    BigDecimal nonTaskDist = segDistance.multiply(BigDecimal.valueOf(1 - taskRatio));
+                    
+                    taskMileage = taskMileage.add(taskDist);
+                    nonTaskMileage = nonTaskMileage.add(nonTaskDist);
+                }
+                
+                // 璁剧疆浠诲姟鏁伴噺
+                taskCount = taskIntervals == null ? 0 : taskIntervals.size();
             }
             
             // 璁$畻浠诲姟閲岀▼鍗犳瘮
@@ -463,7 +508,7 @@
             stats.setNonTaskMileage(nonTaskMileage.setScale(2, RoundingMode.HALF_UP));
             stats.setTaskRatio(taskRatio);
             stats.setGpsPointCount(totalGpsPoints);
-            stats.setTaskCount(taskIntervals == null ? 0 : taskIntervals.size());
+            stats.setTaskCount(taskCount);
             stats.setSegmentCount(segments.size());
             stats.setDataSource("segment"); // 鏍囪鏁版嵁鏉ユ簮涓哄垎娈垫眹鎬�
             

--
Gitblit v1.9.1