|
@@ -29,6 +29,7 @@ import org.springframework.util.StringUtils;
|
|
|
import java.io.FileOutputStream;
|
|
|
import java.io.IOException;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.ScheduledExecutorService;
|
|
|
import java.util.concurrent.ScheduledFuture;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -184,23 +185,18 @@ public class KprDangyangWaterBizFun {
|
|
|
return (frequency == null) ? 0 : (Integer) frequency;
|
|
|
}));
|
|
|
//TODO 创建任务池
|
|
|
- ThreadPoolTaskScheduler scheduler = ThreadPoolTaskTool.createTaskScheduler(groupedByFrequency.keySet().size(),
|
|
|
- "schedule_dangyang_history_"+itemType.getString("key"));
|
|
|
+ ScheduledExecutorService scheduler = ThreadPoolTaskTool.createTaskScheduler(groupedByFrequency.keySet().size());
|
|
|
|
|
|
for (Integer groupKey:groupedByFrequency.keySet()){
|
|
|
String taskId = itemType.getString("key")+"_history"+"_"+groupKey;
|
|
|
- //TODO 任务时间间隔/分 = 采集频率(秒)/60
|
|
|
- Integer fc = groupKey;
|
|
|
- if(groupKey<60){
|
|
|
- fc = 60;
|
|
|
+ //TODO 任务时间间隔
|
|
|
+ if (groupKey==0||groupKey<0){
|
|
|
+ continue;
|
|
|
}
|
|
|
- Integer taskTime = fc/60;
|
|
|
- ThreadHistoryTask threadHistoryTask = new ThreadHistoryTask(taskId,taskTime
|
|
|
+ ThreadHistoryTask threadHistoryTask = new ThreadHistoryTask(taskId,groupKey
|
|
|
,itemType.getString("key"),groupedByFrequency.get(groupKey));
|
|
|
- ThreadPoolTaskTool.scheduleCronHistroyTask(scheduler,taskId,threadHistoryTask,"0 0 0 * * * ");
|
|
|
-// if(itemType.getString("key").equals("ELEC_CTRL_VALVE")) {
|
|
|
-// ThreadPoolTaskTool.scheduleCronHistroyTask(scheduler, taskId, threadHistoryTask, "0 01 12 * * ?");
|
|
|
-// }
|
|
|
+ ThreadPoolTaskTool.scheduleHistroyTask(scheduler,taskId,threadHistoryTask,getInitialDelay()
|
|
|
+ , 24 * 60 * 60);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -211,6 +207,25 @@ public class KprDangyangWaterBizFun {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private static long getInitialDelay() {
|
|
|
+ Calendar now = Calendar.getInstance();
|
|
|
+ Calendar nextRun = (Calendar) now.clone();
|
|
|
+
|
|
|
+ // 设置为明天的0点
|
|
|
+ nextRun.set(Calendar.HOUR_OF_DAY, 2);
|
|
|
+ nextRun.set(Calendar.MINUTE, 0);
|
|
|
+ nextRun.set(Calendar.SECOND, 0);
|
|
|
+ nextRun.set(Calendar.MILLISECOND, 0);
|
|
|
+
|
|
|
+ // 如果现在已经过了0点,设置为明天的0点
|
|
|
+ if (now.after(nextRun)) {
|
|
|
+ nextRun.add(Calendar.DAY_OF_MONTH, 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 计算从现在到下一个0点的延迟时间(以秒为单位)
|
|
|
+ return (nextRun.getTimeInMillis() - now.getTimeInMillis()) / 1000;
|
|
|
+ }
|
|
|
+
|
|
|
//TODO 获取实时数据
|
|
|
/**
|
|
|
* ①首先查询所有的设备列表
|
|
@@ -283,21 +298,17 @@ public class KprDangyangWaterBizFun {
|
|
|
return (frequency == null) ? 0 : (Integer) frequency;
|
|
|
}));
|
|
|
//TODO 创建任务池
|
|
|
- ThreadPoolTaskScheduler scheduler = ThreadPoolTaskTool.createTaskScheduler(groupedByFrequency.keySet().size(),
|
|
|
- "schedule_dangyang_"+itemType.getString("key"));
|
|
|
+ ScheduledExecutorService scheduler = ThreadPoolTaskTool.createTaskScheduler(groupedByFrequency.keySet().size());
|
|
|
for (Integer groupKey:groupedByFrequency.keySet()){
|
|
|
String taskId = itemType.getString("key")+"_"+groupKey;
|
|
|
- //TODO 任务时间间隔/分 = 采集频率(秒)/60
|
|
|
- Integer fc = groupKey;
|
|
|
- if(groupKey<60){
|
|
|
- fc = 60;
|
|
|
+ //TODO 任务时间间隔
|
|
|
+ if (groupKey==0||groupKey<0){
|
|
|
+ continue;
|
|
|
}
|
|
|
- Integer taskTime = fc/60;
|
|
|
-
|
|
|
- ThreadTask threadTask = new ThreadTask(taskId,taskTime
|
|
|
+ ThreadTask threadTask = new ThreadTask(taskId,groupKey
|
|
|
,itemType.getString("key"),groupedByFrequency.get(groupKey));
|
|
|
// if(itemType.getString("key").equals("ELEC_CTRL_VALVE")) {
|
|
|
- ThreadPoolTaskTool.scheduleCronTask(scheduler, taskId, threadTask, "0 */" + taskTime + " * * * ?");
|
|
|
+ ThreadPoolTaskTool.scheduleSecTask(scheduler, taskId, threadTask, groupKey);
|
|
|
// }
|
|
|
}
|
|
|
}else{
|