dao/src/main/java/com/sandu/ximon/dao/bo/NewNovaInfoBo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,83 @@ package com.sandu.ximon.dao.bo; import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; /** * @author LiuHaoNan * @date 2022/11/11 */ @Data public class NewNovaInfoBo { /** * 产åä¿¡æ¯ */ @TableField(exist = false) private ProductInfoDTO productInfo; /** * é ç½®ä¿¡æ¯ */ @TableField(exist = false) private ConfigInfoDTO configInfo; @NoArgsConstructor @Data public static class ProductInfoDTO { /** * 产ååç§°ï¼ä¾å¦T3,T6 */ private String productName; /** * 产åç¼å· */ private Integer modelId; } @NoArgsConstructor @Data public static class ConfigInfoDTO { /** * æ¯å¦æ¯æè§é¢åæ¢ï¼trueè¡¨ç¤ºæ¯æï¼falseè¡¨ç¤ºä¸æ¯æ */ private Boolean videoSwitch; /** * æ¾ç¤ºè®¾å¤ï¼æä¸¤ç§LEDãLCD */ private String displayDevice; /** * ç½å£é ç½® */ private List<PortConfigDTO> portConfig; @NoArgsConstructor @Data public static class PortConfigDTO { /** * ç½å£ç¼å·ï¼ä¾å¦:1,2,3,4 */ private Integer portNO; /** * æ¯å¦ä¸ºä¸»ç½å£ */ private Boolean isMainPort; /** * 对åºç主ç½å£ï¼å¦æè¯¥ç½å£æ¯ä¸»ç½å£ï¼è¯¥åæ®µæ æ */ private Integer belongMainPort; } } } dao/src/main/java/com/sandu/ximon/dao/bo/NewNovaListBo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,55 @@ package com.sandu.ximon.dao.bo; import lombok.Data; import java.time.LocalDateTime; /** * @author LiuHaoNan * @date 2022/11/11 * 诺ç¦è®¾å¤åè¡¨ä½¿ç¨ */ @Data public class NewNovaListBo { private Long id; /** * ææ¾å¨åç§°(æ°æ®åº) */ private String name; /** * ææ¾å¨å¯ä¸æ è¯,å¦æä¸ºnull代表没æç»å®ææ¾å¨(Vnnox) */ private String sn; /** * å建æ¶é´ */ private LocalDateTime createTime; /** * å¨çº¿ç¶æ 0离线 1å¨çº¿ */ private Integer onlineSign; /** * æ´æ°æ¶é´ */ private LocalDateTime updateTime; /** * ç¯æid */ private Long poleId; /** * ç¯æåç§° */ private String poleName; } dao/src/main/java/com/sandu/ximon/dao/domain/NewNovaLed.java
@@ -4,11 +4,12 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonIgnore; import com.sandu.ximon.dao.bo.NewNovaInfoBo; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -31,15 +32,6 @@ */ private String name; /** * ææ¾å¨åç§°(server) */ private String playerName; /** * ææ¾å¨ID(Vnnox) */ private String playerId; /** * ææ¾å¨å¯ä¸æ è¯,å¦æä¸ºnull代表没æç»å®ææ¾å¨(Vnnox) @@ -52,7 +44,7 @@ private LocalDateTime createTime; /** * å辨ç * æ¯å¦å¨çº¿è¿ */ private Integer onlineSign; @@ -64,122 +56,52 @@ @TableField(exist = false) private static final long serialVersionUID = 1L; // /** // * 产ååç§° // */ // @JsonIgnore // @TableField(exist = false) // private String productName; // // /** // * æ¾ç¤ºå±å®½åº¦,åä½ä¸ºåç´ // */ // @TableField(exist = false) // private Integer width; // // /** // * æ¾ç¤ºå±é«åº¦,åä½ä¸ºåç´ // */ // @TableField(exist = false) // private Integer height; // // /** // * æè½¬è§åº¦:0ï¼90ï¼180ï¼270 // */ // @TableField(exist = false) // private Integer rotation; // // /** // * æ¾ç¤ºå±å«å // */ // @JsonIgnore // @TableField(exist = false) // private String aliasName; // // /** // * æ¯å¦æäººå·²ç»ç»é // */ // @JsonIgnore // @TableField(exist = false) // private Boolean logined; // // /** // * è¥å·²ç»æäººç»éï¼ä»£è¡¨å·²ç»ç»éçç¨æ·åå表 // */ // @TableField(exist = false) // private List<String> username; // // /** // * tcpè¿æ¥ç«¯å£ // */ // @TableField(exist = false) // private Integer tcpPort; // // /** // * ftpè¿æ¥ç«¯å£ // */ // @TableField(exist = false) // private Integer ftpPort; // // /** // * ç³»ç»è®¾ç½®ftpç«¯å£ // */ // @TableField(exist = false) // private Integer syssetFtpPort; // // /** // * ç³»ç»è®¾ç½®tcpç«¯å£ // */ // @TableField(exist = false) // private Integer syssetTcpPort; // // /** // * ç»ç«¯è¿åçkey,åä¸ftpçå¯ç ç产è§å // */ // @TableField(exist = false) // private String key; // // /** // * ç³»ç»å¹³å°ä¿¡æ¯ï¼ææ¶ä¼åºç°rk3368,rk312xï¼ // */ // @TableField(exist = false) // private String platform; // // /** // * True表示ç»ç«¯æ¯æå 坿¨¡å¼ï¼å½ç¶å¦ææ¯æ°çç»ç«¯ä¸å®æ¯True // */ // @TableField(exist = false) // private Boolean privacy; // // // /** // * å½åå±ä½ç¶æï¼terminalStateå ±æ6个å¼,åå«ä»£è¡¨ï¼ // * 0ï¼æªè¿æ¥ä»»ä½ç»ç«¯ï¼å½åå¤äºæªè¿æ¥ç¶æ // * 1ï¼è¿æ¥æå使¯æªç»å½ç¶æ // * 2ï¼è¢«ä»äººç»å½ç¶æ // * 3ï¼ç»å½æåç¶æ // * 4ï¼å¯ç éè¯¯ç¶æ // * 5ï¼ç¦»çº¿ç¶æï¼å¤äºæç´¢ä¸å°çç¶æï¼ä½æ¯æ¾ç»è¢«æç´¢å°è¿ // */ // @TableField(exist = false) // private Integer terminalState; // // /** // * è®°å½ç¹å»å¿½ç¥å¯ç çæ¶é´æ³ // */ // @JsonIgnore // @TableField(exist = false) // private Long ignoreTime; // // /** // * æ¯å¦è®°ä½å¯ç ï¼true表示记ä½ï¼falseï¼è¡¨ç¤ºæ²¡æ // */ // @TableField(exist = false) // private Boolean hasPassword; // // /** // * å¯ç // */ // @TableField(exist = false) // private String password; /** * å¨çº¿ç¶æ 0离线 1å¨çº¿ */ @TableField(exist = false) private Integer isOnline = 0; /** * ç¯æid */ @TableField(exist = false) private Long poleId; /** * ç¯æåç§° */ @TableField(exist = false) private String poleName; /** * æå¡å¨è®¾å¤ä¿¡æ¯ */ @TableField(exist = false) private NewNovaInfoBo info; /** * å±å¹å¼å ³ 0å ³ 1å¼ */ @TableField(exist = false) private int screenPower = 0; /** * é³é 0-100 */ @TableField(exist = false) private BigDecimal volume = BigDecimal.ZERO; /** * 亮度ç¾åæ¯ï¼0-100 */ @TableField(exist = false) private BigDecimal brightness = BigDecimal.ZERO; /** * åæ¥ç¶æ */ @TableField(exist = false) private Integer sync = 0; } dao/src/main/java/com/sandu/ximon/dao/domain/PoleBinding.java
@@ -37,7 +37,7 @@ private String deviceCode; /** * 设å¤ç±»åï¼0è·¯ç¯ï¼1诺ç¦ï¼2å çµæ¡©ï¼3大æ°çæµï¼4æ°´è´¨çæµï¼5ip鳿±ï¼6lcdå¹¿åæºï¼7æå头ï¼8æä½å¾æµï¼9ä¸é®æå© ,10 ç讯 11大æ°åè * 设å¤ç±»åï¼0è·¯ç¯ï¼1诺ç¦ï¼2å çµæ¡©ï¼3大æ°çæµï¼4æ°´è´¨çæµï¼5ip鳿±ï¼6lcdå¹¿åæºï¼7æå头ï¼8æä½å¾æµï¼9ä¸é®æå© ,10 ç讯 11大æ°åè 12 æ°è¯ºç¦ */ private Integer deviceType; dao/src/main/java/com/sandu/ximon/dao/enums/MenuEnum.java
@@ -239,6 +239,14 @@ LED_NEW_FILE_LIST("æ°è¯ºç¦æä»¶å表"), LED_NEW_FILE_ADD("æ°è¯ºç¦æä»¶æ°å¢"), LED_NEW_FILE_DEL("æ°è¯ºç¦æä»¶å é¤"), LED_NEW_ADD("æ°è¯ºç¦å±å¹æ°å¢"), LED_NEW_EDIT("æ°è¯ºç¦å±å¹ç¼è¾"), LED_NEW_DEL("æ°è¯ºç¦å±å¹å é¤"), LED_NEW_LIST("æ°è¯ºç¦å±å¹å表"), LED_NEW_INFO("æ°è¯ºç¦å±å¹è¯¦æ "), LED_NEW_VOL("æ°è¯ºç¦é³éè°è"), LED_NEW_BRIGHTNESS("æ°è¯ºç¦äº®åº¦è°è"), LED_NEW_POWER("æ°è¯ºç¦å¼å ³è°è"), ; dao/src/main/java/com/sandu/ximon/dao/mapper/NewNovaLedMapper.java
@@ -1,8 +1,11 @@ package com.sandu.ximon.dao.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.sandu.ximon.dao.bo.NewNovaListBo; import com.sandu.ximon.dao.domain.NewNovaLed; import org.apache.ibatis.annotations.Mapper; import java.util.List; /** * @author Administrator @@ -13,6 +16,7 @@ @Mapper public interface NewNovaLedMapper extends BaseMapper<NewNovaLed> { List<NewNovaLed> listLed(String keyword, Long userId); } dao/src/main/resources/mapper/NewNovaLedMapper.xml
@@ -5,19 +5,39 @@ <mapper namespace="com.sandu.ximon.dao.mapper.NewNovaLedMapper"> <resultMap id="BaseResultMap" type="com.sandu.ximon.dao.domain.NewNovaLed"> <id property="id" column="id" jdbcType="BIGINT"/> <result property="name" column="name" jdbcType="VARCHAR"/> <result property="playerName" column="player_name" jdbcType="VARCHAR"/> <result property="playerId" column="player_id" jdbcType="VARCHAR"/> <result property="sn" column="sn" jdbcType="VARCHAR"/> <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> <result property="resolution" column="resolution" jdbcType="VARCHAR"/> <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> <id property="id" column="id" jdbcType="BIGINT"/> <result property="name" column="name" jdbcType="VARCHAR"/> <result property="sn" column="sn" jdbcType="VARCHAR"/> <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> <result property="onlineSign" column="online_sign" jdbcType="VARCHAR"/> <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> </resultMap> <sql id="Base_Column_List"> id,name,player_name, id ,name,player_name, player_id,sn,create_time, resolution,update_time </sql> <select id="listLed" resultType="com.sandu.ximon.dao.domain.NewNovaLed"> SELECT t1.*, t3.id AS pole_id, t3.pole_name FROM new_nova_led t1 LEFT JOIN pole_binding t2 ON t1.sn = t2.device_code AND t2.device_type = 12 LEFT JOIN pole t3 ON t2.pole_id = t3.id <where> 1=1 <if test="keyword != null and keyword != ''"> AND t1.name LIKE CONCAT(CONCAT('%', #{keyword}), '%') OR t1.sn LIKE CONCAT(CONCAT('%', #{keyword}), '%') </if> <if test="userId != null"> AND (t3.user_id = #{userId} OR t3.client_id = #{userId}) </if> </where> </select> </mapper> sandu-common/src/main/java/com/sandu/common/file/FileToThumbnail.java
@@ -1,5 +1,7 @@ package com.sandu.common.file; import com.sandu.common.file.config.NovaFileConfig; import com.sandu.common.util.SpringContextHolder; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.ImageType; import org.apache.pdfbox.rendering.PDFRenderer; @@ -125,7 +127,7 @@ ImageIO.write(bi, "png", targetFile); // æ¥çstopæºç ä¼èªå¨å ³æµ ff.stop(); return sourcePath; return targetFile.getPath().replace(SpringContextHolder.getBean(NovaFileConfig.class).getUploadRootPath(), "").replace(File.separator,"/"); } sandu-common/src/main/java/com/sandu/common/file/impl/LocalFileUploadImpl.java
@@ -5,14 +5,15 @@ import cn.hutool.core.io.FileTypeUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.UUID; import com.alibaba.fastjson.JSON; import com.sandu.common.enums.FileStorageEnums; import com.sandu.common.execption.BusinessException; import com.sandu.common.file.*; import com.sandu.common.file.config.FileProperties; import com.sandu.common.file.config.NovaFileConfig; import com.sandu.common.util.SpringContextHolder; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringEscapeUtils; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -24,7 +25,9 @@ import java.math.BigInteger; import java.security.MessageDigest; import java.time.LocalDate; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; /** @@ -35,8 +38,7 @@ @AllArgsConstructor public class LocalFileUploadImpl implements IFileUpload { private static List<String> videoSuffixList = CollectionUtil.newArrayList("mp4", "mov", "avi", "mkv", "m4v", "wmv", "asf", "asx", "rm", "rmvb", "3gp", "dat", "flv", "vob"); private static List<String> videoSuffixList = CollectionUtil.newArrayList("mp4", "mov", "avi", "mkv", "m4v", "wmv", "asf", "asx", "rm", "rmvb", "3gp", "dat", "flv", "vob"); private final FileToThumbnail fileToThumbnail; @@ -52,7 +54,7 @@ File dest; try { String type = Optional.ofNullable(FileTypeUtil.getType(multipartFile.getInputStream(), originalFilename)).orElse(""); dest = new File(fileProperties.getUploadRootPath() + type + File.separator + date + File.separator + fileName).getCanonicalFile(); dest = new File(fileProperties.getUploadRootPath() + File.separator + type + File.separator + date + File.separator + fileName).getCanonicalFile(); if (!dest.getParentFile().exists()) { dest.getParentFile().mkdirs(); @@ -67,8 +69,8 @@ FileUploadDto uploadDto = new FileUploadDto(); uploadDto.setOriginName(originalFilename); uploadDto.setFileName(fileName); uploadDto.setRealUrl(dest.getPath()); uploadDto.setFileUrl(fileProperties.getRealUrl() + dest.getPath()); uploadDto.setRealUrl(dest.getPath().replace(File.separator,"/")); uploadDto.setFileUrl(dest.getPath().replace(fileProperties.getUploadRootPath(), "").replace(File.separator,"/")); uploadDto.setFileType(FileUtil.getType(dest)); uploadDto.setStorageType(FileStorageEnums.LOCAL.getCode()); uploadDto.setFileSize(size); @@ -95,10 +97,9 @@ } try { InputStream inputStream = multipartFile.getInputStream(); String screenShot = fileProperties.getUploadRootPath() + uploadDto.getFileType() + File.separator + date + File.separator + "screenShot" + uuidStr + ".jpg"; String screenShot = fileProperties.getUploadRootPath() + uploadDto.getFileType() + File.separator + date + File.separator + "screenShot" + uuidStr + ".jpg"; String thumbnailForVideo = fileToThumbnail.getThumbnailForVideo(inputStream, screenShot); uploadDto.setScreenShot(fileProperties.getRealUrl() + thumbnailForVideo); uploadDto.setScreenShot(thumbnailForVideo); inputStream.close(); } catch (IOException e) { throw new RuntimeException(e); @@ -130,4 +131,18 @@ } return null; } public static void main(String[] args) { // String a = "E:\\\\file\\\\png\\\\2022-11-14\\\\bc8cbe61-2c81-4dac-911a-91b711eebc24\\\\png"; // System.out.println(a); // System.out.println(a.replaceAll("\\\\", "/")); File f = null; try { f = new File("E:\\file\\png\\2022-11-14\\cc4ce72e-2304-4f45-81e5-3b57519d57b6.png").getCanonicalFile(); } catch (IOException e) { e.printStackTrace(); } System.out.println(File.separator); System.out.println(f.getPath()); } } ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/conf/FilePathConfig.java
@@ -18,5 +18,10 @@ */ private String stringPath; /** * èç®çæè·¯å¾ */ private String outPutPath; } ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/file/NewNovaFileController.java
@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.github.pagehelper.PageHelper; import com.sandu.common.domain.ResponseVO; import com.sandu.common.file.FileToThumbnail; import com.sandu.common.file.config.NovaFileConfig; import com.sandu.common.object.BaseConditionVO; import com.sandu.common.util.ResponseUtil; import com.sandu.ximon.admin.newnova.param.NewNovaFileParam; @@ -28,7 +28,7 @@ @RequestMapping("/v1/nova/file") public class NewNovaFileController { private FileToThumbnail fileToThumbnail; private NovaFileConfig fileConfig; private PermissionConfig permissionConfig; private final NewNovaFileService newNovaFileService; @@ -59,7 +59,14 @@ wrapper.like(NewNovaFile::getName, keyword); } PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize()); return ResponseUtil.successPage(newNovaFileService.list(wrapper)); List<NewNovaFile> list = newNovaFileService.list(wrapper); list.forEach(file -> { file.setFileUrl(fileConfig.getRealUrl() + file.getFileUrl()); if (file.getScreenShot() != null) { file.setScreenShot(fileConfig.getRealUrl() + file.getScreenShot()); } }); return ResponseUtil.success(list); } @PostMapping("/uploading") ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/file/NewNovaFileService.java
@@ -101,7 +101,6 @@ * @return */ public NewNovaFile uploadFile(MultipartFile multipartFile) { // FileStorage fileStorage = localFileService.uploadFile(multipartFile); FileUploadDto fileUploadDto = localFileUpload.uploadFile(multipartFile); NewNovaFile novaFile = new NewNovaFile(); ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/led/NewNovaLedController.java
@@ -1,22 +1,18 @@ package com.sandu.ximon.admin.newnova.led; import com.sandu.common.domain.ResponseVO; import com.sandu.common.object.BaseConditionVO; import com.sandu.common.util.ResponseUtil; import com.sandu.ximon.admin.newnova.param.NewNovaLedParam; import com.sandu.ximon.admin.newnova.param.NewNovaStatusParam; import com.sandu.ximon.admin.newnova.utils.NovaAPIUtil; import com.sandu.ximon.admin.newnova.vo.StatusVO; import com.sandu.ximon.admin.security.PermissionConfig; import com.sandu.ximon.dao.domain.LedV2RegisterResultEntity; import com.sandu.ximon.dao.enums.MenuEnum; import lombok.AllArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import java.net.URISyntaxException; import java.util.Map; import java.util.List; /** * @author LiuHaoNan @@ -28,20 +24,114 @@ public class NewNovaLedController { private final PermissionConfig permissionConfig; private final NewNovaLedService newNovaLedService; private final NovaAPIUtil novaApiUtil; /** * å±å¹æ³¨å * * @param param * @return */ @PostMapping("/validateSN") public ResponseVO<Object> validateSN(@RequestBody @Validated NewNovaLedParam param) { if (!permissionConfig.check(MenuEnum.VNNOX_ADD.getCode())) { public ResponseVO<Object> validateSN(@RequestBody @Validated NewNovaLedParam param) { if (!permissionConfig.check(MenuEnum.LED_NEW_ADD.getCode())) { return ResponseUtil.fail("缺å°å¯¹åºç¨æ·æé"); } boolean b= newNovaLedService.saveLed(param); return ResponseUtil.success("ledV2RegisterResultEntity"); boolean b = newNovaLedService.saveLed(param); return ResponseUtil.success(b); } @PostMapping("/test") public ResponseVO<Object> validateSN() { StatusVO mzva51930N2113017308 = novaApiUtil.login("MZVA51930N2113017308"); return ResponseUtil.success(mzva51930N2113017308); /** * ç¼è¾å±å¹åç§° */ @PostMapping("/editLed") public ResponseVO editLed(@RequestBody NewNovaLedParam param) { if (!permissionConfig.check(MenuEnum.LED_NEW_EDIT.getCode())) { return ResponseUtil.fail("缺å°å¯¹åºç¨æ·æé"); } return ResponseUtil.success(newNovaLedService.editLed(param)); } /** * å é¤å±å¹ */ @PostMapping("/delLed") public ResponseVO delLEd(@RequestBody List<Long> ids) { if (!permissionConfig.check(MenuEnum.LED_NEW_DEL.getCode())) { return ResponseUtil.fail("缺å°å¯¹åºç¨æ·æé"); } return ResponseUtil.success(newNovaLedService.delLed(ids)); } /** * å±å¹å表 */ @GetMapping("/listLed") public ResponseVO listLed(BaseConditionVO baseConditionVO, @RequestParam(required = false, value = "keyword") String keyword, @RequestParam(required = false, value = "onlineStatus") boolean onlineStatus) { if (!permissionConfig.check(MenuEnum.LED_NEW_LIST.getCode())) { return ResponseUtil.fail("缺å°å¯¹åºç¨æ·æé"); } return ResponseUtil.success(newNovaLedService.listLed(baseConditionVO, keyword, onlineStatus)); } /** * 详ç»ä¿¡æ¯ * * @param ledId * @return */ @GetMapping("/getInfo") public ResponseVO getInfo(@RequestParam(required = true, value = "ledId") Long ledId) { if (!permissionConfig.check(MenuEnum.LED_NEW_INFO.getCode())) { return ResponseUtil.fail("缺å°å¯¹åºç¨æ·æé"); } return ResponseUtil.success(newNovaLedService.getInfo(ledId)); } /** * 设置亮度 */ @PostMapping("/setBrightness") public ResponseVO setScreenBrightness(@RequestBody @Validated NewNovaStatusParam param) { if (!permissionConfig.check(MenuEnum.LED_NEW_VOL.getCode())) { return ResponseUtil.fail("缺å°å¯¹åºç¨æ·æé"); } if (param.getBrightness() == null) { return ResponseUtil.fail("亮度ä¸è½ä¸ºç©º"); } else { if (param.getBrightness() > 100 || param.getBrightness() < 0) { return ResponseUtil.fail("亮度èå´ä¸º: 0-100"); } } if (newNovaLedService.getById(param.getId()) == null) { return ResponseUtil.fail("设å¤ä¸åå¨"); } return ResponseUtil.success(NovaAPIUtil.getInstanceUtil().setScreenBrightness(param)); } // @PostMapping("/tranPro") // public ResponseVO<Object> tranPro(@RequestBody Map pageInfo) throws InterruptedException { // NovaAPIUtil a = NovaAPIUtil.getInstanceUtil(); // StatusVO login = a.login("MZVA51930N2113017308"); // if (login.getStatusCode() != 0) { // return ResponseUtil.fail("genVO"); // } // StatusVO createPro = a.createPro(new ProWHVO("jiemu 1", 128, 256)); // System.out.println(createPro + "createPro"); // StatusVO editPro = a.editProgram(Integer.valueOf(createPro.getStatusData()), pageInfo); // StatusVO genVO = a.genrateProgram(Integer.valueOf(createPro.getStatusData())); // ProgramPrarm page = new ProgramPrarm(); // page.setInsertPlay(true); // page.setProgramID(Integer.valueOf(createPro.getStatusData())); // page.setStartPlayAfterTransferred(true); // List<String> sns = new ArrayList<String>(); // sns.add("MZVA51930N2113017308"); // page.setSnList(sns); // List<TrasfromStatusVO> trasfromStatusVOS = a.trasfromProgram(page); // return ResponseUtil.success(trasfromStatusVOS); // } } ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/led/NewNovaLedService.java
@@ -1,13 +1,26 @@ package com.sandu.ximon.admin.newnova.led; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageHelper; import com.sandu.common.execption.BusinessException; import com.sandu.common.object.BaseConditionVO; import com.sandu.common.service.impl.BaseServiceImpl; import com.sandu.common.util.SpringContextHolder; import com.sandu.ximon.admin.newnova.param.NewNovaLedParam; import com.sandu.ximon.admin.newnova.utils.NovaAPIUtil; import com.sandu.ximon.admin.security.SecurityUtils; import com.sandu.ximon.admin.service.PoleBindingService; import com.sandu.ximon.admin.service.PoleService; import com.sandu.ximon.dao.domain.NewNovaLed; import com.sandu.ximon.dao.domain.Pole; import com.sandu.ximon.dao.domain.PoleBinding; import com.sandu.ximon.dao.mapper.NewNovaLedMapper; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * @author LiuHaoNan @@ -32,9 +45,113 @@ NewNovaLed led = new NewNovaLed(); led.setSn(param.getSn()); led.setName(param.getName()); led.setOnlineSign(0); return save(led); } /** * ç¼è¾å±å¹åç§° * * @param param * @return */ public boolean editLed(NewNovaLedParam param) { if (param.getId() == null) { throw new BusinessException("å±å¹idä¸è½ä¸ºç©º"); } if (param.getName() == null || param.getName().isEmpty()) { throw new BusinessException("å±å¹åç§°ä¸è½ä¸ºç©º"); } NewNovaLed one = getById(param.getId()); if (one == null) { throw new BusinessException("设å¤ä¸åå¨ï¼"); } // one.setSn(param.getSn()); one.setName(param.getName()); return updateById(one); } /** * å é¤LED * * @param ids * @return */ public boolean delLed(List<Long> ids) { if (ids.isEmpty()) { throw new BusinessException("idä¸è½ä¸ºç©º"); } List<NewNovaLed> newNovaLeds = listByIds(ids); if (newNovaLeds.isEmpty()) { throw new BusinessException("设å¤ä¸åå¨ï¼"); } //è·åå é¤è®¾å¤ç设å¤ç List<String> snList = newNovaLeds.stream().map(NewNovaLed::getSn).collect(Collectors.toList()); //å é¤ç»å®å ³ç³» SpringContextHolder.getBean(PoleBindingService.class).remove(Wrappers.lambdaQuery(PoleBinding.class) .eq(PoleBinding::getDeviceType, 12).in(PoleBinding::getDeviceCode, snList)); //å é¤è®¾å¤ return removeByIds(ids); } /** * LEDå表 * * @param baseConditionVO * @param keyword * @param onlineStatus * @return */ public List<NewNovaLed> listLed(BaseConditionVO baseConditionVO, String keyword, boolean onlineStatus) { NovaAPIUtil instanceUtil = NovaAPIUtil.getInstanceUtil(); //æåº PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize()); List<NewNovaLed> newNovaListBos = baseMapper.listLed(keyword, SecurityUtils.getClientId()); //è·åå¨çº¿ç¶æ instanceUtil.getOnlineStatus(newNovaListBos); //è·åå±å¹å¼å ³ instanceUtil.getScreenPowerState(newNovaListBos); //è·åé³é instanceUtil.getVolumeState(newNovaListBos); //è·å亮度 instanceUtil.getScreenBrightness(newNovaListBos); //è·ååæ¥ç¶æ instanceUtil.getSync(newNovaListBos); updateBatchById(newNovaListBos); return newNovaListBos; } public NewNovaLed getInfo(Long ledId) { NovaAPIUtil instanceUtil = NovaAPIUtil.getInstanceUtil(); NewNovaLed byId = getById(ledId); if (byId == null) { throw new BusinessException("设å¤ä¸å卿id䏿£ç¡® !"); } PoleBinding poleBinding = SpringContextHolder.getBean(PoleBindingService.class).getOne(Wrappers.lambdaQuery(PoleBinding.class) .eq(PoleBinding::getDeviceCode, byId.getSn()).eq(PoleBinding::getDeviceType, 12)); if (poleBinding != null) { Pole pole = SpringContextHolder.getBean(PoleService.class).getById(poleBinding.getPoleId()); byId.setPoleId(pole.getId()); byId.setPoleName(pole.getPoleName()); } List<NewNovaLed> list = new ArrayList<>(); list.add(byId); //è·åå¨çº¿ç¶æ instanceUtil.getOnlineStatus(list); //è·åå±å¹å¼å ³ instanceUtil.getScreenPowerState(list); //è·åé³é instanceUtil.getVolumeState(list); //è·å亮度 instanceUtil.getScreenBrightness(list); //è·ååæ¥ç¶æ instanceUtil.getSync(list); //è·å详æ instanceUtil.getInfo(byId); return list.get(0); } } ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/param/NewNovaLedParam.java
@@ -14,6 +14,10 @@ @NotBlank(message = "snç ä¸è½ä¸ºç©º") private String sn; @NotBlank(message = "å±å¹åç§°ä¸è½ä¸ºç©º") private String name; private Long id; } ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/param/NewNovaStatusParam.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,68 @@ package com.sandu.ximon.admin.newnova.param; import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.util.List; /** * @author LiuHaoNan * @date 2022/11/11 * æ°è¯ºç¦ 设å¤ç¶æè°è å¼å ³ é³é 亮度 ç */ @Data public class NewNovaStatusParam { /** * id */ @NotNull(message = "idä¸è½ä¸ºç©º") private Long id; /** * 设å¤ç */ @NotBlank(message = "snä¸è½ä¸ºç©º") private String sn; /** * 亮度 */ private Double brightness; /** * é³é */ private Double volume; /** * åæ¥ç¶æ */ private boolean sync = true; /** * ntp */ private boolean ntp = true; private List<NovaDTO> novaList; @NoArgsConstructor @Data public static class NovaDTO { private Long id; private String sn; private String name; private boolean status = false; } } ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/param/ProgramPrarm.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ package com.sandu.ximon.admin.newnova.param; import lombok.Data; import java.util.List; /** * @author LiuHaoNan * @date 2022/11/10 */ @Data public class ProgramPrarm { /** * sn */ private List<String> snList; /** * èç®id */ private Integer programID; /** * æ¯å¦ç«å³ææ¾èç® */ private Boolean startPlayAfterTransferred; /** * æ¯å¦ææ */ private Boolean insertPlay; } ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/utils/CountDownLatchUtil.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package com.sandu.ximon.admin.newnova.utils; import org.apache.commons.lang.RandomStringUtils; import java.util.concurrent.CountDownLatch; /** * @author LiuHaoNan * @date 2022/11/10 */ public class CountDownLatchUtil { public String createCoutDown(com.sandu.ximon.admin.utils.CountDownLatchUtil countDownLatchUtil) { CountDownLatch countDownLatch = new CountDownLatch(1); //è·åä¸ä¸ª7ä½éæºæ° String str = RandomStringUtils.randomAlphanumeric(7); countDownLatchUtil.push(str, countDownLatch); return str; } } 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(); } } ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/vo/ProGenrateVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,68 @@ package com.sandu.ximon.admin.newnova.vo; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; /** * @author LiuHaoNan * @date 2022/11/10 */ @NoArgsConstructor @Data @AllArgsConstructor public class ProGenrateVO { private Integer programID; private String outPutPath; // private List<MediasPathDTO> mediasPath; // // private ComplexProgramDTO complexProgram; // // @NoArgsConstructor // @Data // public static class ComplexProgramDTO { // // private String name; // // private List<ProgramRegularDTO> programRegular; // // @NoArgsConstructor // @Data // public static class ProgramRegularDTO { // // private Integer priority; // // private Integer programID; // // private List<ConstraintsDTO> constraints; // // @NoArgsConstructor // @Data // public static class ConstraintsDTO { // // private String startTime; // // private String endTime; // // private List<String> cron; // } // } // } // // @NoArgsConstructor // @Data // public static class MediasPathDTO { // // private String oldPath; // // private String newPath; // } } ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/vo/ProWHVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,31 @@ package com.sandu.ximon.admin.newnova.vo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * @author LiuHaoNan * @date 2022/11/10 * èç®å辨çåæ° */ @Data @AllArgsConstructor public class ProWHVO { /** * èç®åç§° */ private String name; /** * èç®å®½ */ private Integer width; /** * èç®é« */ private Integer height; } ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/vo/ProgramInfoVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ package com.sandu.ximon.admin.newnova.vo; import lombok.AllArgsConstructor; import lombok.Data; import java.util.Map; /** * @author LiuHaoNan * @date 2022/11/10 */ @Data public class ProgramInfoVO { /** * èç®id(å建èç®è¿åçid) */ private int programID; /** * pageId(å½åçæ¬pageId为1) */ private int pageID = 1; /** * pageç详ç»ä¿¡æ¯ */ private Map pageInfo; } ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/vo/StatusVO.java
@@ -9,6 +9,12 @@ @Data public class StatusVO { public StatusVO(int statusCode) { this.statusCode = statusCode; } public StatusVO() { } private int statusCode; private String statusData; ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/vo/TransfromProgramVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,73 @@ package com.sandu.ximon.admin.newnova.vo; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Map; /** * @author LiuHaoNan * @date 2022/11/10 */ @NoArgsConstructor @Data public class TransfromProgramVO { /** * å¯ä¸æ è¯ç¬¦ */ private String sn; /** * 缩ç¥å¾è·¯å¾ï¼æ¬å°å°åï¼ */ private String iconPath; /** * 缩ç¥å¾åç§° */ private String iconName; /** * èç®ç¸å ³æä»¶è·¯å¾ */ private SendProgramFilePathsDTO sendProgramFilePaths; /** * èç®åç§°ï¼ä¸å建èç®ä¸çnameä¿æä¸è´ */ private String programName; /** * èç®çå¯ä¸è¯å«å·ï¼åä¸PCæå¥½ä¿æä¸åï¼å¦:åè®¡ç®æºåç§° */ private String deviceIdentifier; /** * æ¯å¦ç«å³ææ¾èç® */ private Boolean startPlayAfterTransferred; /** * æ¯å¦ææ */ private Boolean insertPlay; @NoArgsConstructor @Data public static class SendProgramFilePathsDTO { /** * èç®æä»¶è·¯å¾ï¼çæèç®æ¯outputpathå¼+programï¼IDæ¯å¤å°ï¼å°±æ¯å¤å°ï¼ */ private String programPath; /** * {åªä½è·¯å¾ : åªä½åç§°}(ä» æ¬å°å¾çï¼è§é¢ï¼GIFæä»¶éè¦æ¬¡è·¯å¾) */ private Map<String, String> mediasPath; } } ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/vo/TrasfromStatusVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ package com.sandu.ximon.admin.newnova.vo; import lombok.Data; /** * @author LiuHaoNan * @date 2022/11/10 */ @Data public class TrasfromStatusVO extends StatusVO { private String sn; } ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java
@@ -1338,7 +1338,7 @@ //è®¾ç½®è§¦åæ¡ä»¶ åå ¥Redis 15åéè¶ æ¶ 15åéå 忬¡è°ç¨ç´æ¥è¿å redisUtils.set("redisStatusKeyTimeout", System.currentTimeMillis(), 60 * 15); CountDownLatch countDownLatch = new CountDownLatch(7);//todo CountDownLatch countDownLatch = new CountDownLatch(7);//todo å 个设å¤è®¾ç½®ä¸ºå //è·åä¸ä¸ª7ä½éæºæ° String str = RandomStringUtils.randomAlphanumeric(7); countDownLatchUtil.push(str, countDownLatch); ximon-admin/src/main/java/com/sandu/ximon/admin/utils/CountDownLatchUtil.java
@@ -1,7 +1,9 @@ package com.sandu.ximon.admin.utils; import lombok.Data; import org.apache.commons.lang.RandomStringUtils; import org.springframework.context.annotation.Configuration; import java.util.concurrent.TimeUnit; import java.util.HashMap; import java.util.Map; @@ -27,9 +29,42 @@ } } /** * å é¤CountDown * @param id * @param countDownLatch 对象 * @param timeout çå¾ æ¶é´ */ public void remove(String id, CountDownLatch countDownLatch, int timeout) { if (countDownLatch == null) { return; } try { countDownLatch.await(timeout, TimeUnit.MILLISECONDS); if (data != null) { data.remove(id); } } catch (InterruptedException e) { throw new RuntimeException(e); } } /** * 没æçå¾ æ¶é´çå é¤ * @param id */ public void remove(String id) { if (data != null) { data.remove(id); } } public CountDownResultUtil createCoutDown(int times) { CountDownLatchUtil countDownLatchUtil = new CountDownLatchUtil(); CountDownLatch countDownLatch = new CountDownLatch(times); //è·åä¸ä¸ª7ä½éæºæ° String str = RandomStringUtils.randomAlphanumeric(7); countDownLatchUtil.push(str, countDownLatch); return new CountDownResultUtil(str, countDownLatch); } } ximon-admin/src/main/java/com/sandu/ximon/admin/utils/CountDownResultUtil.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package com.sandu.ximon.admin.utils; import lombok.AllArgsConstructor; import lombok.Data; import java.util.concurrent.CountDownLatch; /** * @author LiuHaoNan * @date 2022/11/10 */ @Data @AllArgsConstructor public class CountDownResultUtil { private String key; private CountDownLatch countDownLatch; } ximon-admin/src/main/resources/application-local.yml
@@ -32,7 +32,7 @@ #************************æ¬å°ä¸ä¼ æä»¶é ç½®************************ upload: #æä»¶æå¡å¨è·¯å¾ upload-root-path: E:\file\novafile upload-root-path: E:\file\ storage: local #æå¡å¨æä»¶åç¼ real-url: http://localhost/ @@ -86,11 +86,12 @@ new-nova: #ä¾èµå°å string-path: C:\Users\Administrator\Desktop\novaWin\bin\viplexcore.dll out-put-path: E:\IdeaProjects\XMPoleManager/temp new-nova-file: upload: #æä»¶æå¡å¨è·¯å¾ upload-root-path: E:\file\novafile upload-root-path: E:\file\ storage: local #æå¡å¨æä»¶åç¼ real-url: http://localhost/ real-url: http://183.45.76.239:8089/file/