wlzboy
6 天以前 09e6dc3fb7266620fafb5e341808a8eb36e080a1
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/VehicleGpsSegmentMileageTask.java
@@ -2,7 +2,6 @@
import java.util.Calendar;
import java.util.Date;
import javax.annotation.PostConstruct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -25,42 +24,41 @@
    private ISysConfigService configService;
    
    /**
     * 服务启动时执行补偿计算
     * 检查最近7天内未被处理的GPS坐标并进行补偿计算
     * 执行GPS分段里程补偿计算
     * 检查最近N天内未被处理的GPS坐标并进行补偿计算
     * 建议配置为每天执行一次,例如凌晨2点
     */
    @PostConstruct
    public void init() {
        // 启动后延迟执行,避免影响服务启动速度
        new Thread(() -> {
            try {
                // 延迟30秒启动,确保所有服务已就绪
                Thread.sleep(30000);
                logger.info("========== 开始执行GPS分段里程补偿计算 ==========");
                // 获取配置的回溯天数,默认7天
                int lookbackDays = 7;
                String lookbackConfig = configService.selectConfigByKey("gps.mileage.compensation.days");
                if (lookbackConfig != null && !lookbackConfig.isEmpty()) {
                    try {
                        lookbackDays = Integer.parseInt(lookbackConfig);
                    } catch (NumberFormatException e) {
                        logger.warn("补偿回溯天数配置错误,使用默认值7天");
                    }
    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);
                }
                // 执行补偿计算
                int successCount = segmentMileageService.compensateCalculation(lookbackDays);
                logger.info("========== GPS分段里程补偿计算完成 - 成功处理 {} 辆车 ==========", successCount);
            } catch (InterruptedException e) {
                logger.error("补偿计算线程被中断", e);
                Thread.currentThread().interrupt();
            } catch (Exception e) {
                logger.error("GPS分段里程补偿计算失败", e);
            }
        }, "GPS-Compensation-Thread").start();
//            logger.info("========== 开始执行GPS分段里程补偿计算 - 回溯{}天 ==========", lookbackDays);
            // 执行补偿计算
            int successCount = segmentMileageService.compensateCalculation(lookbackDays);
//            logger.info("========== GPS分段里程补偿计算完成 - 成功处理 {} 辆车 ==========", successCount);
        } catch (Exception e) {
            logger.error("GPS分段里程补偿计算失败", e);
        }
    }
    /**
@@ -107,13 +105,13 @@
            
            // 注意:此方法只计算最近时间段的数据,历史遗漏数据由补偿机制处理
            
            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);