123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540 |
- package io.github.pnoker.gateway.comtool;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import io.github.pnoker.gateway.bizmgr.*;
- import io.github.pnoker.gateway.dbdao.DBMgrProxy;
- import io.github.pnoker.gateway.utils.InfulxDbUtil;
- import io.github.pnoker.gateway.utils.InfulxJiangjinDbUtil;
- import io.github.pnoker.gateway.utils.InfulxTyDbUtil;
- import io.github.pnoker.gateway.utils.InfulxZilaishuiDbUtil;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.scheduling.annotation.EnableAsync;
- import org.springframework.scheduling.annotation.EnableScheduling;
- import org.springframework.scheduling.annotation.Scheduled;
- import org.springframework.stereotype.Component;
- import org.springframework.web.bind.annotation.PostMapping;
- import javax.annotation.PostConstruct;
- import javax.annotation.Resource;
- import java.sql.Time;
- import java.time.LocalDate;
- import java.time.LocalDateTime;
- import java.time.LocalTime;
- import java.time.format.DateTimeFormatter;
- import java.time.temporal.TemporalAdjusters;
- import java.util.Timer;
- import java.util.TimerTask;
- import java.util.concurrent.Executors;
- import java.util.concurrent.ScheduledExecutorService;
- import java.util.concurrent.TimeUnit;
- /**
- * @ClassName ScheduleTaskMgr
- * @Description: TODO 定时任务
- * @Author LX
- * @Date 2024/2/20
- * @Version V1.0
- **/
- @Component
- @EnableScheduling // 1.开启定时任务
- @EnableAsync // 2.开启多线程
- public class ScheduleTaskMgr {
- private final String mBusinessType = "class";
- private String mStrClassName;
- public ScheduleTaskMgr() {
- mStrClassName = this.getClass().getSimpleName();
- }
- private static final Logger log = LoggerFactory.getLogger(ScheduleTaskMgr.class);
- @Resource
- private XuchangWaterConfig xuchangWaterConfig;
- /**
- * 许昌相关
- */
- // //TODO 启动时,判断当前是否超过两点 如果超过 ,查询昨日是否有数据插入, 如果没有,则在启动时执行一下xuchangWaterConfig.init()
- // @PostConstruct
- // public void postInit(){
- // new Timer().schedule(new TimerTask() {
- // @Override
- // public void run() {
- // DBMgrProxy.getInstance().init();
- // }
- // },3000);
- // new Timer().schedule(new TimerTask() {
- // @Override
- // public void run() {
- // xuchangWaterConfig.init();
- // }
- // },10000);
- // }
- //
- //
- // // @Scheduled(cron = "0 15 10 * * ?")
- // @Scheduled(cron = "0 10 12 * * ?")
- // public void checkXuchangMeter(){
- // xuchangWaterConfig.init();
- // }
- //TODO 当阳相关
- @Resource(name = "infulxDbUtil")
- private InfulxDbUtil infulxDbUtil;
- @Value("${dangyang.device.type:}")
- private String deviceTypeStr = ""; // 设备类型集合
- @Value("${dangyang.http.username:}")
- private String username = ""; // token调用账号
- @Value("${dangyang.http.password:}")
- private String password = ""; // token调用密码
- @Value("${dangyang.http.token:}")
- private String tokenUrl = ""; // token接口地址
- @Value("${dangyang.http.realtimeDataList:}")
- private String realtimeDataListUrl = ""; // 实时数据接口地址
- @Value("${dangyang.http.hisDataList:}")
- private String hisDataListUrl = ""; // 历史数据接口地址
- @Value("${dangyang.http.list:}")
- private String listUrl = ""; // 设备列表接口地址
- /**
- * 当阳相关
- */
- // //TODO 启动后5秒初始化所有配置参数
- // @PostConstruct
- // public void initDangyangApplication(){
- // new Timer().schedule(new TimerTask() {
- // @Override
- // public void run() {
- // try {
- // infulxDbUtil.initInfluxDataBase();
- // KprDangyangWaterBizFun.infulxDbUtil = infulxDbUtil;
- // KprDangyangWaterBizFun.deviceType = JSONArray.parseArray(deviceTypeStr);
- // KprDangyangWaterBizFun.username = username;
- // KprDangyangWaterBizFun.password = password;
- // KprDangyangWaterBizFun.tokenUrl = tokenUrl;
- // KprDangyangWaterBizFun.realtimeDataListUrl = realtimeDataListUrl;
- // KprDangyangWaterBizFun.hisDataListUrl = hisDataListUrl;
- // KprDangyangWaterBizFun.listUrl = listUrl;
- // }catch(Exception ex){
- // log.error("当阳启动时初始化配置参数失败:"+ex.getLocalizedMessage());
- // }
- // }
- // },5000);
- // }
- //
- // //TODO 根据失效时间定时获取token
- // //TODO 启动后8秒获取第一次token,在以失效时间为基础-5分钟为下一次获取token的条件
- // private ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
- // private static final long INITIAL_DELAY = 8; // 初始延迟8秒
- // private static final long BUFFER_TIME = 5 * 60 * 1000; // 5分钟的缓冲时间(以毫秒为单位)
- //
- // @PostConstruct
- // public void getToken() {
- // scheduler.schedule(new TokenTask(), INITIAL_DELAY, TimeUnit.SECONDS);
- // }
- //
- // private class TokenTask implements Runnable {
- // @Override
- // public void run() {
- // // 获取 accessToken 和 expiresTime
- // JSONObject data = KprDangyangWaterBizFun.getDangyangToken();
- // if (data != null) {
- // String accessToken = data.getString("accessToken");
- // Long expiresTime = data.getLong("expiresTime");
- //
- // KprDangyangWaterBizFun.dangyangToken = accessToken;
- //
- // // 打印获取到的 token 和过期时间
- // System.out.println("Access Token: " + accessToken);
- // System.out.println("Expires Time: " + expiresTime);
- //
- // // 计算下一次获取 token 的延迟时间
- // long delayMillis = expiresTime - System.currentTimeMillis() - BUFFER_TIME;
- // long delaySeconds = delayMillis / 1000; // 转换为秒
- //
- // // 调度下一次任务
- // if (delaySeconds > 0) {
- // scheduler.schedule(this, delaySeconds, TimeUnit.SECONDS);
- // } else {
- // // 如果计算出来的延迟时间已经过期,立即执行下一次任务
- // scheduler.schedule(this, 0, TimeUnit.SECONDS);
- // }
- // }
- // }
- // }
- //
- // //可以做动态关联,暂时不用了
- //// @PostConstruct
- //// public void initDeviceDefine(){
- //// new Timer().schedule(new TimerTask() {
- //// @Override
- //// public void run() {
- //// KprDangyangWaterBizFun.flushDefine();
- //// }
- //// },5000);
- //// }
- //
- // @PostConstruct
- // public void initReal(){
- // new Timer().schedule(new TimerTask() {
- // @Override
- // public void run() {
- // KprDangyangWaterBizFun.checkRealtimeData();
- // }
- // },10000);
- // }
- // @PostConstruct
- // public void initHistory(){
- // new Timer().schedule(new TimerTask() {
- // @Override
- // public void run() {
- // KprDangyangWaterBizFun.checkOneMonth();
- // }
- // },11000);
- // }
- // @PostConstruct
- // public void initDingzhiHistory(){
- // new Timer().schedule(new TimerTask() {
- // @Override
- // public void run() {
- // KprDangyangWaterBizFun.checkDingzhiHistory();
- // }
- // },12000);
- // }
- //
- // @Scheduled(cron = "0 */10 * * * ?")
- // public void initToken(){
- // JSONObject data = KprDangyangWaterBizFun.getDangyangToken();
- // if (data != null) {
- // String accessToken = data.getString("accessToken");
- // Long expiresTime = data.getLong("expiresTime");
- //
- // KprDangyangWaterBizFun.dangyangToken = accessToken;
- // }
- // }
- //TODO 江津相关
- /*@Resource(name = "infulxJiangjinDbUtil")
- private InfulxJiangjinDbUtil infulxJiangjinDbUtil;
- //TODO 启动后5秒初始化所有配置参数
- @PostConstruct
- public void initJiangjinApplication(){
- new Timer().schedule(new TimerTask() {
- @Override
- public void run() {
- try {
- infulxJiangjinDbUtil.initInfluxDataBase();
- KprJiangjinWaterBizfun.infulxJiangjinDbUtil = infulxJiangjinDbUtil;
- }catch(Exception ex){
- log.error("江津启动时初始化配置参数失败:"+ex.getLocalizedMessage());
- }
- }
- },5000);
- }
- @PostConstruct
- public void initJiangjinHisData(){
- new Timer().schedule(new TimerTask() {
- @Override
- public void run() {
- try {
- KprJiangjinWaterBizfun.InitRealDb();
- // KprJiangjinWaterBizfun.InitDeviceFrequency();
- }catch(Exception ex){
- }
- }
- },7000,60000);
- //TODO 启动时同步当前月一号到当前时间的所有历史数据
- new Timer().schedule(new TimerTask() {
- @Override
- public void run() {
- try {
- KprJiangjinWaterBizfun.initHistoryDb(LocalDate.now().withDayOfMonth(1).atStartOfDay());
- // KprJiangjinWaterBizfun.initHistoryDb(LocalDateTime.now().withDayOfMonth(10).withHour(12)
- // .withMinute(0).withSecond(0));
- }catch(Exception ex){
- }
- }
- },8000);
- }
- //TODO 每分钟的第五秒执行
- @Scheduled(cron = "5 * * * * ?")
- public void executeTask() {
- KprJiangjinWaterBizfun.InitRealDb();
- }
- //TODO 每天凌晨1点执行前一天的
- @Scheduled(cron = "0 0 1 * * ?")
- public void executeHistoryTask() {
- //TODO 执行前一天的数据到当前
- KprJiangjinWaterBizfun.initHistoryDb(LocalDate.now().minusDays(1).atStartOfDay());
- }
- //TODO 江津水量预测相关
- //每天每个整点的5分
- @Scheduled(cron = "0 5 * * * *")
- public void executeRecord() {
- String formattedDateTime = LocalDate.now().minusDays(1)
- .atStartOfDay()
- .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
- KprJiangjinAimWaterBizFun.initTapWaterData(formattedDateTime);
- }
- //每天每个整点的5分
- @Scheduled(cron = "0 10 * * * *")
- public void executeRecordAll() {
- String formattedDateTime = LocalDate.now().minusDays(1)
- .atStartOfDay()
- .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
- KprJiangjinAimWaterBizFun.initWaterCollecationReacordAll(formattedDateTime);
- }
- //TODO 每天每小时的21分执行预测当前月日小时数据
- @Scheduled(cron = "0 21 * * * *")
- public void executeTbMHourWaterNow() {
- String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM"));
- // KprJiangjinAimWaterBizFun.insertYuceHourAddData(time);
- KprJiangjinAimWaterBizFun.insertYuceHourDataScheduled(time);
- }
- //TODO 启动时执行一次
- @PostConstruct
- public void initExecuteRecordAndAll(){
- String formattedDateTime = LocalDate.now().minusDays(1)
- .atStartOfDay()
- .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
- Timer timer = new Timer();
- // 创建定时器任务
- TimerTask timerTask = new TimerTask() {
- @Override
- public void run() {
- KprJiangjinAimWaterBizFun.initTapWaterData(formattedDateTime);
- }
- };
- timer.schedule(timerTask, 10000); // 10秒后执行一次
- Timer timer1 = new Timer();
- // 创建定时器任务
- TimerTask timerTask1 = new TimerTask() {
- @Override
- public void run() {
- KprJiangjinAimWaterBizFun.initWaterCollecationReacordAll(formattedDateTime);
- }
- };
- timer1.schedule(timerTask1, 10000); // 10秒后执行一次
- }
- @PostConstruct
- public void initOneTapWater(){
- Timer timer = new Timer();
- // 创建定时器任务
- TimerTask timerTask = new TimerTask() {
- @Override
- public void run() {
- KprJiangjinAimWaterBizFun.initTapWaterData("2023-11-01 00:00:00");
- }
- };
- timer.schedule(timerTask, 10000); // 10秒后执行一次
- }
- @PostConstruct
- public void initWaterRecordAll(){
- Timer timer = new Timer();
- TimerTask timerTask1 = new TimerTask() {
- @Override
- public void run() {
- KprJiangjinAimWaterBizFun.initWaterCollecationReacordAll("2023-11-01 00:00:00");
- }
- };
- timer.schedule(timerTask1,11000);//11秒后执行一次
- }
- @PostConstruct
- public void initWaterHour(){
- Timer timer = new Timer();
- TimerTask timerTask1 = new TimerTask() {
- @Override
- public void run() {
- String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM"));
- KprJiangjinAimWaterBizFun.insertYuceHourDataScheduled(time);
- }
- };
- timer.schedule(timerTask1,9000);//9秒后执行一次
- }*/
- /**
- * TODO 自来水相关
- */
- /*@Resource(name = "infulxZilaishuiDbUtil")
- private InfulxZilaishuiDbUtil infulxZilaishuiDbUtil;
- //TODO 启动后5秒初始化所有配置参数
- @PostConstruct
- public void initZilaishuiApplication(){
- new Timer().schedule(new TimerTask() {
- @Override
- public void run() {
- try {
- infulxZilaishuiDbUtil.initInfluxDataBase();
- KprZilaishuiWaterBizFun.infulxZilaishuiDbUtil= infulxZilaishuiDbUtil;
- }catch(Exception ex){
- log.error("自来水启动时初始化配置参数失败:"+ex.getLocalizedMessage());
- }
- }
- },5000);
- }
- @PostConstruct
- public void initZilaishuiHisData(){
- //TODO 启动时同步当前月一号到当前时间的所有历史数据
- new Timer().schedule(new TimerTask() {
- @Override
- public void run() {
- try {
- KprZilaishuiWaterBizFun.initHistoryDb(LocalDate.now().withDayOfMonth(1).atStartOfDay());
- }catch(Exception ex){
- }
- }
- },7000);
- new Timer().schedule(new TimerTask() {
- @Override
- public void run() {
- try {
- }catch(Exception ex){
- }
- }
- },8000);
- }
- //TODO 每小时的第 0, 5, 10, 15, ..., 55 分钟执行一次
- @Scheduled(cron = "0 0/5 * * * ?")
- public void executeZilaishuiTask() {
- KprZilaishuiWaterBizFun.initHistoryDb(LocalDateTime.now()
- .withMinute(0)
- .withSecond(0)
- .withNano(0));
- }
- //TODO 每天凌晨1点执行前一天的
- @Scheduled(cron = "0 0 1 * * ?")
- public void executeZilaishuiHistoryTask() {
- //TODO 执行前一天的数据到当前
- KprZilaishuiWaterBizFun.initHistoryDb(LocalDate.now()
- .minusDays(1)
- .atStartOfDay());
- }
- //TODO 市自来水水位预测相关
- @PostConstruct
- public void initWaterCollecationReacordAll(){
- new Timer().schedule(new TimerTask() {
- @Override
- public void run() {
- LocalDateTime firstDayOfLastMonth = LocalDateTime.now()
- .minusMonths(1)
- .with(TemporalAdjusters.firstDayOfMonth())
- .withHour(0)
- .withMinute(0)
- .withSecond(0)
- .withNano(0);//上个月0点
- String formattedDate = firstDayOfLastMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
- KprZilaishuiLevelBizFun.initWaterLevelReacordAll(formattedDate);
- }
- },5000);
- }
- //TODO 每小时的10分执行原始小时液位数据计算
- @Scheduled(cron = "0 10 * * * *")
- public void initHourWaterCollecationReacordAll(){
- new Timer().schedule(new TimerTask() {
- @Override
- public void run() {
- String formattedDate = LocalDate.now().atStartOfDay().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
- KprZilaishuiLevelBizFun.initWaterLevelReacordAll(formattedDate);
- }
- },5000);
- }
- //TODO 每小时的10分执行原始小时液位数据计算
- @Scheduled(cron = "0 * * * * ?")
- public void initYuceLevel(){
- new Timer().schedule(new TimerTask() {
- @Override
- public void run() {
- KprZilaishuiLevelBizFun.insertDailyData();
- KprZilaishuiLevelBizFun.insertForecastData();
- }
- },5000);
- }
- //TODO 市自来水泵数据采集
- @PostConstruct
- public void initPumpRecordAll(){
- new Timer().schedule(new TimerTask() {
- @Override
- public void run() {
- //当前时间到去年对应月份1号0点开始
- LocalDateTime firstDayOfLastMonth = LocalDateTime.now()
- .minusYears(1)
- .with(TemporalAdjusters.firstDayOfMonth())
- .withHour(0)
- .withMinute(0)
- .withSecond(0)
- .withNano(0);//上个月0点
- String formattedDate = firstDayOfLastMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
- KprZilaishuiPumpBizFun.initWaterPumpReacordAll(formattedDate);
- }
- },5000);
- }
- //TODO 每小时的10分执行原始小时泵数据计算
- @Scheduled(cron = "0 10 * * * *")
- public void checkPumpRecordAll(){
- new Timer().schedule(new TimerTask() {
- @Override
- public void run() {
- //当前时间到今天的0点开始
- LocalDateTime firstDayOfLastMonth = LocalDate.now().atStartOfDay();//上个月0点
- String formattedDate = firstDayOfLastMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
- KprZilaishuiPumpBizFun.initWaterPumpReacordAll(formattedDate);
- }
- },5000);
- }*/
- /**
- * TODO 汤阴业务相关
- */
- @Resource(name = "infulxTyDbUtil")
- private InfulxTyDbUtil infulxTyDbUtil;
- //TODO 启动后5秒初始化所有配置参数
- @PostConstruct
- public void initTangyinApplication(){
- new Timer().schedule(new TimerTask() {
- @Override
- public void run() {
- try {
- infulxTyDbUtil.initInfluxDataBase();
- KprTangyinWaterBizFun.infulxTyDbUtil = infulxTyDbUtil;
- }catch(Exception ex){
- log.error("汤阴启动时初始化配置参数失败:"+ex.getLocalizedMessage());
- }
- }
- },5000);
- }
- @PostConstruct
- public void oneYearInit(){
- new Timer().schedule(new TimerTask() {
- @Override
- public void run() {
- KprTangyinWaterBizFun.selectOneYear();
- }
- },7000);
- }
- }
|