From 4f2925f1974844b66225ac70ae35065b8262b315 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期四, 04 十二月 2025 13:26:11 +0800
Subject: [PATCH] feat:增加微信token缓存
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleMileageStatsServiceImpl.java | 89 ++++++++++++++++++++++++++++++++++++--------
1 files changed, 73 insertions(+), 16 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 1cda18e..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;
@@ -181,8 +183,14 @@
@Override
public int batchCalculateMileageStats(Date statDate) {
try {
+ // 璁$畻鏌ヨ寮�濮嬫椂闂达紙7澶╁墠锛�
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(statDate);
+ calendar.add(Calendar.DAY_OF_MONTH, -7);
+ Date startTime = calendar.getTime();
+
// 鏌ヨ鎵�鏈夋椿璺冭溅杈�
- List<Long> vehicleIds = vehicleGpsMapper.selectActiveVehicleIds();
+ List<Long> vehicleIds = vehicleGpsMapper.selectActiveVehicleIds(startTime);
if (vehicleIds == null || vehicleIds.isEmpty()) {
logger.info("娌℃湁鎵惧埌娲昏穬杞﹁締");
@@ -389,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();
}
// 璁$畻浠诲姟閲岀▼鍗犳瘮
@@ -457,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"); // 鏍囪鏁版嵁鏉ユ簮涓哄垎娈垫眹鎬�
@@ -485,8 +536,14 @@
@Override
public int batchAggregateFromSegmentMileage(Date statDate) {
try {
+ // 璁$畻鏌ヨ寮�濮嬫椂闂达紙7澶╁墠锛�
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(statDate);
+ calendar.add(Calendar.DAY_OF_MONTH, -7);
+ Date startTime = calendar.getTime();
+
// 鏌ヨ鎵�鏈夋椿璺冭溅杈�
- List<Long> vehicleIds = vehicleGpsMapper.selectActiveVehicleIds();
+ List<Long> vehicleIds = vehicleGpsMapper.selectActiveVehicleIds(startTime);
if (vehicleIds == null || vehicleIds.isEmpty()) {
logger.info("娌℃湁鎵惧埌娲昏穬杞﹁締");
--
Gitblit v1.9.1