| | |
| | | // 查询所有活跃车辆 |
| | | List<VehicleInfo> vehicles = vehicleInfoMapper.selectVehicleInfoList(new VehicleInfo()); |
| | | if (vehicles == null || vehicles.isEmpty()) { |
| | | log.debug("没有找到需要监控的车辆"); |
| | | log.info("没有找到需要监控的车辆"); |
| | | return; |
| | | } |
| | | |
| | |
| | | // 获取该车辆的配置(优先级:车辆 > 部门 > 全局) |
| | | AlertConfig config = getVehicleAlertConfig(vehicleId, deptId, globalConfig); |
| | | if (config == null) { |
| | | log.debug("车辆 {} 未找到有效配置,跳过监控", vehicleNo); |
| | | // log.info("车辆 {} 未找到有效配置,跳过监控", vehicleNo); |
| | | return false; |
| | | } |
| | | |
| | | // 1. 查询车辆在时间窗口内的总运行里程 |
| | | BigDecimal totalMileage = calculateVehicleMileage(vehicleId, startTime, endTime); |
| | | if (totalMileage == null || totalMileage.compareTo(BigDecimal.ZERO) == 0) { |
| | | log.debug("车辆 {} 在监控窗口内无运行里程", vehicleNo); |
| | | // log.info("车辆 {} 在监控窗口内无运行里程", vehicleNo); |
| | | return false; |
| | | } |
| | | |
| | |
| | | // 3. 计算非任务状态下的运行里程 |
| | | BigDecimal nonTaskMileage = totalMileage.subtract(taskMileage); |
| | | if (nonTaskMileage.compareTo(BigDecimal.ZERO) <= 0) { |
| | | log.debug("车辆 {} 在监控窗口内无非任务里程", vehicleNo); |
| | | // log.info("车辆 {} 在监控窗口内无非任务里程", vehicleNo); |
| | | return false; |
| | | } |
| | | |
| | | log.debug("车辆 {} 总里程: {}km, 任务里程: {}km, 非任务里程: {}km", |
| | | vehicleNo, totalMileage, taskMileage, nonTaskMileage); |
| | | // log.info("车辆 {} 总里程: {}km, 任务里程: {}km, 非任务里程: {}km", |
| | | // vehicleNo, totalMileage, taskMileage, nonTaskMileage); |
| | | |
| | | // 4. 检查非任务里程是否超过公里数阈值 |
| | | if (nonTaskMileage.compareTo(config.mileageThreshold) <= 0) { |
| | | log.debug("车辆 {} 非任务运行里程 {}km 未超过阈值 {}km", |
| | | vehicleNo, nonTaskMileage, config.mileageThreshold); |
| | | // log.info("车辆 {} 非任务运行里程 {}km 未超过阈值 {}km", |
| | | // vehicleNo, nonTaskMileage, config.mileageThreshold); |
| | | return false; |
| | | } |
| | | |
| | | // 5. 检查告警频率限制 |
| | | if (!checkAlertFrequency(vehicleId, config)) { |
| | | log.debug("车辆 {} 已达到告警频率限制", vehicleNo); |
| | | // log.info("车辆 {} 已达到告警频率限制", vehicleNo); |
| | | return false; |
| | | } |
| | | |
| | |
| | | vehicleId, vehicleNo, mileage, startTime, endTime, deptId, deptName); |
| | | |
| | | if (!created) { |
| | | // log.info("车辆 {} 今日已存在相同类型的告警,不再创建", vehicleNo); |
| | | return false; |
| | | } |
| | | |
| | | log.info("车辆 {} 产生异常告警:无任务运行 {}km,时间 {} 至 {}", |
| | | vehicleNo, mileage, |
| | | DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, startTime), |
| | | DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, endTime)); |
| | | // log.info("车辆 {} 产生异常告警:无任务运行 {}km,时间 {} 至 {}", |
| | | // vehicleNo, mileage, |
| | | // DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, startTime), |
| | | // DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, endTime)); |
| | | |
| | | // 发送通知 |
| | | sendAlertNotification(vehicle, mileage, deptId, config); |
| | |
| | | userService.selectUserByUserName(dept.getLeader()); |
| | | if (leaderUser != null) { |
| | | userIds.add(leaderUser.getUserId()); |
| | | log.info("使用部门 {} 负责人: {} (ID: {})", |
| | | dept.getDeptName(), dept.getLeader(), leaderUser.getUserId()); |
| | | // log.info("使用部门 {} 负责人: {} (ID: {})", |
| | | // dept.getDeptName(), dept.getLeader(), leaderUser.getUserId()); |
| | | } else { |
| | | log.warn("部门 {} 负责人 {} 未找到对应用户", |
| | | dept.getDeptName(), dept.getLeader()); |
| | |
| | | // 通知用户列表 |
| | | config.notifyUsers = configService.selectConfigByKey("vehicle.alert.notify.users"); |
| | | |
| | | log.debug("告警配置: 阈值={}km, 每日限制={}次, 间隔={}分钟, 时间窗口={}分钟", |
| | | config.mileageThreshold, config.dailyLimit, config.alertInterval, config.timeWindow); |
| | | // log.debug("告警配置: 阈值={}km, 每日限制={}次, 间隔={}分钟, 时间窗口={}分钟", |
| | | // config.mileageThreshold, config.dailyLimit, config.alertInterval, config.timeWindow); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("加载告警配置失败,使用默认值", e); |