wlzboy
8 天以前 09faa36132c8cbada5327649875534ef01c1a3b1
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleGpsSegmentMileageServiceImpl.java
@@ -96,10 +96,19 @@
    @Override
    public int batchCalculateSegmentMileage(Date startTime, Date endTime) {
        try {
            logger.info("开始批量计算GPS分段里程 - 时间范围: {} 到 {}", startTime, endTime);
//            logger.info("开始批量计算GPS分段里程 - 时间范围: {} 到 {}", startTime, endTime);
            
            // 查询在指定时间范围内有GPS数据的所有车辆
            // 查询在指定时间范围内有GPS数据的所有车辆(添加慢SQL监控)
            long startQueryTime = System.currentTimeMillis();
            List<Long> vehicleIds = vehicleGpsMapper.selectActiveVehicleIds(startTime);
            long queryTime = System.currentTimeMillis() - startQueryTime;
            // 慢查询警告(超过1秒)
            if (queryTime > 1000) {
                logger.warn("查询活跃车辆ID耗时过长: {}ms, 开始时间: {}, 建议检查 tb_vehicle_gps 表的索引(需要 vehicle_id 和 collect_time 组合索引)",
                    queryTime, startTime);
            }
            logger.info("查询到 {} 辆活跃车辆,查询耗时: {}ms", vehicleIds != null ? vehicleIds.size() : 0, queryTime);
            
            if (vehicleIds == null || vehicleIds.isEmpty()) {
                logger.info("没有找到活跃车辆");
@@ -115,14 +124,14 @@
            for (int i = 0; i < vehicleIds.size(); i++) {
                Long vehicleId = vehicleIds.get(i);
                try {
                    logger.info("正在处理车辆 {} ({}/{})", vehicleId, i + 1, vehicleIds.size());
//                    logger.info("正在处理车辆 {} ({}/{})", vehicleId, i + 1, vehicleIds.size());
                    
                    int segmentCount = calculateVehicleSegmentMileage(vehicleId, startTime, endTime);
                    if (segmentCount > 0) {
                        successCount++;
                        logger.info("车辆 {} 计算成功,生成 {} 个分段记录", vehicleId, segmentCount);
//                        logger.info("车辆 {} 计算成功,生成 {} 个分段记录", vehicleId, segmentCount);
                    } else {
                        logger.debug("车辆 {} 无有新的GPS分段数据", vehicleId);
//                        logger.debug("车辆 {} 无有新的GPS分段数据", vehicleId);
                    }
                } catch (Exception e) {
                    failedCount++;
@@ -133,12 +142,12 @@
                
                // 每处理10辆车输出一次进度
                if ((i + 1) % 10 == 0) {
                    logger.info("批量计算进度: {}/{}, 成功: {}, 失败: {}",
                    logger.info("批量计算进度: {}/{}, 成功: {}, 失败: {}",
                               i + 1, vehicleIds.size(), successCount, failedCount);
                }
            }
            
            logger.info("批量分段里程计算完成 - 时间范围: {} 到 {}, 总车辆数: {}, 成功: {}, 失败: {}",
            logger.info("批量分段里程计算完成 - 时间范围: {} 到 {}, 总车辆数: {}, 成功: {}, 失败: {}",
                       startTime, endTime, vehicleIds.size(), successCount, failedCount);
            return successCount;
            
@@ -831,7 +840,7 @@
                                      Date segmentStartTime, Date segmentEndTime) {
        try {
            // 查询该车辆正在执行的任务列表
            List<SysTask> activeTasks = sysTaskMapper.selectActiveTasksByVehicleId(vehicleId);
            List<SysTask> activeTasks = sysTaskMapper.selectTaskByVehicleIdAndDate(vehicleId,segmentStartTime,segmentEndTime);
            
            if (activeTasks == null || activeTasks.isEmpty()) {
                logger.debug("车辆 {} 在时间段 {} - {} 没有正在执行的任务", vehicleId, segmentStartTime, segmentEndTime);