package com.dy.rtuMw3rd.http4Xjnk;
|
|
|
import java.util.*;
|
|
import com.alibaba.fastjson2.JSON;
|
import com.dy.rtuMw3rd.http4Xjnk.deal.XjnkDealer;
|
import com.dy.rtuMw3rd.http4Xjnk.protocol.XjnkResVo;
|
import com.dy.rtuMw3rd.http4Xjnk.protocol.controller.ControllerVo;
|
import com.dy.rtuMw3rd.http4Xjnk.protocol.mainController.MainControllerVo;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
import com.dy.rtuMw3rd.http4Xjnk.protocol.XjnkProtocol;
|
import com.dy.rtuMw3rd.http4Xjnk.protocol.accessToken.Res4AccessTokenVo;
|
|
/**
|
* @Author: liurunyu
|
* @Date: 2025/3/19 15:53
|
* @Description
|
*/
|
@Slf4j
|
@Component()
|
public class Worker extends TimerTask {
|
|
private HttpsRq httpsRq ;
|
private XjnkDealer dealer ;
|
|
public String httpsBaseUr ;
|
public String appid ;
|
public String secret ;
|
private Long workInterval ;//循环任务间隔
|
|
private Timer timer;
|
|
private boolean stop;
|
|
private boolean first = true ;
|
private boolean isAccessTokenGot = false ;
|
private List<MainControllerVo> mainControllerVos ;
|
private List<ControllerVo> controllerVos ;
|
|
@Autowired
|
public void setHttpsRq(HttpsRq httpsRq){
|
this.httpsRq = httpsRq ;
|
}
|
@Autowired
|
private void setDealer(XjnkDealer dealer){
|
this.dealer = dealer;
|
}
|
public void setHttpsBaseUr(String httpsBaseUr){
|
this.httpsBaseUr = httpsBaseUr ;
|
}
|
public void setAppid(String appid){
|
this.appid = appid ;
|
}
|
public void setSecret(String secret){
|
this.secret = secret ;
|
}
|
public void setWorkInterval(Long workInterval){
|
this.workInterval = workInterval ;
|
}
|
|
public void stop(){
|
this.stop = true ;
|
if(this.timer != null){
|
this.timer.cancel();
|
}
|
}
|
|
public boolean isStop(){
|
return this.stop ;
|
}
|
|
public void start(){
|
this.timer = new Timer();
|
this.stop = false ;
|
new Thread(() -> {
|
while(true){
|
try {
|
getAccessToken() ;
|
}catch (Exception e){
|
log.error("新疆农垦--获得AccessToken异常" + (e.getMessage() == null ? "" : (":" + e.getMessage())), e);
|
}
|
try{
|
Thread.sleep(10000);
|
}catch (Exception e){
|
}
|
if(isAccessTokenGot){
|
timer.schedule(this, 0, this.workInterval);
|
break ;
|
}
|
}
|
}).start();
|
}
|
|
@Override
|
public void run() {
|
if(first){
|
first = false ;
|
}else{
|
try{
|
getAccessToken() ;
|
}catch(Exception e){
|
log.error("新疆农垦--获得AccessToken异常" + (e.getMessage() == null ? "" : (":" + e.getMessage())), e);
|
}
|
}
|
if(isAccessTokenGot) {
|
try {
|
getMainControllers();
|
} catch (Exception e) {
|
log.error("新疆农垦--获得主控制器异常" + (e.getMessage() == null ? "" : (":" + e.getMessage())), e);
|
}
|
try {
|
getControllers();
|
} catch (Exception e) {
|
log.error("新疆农垦--获得控制器异常" + (e.getMessage() == null ? "" : (":" + e.getMessage())), e);
|
}
|
}
|
}
|
|
public void getAccessToken() throws Exception{
|
this.httpsRq.get4JsonBySync(this.httpsBaseUr + "/thirdapi/token?appid=" + this.appid + "&secret=" + this.secret,
|
null,
|
(statusCode, charset, body) -> {
|
// 打印响应状态码
|
//System.out.println("Status Code: " + statusCode);
|
// 打印响应内容编码类型
|
//System.out.println("Response encoding: " + charset);
|
// 打印响应体内容
|
//System.out.println("Response Body: " + body);
|
if(statusCode != null && statusCode.equals(XjnkProtocol.SuccessCode)){
|
Res4AccessTokenVo vo = JSON.parseObject(body, Res4AccessTokenVo.class);
|
if(vo != null && vo.errcode != null && vo.errcode.length() > 0){
|
log.error("新疆农垦--获取AccessToken失败,errcode:" + vo.errcode + ",errmsg:" + vo.errmsg);
|
}else{
|
isAccessTokenGot = true ;
|
XjnkProtocol.AccessToken = vo.accessToken ;
|
XjnkProtocol.AccessTokenExpires = vo.expires ;
|
log.info("新疆农垦--获取AccessToken成功,accessToken:" + vo.accessToken + ",expires:" + vo.expires);
|
}
|
}
|
});
|
}
|
|
/**
|
* 获取主控制器
|
* @throws Exception
|
*/
|
public void getMainControllers() throws Exception{
|
this.httpsRq.get4JsonBySync(this.httpsBaseUr + "/thirdapi/pridevice/all?access_token=" + XjnkProtocol.AccessToken,
|
null,
|
(statusCode, charset, body) -> {
|
if(statusCode != null && statusCode.equals(XjnkProtocol.SuccessCode)){
|
try{
|
//首先认为返回的是错误信息,进行尝试
|
XjnkResVo vo = JSON.parseObject(body, XjnkResVo.class);
|
if(vo != null && vo.errcode != null && vo.errcode.length() > 0){
|
log.error("新疆农垦--获取主控制器失败,errcode:" + vo.errcode + ",errmsg:" + vo.errmsg);
|
}
|
}catch (Exception e){
|
//如果不是错误信息,那就是正确信息
|
try{
|
mainControllerVos = JSON.parseArray(body, MainControllerVo.class);
|
log.info("新疆农垦--获取主控制器成功:");
|
if(mainControllerVos != null && mainControllerVos.size() > 0){
|
this.dealer.dealMainController(mainControllerVos);
|
for(MainControllerVo cvo : mainControllerVos){
|
log.info("主控制器:" + cvo);
|
}
|
}
|
}catch (Exception ee){
|
log.error("新疆农垦--获取主控制器异常" + (ee.getMessage() == null ? "" : (":" + ee.getMessage())), ee);
|
}
|
}
|
}
|
});
|
}
|
/**
|
* 获取控制器
|
* @throws Exception
|
*/
|
public void getControllers() throws Exception{
|
if(this.mainControllerVos != null && this.mainControllerVos.size() > 0){
|
for(MainControllerVo mcvo : this.mainControllerVos){
|
Map<String, String> params = new HashMap<>() ;
|
params.put("pdId", "" + mcvo.id) ;
|
this.httpsRq.post4JsonBySync(this.httpsBaseUr + "/thirdapi/control_device/query?access_token=" + XjnkProtocol.AccessToken,
|
params,
|
(statusCode, charset, body) -> {
|
if(statusCode != null && statusCode.equals(XjnkProtocol.SuccessCode)){
|
try{
|
//首先认为返回的是错误信息,进行尝试
|
XjnkResVo vo = JSON.parseObject(body, XjnkResVo.class);
|
if(vo != null && vo.errcode != null && vo.errcode.length() > 0){
|
log.error("新疆农垦--获取控制器失败,errcode:" + vo.errcode + ",errmsg:" + vo.errmsg);
|
}
|
}catch (Exception e){
|
//如果不是错误信息,那就是正确信息
|
try{
|
controllerVos = JSON.parseArray(body, ControllerVo.class);
|
log.info("新疆农垦--获取控制器成功:");
|
if(controllerVos != null && controllerVos.size() > 0){
|
this.dealer.dealController(controllerVos);
|
for(ControllerVo cvo : controllerVos){
|
log.info("控制器:" + cvo);
|
}
|
}
|
}catch (Exception ee){
|
log.error("新疆农垦--获取控制器异常" + (ee.getMessage() == null ? "" : (":" + ee.getMessage())), ee);
|
}
|
}
|
}
|
});
|
}
|
}
|
}
|
}
|