| | |
| | | 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.*; |
| | |
| | | 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; |
| | |
| | | public class NovaAPIUtil { |
| | | |
| | | |
| | | private FilePathConfig filePathConfig; |
| | | private ProgramPathConfig filePathConfig; |
| | | |
| | | private Map<String, Boolean> loginSn = new HashMap(); |
| | | |
| | |
| | | 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"); |
| | |
| | | System.out.println(instance.nvInit(rootDir, companyInfo)); |
| | | |
| | | |
| | | // login("MZVA51930N2113017308");//todo 手动登录还是自动登录 |
| | | // login("MZVA51930N2113017308"); |
| | | } |
| | | |
| | | public static NovaAPIUtil getInstanceUtil() { |
| | |
| | | |
| | | /** |
| | | * 登录 |
| | | * 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... "); |
| | |
| | | } |
| | | }); |
| | | try { |
| | | countDownLatch1.await(); |
| | | countDownLatch1.await(10000, TimeUnit.MILLISECONDS); |
| | | } catch (InterruptedException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | |
| | | 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() { |
| | |
| | | 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(); |
| | | } |
| | | |
| | |
| | | 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) { |
| | |
| | | |
| | | 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; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | |
| | | 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); |
| | | //节目标识 |
| | |
| | | } |
| | | 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) { |
| | |
| | | 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 -> { |
| | | //获取信息之前先登录 |
| | |
| | | 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); |
| | | } |
| | |
| | | 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()); |
| | | StatusVO login = login(led.getSn(), 0); |
| | | |
| | | StatusVO result = new StatusVO(); |
| | | if (login.getStatusCode() == 0) { |
| | |
| | | } |
| | | NewNovaInfoBo newNovaInfoBo = JSON.parseObject(result.getStatusData(), NewNovaInfoBo.class); |
| | | led.setInfo(newNovaInfoBo); |
| | | System.out.println(JSON.toJSONString(led.getInfo()) + "--------"); |
| | | return led; |
| | | } |
| | | |
| | |
| | | |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取音量 |
| | |
| | | |
| | | 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" + |
| | | "}"; |
| | |
| | | |
| | | 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" + |
| | |
| | | @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) { |
| | | boolean enable = (boolean) JSON.parseObject(data, Map.class).get("enable"); |
| | | if (enable) { |
| | | newNova.setSync(1); |
| | | } |
| | | } else { |
| | | newNova.setSync(-1); |
| | | } |
| | | countDownLatch.countDown(); |
| | | } |
| | |
| | | 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) { |
| | | |
| | |
| | | new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | StatusVO login = login(newNova.getSn(), 1); |
| | | if (login.getStatusCode() != 0) { |
| | | countDownLatch.countDown(); |
| | | return; |
| | | } |
| | | //推送结果 |
| | | instance.nvSetReBootTaskAsync("{\n" + |
| | | " \"sn\":\"" + newNova.getSn() + "\",\n" + |
| | |
| | | } catch (InterruptedException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | }); |
| | | login(newNova.getSn(), 0); |
| | | } |
| | | ); |
| | | |
| | | return param.getNovaList(); |
| | | } |
| | |
| | | new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | //推送结果 |
| | | instance.nvSetNetTimingInfoAsync("{\n" + |
| | | // login(newNova.getSn(), 0); |
| | | String ntpStr="{\n" + |
| | | " \"sn\":\"" + newNova.getSn() + "\",\n" + |
| | | " \"TimingInfo\":{\n" + |
| | | " \"source\":{\n" + |
| | |
| | | " \"action\":4,\n" + |
| | | " \"data\":{\n" + |
| | | " \"enable\":" + param.isNtp() + ",\n" + |
| | | " \"server\":\"http://ntpsss.net\"\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(); |
| | |
| | | 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(); |
| | | } |
| | | |
| | | |
| | | } |