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.file.config.NovaFileConfig; import com.sandu.common.util.SpringContextHolder; 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.*; 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 org.joda.time.DateTime; import java.io.File; 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 */ public class NovaAPIUtil { private ProgramPathConfig filePathConfig; private Map loginSn = new HashMap(); private ViplexCore instance = null; private static NovaAPIUtil instanceUtil = null; private static String loginInfo = null; private NovaAPIUtil() { filePathConfig = SpringContextHolder.getBean(ProgramPathConfig.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)); // login("MZVA51930N2113017308"); } public static NovaAPIUtil getInstanceUtil() { if (instanceUtil == null) { synchronized (NovaAPIUtil.class) { if (instanceUtil == null) { instanceUtil = new NovaAPIUtil(); } } } return instanceUtil; } /** * 登录 * loginType * 0:登陆到屏体管理 * 1:登陆到系统设置(暗门登录) * 2:登陆到诊断模块 * 3:LCT登录 * 5:公网SDK登录 */ public StatusVO login(String sn, Integer loginType) { 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) { searchVO.setStatusCode(code); searchVO.setStatusData(data); loginInfo = data; System.out.println("\nViplexCore 搜索 code:" + code); System.out.println("\nViplexCore 搜索 data:" + data); countDownLatch1.countDown(); } }); try { countDownLatch1.await(10000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } 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); } StatusVO statusVO = new StatusVO(); System.out.println("ViplexCore Demo nvLoginAsync(登录) begin... "); 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) { statusVO.setStatusCode(code); statusVO.setStatusData(data); System.out.println("\nViplexCore 登录 code:" + code); System.out.println("\nViplexCore 登录 data:" + data); countDownLatch2.countDown(); } }); try { countDownLatch2.await(); } catch (InterruptedException e) { throw new RuntimeException(e); } if (statusVO.getStatusCode() != 0) { System.out.println("ViplexCore " + sn + " nvLoginAsync(登录) 失败!"); System.out.println("错误码:" + statusVO.getStatusCode()); } else { //登陆成功之后存入map保存登录信息 loginSn.put(sn, true); } return statusVO; } /** * 创建节目 */ public StatusVO createPro(ProWHVO proWHVO) throws InterruptedException { String createProgram = JSON.toJSONString(proWHVO); System.out.println("ViplexCore Demo nvCreateProgramAsync(创建节目) begin... "); StatusVO statusVO = new StatusVO(); CountDownLatch countDownLatch = new CountDownLatch(1); try { instance.nvCreateProgramAsync(createProgram, 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); 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); System.out.println("editProgram: " + JSON.toJSONString(programInfoVO)); 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 pageInfo * @return */ public StatusVO editPrograms(int pid, List 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; } /** * 生成节目 * * @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 trasfromProgram(ProgramPrarm pageInfo) { TransfromProgramVO transfromProgramVO = new TransfromProgramVO(); transfromProgramVO.setProgramName(pageInfo.getProgramMsg().getName()); //设置节目内容 TransfromProgramVO.SendProgramFilePathsDTO sendProgramFilePaths = new TransfromProgramVO.SendProgramFilePathsDTO(); //节目 sendProgramFilePaths.setProgramPath(filePathConfig.getOutPutPath() + "/program" + pageInfo.getProgramID()); //文件 sendProgramFilePaths.setMediasPath(pageInfo.getFileMap()); transfromProgramVO.setSendProgramFilePaths(sendProgramFilePaths); //节目标识 transfromProgramVO.setDeviceIdentifier(SecurityUtils.getUserId().toString()); transfromProgramVO.setInsertPlay(pageInfo.getInsertPlay()); transfromProgramVO.setStartPlayAfterTransferred(pageInfo.getStartPlayAfterTransferred()); List svoList = new ArrayList<>(); System.out.println("ViplexCore Demo nvStartTransferProgramAsync(发送节目) begin... "); // System.out.println(trasfromProgram); CountDownLatch countDownLatch = new CountDownLatch(pageInfo.getSnList().size()); pageInfo.getSnList().forEach(sn -> { if (transfromProgramVO == null) { return; } 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()); countDownLatch.countDown(); return; } System.out.println("program: " + JSON.toJSONString(transfromProgramVO)); 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(); } } }); }); try { countDownLatch.await(30000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } return svoList; } /** * 查询在线状态 * * @return */ public List getOnlineStatus(List newNovaListBos, boolean onlineStatus) { List online = new ArrayList<>(); CountDownLatch countDownLatch = new CountDownLatch(newNovaListBos.size()); //设置开关屏状态 newNovaListBos.forEach(led -> { //获取信息之前先登录 StatusVO login = login(led.getSn(), 0); if (login.getStatusCode() == 0) { //登陆成功 设置为在线 led.setIsOnline(1); led.setOnlineSign(1); online.add(led); } else { led.setIsOnline(0); } countDownLatch.countDown(); }); try { countDownLatch.await(30000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } if (onlineStatus) { return online; } return newNovaListBos; } /** * 查询屏幕基本信息 */ public NewNovaLed getInfo(NewNovaLed led) { System.out.println("ViplexCore Demo nvGetProductInfoAsync(获取屏幕信息) begin... "); StatusVO login = login(led.getSn(), 0); StatusVO result = new StatusVO(); CountDownLatch countDownLatch = new CountDownLatch(1); if (login.getStatusCode() == 0) { //推送结果 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(); } }); try { countDownLatch.await(30000, TimeUnit.MICROSECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } } /*else { throw new BusinessException("设备登录失败,经检查设备是否连接"); }*/ if (result.getStatusCode() == 0) { NewNovaInfoBo newNovaInfoBo = JSON.parseObject(result.getStatusData(), NewNovaInfoBo.class); led.setInfo(newNovaInfoBo); } /*else { throw new BusinessException("设备登录失败,经检查设备是否连接"); }*/ return led; } /** * 获取开关屏状态 */ public List getScreenPowerState(List newNovaLsit) { System.out.println("ViplexCore Demo nvGetScreenPowerStateAsync(获取屏幕开关) begin... "); CountDownLatch countDownLatch = new CountDownLatch(newNovaLsit.size()); newNovaLsit.forEach(newNova -> { StatusVO login = login(newNova.getSn(), 0); if (login.getStatusCode() != 0) { countDownLatch.countDown(); return; } //推送结果 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(); } }); }); try { countDownLatch.await(30000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } 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; } } /** * 获取音量 */ public List getVolumeState(List newNovaLsit) { System.out.println("ViplexCore Demo nvGetVolumeAsync(获取音量) begin... "); CountDownLatch countDownLatch = new CountDownLatch(newNovaLsit.size()); newNovaLsit.forEach(newNova -> { StatusVO login = login(newNova.getSn(), 0); if (login.getStatusCode() != 0) { countDownLatch.countDown(); return; } //推送结果 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(); } }); }); 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(), 0); if (login.getStatusCode() == 0) { String jsonStr = "{\n" + " \"sn\":\"" + param.getSn() + "\",\n" + " \"volumeInfo\":{\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 getScreenBrightness(List newNovaLsit) { System.out.println("ViplexCore Demo nvGetScreenBrightnessAsync(获取亮度) begin... "); CountDownLatch countDownLatch = new CountDownLatch(newNovaLsit.size()); newNovaLsit.forEach(newNova -> { StatusVO login = login(newNova.getSn(), 0); if (login.getStatusCode() != 0) { countDownLatch.countDown(); return; } //推送结果 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(); } }); }); 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(), 0); 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 getSync(List newNovaLsit) { System.out.println("ViplexCore Demo nvGetSyncPlayAsync(获取同步) begin... "); CountDownLatch countDownLatch = new CountDownLatch(newNovaLsit.size()); newNovaLsit.forEach(newNova -> { StatusVO login = login(newNova.getSn(), 0); if (login.getStatusCode() != 0) { countDownLatch.countDown(); return; } //推送结果 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) { boolean enable = (boolean) JSON.parseObject(data, Map.class).get("enable"); if (enable) { newNova.setSync(1); } } else { newNova.setSync(-1); } countDownLatch.countDown(); } }); }); try { countDownLatch.await(30000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } return newNovaLsit; } /** * 设置同步 */ public List setSync(NewNovaStatusParam param) { System.out.println("ViplexCore Demo nvSetSyncPlayAsync(设置同步) begin... "); if (param.getNovaList() == null || param.getNovaList().size() == 0) { throw new BusinessException("同步设备不能为空 !"); } CountDownLatch countDownLatch = new CountDownLatch(param.getNovaList().size()); param.getNovaList().forEach(newNova -> { StatusVO login = login(newNova.getSn(), 0); if (login.getStatusCode() != 0) { countDownLatch.countDown(); return; } String str = "{\n" + " \"sn\":\"" + newNova.getSn() + "\",\n" + " \"enable\":" + param.isSync() + "\n" + "}"; System.out.println("str : " + str); //推送结果 instance.nvSetSyncPlayAsync(str, 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(); } }); }); try { countDownLatch.await(30000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } return param.getNovaList(); } /** * 重启 */ public List 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); StatusVO login = login(newNova.getSn(), 1); if (login.getStatusCode() != 0) { countDownLatch.countDown(); return; } String rebootStr = "{\n" + " \"sn\":\"" + newNova.getSn() + "\",\n" + " \"taskInfo\":{\n" + " \"type\":\"REBOOT\",\n" + " \"source\":{\n" + " \"type\":0,\n" + " \"platform\":1\n" + " },\n" + " \"executionType\":\"IMMEDIATELY\",\n" + " \"reason\":\"Just to test\",\n" + " \"conditions\":[\n" + " {\n" + " \"cron\":[\n" + " \"0 15 10 ? * *\",\n" + " \"0 0 12 * * ?\"\n" + " ],\n" + " \"enable\":false\n" + " }\n" + " ]\n" + " }\n" + "}"; System.out.println("rebootStr : " + rebootStr); //推送结果 instance.nvSetReBootTaskAsync(rebootStr, 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(); } }); // StatusVO logout = logout(newNova.getSn(), 1); // if (logout.getStatusCode() == 0) { // login(newNova.getSn(), 0); // } } ); try { countDownLatch.await(30000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } return param.getNovaList(); } /** * ntp对时 */ public List ntp(NewNovaStatusParam param) { System.out.println("ViplexCore Demo nvSetNetTimingInfoAsync(ntp) begin... "); if (param.getNovaList() == null || param.getNovaList().size() == 0) { throw new BusinessException("对时设备不能为空 !"); } CountDownLatch countDownLatch = new CountDownLatch(param.getNovaList().size()); param.getNovaList().forEach(newNova -> { StatusVO login = login(newNova.getSn(), 0); if (login.getStatusCode() != 0) { countDownLatch.countDown(); return; } String ntpStr = "{\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\":\"ntp1.aliyun.com\"\n" + " }\n" + " }\n" + " ]\n" + " }\n" + "}"; System.out.println("ntpStr" + ntpStr); //推送结果 instance.nvSetNetTimingInfoAsync(ntpStr, new ViplexCore.CallBack() { @Override public void dataCallBack(int code, String data) { 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(); } }); }); try { countDownLatch.await(20000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } return param.getNovaList(); } /** * 截屏 */ public List screenShot(NewNovaStatusParam param) { System.out.println("ViplexCore Demo nvDownLoadScreenshotAsync(截屏) begin... "); NovaFileConfig config = SpringContextHolder.getBean(NovaFileConfig.class); String shotPath = config.getScreenShotPath(); CountDownLatch countDownLatch = new CountDownLatch(param.getScreenShotList().size()); param.getScreenShotList().forEach(newNova -> { StatusVO login = login(newNova.getSn(), 0); if (login.getStatusCode() != 0) { countDownLatch.countDown(); return; } 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(); } }); }); try { countDownLatch.await(30000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } return param.getScreenShotList(); } /** * 获取屏幕尺寸 */ public List getDisplayInfoAsync(List newNovaLsit) { System.out.println("ViplexCore Demo nvGetDisplayInfoAsync(获取分辨率) begin... "); //PlayerInfoVO CountDownLatch countDownLatch = new CountDownLatch(newNovaLsit.size()); newNovaLsit.forEach(newNova -> { StatusVO login = login(newNova.getSn(), 0); if (login.getStatusCode() != 0) { countDownLatch.countDown(); return; } //推送结果 instance.nvGetDisplayInfoAsync("{\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) { PlayerInfoVO playerInfoVO = JSON.parseObject(data, PlayerInfoVO.class); PlayerInfoVO.TaskArrayDTO.DataDTO dataDTO = playerInfoVO.getTaskArray().get(0).getData(); newNova.setWidth(dataDTO.getWidth()); newNova.setHeight(dataDTO.getHeight()); newNova.setRotation(dataDTO.getRotation()); } countDownLatch.countDown(); } }); }); try { countDownLatch.await(30000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } return newNovaLsit; } /** * 获取视频源 */ public List getVideoInfoAsync(List newNovaLsit) { System.out.println("ViplexCore Demo nvGetVideoControlInfoAsync(获取视频源) begin... "); CountDownLatch countDownLatch = new CountDownLatch(newNovaLsit.size()); newNovaLsit.forEach(newNova -> { StatusVO login = login(newNova.getSn(), 0); if (login.getStatusCode() != 0) { countDownLatch.countDown(); return; } //推送结果 instance.nvGetVideoControlInfoAsync("{\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) { VideoInfoVO videoInfoVO = JSON.parseObject(data, VideoInfoVO.class); newNova.setVideoControlInfo(videoInfoVO.getVideoSource()); } countDownLatch.countDown(); } }); }); try { countDownLatch.await(30000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } return newNovaLsit; } /** * 获取时区 */ public List getTimezone(List newNovaLsit) { System.out.println("ViplexCore Demo nvGetCurrentTimeAndZoneAsync(获取时区) begin... "); CountDownLatch countDownLatch = new CountDownLatch(newNovaLsit.size()); newNovaLsit.forEach(newNova -> { StatusVO login = login(newNova.getSn(), 0); if (login.getStatusCode() != 0) { countDownLatch.countDown(); return; } //推送结果 instance.nvGetCurrentTimeAndZoneAsync("{\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) { Map map = JSON.parseObject(data, Map.class); newNova.setTimeZone(map.get("timeZone").toString()); newNova.setCurrentTime(map.get("currentTime").toString()); } countDownLatch.countDown(); } }); }); try { countDownLatch.await(30000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } return newNovaLsit; } /** * 退出登录 */ public StatusVO logout(String sn, Integer type) { System.out.println("ViplexCore Demo nvLogoutAsync(退出登录) begin... "); CountDownLatch countDownLatch = new CountDownLatch(1); StatusVO logout = new StatusVO(); //推送结果 instance.nvLogoutAsync("{\n" + " \"sn\":\"" + sn + "\",\n" + " \"loginType\":" + type + "\n" + "}", new ViplexCore.CallBack() { @Override public void dataCallBack(int code, String data) { System.out.println("\nViplexCore 退出登录 code:" + code); System.out.println("\nViplexCore 退出登录 data:" + data); logout.setStatusCode(code); logout.setStatusData(data); countDownLatch.countDown(); } }); try { countDownLatch.await(10000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { throw new RuntimeException(e); } return logout; } }