| | |
| | | |
| | | 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; |
| | |
| | | |
| | | @Autowired |
| | | private ISysConfigService configService; |
| | | |
| | | /** |
| | | * 服务启动时执行补偿计算 |
| | | * 检查最近7天内未被处理的GPS坐标并进行补偿计算 |
| | | */ |
| | | @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天"); |
| | | } |
| | | } |
| | | |
| | | // 执行补偿计算 |
| | | 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(); |
| | | } |
| | | |
| | | /** |
| | | * 计算最近一段时间的GPS分段里程 |
| | |
| | | } |
| | | } |
| | | |
| | | // 计算时间范围 |
| | | // 计算时间范围(向前回溯指定分钟数) |
| | | Calendar cal = Calendar.getInstance(); |
| | | Date endTime = cal.getTime(); |
| | | cal.add(Calendar.MINUTE, -minutes); |
| | | Date startTime = cal.getTime(); |
| | | |
| | | // 注意:此方法只计算最近时间段的数据,历史遗漏数据由补偿机制处理 |
| | | |
| | | logger.info("开始计算GPS分段里程 - 时间范围: {} 到 {}, 时间段间隔: {}分钟", |
| | | startTime, endTime, segmentMinutes); |
| | | |