| New file |
| | |
| | | package org.sxkj.fw.area.scheduler; |
| | | |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | import org.sxkj.fw.area.entity.FwDefenseSceneManageEntity; |
| | | import org.sxkj.fw.area.service.IFwDefenseSceneManageService; |
| | | import org.sxkj.fw.device.entity.FwDeviceEntity; |
| | | import org.sxkj.fw.device.service.IFwDeviceService; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @Description 防控场景状态更新定时器 |
| | | * @Author AIX |
| | | * @Date 2026/1/30 11:34 |
| | | * @Version 1.0 |
| | | */ |
| | | @Component |
| | | @Slf4j |
| | | @AllArgsConstructor |
| | | public class DefenseSceneStatusScheduler { |
| | | |
| | | private final IFwDefenseSceneManageService fwDefenseSceneManageService; |
| | | |
| | | private final IFwDeviceService fwDeviceService; |
| | | |
| | | /** |
| | | * 每天凌晨0点执行,检查并更新过期的防控场景状态 |
| | | */ |
| | | @Scheduled(cron = "0 0 0 * * ?") // 每天凌晨0点执行 |
| | | // 每10秒执行一次(用于本地调试) |
| | | // @Scheduled(cron = "*/10 * * * * ?") |
| | | public void refreshDefenseSceneStatus() { |
| | | log.info("开始执行防控场景状态刷新任务"); |
| | | |
| | | try { |
| | | // 获取所有未删除的防控场景 |
| | | List<FwDefenseSceneManageEntity> scenes = fwDefenseSceneManageService.list(Wrappers.<FwDefenseSceneManageEntity>lambdaQuery() |
| | | .eq(FwDefenseSceneManageEntity::getIsDeleted, 0) |
| | | .lt(FwDefenseSceneManageEntity::getEffectiveDateEnd, new Date())); |
| | | |
| | | // 获取所有过期的场景ID |
| | | List<Long> expiredSceneIds = scenes.stream() |
| | | .map(FwDefenseSceneManageEntity::getId) |
| | | .collect(Collectors.toList()); |
| | | |
| | | // 批量更新过期场景状态为禁用 |
| | | if (!expiredSceneIds.isEmpty()) { |
| | | // 1.遍历所有删除的场景管理ID |
| | | List<Long> AllDeviceId = new ArrayList<>(); |
| | | for (Long sceneManageId : expiredSceneIds) { |
| | | // 2.获取场景管理下的所有设备ID |
| | | List<Long> deviceIdList = fwDefenseSceneManageService.selectDeviceId(sceneManageId); |
| | | AllDeviceId.addAll(deviceIdList); |
| | | } |
| | | // 3.禁用设备 |
| | | fwDeviceService.update(Wrappers.<FwDeviceEntity>lambdaUpdate() |
| | | .set(FwDeviceEntity::getIsEnabled, 0) |
| | | .in(FwDeviceEntity::getId, AllDeviceId)); |
| | | log.info("批量更新 {} 个过期场景状态为禁用", expiredSceneIds.size()); |
| | | } |
| | | log.info("防控场景状态刷新任务完成,共处理 {} 条场景,更新 {} 条过期场景", scenes.size(), expiredSceneIds.size()); |
| | | } catch (Exception e) { |
| | | log.error("防控场景状态刷新任务执行失败", e); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |