2021与蓝度共同重构项目,服务端
liuhaonan
2022-11-14 5cfaa9b36929545906d57c48c0f07a7c6f23d157
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/utils/NovaAPIUtil.java
@@ -1,163 +1,808 @@
package com.sandu.ximon.admin.newnova.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.util.SpringContextHolder;
import com.sandu.ximon.admin.newnova.conf.FilePathConfig;
import com.sandu.ximon.admin.newnova.vo.StatusVO;
import com.sandu.ximon.admin.utils.CountDownLatchUtil;
import com.sandu.ximon.admin.newnova.param.NewNovaStatusParam;
import com.sandu.ximon.admin.newnova.param.ProgramPrarm;
import com.sandu.ximon.admin.newnova.vo.*;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.dao.bo.NewNovaInfoBo;
import com.sandu.ximon.dao.domain.NewNovaLed;
import com.sun.jna.Native;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
/**
 * @author LiuHaoNan
 * @date 2022/11/9
 */
@Component
@AllArgsConstructor
public class NovaAPIUtil {
//    @Value("${new-nova.string-path}")
//    public String getStringPath() {
//        return stringPath;
//    }
    private FilePathConfig filePathConfig;
    private final FilePathConfig filePathConfig;
    private final CountDownLatchUtil countDownLatchUtil;
    private static Boolean g_bAPIReturn = false;
    private static int g_code = 0;
    private static String g_sn = "BZSA79353N1310006847"; //BZSA07313J0350000997
    private Map<String, Boolean> loginSn = new HashMap();
    private static Map loginInfo = new LinkedHashMap();
    private ViplexCore instance = null;
    private static NovaAPIUtil instanceUtil = null;
    private static String loginInfo = null;
    private NovaAPIUtil() {
        filePathConfig = SpringContextHolder.getBean(FilePathConfig.class);
        String rootDir = filePathConfig.getOutPutPath();
        instance = (ViplexCore) Native.loadLibrary(filePathConfig.getStringPath(), ViplexCore.class);
        System.setProperty("jna.encoding", "UTF-8");
        System.out.println("保存路径:" + rootDir);
        rootDir = rootDir.replaceAll("\\\\", "/");
        String companyInfo = "{\"company\":\"NovaStar\",\"phone\":\"029-68216000\",\"email\":\"hr@novastar.tech\"}";
        instance.nvSetDevLang("Java");
        System.out.println("nvInit(sdk 初始化):");
        System.out.println(instance.nvInit(rootDir, companyInfo));
//    private static ViplexCore.CallBack callBack = new ViplexCore.CallBack() {
//
//        @Override
//        public void dataCallBack(int code, String data) {
//            // TODO Auto-generated method stub
//            g_code = code;
//            String strCode = "\nViplexCore Demo code:" + code;
//            String strData = "\nViplexCore Demo data:" + data;
//            System.out.println(strCode);
//            System.out.println(strData);
//            g_bAPIReturn = true;
//        }
//
//    };
    static void waitAPIReturn() throws InterruptedException {
        while (!g_bAPIReturn) {
            Thread.sleep(1000);
        }
        g_bAPIReturn = false;
//        login("MZVA51930N2113017308");//todo 手动登录还是自动登录
    }
    public static NovaAPIUtil getInstanceUtil() {
        if (instanceUtil == null) {
            synchronized (NovaAPIUtil.class) {
                if (instanceUtil == null) {
                    instanceUtil = new NovaAPIUtil();
                }
            }
        }
        return instanceUtil;
    }
    /**
     * 登录
     */
    public StatusVO login(String sn) {
        ViplexCore instance = (ViplexCore) Native.loadLibrary(filePathConfig.getStringPath(), ViplexCore.class);
        String rootDir = System.getProperty("user.dir") + "/temp";
        String companyInfo = "{\"company\":\"NovaStar\",\"phone\":\"029-68216000\",\"email\":\"hr@novastar.tech\"}";
        instance.nvSetDevLang("Java");
        System.out.println("nvInit(sdk 初始化):");
        System.out.println(instance.nvInit(rootDir, companyInfo));
        ViplexCore.CallBack callBack = new ViplexCore.CallBack() {
        StatusVO searchVO = new StatusVO();
        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) {
                // TODO Auto-generated method stub
                g_code = code;
                String strCode = "\nViplexCore Demo code:" + code;
                String strData = "\nViplexCore Demo data:" + data;
                System.out.println(strCode);
                System.out.println(strData);
                g_bAPIReturn = true;
                searchVO.setStatusCode(code);
                searchVO.setStatusData(data);
                loginInfo = data;
                System.out.println("\nViplexCore 搜索 code:" + code);
                System.out.println("\nViplexCore 搜索 data:" + data);
                countDownLatch1.countDown();
            }
        };
        System.out.println("ViplexCore Demo nvSearchTerminalAsync(搜索) begin... ");
        StatusVO statusVO = new StatusVO();
        instance.nvSearchTerminalAsync(callBack);
//        countDownLatchUtil.push();
//        instance.nvSearchTerminalAsync(new ViplexCore.CallBack() {
//
//            @Override
//            public void dataCallBack(int code, String data) {
//                // TODO Auto-generated method stub
//                g_code = code;
//                statusVO.setStatusCode(code);
//                statusVO.setStatusData(data);
//                System.out.println("\nViplexCore Demo code:" + code);
//                System.out.println("\nViplexCore Demo data:" + data);
//                g_bAPIReturn = true;
//            }
//
//        });
        });
        try {
            Thread.sleep(3000);
            countDownLatch1.await();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        g_bAPIReturn = false;
        if (loginSn.get(sn) != null && loginSn.get(sn)) {
            return new StatusVO(0);
        }
        if (!loginInfo.contains(String.format("\"sn\":\"%s\",", sn))) {
            //未搜索到屏幕  登录不成功
            return new StatusVO(10086);
        }
        StatusVO statusVO = new StatusVO();
        System.out.println("ViplexCore Demo nvLoginAsync(登录) begin... ");
        String loginParam = String.format("{\"sn\":\"" + sn + "\",\"ip\":\"\",\"username\":\"admin\",\"rememberPwd\":0,\"password\":\"1234567890\",\"loginType\":0}"
                , g_sn);
        String loginParam = String.format("{\"sn\":\"%s\",\"username\":\"admin\",\"rememberPwd\":0,\"password\":\"123456\",\"loginType\":0}", sn);
        CountDownLatch countDownLatch2 = new CountDownLatch(1);
        instance.nvLoginAsync(loginParam, new ViplexCore.CallBack() {
            @Override
            public void dataCallBack(int code, String data) {
                // TODO Auto-generated method stub
                g_code = code;
                statusVO.setStatusCode(code);
                statusVO.setStatusData(data);
                System.out.println("\nViplexCore Demo code:" + code);
                System.out.println("\nViplexCore Demo data:" + data);
                g_bAPIReturn = true;
                countDownLatch2.countDown();
            }
        });
        try {
            waitAPIReturn();
            countDownLatch2.await();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        if (g_code != 0) {
            System.out.println("ViplexCore Demo nvLoginAsync(登录) 失败!");
            System.out.println("错误码:" + g_code);
            return statusVO;
        if (statusVO.getStatusCode() != 0) {
            System.out.println("ViplexCore " + sn + " nvLoginAsync(登录) 失败!");
            System.out.println("错误码:" + statusVO.getStatusCode());
        } else {
            //登陆成功之后存入map保存登录信息
            loginSn.put(sn, true);
        }
        //登陆成功之后存入map保存登录信息
        loginInfo.put(sn, instance);
        return statusVO;
    }
    /**
     * 创建节目
     */
    public int createPro(String sn) throws InterruptedException {
        ViplexCore instance = (ViplexCore) loginInfo.get(sn);
    public StatusVO createPro(ProWHVO proWHVO) throws InterruptedException {
        String createProgram = JSON.toJSONString(proWHVO);
        System.out.println("ViplexCore Demo nvCreateProgramAsync(创建节目) begin... ");
//        instance.nvCreateProgramAsync(createProgram, callBack);
        waitAPIReturn();
        StatusVO statusVO = new StatusVO();
        CountDownLatch countDownLatch = new CountDownLatch(1);
        try {
            instance.nvCreateProgramAsync(createProgram, new ViplexCore.CallBack() {
        return 1;
                @Override
                public void dataCallBack(int code, String data) {
                    statusVO.setStatusCode(code);
                    statusVO.setStatusData(data);
                    System.out.println("\nViplexCore 创建节目 code:" + code);
                    System.out.println("\nViplexCore 创建节目 data:" + data);
                    if (code == 0) {
                        JSONObject result = JSON.parseObject(data);
                        //创建节目成功 设置状态信息为节目id
                        statusVO.setStatusData(String.valueOf(result.getJSONObject("onSuccess").getIntValue("programID")));
                    }
                    countDownLatch.countDown();
                }
            });
            countDownLatch.await(30000, TimeUnit.MILLISECONDS);
        } catch (Exception e) {
        }
        return statusVO;
    }
    /**
     * 编辑节目
     *
     * @param pid
     * @param pageInfo
     * @return
     */
    public StatusVO editProgram(int pid, Map pageInfo) {
        ProgramInfoVO programInfoVO = new ProgramInfoVO();
        programInfoVO.setProgramID(pid);
        programInfoVO.setPageInfo(pageInfo);
        System.out.println("ViplexCore Demo nvSetPageProgramAsync(编辑节目) begin... ");
        StatusVO statusVO = new StatusVO();
        CountDownLatch countDownLatch = new CountDownLatch(1);
        instance.nvSetPageProgramAsync(JSON.toJSONString(programInfoVO), new ViplexCore.CallBack() {
            @Override
            public void dataCallBack(int code, String data) {
                statusVO.setStatusCode(code);
                statusVO.setStatusData(data);
                System.out.println("\nViplexCore 编辑节目 code:" + code);
                System.out.println("\nViplexCore 编辑节目 data:" + data);
                countDownLatch.countDown();
            }
        });
        try {
            countDownLatch.await(30000, TimeUnit.MILLISECONDS);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        return statusVO;
    }
    /**
     * 生成节目
     *
     * @param pid
     * @return
     */
    public StatusVO genrateProgram(int pid) {
        ProGenrateVO proGenrateVO = new ProGenrateVO();
        proGenrateVO.setProgramID(pid);
        proGenrateVO.setOutPutPath(filePathConfig.getOutPutPath());
        System.out.println("ViplexCore Demo nvMakeProgramAsync(生成节目) begin... ");
        StatusVO statusVO = new StatusVO();
        CountDownLatch countDownLatch = new CountDownLatch(1);
        instance.nvMakeProgramAsync(JSON.toJSONString(proGenrateVO), new ViplexCore.CallBack() {
            @Override
            public void dataCallBack(int code, String data) {
                statusVO.setStatusCode(code);
                statusVO.setStatusData(data);
                System.out.println("\nViplexCore 生成节目 code:" + code);
                System.out.println("\nViplexCore 生成节目 data:" + data);
                countDownLatch.countDown();
            }
        });
        try {
            countDownLatch.await(30000, TimeUnit.MILLISECONDS);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        return statusVO;
    }
    /**
     * 发布节目
     *
     * @param
     * @return
     */
    public List<TrasfromStatusVO> trasfromProgram(ProgramPrarm pageInfo) {
        TransfromProgramVO transfromProgramVO = new TransfromProgramVO();
        transfromProgramVO.setProgramName("节目01");
        //设置节目内容
        TransfromProgramVO.SendProgramFilePathsDTO sendProgramFilePaths = new TransfromProgramVO.SendProgramFilePathsDTO();
        //节目
        sendProgramFilePaths.setProgramPath(filePathConfig.getOutPutPath() + "/program" + pageInfo.getProgramID());
        //文件
        Map<String, String> mediasPath = new HashMap();
        mediasPath.put("C:/Users/Administrator/Desktop/novaWin/demo/java/test.png", "test.png");
        sendProgramFilePaths.setMediasPath(mediasPath);
        transfromProgramVO.setSendProgramFilePaths(sendProgramFilePaths);
        //节目标识
        transfromProgramVO.setDeviceIdentifier(SecurityUtils.getUserId().toString());
        transfromProgramVO.setInsertPlay(pageInfo.getInsertPlay());
        transfromProgramVO.setStartPlayAfterTransferred(pageInfo.getStartPlayAfterTransferred());
        List<TrasfromStatusVO> svoList = new ArrayList<>();
        System.out.println("ViplexCore Demo nvStartTransferProgramAsync(发送节目) begin... ");
//        System.out.println(trasfromProgram);
//        instance.nvStartTransferProgramAsync(trasfromProgram, callBack);
//        String trasfromProgram = String.format(
//                "{\"sn\": \"%s\",\"iconPath\": \"\",\"iconName\": \"\",\"sendProgramFilePaths\": {\"programPath\": \"%s/program13\",\"mediasPath\": {\"C:/Users/Administrator/Desktop/novaWin/demo/java/test.png\": \"test.png\"}},\"programName\": \"jiemu1\",\"deviceIdentifier\": \"Demo\",\"startPlayAfterTransferred\": true,\"insertPlay\": true}",
//                g_sn,
//                rootDir);
        pageInfo.getSnList().forEach(sn -> {
            CountDownLatch countDownLatch = new CountDownLatch(1);
            new Thread(new Runnable() {
                @Override
                public void run() {
                    if (transfromProgramVO == null) {
                        return;
                    }
                    transfromProgramVO.setSn(sn);
                    System.out.println(transfromProgramVO);
                    //推送结果
                    TrasfromStatusVO trasfromStatusVO = new TrasfromStatusVO();
                    trasfromStatusVO.setSn(sn);
                    instance.nvStartTransferProgramAsync(JSON.toJSONString(transfromProgramVO), new ViplexCore.CallBack() {
                        @Override
                        public void dataCallBack(int code, String data) {
                            trasfromStatusVO.setStatusCode(code);
                            trasfromStatusVO.setStatusData(data);
                            System.out.println("\nViplexCore 发送节目 code:" + code);
                            System.out.println("\nViplexCore 发送节目 data:" + data);
                            //节目发布成功
                            if (trasfromStatusVO.getStatusCode() == 0) {
                                countDownLatch.countDown();
                                svoList.add(trasfromStatusVO);
                            } else if (trasfromStatusVO.getStatusCode() != 65362) {
                                //上传失败
                                System.out.println("上传失败");
                                svoList.add(trasfromStatusVO);
                                countDownLatch.countDown();
                            }
                        }
                    });
                }
            }).start();
            try {
                countDownLatch.await(30000, TimeUnit.MILLISECONDS);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        return svoList;
    }
    /**
     * 查询在线状态
     *
     * @return
     */
    public List<NewNovaLed> getOnlineStatus(List<NewNovaLed> newNovaListBos) {
        //设置开关屏状态
        newNovaListBos.forEach(led -> {
            //获取信息之前先登录
            CountDownLatch countDownLatch = new CountDownLatch(1);
            new Thread(new Runnable() {
                @Override
                public void run() {
                    StatusVO login = login(led.getSn());
                    if (login.getStatusCode() == 0) {
                        //登陆成功 设置为在线
                        led.setIsOnline(1);
                        led.setOnlineSign(1);
                    } else {
                        led.setIsOnline(0);
                    }
                    countDownLatch.countDown();
                }
            }).start();
            try {
                countDownLatch.await(30000, TimeUnit.MILLISECONDS);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        return newNovaListBos;
    }
    /**
     * 查询屏幕基本信息
     */
    public NewNovaLed getInfo(NewNovaLed led) {
        System.out.println("ViplexCore Demo nvGetProductInfoAsync(获取屏幕信息) begin... ");
        StatusVO login = login(led.getSn());
        StatusVO result = new StatusVO();
        if (login.getStatusCode() == 0) {
            CountDownLatch countDownLatch = new CountDownLatch(1);
            new Thread(new Runnable() {
                @Override
                public void run() {
                    //推送结果
                    TrasfromStatusVO trasfromStatusVO = new TrasfromStatusVO();
                    trasfromStatusVO.setSn(led.getSn());
                    instance.nvGetProductInfoAsync("{\n" +
                            "  \"sn\":\"" + led.getSn() + "\"\n" +
                            "}", new ViplexCore.CallBack() {
                        @Override
                        public void dataCallBack(int code, String data) {
                            result.setStatusCode(code);
                            result.setStatusData(data);
                            System.out.println("\nViplexCore 获取屏幕信息 code:" + code);
                            System.out.println("\nViplexCore 获取屏幕信息 data:" + data);
                            countDownLatch.countDown();
                        }
                    });
                }
            }).start();
            try {
                countDownLatch.await(30000, TimeUnit.MICROSECONDS);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        } else {
            throw new BusinessException("设备登录失败,经检查设备是否连接");
        }
        NewNovaInfoBo newNovaInfoBo = JSON.parseObject(result.getStatusData(), NewNovaInfoBo.class);
        led.setInfo(newNovaInfoBo);
        System.out.println(JSON.toJSONString(led.getInfo()) + "--------");
        return led;
    }
    /**
     * 获取开关屏状态
     */
    public List<NewNovaLed> getScreenPowerState(List<NewNovaLed> newNovaLsit) {
        System.out.println("ViplexCore Demo nvGetScreenPowerStateAsync(获取屏幕开关) begin... ");
        newNovaLsit.forEach(newNova -> {
            CountDownLatch countDownLatch = new CountDownLatch(1);
            new Thread(new Runnable() {
                @Override
                public void run() {
                    //推送结果
                    instance.nvGetScreenPowerStateAsync("{\n" +
                            "  \"sn\":\"" + newNova.getSn() + "\"\n" +
                            "}", new ViplexCore.CallBack() {
                        @Override
                        public void dataCallBack(int code, String data) {
                            System.out.println("\nViplexCore 获取屏幕开关 code:" + code);
                            System.out.println("\nViplexCore 获取屏幕开关 data:" + data);
                            if (code == 0 && data.contains("OPEN")) {
                                newNova.setScreenPower(1);
                            }
                            countDownLatch.countDown();
                        }
                    });
                }
            }).start();
            try {
                countDownLatch.await(30000, TimeUnit.MILLISECONDS);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        return newNovaLsit;
    }
    /**
     * 获取音量
     */
    public List<NewNovaLed> getVolumeState(List<NewNovaLed> newNovaLsit) {
        System.out.println("ViplexCore Demo nvGetVolumeAsync(获取音量) begin... ");
        newNovaLsit.forEach(newNova -> {
            CountDownLatch countDownLatch = new CountDownLatch(1);
            new Thread(new Runnable() {
                @Override
                public void run() {
                    //推送结果
                    instance.nvGetVolumeAsync("{\n" +
                            "  \"sn\":\"" + newNova.getSn() + "\"\n" +
                            "}", new ViplexCore.CallBack() {
                        @Override
                        public void dataCallBack(int code, String data) {
                            System.out.println("\nViplexCore 获取音量 code:" + code);
                            System.out.println("\nViplexCore 获取音量 data:" + data);
                            if (code == 0) {
                                newNova.setVolume((BigDecimal) JSON.parseObject(data, Map.class).get("ratio"));
                            }
                            countDownLatch.countDown();
                        }
                    });
                }
            }).start();
            try {
                countDownLatch.await(30000, TimeUnit.MILLISECONDS);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        return newNovaLsit;
    }
    /**
     * 设置音量
     */
    public boolean setVolume(NewNovaStatusParam param) {
        System.out.println("ViplexCore Demo nvSetScreenBrightnessAsync(Volume) begin... ");
        CountDownLatch countDownLatch = new CountDownLatch(1);
        StatusVO login = login(param.getSn());
        if (login.getStatusCode() == 0) {
            String jsonStr = "{\n" +
                    "  \"sn\":\"" + param.getSn() + "\",\n" +
                    "  \"screenBrightnessInfo\":{\n" +
                    "    \"ratio\":" + param.getVolume() + "\n" +
                    "  }\n" +
                    "}";
            instance.nvSetVolumeAsync(jsonStr, new ViplexCore.CallBack() {
                @Override
                public void dataCallBack(int code, String data) {
                    System.out.println("\nViplexCore Volume code:" + code);
                    System.out.println("\nViplexCore Volume data:" + data);
                    countDownLatch.countDown();
                    if (code == 0) {
                        login.setStatusCode(10086);
                    }
                }
            });
            try {
                countDownLatch.await();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        if (login.getStatusCode() == 10086) {
            return true;
        } else {
            return false;
        }
    }
    /**
     * 获取亮度
     */
    public List<NewNovaLed> getScreenBrightness(List<NewNovaLed> newNovaLsit) {
        System.out.println("ViplexCore Demo nvGetScreenBrightnessAsync(获取亮度) begin... ");
        newNovaLsit.forEach(newNova -> {
            CountDownLatch countDownLatch = new CountDownLatch(1);
            new Thread(new Runnable() {
                @Override
                public void run() {
                    //推送结果
                    instance.nvGetScreenBrightnessAsync("{\n" +
                            "  \"sn\":\"" + newNova.getSn() + "\"\n" +
                            "}", new ViplexCore.CallBack() {
                        @Override
                        public void dataCallBack(int code, String data) {
                            System.out.println("\nViplexCore 获取亮度 code:" + code);
                            System.out.println("\nViplexCore 获取亮度 data:" + data);
                            if (code == 0) {
                                newNova.setBrightness((BigDecimal) JSON.parseObject(data, Map.class).get("ratio"));
                            }
                            countDownLatch.countDown();
                        }
                    });
                }
            }).start();
            try {
                countDownLatch.await(30000, TimeUnit.MILLISECONDS);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        return newNovaLsit;
    }
    /**
     * 设置亮度
     */
    public boolean setScreenBrightness(NewNovaStatusParam param) {
        System.out.println("ViplexCore Demo nvSetScreenBrightnessAsync(设置亮度) begin... ");
        CountDownLatch countDownLatch = new CountDownLatch(1);
        StatusVO login = login(param.getSn());
        if (login.getStatusCode() == 0) {
            String jsonStr = "{\n" +
                    "  \"sn\":\"" + param.getSn() + "\",\n" +
                    "  \"screenBrightnessInfo\":{\n" +
                    "    \"ratio\":" + param.getBrightness() + "\n" +
                    "  }\n" +
                    "}";
            instance.nvSetScreenBrightnessAsync(jsonStr, new ViplexCore.CallBack() {
                @Override
                public void dataCallBack(int code, String data) {
                    System.out.println("\nViplexCore 设置亮度 code:" + code);
                    System.out.println("\nViplexCore 设置亮度 data:" + data);
                    countDownLatch.countDown();
                    if (code == 0) {
                        login.setStatusCode(10086);
                    }
                }
            });
            try {
                countDownLatch.await();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        if (login.getStatusCode() == 10086) {
            return true;
        } else {
            return false;
        }
    }
    /**
     * 获取同步
     */
    public List<NewNovaLed> getSync(List<NewNovaLed> newNovaLsit) {
        System.out.println("ViplexCore Demo nvGetSyncPlayAsync(获取同步) begin... ");
        newNovaLsit.forEach(newNova -> {
            CountDownLatch countDownLatch = new CountDownLatch(1);
            new Thread(new Runnable() {
                @Override
                public void run() {
                    //推送结果
                    instance.nvGetSyncPlayAsync("{\n" +
                            "  \"sn\":\"" + newNova.getSn() + "\"\n" +
                            "}", new ViplexCore.CallBack() {
                        @Override
                        public void dataCallBack(int code, String data) {
                            System.out.println("\nViplexCore 获取亮度 code:" + code);
                            System.out.println("\nViplexCore 获取亮度 data:" + data);
                            if (code == 0) {
                                newNova.setSync(1);
                            }
                            countDownLatch.countDown();
                        }
                    });
                }
            }).start();
            try {
                countDownLatch.await(30000, TimeUnit.MILLISECONDS);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        return newNovaLsit;
    }
    /**
     * 设置同步
     */
    public List<NewNovaStatusParam.NovaDTO> setSync(NewNovaStatusParam param) {
        System.out.println("ViplexCore Demo nvSetSyncPlayAsync(设置同步) begin... ");
        if (param.getNovaList() == null || param.getNovaList().size() == 0) {
            throw new BusinessException("同步设备不能为空 !");
        }
        param.getNovaList().forEach(newNova -> {
            CountDownLatch countDownLatch = new CountDownLatch(1);
            new Thread(new Runnable() {
                @Override
                public void run() {
                    //推送结果
                    instance.nvSetSyncPlayAsync("{\n" +
                            "  \"sn\":\"" + newNova.getSn() + "\",\n" +
                            "  \"enable\":" + param.isSync() + "\n" +
                            "}", new ViplexCore.CallBack() {
                        @Override
                        public void dataCallBack(int code, String data) {
                            System.out.println("\nViplexCore 设置同步 code:" + code);
                            System.out.println("\nViplexCore 设置同步 data:" + data);
                            if (code == 0) {
                                newNova.setStatus(true);
                            }
                            countDownLatch.countDown();
                        }
                    });
                }
            }).start();
            try {
                countDownLatch.await(30000, TimeUnit.MILLISECONDS);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        return param.getNovaList();
    }
    /**
     * 重启
     */
    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("重启设备不能为空 !");
        }
        param.getNovaList().forEach(newNova -> {
            CountDownLatch countDownLatch = new CountDownLatch(1);
            new Thread(new Runnable() {
                @Override
                public void run() {
                    //推送结果
                    instance.nvSetReBootTaskAsync("{\n" +
                            "  \"sn\":\"" + newNova.getSn() + "\",\n" +
                            "  \"taskInfo\":{\n" +
                            "    \"type\":\"REBOOT\",\n" +
                            "    \"source\":{\n" +
                            "      \"type\":0,\n" +
                            "      \"platform\":4\n" +
                            "    },\n" +
                            "    \"executionType\":\"IMMEDIATELY\",\n" +
                            "    \"reason\":\"Just to reboot\",\n" +
                            "    \"conditions\":[\n" +
                            "      {\n" +
                            "        \"cron\":[\n" +
                            "          \"0 15 10 ? * *\",\n" +
                            "          \"0 0 12 * * ?\"\n" +
                            "        ],\n" +
                            "        \"enable\":false\n" +
                            "      }\n" +
                            "    ]\n" +
                            "  }\n" +
                            "}", new ViplexCore.CallBack() {
                        @Override
                        public void dataCallBack(int code, String data) {
                            System.out.println("\nViplexCore 重启 code:" + code);
                            System.out.println("\nViplexCore 重启 data:" + data);
                            if (code == 0) {
                                newNova.setStatus(true);
                            }
                            countDownLatch.countDown();
                        }
                    });
                }
            }).start();
            try {
                countDownLatch.await(30000, TimeUnit.MILLISECONDS);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        return param.getNovaList();
    }
    /**
     * ntp对时
     */
    public List<NewNovaStatusParam.NovaDTO> ntp(NewNovaStatusParam param) {
        System.out.println("ViplexCore Demo nvSetNetTimingInfoAsync(ntp) begin... ");
        if (param.getNovaList() == null || param.getNovaList().size() == 0) {
            throw new BusinessException("对时设备不能为空 !");
        }
        param.getNovaList().forEach(newNova -> {
            CountDownLatch countDownLatch = new CountDownLatch(1);
            new Thread(new Runnable() {
                @Override
                public void run() {
                    //推送结果
                    instance.nvSetNetTimingInfoAsync("{\n" +
                            "  \"sn\":\"" + newNova.getSn() + "\",\n" +
                            "  \"TimingInfo\":{\n" +
                            "    \"source\":{\n" +
                            "      \"type\":1,\n" +
                            "      \"platform\":1\n" +
                            "    },\n" +
                            "    \"taskArray\":[\n" +
                            "      {\n" +
                            "        \"type\":\"NTP_CONFIG\",\n" +
                            "        \"action\":4,\n" +
                            "        \"data\":{\n" +
                            "          \"enable\":" + param.isNtp() + ",\n" +
                            "          \"server\":\"http://ntpsss.net\"\n" +
                            "        }\n" +
                            "      }\n" +
                            "    ]\n" +
                            "  }\n" +
                            "}", new ViplexCore.CallBack() {
                        @Override
                        public void dataCallBack(int code, String data) {
                            System.out.println("\nViplexCore 重启 code:" + code);
                            System.out.println("\nViplexCore 重启 data:" + data);
                            if (code == 0) {
                                newNova.setStatus(true);
                            }
                            countDownLatch.countDown();
                        }
                    });
                }
            }).start();
            try {
                countDownLatch.await(30000, TimeUnit.MILLISECONDS);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        return param.getNovaList();
    }
}