2021与蓝度共同重构项目,服务端
liuhaonan
2022-11-18 385b687cc1a0a8f6de2320af6b6e0d654cd658ed
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/utils/NovaAPIUtil.java
@@ -3,8 +3,9 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.file.config.NovaFileConfig;
import com.sandu.common.util.SpringContextHolder;
import com.sandu.ximon.admin.newnova.conf.FilePathConfig;
import com.sandu.ximon.admin.newnova.conf.ProgramPathConfig;
import com.sandu.ximon.admin.newnova.param.NewNovaStatusParam;
import com.sandu.ximon.admin.newnova.param.ProgramPrarm;
import com.sandu.ximon.admin.newnova.vo.*;
@@ -12,7 +13,9 @@
import com.sandu.ximon.dao.bo.NewNovaInfoBo;
import com.sandu.ximon.dao.domain.NewNovaLed;
import com.sun.jna.Native;
import org.joda.time.DateTime;
import java.io.File;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
@@ -28,7 +31,7 @@
public class NovaAPIUtil {
    private FilePathConfig filePathConfig;
    private ProgramPathConfig filePathConfig;
    private Map<String, Boolean> loginSn = new HashMap();
@@ -39,7 +42,7 @@
    private static String loginInfo = null;
    private NovaAPIUtil() {
        filePathConfig = SpringContextHolder.getBean(FilePathConfig.class);
        filePathConfig = SpringContextHolder.getBean(ProgramPathConfig.class);
        String rootDir = filePathConfig.getOutPutPath();
        instance = (ViplexCore) Native.loadLibrary(filePathConfig.getStringPath(), ViplexCore.class);
        System.setProperty("jna.encoding", "UTF-8");
@@ -51,7 +54,7 @@
        System.out.println(instance.nvInit(rootDir, companyInfo));
//        login("MZVA51930N2113017308");//todo 手动登录还是自动登录
//        login("MZVA51930N2113017308");
    }
    public static NovaAPIUtil getInstanceUtil() {
@@ -67,8 +70,14 @@
    /**
     * 登录
     * loginType
     * 0:登陆到屏体管理
     * 1:登陆到系统设置(暗门登录)
     * 2:登陆到诊断模块
     * 3:LCT登录
     * 5:公网SDK登录
     */
    public StatusVO login(String sn) {
    public StatusVO login(String sn, Integer loginType) {
        StatusVO searchVO = new StatusVO();
        System.out.println("ViplexCore Demo nvSearchTerminalAsync(搜索) begin... ");
@@ -87,7 +96,7 @@
            }
        });
        try {
            countDownLatch1.await();
            countDownLatch1.await(10000, TimeUnit.MILLISECONDS);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
@@ -95,15 +104,19 @@
        if (loginSn.get(sn) != null && loginSn.get(sn)) {
            return new StatusVO(0);
        }
        if (!loginInfo.contains(String.format("\"sn\":\"%s\",", sn))) {
        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);
        }
        StatusVO statusVO = new StatusVO();
        System.out.println("ViplexCore Demo nvLoginAsync(登录) begin... ");
        String loginParam = String.format("{\"sn\":\"%s\",\"username\":\"admin\",\"rememberPwd\":0,\"password\":\"123456\",\"loginType\":0}", sn);
        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() {
@@ -112,8 +125,8 @@
            public void dataCallBack(int code, String data) {
                statusVO.setStatusCode(code);
                statusVO.setStatusData(data);
                System.out.println("\nViplexCore Demo code:" + code);
                System.out.println("\nViplexCore Demo data:" + data);
                System.out.println("\nViplexCore 登录 code:" + code);
                System.out.println("\nViplexCore 登录 data:" + data);
                countDownLatch2.countDown();
            }
@@ -180,6 +193,7 @@
        System.out.println("ViplexCore Demo nvSetPageProgramAsync(编辑节目) begin... ");
        StatusVO statusVO = new StatusVO();
        CountDownLatch countDownLatch = new CountDownLatch(1);
        System.out.println("editProgram: " + JSON.toJSONString(programInfoVO));
        instance.nvSetPageProgramAsync(JSON.toJSONString(programInfoVO), new ViplexCore.CallBack() {
            @Override
            public void dataCallBack(int code, String data) {
@@ -199,6 +213,42 @@
        return statusVO;
    }
    /**
     * 制作多页节目
     *
     * @param pageInfo
     * @return
     */
    public StatusVO editPrograms(int pid, List<Map> pageInfo) {
        ProgramsInfoVO programInfoVO = new ProgramsInfoVO();
        programInfoVO.setProgramID(pid);
        programInfoVO.setSceneItems(pageInfo);
        System.out.println("ViplexCore Demo nvSetPageProgramAsync(编辑节目) begin... ");
        StatusVO statusVO = new StatusVO();
        CountDownLatch countDownLatch = new CountDownLatch(1);
        System.out.println("editProgram: " + JSON.toJSONString(programInfoVO));
        instance.nvSetPageProgramsAsync(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;
    }
    /**
@@ -243,15 +293,16 @@
    public List<TrasfromStatusVO> trasfromProgram(ProgramPrarm pageInfo) {
        TransfromProgramVO transfromProgramVO = new TransfromProgramVO();
        transfromProgramVO.setProgramName("节目01");
        transfromProgramVO.setProgramName(pageInfo.getProgramMsg().getName());
        //设置节目内容
        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);
//        Map<String, String> mediasPath = new HashMap();
//        mediasPath.put("C:/Users/Administrator/Desktop/novaWin/demo/java/test.png", "test.png");
//        sendProgramFilePaths.setMediasPath(mediasPath);
        sendProgramFilePaths.setMediasPath(pageInfo.getFileMap());
        transfromProgramVO.setSendProgramFilePaths(sendProgramFilePaths);
        //节目标识
@@ -277,10 +328,16 @@
                    }
                    transfromProgramVO.setSn(sn);
                    System.out.println(transfromProgramVO);
                    StatusVO login = login(sn, 0);
                    //推送结果
                    TrasfromStatusVO trasfromStatusVO = new TrasfromStatusVO();
                    trasfromStatusVO.setSn(sn);
                    if (login.getStatusCode() != 0) {
                        trasfromStatusVO.setStatusCode(login.getStatusCode());
                        trasfromStatusVO.setStatusData(login.getStatusData());
                        return;
                    }
                    System.out.println("program: " + JSON.toJSONString(transfromProgramVO));
                    instance.nvStartTransferProgramAsync(JSON.toJSONString(transfromProgramVO), new ViplexCore.CallBack() {
                        @Override
                        public void dataCallBack(int code, String data) {
@@ -316,12 +373,17 @@
        return svoList;
    }
    /**
     * 查询在线状态
     *
     * @return
     */
    public List<NewNovaLed> getOnlineStatus(List<NewNovaLed> newNovaListBos) {
    public List<NewNovaLed> getOnlineStatus(List<NewNovaLed> newNovaListBos, boolean onlineStatus) {
        List<NewNovaLed> online = new ArrayList<>();
        //设置开关屏状态
        newNovaListBos.forEach(led -> {
            //获取信息之前先登录
@@ -329,11 +391,12 @@
            new Thread(new Runnable() {
                @Override
                public void run() {
                    StatusVO login = login(led.getSn());
                    StatusVO login = login(led.getSn(), 0);
                    if (login.getStatusCode() == 0) {
                        //登陆成功 设置为在线
                        led.setIsOnline(1);
                        led.setOnlineSign(1);
                        online.add(led);
                    } else {
                        led.setIsOnline(0);
                    }
@@ -346,6 +409,9 @@
                throw new RuntimeException(e);
            }
        });
        if (onlineStatus) {
            return online;
        }
        return newNovaListBos;
    }
@@ -356,7 +422,7 @@
    public NewNovaLed getInfo(NewNovaLed led) {
        System.out.println("ViplexCore Demo nvGetProductInfoAsync(获取屏幕信息) begin... ");
        StatusVO login = login(led.getSn());
        StatusVO login = login(led.getSn(), 0);
        StatusVO result = new StatusVO();
        if (login.getStatusCode() == 0) {
@@ -393,7 +459,6 @@
        }
        NewNovaInfoBo newNovaInfoBo = JSON.parseObject(result.getStatusData(), NewNovaInfoBo.class);
        led.setInfo(newNovaInfoBo);
        System.out.println(JSON.toJSONString(led.getInfo()) + "--------");
        return led;
    }
@@ -437,6 +502,52 @@
        return newNovaLsit;
    }
    /**
     * 设置开关屏
     */
    public boolean setPowerStatus(NewNovaStatusParam param) {
        System.out.println("ViplexCore Demo nvSetScreenPowerStateAsync(设置屏幕开关) begin... ");
        CountDownLatch countDownLatch = new CountDownLatch(1);
        StatusVO login = login(param.getSn(), 0);
        String status = "CLOSE";
        if (param.getPowerStatus() == 1) {
            status = "OPEN";
        }
        if (login.getStatusCode() == 0) {
            String jsonStr = "{\n" +
                    "  \"sn\":\"" + param.getSn() + "\",\n" +
                    "  \"taskInfo\":{\n" +
                    "    \"state\":\"" + status + "\"\n" +
                    "  }\n" +
                    "}";
            instance.nvSetScreenPowerStateAsync(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;
        }
    }
    /**
     * 获取音量
@@ -486,11 +597,11 @@
        System.out.println("ViplexCore Demo nvSetScreenBrightnessAsync(Volume) begin... ");
        CountDownLatch countDownLatch = new CountDownLatch(1);
        StatusVO login = login(param.getSn());
        StatusVO login = login(param.getSn(), 0);
        if (login.getStatusCode() == 0) {
            String jsonStr = "{\n" +
                    "  \"sn\":\"" + param.getSn() + "\",\n" +
                    "  \"screenBrightnessInfo\":{\n" +
                    "  \"volumeInfo\":{\n" +
                    "    \"ratio\":" + param.getVolume() + "\n" +
                    "  }\n" +
                    "}";
@@ -568,7 +679,7 @@
        System.out.println("ViplexCore Demo nvSetScreenBrightnessAsync(设置亮度) begin... ");
        CountDownLatch countDownLatch = new CountDownLatch(1);
        StatusVO login = login(param.getSn());
        StatusVO login = login(param.getSn(), 0);
        if (login.getStatusCode() == 0) {
            String jsonStr = "{\n" +
                    "  \"sn\":\"" + param.getSn() + "\",\n" +
@@ -620,10 +731,15 @@
                        @Override
                        public void dataCallBack(int code, String data) {
                            System.out.println("\nViplexCore 获取亮度 code:" + code);
                            System.out.println("\nViplexCore 获取亮度 data:" + data);
                            System.out.println("\nViplexCore 获取同步 code:" + code);
                            System.out.println("\nViplexCore 获取同步 data:" + data);
                            if (code == 0) {
                                newNova.setSync(1);
                                boolean enable = (boolean) JSON.parseObject(data, Map.class).get("enable");
                                if (enable) {
                                    newNova.setSync(1);
                                }
                            } else {
                                newNova.setSync(-1);
                            }
                            countDownLatch.countDown();
                        }
@@ -656,11 +772,15 @@
            new Thread(new Runnable() {
                @Override
                public void run() {
                    //推送结果
                    instance.nvSetSyncPlayAsync("{\n" +
                    login(newNova.getSn(), 0);
                    String str = "{\n" +
                            "  \"sn\":\"" + newNova.getSn() + "\",\n" +
                            "  \"enable\":" + param.isSync() + "\n" +
                            "}", new ViplexCore.CallBack() {
                            "}";
                    System.out.println("str : " + str);
                    //推送结果
                    instance.nvSetSyncPlayAsync(str, new ViplexCore.CallBack() {
                        @Override
                        public void dataCallBack(int code, String data) {
@@ -695,52 +815,59 @@
            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() {
                    CountDownLatch countDownLatch = new CountDownLatch(1);
                    new Thread(new Runnable() {
                        @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);
                        public void run() {
                            StatusVO login = login(newNova.getSn(), 1);
                            if (login.getStatusCode() != 0) {
                                countDownLatch.countDown();
                                return;
                            }
                            countDownLatch.countDown();
                        }
                    });
                            //推送结果
                            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);
                    }
                    login(newNova.getSn(), 0);
                }
            }).start();
            try {
                countDownLatch.await(30000, TimeUnit.MILLISECONDS);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        );
        return param.getNovaList();
    }
@@ -761,9 +888,9 @@
            new Thread(new Runnable() {
                @Override
                public void run() {
                    //推送结果
                    instance.nvSetNetTimingInfoAsync("{\n" +
                            "  \"sn\":\"" + newNova.getSn() + "\",\n" +
//                    login(newNova.getSn(), 0);
                    String ntpStr="{\n" +
                            "  \"sn\":\""+newNova.getSn()+"\",\n" +
                            "  \"TimingInfo\":{\n" +
                            "    \"source\":{\n" +
                            "      \"type\":1,\n" +
@@ -774,19 +901,25 @@
                            "        \"type\":\"NTP_CONFIG\",\n" +
                            "        \"action\":4,\n" +
                            "        \"data\":{\n" +
                            "          \"enable\":" + param.isNtp() + ",\n" +
                            "          \"server\":\"http://ntpsss.net\"\n" +
                            "          \"enable\":"+param.isNtp()+",\n" +
                            "          \"server\":\"http://ntp1.aliyun.com\"\n" +
                            "        }\n" +
                            "      }\n" +
                            "    ]\n" +
                            "  }\n" +
                            "}", new ViplexCore.CallBack() {
                            "}";
                    System.out.println("ntpStr"+ ntpStr);
                    //推送结果
                    instance.nvSetNetTimingInfoAsync(ntpStr, 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) {
                            System.out.println("\nViplexCore ntp code:" + code);
                            System.out.println("\n时间 ntp :" + DateTime.now());
                            System.out.println("\nViplexCore ntp data:" + data);
                            if (code == 0 && data.contains("\"status\":1")) {
                                System.out.println("results: " + data.contains("\"status\":1"));
                                newNova.setStatus(true);
                            }
                            countDownLatch.countDown();
@@ -805,4 +938,61 @@
        return param.getNovaList();
    }
    /**
     * 截屏
     */
    public List<NewNovaStatusParam.NovascreenShotDTO> screenShot(NewNovaStatusParam param) {
        System.out.println("ViplexCore Demo nvDownLoadScreenshotAsync(截屏) begin... ");
        NovaFileConfig config = SpringContextHolder.getBean(NovaFileConfig.class);
        String shotPath = config.getScreenShotPath();
        param.getScreenShotList().forEach(newNova -> {
            CountDownLatch countDownLatch = new CountDownLatch(1);
            new Thread(new Runnable() {
                @Override
                public void run() {
                    login(newNova.getSn(), 0);
                    String pictureName = newNova.getSn() + ".png";
                    String str = "{\n" +
                            "  \"sn\":\"" + newNova.getSn() + "\",\n" +
                            "  \"width\":400,\n" +
                            "  \"height\":400,\n" +
                            "  \"downLoadDirectoryPath\":\"" + shotPath.replace(File.separator, "/") + "\",\n" +
                            "  \"pictureName\":\"" + pictureName + "\",\n" +
                            "  \"pictureType\":0\n" +
                            "}";
                    System.out.println("str" + str);
                    //推送结果
                    instance.nvDownLoadScreenshotAsync(str, new ViplexCore.CallBack() {
                        @Override
                        public void dataCallBack(int code, String data) {
                            System.out.println("\nViplexCore 截屏 code:" + code);
                            System.out.println("\nViplexCore 截屏 data:" + data);
                            newNova.setCode(code);
                            if (code == 0) {
                                String img = config.getScreenShotPath() + pictureName;
                                newNova.setScreenShot(config.getFileUrl() + img.replace(config.getUploadRootPath(), "").replace(File.separator, "/"));
                            } else {
                                newNova.setScreenShot(data);
                            }
                            countDownLatch.countDown();
                        }
                    });
                }
            }).start();
            try {
                countDownLatch.await(30000, TimeUnit.MILLISECONDS);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        return param.getScreenShotList();
    }
}