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 = "0 0/1 * * * ?")
|
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);
|
}
|
}
|
|
|
}
|