| | |
| | | @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("没有找到活跃车辆"); |
| | |
| | | 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++; |
| | |
| | | |
| | | // 每处理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; |
| | | |
| | |
| | | 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); |