package com.casic.config.task; import com.casic.client.Client; import com.casic.config.TaskCronTimeConfig; import com.casic.model.AlarmMsgDTO; import com.casic.service.DeviceDataScanner; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import org.springframework.scheduling.support.CronTrigger; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.Executors; @Slf4j @Configuration @EnableScheduling public class TaskSchedulingConfig implements SchedulingConfigurer { @Autowired private List<DeviceDataScanner> deviceDataScannerList; @Autowired private TaskCronTimeConfig taskCronTimeConfig; @Autowired private Client client; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { log.info("扫描定时处理start..."); taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10)); //执行定时任务 taskRegistrar.addTriggerTask( //设置日期任务 getMangerRunnable(), //2.设置执行周期(Trigger) triggerContext -> new CronTrigger(taskCronTimeConfig.getCronTime()).nextExecutionTime(triggerContext) ); } /** * 进行某类设备的查询,进行阈值最后一条数据进行判断,进行报警设置值 */ private Runnable getMangerRunnable() { return new Runnable() { @Override public void run() { List<AlarmMsgDTO> alarmMsgList = new ArrayList<>(); deviceDataScannerList.forEach( deviceDataScanner -> { alarmMsgList.addAll(deviceDataScanner.scanDeviceData()); } ); Map<String, String> soleDevcodeMap = soleDevcode(alarmMsgList); for (String key : soleDevcodeMap.keySet()) { client.setSendMsg(soleDevcodeMap.get(key)); Thread myThread = new Thread(client); myThread.start(); try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } } } }; } private Map<String, String> soleDevcode(List<AlarmMsgDTO> alarmMsgList) { Map<String, String> soleDevcodeMap = new HashMap<>(); alarmMsgList.forEach( alarmMsgDTO -> { String alarmMsg = alarmMsgDTO.getDevcode() + "mmmm" + alarmMsgDTO.getIsAlarm(); soleDevcodeMap.put(alarmMsgDTO.getDevcode(), alarmMsg); } ); return soleDevcodeMap; } }