wlzboy
2 天以前 08f95b2f159b56fa3bd4f4b348855989de8aa456
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/VehicleGpsSegmentMileageTask.java
@@ -22,6 +22,44 @@
    
    @Autowired
    private ISysConfigService configService;
    /**
     * 执行GPS分段里程补偿计算
     * 检查最近N天内未被处理的GPS坐标并进行补偿计算
     * 建议配置为每天执行一次,例如凌晨2点
     */
    public void executeCompensationCalculation() {
        executeCompensationCalculation("7");
    }
    /**
     * 执行GPS分段里程补偿计算(带参数)
     *
     * @param params 参数字符串,格式:回溯天数(如:7表示回溯7天)
     */
    public void executeCompensationCalculation(String params) {
        try {
            // 解析参数:回溯天数
            int lookbackDays = 7; // 默认7天
            if (params != null && !params.trim().isEmpty()) {
                try {
                    lookbackDays = Integer.parseInt(params.trim());
                } catch (NumberFormatException e) {
                    logger.warn("参数格式错误,使用默认值7天: {}", params);
                }
            }
//            logger.info("========== 开始执行GPS分段里程补偿计算 - 回溯{}天 ==========", lookbackDays);
            // 执行补偿计算
            int successCount = segmentMileageService.compensateCalculation(lookbackDays);
//            logger.info("========== GPS分段里程补偿计算完成 - 成功处理 {} 辆车 ==========", successCount);
        } catch (Exception e) {
            logger.error("GPS分段里程补偿计算失败", e);
        }
    }
    /**
     * 计算最近一段时间的GPS分段里程
@@ -59,19 +97,21 @@
                }
            }
            
            // 计算时间范围
            // 计算时间范围(向前回溯指定分钟数)
            Calendar cal = Calendar.getInstance();
            Date endTime = cal.getTime();
            cal.add(Calendar.MINUTE, -minutes);
            Date startTime = cal.getTime();
            
            logger.info("开始计算GPS分段里程 - 时间范围: {} 到 {}, 时间段间隔: {}分钟",
                       startTime, endTime, segmentMinutes);
            // 注意:此方法只计算最近时间段的数据,历史遗漏数据由补偿机制处理
//            logger.info("开始计算GPS分段里程 - 时间范围: {} 到 {}, 时间段间隔: {}分钟",
//                       startTime, endTime, segmentMinutes);
            
            // 批量计算
            int successCount = segmentMileageService.batchCalculateSegmentMileage(startTime, endTime);
            
            logger.info("GPS分段里程计算完成 - 成功处理 {} 辆车", successCount);
//            logger.info("GPS分段里程计算完成 - 成功处理 {} 辆车", successCount);
            
        } catch (Exception e) {
            logger.error("GPS分段里程计算任务执行失败", e);