wlzboy
23 小时以前 6b29bd596f8b48485d3506bfba4a1e0ea6c7df99
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleGpsSegmentMileageServiceImpl.java
@@ -118,14 +118,14 @@
                logger.warn("查询活跃车辆ID耗时过长: {}ms, 开始时间: {}, 建议检查 tb_vehicle_gps 表的索引(需要 vehicle_id 和 collect_time 组合索引)", 
                    queryTime, startTime);
            }
            logger.info("查询到 {} 辆活跃车辆,查询耗时: {}ms", vehicleIds != null ? vehicleIds.size() : 0, queryTime);
//            logger.info("查询到 {} 辆活跃车辆,查询耗时: {}ms", vehicleIds != null ? vehicleIds.size() : 0, queryTime);
            
            if (vehicleIds == null || vehicleIds.isEmpty()) {
                logger.info("没有找到活跃车辆");
                return 0;
            }
            
            logger.info("找到 {} 辆活跃车辆,开始分批逐辆计算...", vehicleIds.size());
//            logger.info("找到 {} 辆活跃车辆,开始分批逐辆计算...", vehicleIds.size());
            
            int successCount = 0;
            int failedCount = 0;
@@ -135,7 +135,7 @@
                int batchEnd = Math.min(batchStart + BATCH_SIZE, vehicleIds.size());
                List<Long> batchVehicleIds = vehicleIds.subList(batchStart, batchEnd);
                
                logger.info("处理批次 {}-{}/{}", batchStart + 1, batchEnd, vehicleIds.size());
//                logger.info("处理批次 {}-{}/{}", batchStart + 1, batchEnd, vehicleIds.size());
                
                // 逐辆计算,包含错误处理和重试机制
                for (int i = 0; i < batchVehicleIds.size(); i++) {
@@ -154,20 +154,20 @@
                    
                    // 每处理10辆车输出一次进度
                    if ((overallIndex + 1) % 10 == 0) {
                        logger.info("批量计算进度: {}/{}, 成功: {}, 失败: {}",
                                   overallIndex + 1, vehicleIds.size(), successCount, failedCount);
//                        logger.info("批量计算进度: {}/{}, 成功: {}, 失败: {}",
//                                   overallIndex + 1, vehicleIds.size(), successCount, failedCount);
                    }
                }
                
                // 批次结束后,主动触发GC建议(不强制)
                if (batchEnd < vehicleIds.size()) {
                    System.gc();
                    logger.debug("批次 {}-{} 处理完成,已建议JVM回收内存", batchStart + 1, batchEnd);
//                    logger.debug("批次 {}-{} 处理完成,已建议JVM回收内存", batchStart + 1, batchEnd);
                }
            }
            
            logger.info("批量分段里程计算完成 - 时间范围: {} 到 {}, 总车辆数: {}, 成功: {}, 失败: {}",
                       startTime, endTime, vehicleIds.size(), successCount, failedCount);
//            logger.info("批量分段里程计算完成 - 时间范围: {} 到 {}, 总车辆数: {}, 成功: {}, 失败: {}",
//                       startTime, endTime, vehicleIds.size(), successCount, failedCount);
            return successCount;
            
        } catch (Exception e) {
@@ -185,14 +185,14 @@
            cal.add(Calendar.DAY_OF_MONTH, -lookbackDays);
            Date startTime = cal.getTime();
            
            logger.info("开始补偿计算 - 回溯天数: {}, 时间范围: {} 到 {}", lookbackDays, startTime, endTime);
//            logger.info("开始补偿计算 - 回溯天数: {}, 时间范围: {} 到 {}", lookbackDays, startTime, endTime);
            String startTimeStr=DateUtils.formatDate(startTime, DateUtils.YYYY_MM_DD_HH_MM_SS);
            // 查询所有活跃车辆
            List<Long> vehicleIds = vehicleGpsMapper.selectActiveVehicleIds(startTimeStr);
            
            if (vehicleIds == null || vehicleIds.isEmpty()) {
                logger.info("没有找到活跃车辆");
//                logger.info("没有找到活跃车辆");
                return 0;
            }
            
@@ -212,13 +212,13 @@
                        List<VehicleGps> uncalculatedGps = vehicleGpsMapper.selectUncalculatedGps(vehicleId, startTimeStr, endTimeStr);
                    
                    if (uncalculatedGps == null || uncalculatedGps.isEmpty()) {
                        logger.debug("车辆 {} 没有未计算的GPS数据", vehicleId);
//                        logger.debug("车辆 {} 没有未计算的GPS数据", vehicleId);
                        continue;
                    }
                    
                    totalUncalculated += uncalculatedGps.size();
                    logger.info("车辆 {} 发现 {} 个未计算的GPS点,开始补偿计算...",
                               vehicleId, uncalculatedGps.size());
//                    logger.info("车辆 {} 发现 {} 个未计算的GPS点,开始补偿计算...",
//                               vehicleId, uncalculatedGps.size());
                    
                    // 获取未计算GPS数据的时间范围
                    Date uncalculatedStartTime = parseDateTime(uncalculatedGps.get(0).getCollectTime());
@@ -228,16 +228,16 @@
                    Long lastCalculatedGpsId = segmentMileageMapper.selectLastCalculatedGpsId(vehicleId, uncalculatedStartTime);
                    
                    if (lastCalculatedGpsId != null) {
                        logger.info("车辆 {} 找到最后一个已处理的GPS点ID: {},将与未处理数据一起计算", vehicleId, lastCalculatedGpsId);
//                        logger.info("车辆 {} 找到最后一个已处理的GPS点ID: {},将与未处理数据一起计算", vehicleId, lastCalculatedGpsId);
                        
                        // 将最后一个已处理的GPS点加入列表前面,作为前置点
                        VehicleGps lastCalculatedGps = vehicleGpsMapper.selectVehicleGpsById(lastCalculatedGpsId);
                        if (lastCalculatedGps != null) {
                            uncalculatedGps.add(0, lastCalculatedGps); // 插入到列表最前面
                            logger.info("已将GPS点 {} 作为前置点加入计算列表", lastCalculatedGpsId);
//                            logger.info("已将GPS点 {} 作为前置点加入计算列表", lastCalculatedGpsId);
                        }
                    } else {
                        logger.info("车辆 {} 没有找到已处理的前置 GPS点,从第一个未处理点开始计算", vehicleId);
//                        logger.info("车辆 {} 没有找到已处理的前置 GPS点,从第一个未处理点开始计算", vehicleId);
                    }
                    
                    // 重新计算该车辆在该时间范围的分段里程
@@ -247,7 +247,7 @@
                    
                        if (segmentCount > 0) {
                            successCount++;
                            logger.info("车辆 {} 补偿计算完成,生成 {} 个分段记录", vehicleId, segmentCount);
//                            logger.info("车辆 {} 补偿计算完成,生成 {} 个分段记录", vehicleId, segmentCount);
                        }
                    } catch (Exception e) {
                        logger.error("车辆 {} 补偿计算失败", vehicleId, e);
@@ -257,12 +257,12 @@
                // 每批次结束后,主动建议GC(不需要显式清空引用,局部变量会自动释放)
                if (batchEnd < vehicleIds.size()) {
                    System.gc();
                    logger.debug("补偿计算批次 {}-{} 完成,已建议JVM回收内存", batchStart + 1, batchEnd);
//                    logger.debug("补偿计算批次 {}-{} 完成,已建议JVM回收内存", batchStart + 1, batchEnd);
                }
            }
            
            logger.info("补偿计算完成 - 总车辆数: {}, 未计算GPS点数: {}, 成功车辆数: {}",
                       vehicleIds.size(), totalUncalculated, successCount);
