zhubaomin
2025-04-08 95d8d3df562c8f7fca74ba994cddbbf41564488e
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu3rd/src/main/java/com/dy/rtuMw3rd/http4Xjnk/Worker.java
New file
@@ -0,0 +1,218 @@
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);
                                    }
                                }
                            }
                        });
            }
        }
    }
}