ScheduleTaskMgr.java 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. package io.github.pnoker.gateway.comtool;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import io.github.pnoker.gateway.bizmgr.KprDangyangWaterBizFun;
  5. import io.github.pnoker.gateway.dbdao.DBMgrProxy;
  6. import io.github.pnoker.gateway.utils.InfulxDbUtil;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. import org.springframework.beans.factory.annotation.Value;
  10. import org.springframework.scheduling.annotation.EnableAsync;
  11. import org.springframework.scheduling.annotation.EnableScheduling;
  12. import org.springframework.scheduling.annotation.Scheduled;
  13. import org.springframework.stereotype.Component;
  14. import org.springframework.web.bind.annotation.PostMapping;
  15. import javax.annotation.PostConstruct;
  16. import javax.annotation.Resource;
  17. import java.sql.Time;
  18. import java.util.Timer;
  19. import java.util.TimerTask;
  20. import java.util.concurrent.Executors;
  21. import java.util.concurrent.ScheduledExecutorService;
  22. import java.util.concurrent.TimeUnit;
  23. /**
  24. * @ClassName ScheduleTaskMgr
  25. * @Description: TODO 定时任务
  26. * @Author LX
  27. * @Date 2024/2/20
  28. * @Version V1.0
  29. **/
  30. @Component
  31. @EnableScheduling // 1.开启定时任务
  32. @EnableAsync // 2.开启多线程
  33. public class ScheduleTaskMgr {
  34. private final String mBusinessType = "class";
  35. private String mStrClassName;
  36. public ScheduleTaskMgr() {
  37. mStrClassName = this.getClass().getSimpleName();
  38. }
  39. private static final Logger log = LoggerFactory.getLogger(ScheduleTaskMgr.class);
  40. @Resource
  41. private XuchangWaterConfig xuchangWaterConfig;
  42. /**
  43. * 许昌相关
  44. */
  45. // //TODO 启动时,判断当前是否超过两点 如果超过 ,查询昨日是否有数据插入, 如果没有,则在启动时执行一下xuchangWaterConfig.init()
  46. // @PostConstruct
  47. // public void postInit(){
  48. // new Timer().schedule(new TimerTask() {
  49. // @Override
  50. // public void run() {
  51. // DBMgrProxy.getInstance().init();
  52. // }
  53. // },3000);
  54. // new Timer().schedule(new TimerTask() {
  55. // @Override
  56. // public void run() {
  57. // xuchangWaterConfig.init();
  58. // }
  59. // },10000);
  60. // }
  61. //
  62. //
  63. // // @Scheduled(cron = "0 15 10 * * ?")
  64. // @Scheduled(cron = "0 10 12 * * ?")
  65. // public void checkXuchangMeter(){
  66. // xuchangWaterConfig.init();
  67. // }
  68. //TODO 当阳相关
  69. @Resource(name = "infulxDbUtil")
  70. private InfulxDbUtil infulxDbUtil;
  71. @Value("${dangyang.device.type:}")
  72. private String deviceTypeStr = ""; // 设备类型集合
  73. @Value("${dangyang.http.username:}")
  74. private String username = ""; // token调用账号
  75. @Value("${dangyang.http.password:}")
  76. private String password = ""; // token调用密码
  77. @Value("${dangyang.http.token:}")
  78. private String tokenUrl = ""; // token接口地址
  79. @Value("${dangyang.http.realtimeDataList:}")
  80. private String realtimeDataListUrl = ""; // 实时数据接口地址
  81. @Value("${dangyang.http.hisDataList:}")
  82. private String hisDataListUrl = ""; // 历史数据接口地址
  83. @Value("${dangyang.http.list:}")
  84. private String listUrl = ""; // 设备列表接口地址
  85. /**
  86. * 当阳相关
  87. */
  88. //TODO 启动后5秒初始化所有配置参数
  89. @PostConstruct
  90. public void initDangyangApplication(){
  91. new Timer().schedule(new TimerTask() {
  92. @Override
  93. public void run() {
  94. try {
  95. KprDangyangWaterBizFun.infulxDbUtil = infulxDbUtil;
  96. KprDangyangWaterBizFun.deviceType = JSONArray.parseArray(deviceTypeStr);
  97. KprDangyangWaterBizFun.username = username;
  98. KprDangyangWaterBizFun.password = password;
  99. KprDangyangWaterBizFun.tokenUrl = tokenUrl;
  100. KprDangyangWaterBizFun.realtimeDataListUrl = realtimeDataListUrl;
  101. KprDangyangWaterBizFun.hisDataListUrl = hisDataListUrl;
  102. KprDangyangWaterBizFun.listUrl = listUrl;
  103. }catch(Exception ex){
  104. log.error("当阳启动时初始化配置参数失败:"+ex.getLocalizedMessage());
  105. }
  106. }
  107. },5000);
  108. }
  109. //TODO 根据失效时间定时获取token
  110. //TODO 启动后8秒获取第一次token,在以失效时间为基础-5分钟为下一次获取token的条件
  111. private ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
  112. private static final long INITIAL_DELAY = 8; // 初始延迟8秒
  113. private static final long BUFFER_TIME = 5 * 60 * 1000; // 5分钟的缓冲时间(以毫秒为单位)
  114. @PostConstruct
  115. public void getToken() {
  116. scheduler.schedule(new TokenTask(), INITIAL_DELAY, TimeUnit.SECONDS);
  117. }
  118. private class TokenTask implements Runnable {
  119. @Override
  120. public void run() {
  121. // 获取 accessToken 和 expiresTime
  122. JSONObject data = KprDangyangWaterBizFun.getDangyangToken();
  123. if (data != null) {
  124. String accessToken = data.getString("accessToken");
  125. Long expiresTime = data.getLong("expiresTime");
  126. KprDangyangWaterBizFun.dangyangToken = accessToken;
  127. // 打印获取到的 token 和过期时间
  128. System.out.println("Access Token: " + accessToken);
  129. System.out.println("Expires Time: " + expiresTime);
  130. // 计算下一次获取 token 的延迟时间
  131. long delayMillis = expiresTime - System.currentTimeMillis() - BUFFER_TIME;
  132. long delaySeconds = delayMillis / 1000; // 转换为秒
  133. // 调度下一次任务
  134. if (delaySeconds > 0) {
  135. scheduler.schedule(this, delaySeconds, TimeUnit.SECONDS);
  136. } else {
  137. // 如果计算出来的延迟时间已经过期,立即执行下一次任务
  138. scheduler.schedule(this, 0, TimeUnit.SECONDS);
  139. }
  140. }
  141. }
  142. }
  143. //可以做动态关联,暂时不用了
  144. // @PostConstruct
  145. // public void initDeviceDefine(){
  146. // new Timer().schedule(new TimerTask() {
  147. // @Override
  148. // public void run() {
  149. // KprDangyangWaterBizFun.flushDefine();
  150. // }
  151. // },5000);
  152. // }
  153. // @PostConstruct
  154. // public void initReal(){
  155. // new Timer().schedule(new TimerTask() {
  156. // @Override
  157. // public void run() {
  158. // KprDangyangWaterBizFun.checkRealtimeData();
  159. // }
  160. // },10000);
  161. // }
  162. @PostConstruct
  163. public void initHistory(){
  164. new Timer().schedule(new TimerTask() {
  165. @Override
  166. public void run() {
  167. KprDangyangWaterBizFun.checkOneMonth();
  168. }
  169. },11000);
  170. }
  171. }