//            logger.info("补偿计算完成 - 总车辆数: {}, 未计算GPS点数: {}, 成功车辆数: {}",
//                       vehicleIds.size(), totalUncalculated, successCount);
            return successCount;
            
        } catch (Exception e) {
@@ -280,7 +280,7 @@
            List<VehicleGps> gpsList = vehicleGpsMapper.selectGpsDataByTimeRange(vehicleId, startTimeStr, endTimeStr);
            
            if (gpsList == null || gpsList.isEmpty()) {
                logger.debug("车辆ID: {} 在时间范围 {} 到 {} 内无GPS数据", vehicleId, startTime, endTime);
//                logger.info("车辆ID: {} 在时间范围 {} 到 {} 内无GPS数据", vehicleId, startTime, endTime);
                return 0;
            }
            
@@ -307,7 +307,7 @@
        try {
            // 验证输入数据
            if (gpsList == null || gpsList.isEmpty()) {
                logger.debug("车辆ID: {} 在时间范围 {} 到 {} 内无GPS数据", vehicleId, startTime, endTime);
//                logger.debug("车辆ID: {} 在时间范围 {} 到 {} 内无GPS数据", vehicleId, startTime, endTime);
                return 0;
            }
            
@@ -432,7 +432,7 @@
    private boolean isSegmentAlreadyCalculated(Long vehicleId, Date segmentStartTime, List<VehicleGps> segmentGpsList) {
        VehicleGpsSegmentMileage existing = segmentMileageMapper.selectByVehicleIdAndTime(vehicleId, segmentStartTime);
        if (existing != null) {
            logger.debug("车辆 {} 时间段 {} 的分段里程已存在,跳过", vehicleId, segmentStartTime);
//            logger.debug("车辆 {} 时间段 {} 的分段里程已存在,跳过", vehicleId, segmentStartTime);
            return true;
        }
        return false;
@@ -597,7 +597,7 @@
            for (Date statDate : affectedDates) {
                try {
                    mileageStatsService.aggregateFromSegmentMileage(vehicleId, statDate);
//                    logger.info("车辆 {} 日期 {} 的统计数据已自动汇总生成", vehicleId, statDate);
                    logger.info("车辆 {} 日期 {} 的统计数据已自动汇总生成", vehicleId, statDate);
                } catch (Exception e) {
                    logger.error("车辆 {} 日期 {} 自动汇总统计失败", vehicleId, statDate, e);
                }
@@ -888,7 +888,7 @@
            List<SysTask> activeTasks = sysTaskMapper.selectTaskByVehicleIdAndDate(vehicleId,segmentStartTimeStr,segmentEndTimeStr);
            
            if (activeTasks == null || activeTasks.isEmpty()) {
                logger.info("车辆 {} 在时间段 {} - {} 没有正在执行的任务", vehicleId, segmentStartTime, segmentEndTime);
//                logger.info("车辆 {} 在时间段 {} - {} 没有正在执行的任务", vehicleId, segmentStartTime, segmentEndTime);
                return;
            }