2021与蓝度共同重构项目,服务端
Van333
2022-12-15 5e94332935da62448c17f89a807acf46a5ae3e75
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/utils/NovaAPIUtil.java
@@ -1,5 +1,6 @@
package com.sandu.ximon.admin.newnova.utils;
import afu.org.checkerframework.checker.units.qual.A;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.sandu.common.execption.BusinessException;
@@ -24,6 +25,8 @@
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import static java.lang.Thread.sleep;
/**
 * @author LiuHaoNan
 * @date 2022/11/9
@@ -33,7 +36,15 @@
    private ProgramPathConfig filePathConfig;
    private Map<String, Boolean> loginSn = new HashMap();
    /*
    * 成功登录的
    * */
    public static Map<String, Boolean> loginSn = new HashMap();
    /*
    * 搜索出来的状态
    * */
    public static List<StatusVO> searchStatus = new ArrayList<>();
    private ViplexCore instance = null;
@@ -41,7 +52,7 @@
    private static String loginInfo = null;
    private NovaAPIUtil() {
    private NovaAPIUtil() throws InterruptedException {
        filePathConfig = SpringContextHolder.getBean(ProgramPathConfig.class);
        String rootDir = filePathConfig.getOutPutPath();
        instance = (ViplexCore) Native.loadLibrary(filePathConfig.getStringPath(), ViplexCore.class);
@@ -57,32 +68,59 @@
        System.out.println("ViplexCore Demo nvSearchTerminalAsync(搜索) begin... ");
        CountDownLatch countDownLatch1 = new CountDownLatch(1);
        instance.nvSearchTerminalAsync(new ViplexCore.CallBack() {
            @Override
            public void dataCallBack(int code, String data) {
        instance.nvSearchTerminalAsync((code, data) -> {
                searchVO.setStatusCode(code);
                searchVO.setStatusData(data);
                loginInfo = data;
            if (code == 0 ){
                Map map = (Map) JSONObject.parse(data);
                /*
                * 当前屏体状态,terminalState共有6个值,分别代表:
0:未连接任何终端,当前处于未连接状态
1:连接成功但是未登录状态
2:被他人登录状态
3:登录成功状态
4:密码错误状态
5:离线状态,处于搜索不到的状态,但是曾经被搜索到过
                * */
                if (map.get("terminalState").equals(0) || map.get("terminalState").equals(1)){
                    login((String) map.get("sn"),0);
                    searchVO.setSn((String) map.get("sn"));
                    searchStatus.add(searchVO);
                    System.out.println("\nViplexCore 搜索 sn:" + map.get("sn"));
                } else if (map.get("terminalState").equals(3) ) {
                    loginSn.put(searchVO.getSn(),true);
                }
                System.out.println("\nViplexCore 搜索 code:" + code);
                System.out.println("\nViplexCore 搜索 data:" + data);
                countDownLatch1.countDown();
            }
            else{
                System.out.println("搜索结果code:"+code);
            }
            countDownLatch1.countDown();
        });
        try {
            countDownLatch1.await(10000, TimeUnit.MILLISECONDS);
            countDownLatch1.await(30000, TimeUnit.MILLISECONDS);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
//        login("MZVA51930N2113017308");
        sleep(35000);
    }
    public static NovaAPIUtil getInstanceUtil() {
        if (instanceUtil == null) {
            synchronized (NovaAPIUtil.class) {
                if (instanceUtil == null) {
                    try {
                    instanceUtil = new NovaAPIUtil();
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
            }
        }
@@ -100,17 +138,16 @@
     */
    public StatusVO login(String sn, Integer loginType) {
        /*
        从loginSn 判断是否登录过
        * */
        if (loginSn.get(sn) != null && loginSn.get(sn) && loginType == 0) {
            return new StatusVO(0);
        }
        if (loginInfo == null) {
            return new StatusVO(10086);
        }
        if (!loginInfo.contains(String.format("\"sn\":\"%s\",", sn)) && loginType == 0) {
            //未搜索到屏幕  登录不成功
            System.out.println("loginType : " + loginType);
            return new StatusVO(10086);
        }
        /*
        * 没有则执行登录
        * */
        else  {
        StatusVO statusVO = new StatusVO();
@@ -118,31 +155,33 @@
        String loginParam = String.format("{\"sn\":\"%s\",\"username\":\"admin\",\"rememberPwd\":0,\"password\":\"123456\",\"loginType\":" + loginType + "}", sn);
        CountDownLatch countDownLatch2 = new CountDownLatch(1);
        instance.nvLoginAsync(loginParam, new ViplexCore.CallBack() {
            @Override
            public void dataCallBack(int code, String data) {
            instance.nvLoginAsync(loginParam, (code, data) -> {
                statusVO.setStatusCode(code);
                statusVO.setStatusData(data);
                System.out.println("\nViplexCore 登录 sn:" + sn);
                System.out.println("\nViplexCore 登录 code:" + code);
                System.out.println("\nViplexCore 登录 data:" + data);
                countDownLatch2.countDown();
                if (code == 65353) {
                    statusVO.setStatusCode(0);
            }
                countDownLatch2.countDown();
        });
        try {
            countDownLatch2.await();
                countDownLatch2.await(5000,TimeUnit.MILLISECONDS);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        if (statusVO.getStatusCode() != 0) {
            System.out.println("ViplexCore " + sn + " nvLoginAsync(登录) 失败!");
            System.out.println("错误码:" + statusVO.getStatusCode());
                loginSn.put(sn,false);
        } else {
            //登陆成功之后存入map保存登录信息
            loginSn.put(sn, true);
        }
        return statusVO;
        }
    }
    /**
@@ -776,14 +815,13 @@
     * 重启
     */
    public List<NewNovaStatusParam.NovaDTO> reboot(NewNovaStatusParam param) {
        System.out.println("ViplexCore Demo nvSetReBootTaskAsync(重启) begin... ");
        if (param.getNovaList() == null || param.getNovaList().size() == 0) {
            throw new BusinessException("重启设备不能为空 !");
        }
        CountDownLatch countDownLatch = new CountDownLatch(1);
        param.getNovaList().forEach(newNova -> {
                    logout(newNova.getSn(), 0);
//                    logout(newNova.getSn(), 0);
                    StatusVO login = login(newNova.getSn(), 1);
                    if (login.getStatusCode() != 0) {
                        countDownLatch.countDown();