| | |
| | | List<VehicleGps> gpsList = vehicleGpsMapper.selectGpsDataByTimeRange(vehicleId, dayStartStr, dayEndStr); |
| | | |
| | | if (gpsList == null || gpsList.isEmpty()) { |
| | | logger.info("---> 车辆ID:{} 在日期:{} 无GPS数据", vehicleId, statDate); |
| | | // logger.info("---> 车辆ID:{} 在日期:{} 无GPS数据", vehicleId, statDate); |
| | | return null; |
| | | } |
| | | // logger.info("---> 车辆ID:{} GPS数据条数:{}", vehicleId, gpsList.size()); |
| | |
| | | List<VehicleGpsSegmentMileage> segments = segmentMileageMapper.selectSegmentsByDateRange(vehicleId, dayStart, dayEnd); |
| | | |
| | | if (segments == null || segments.isEmpty()) { |
| | | logger.info("车辆ID: {} 在日期: {} 无分段里程数据", vehicleId, statDate); |
| | | // logger.info("车辆ID: {} 在日期: {} 无分段里程数据", vehicleId, statDate); |
| | | return null; |
| | | } |
| | | |
| | |
| | | // logger.info("车辆ID: {} 在日期: {} 有 {} 个任务", vehicleId, statDate, taskCount); |
| | | List<VehicleGpsSegmentMileage> mileages = this.getTaskDistanceMileage(vehicleId, dayStart, dayEnd).stream().filter(e -> e.getSegmentDistance() != null && e.getSegmentDistance().compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList()); |
| | | // logger.info("车辆ID: {} 在日期: {} 有 {} 个分段里程数据", vehicleId, statDate, mileages.size()); |
| | | Integer totalGpsPoints = mileages != null ? mileages.stream() |
| | | .filter(segment -> segment.getGpsPointCount() != null) |
| | | .mapToInt(VehicleGpsSegmentMileage::getGpsPointCount) |
| | | .sum() : 0; |
| | | Integer totalGpsPoints = mileages.stream() |
| | | .filter(segment -> segment.getGpsPointCount() != null) |
| | | .mapToInt(VehicleGpsSegmentMileage::getGpsPointCount) |
| | | .sum(); |
| | | BigDecimal taskDistance = getTaskDistance(taskIntervals, mileages); |
| | | BigDecimal totalDistance = calculateTotalMileage(segments); |
| | | BigDecimal nonTaskDistance = totalDistance.subtract(taskDistance); |
| | | |
| | | // 防止除零错误 |
| | | BigDecimal taskRatio = BigDecimal.ZERO; |
| | | if (totalDistance != null && totalDistance.compareTo(BigDecimal.ZERO) > 0) { |
| | | if (totalDistance.compareTo(BigDecimal.ZERO) > 0) { |
| | | taskRatio = taskDistance.divide(totalDistance, 4, RoundingMode.HALF_UP); |
| | | } |
| | | // 3. 汇总里程数据 |
| | |
| | | } |
| | | |
| | | // logger.info("车辆ID: {} 日期: {} 从分段汇总完成 - 总里程: {}km, 任务里程: {}km, 非任务里程: {}km, 分段数: {}", |
| | | // vehicleId, statDate, totalMileage, taskMileage, nonTaskMileage, segments.size()); |
| | | |
| | | // vehicleId, statDate, stats.getTotalMileage(), stats.getTaskMileage(),stats.getNonTaskMileage(), segments.size()); |
| | | |
| | | return stats; |
| | | |
| | | } catch (Exception e) { |