123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- package io.github.pnoker.gateway.comtool;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import io.github.pnoker.gateway.bizmgr.KprDangyangWaterBizFun;
- import io.github.pnoker.gateway.dbdao.DBMgrProxy;
- import io.github.pnoker.gateway.utils.InfulxDbUtil;
- 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.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 {
- 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);
- }
- }
|