2021与蓝度共同重构项目,服务端
Van333
2022-11-14 f8c33ad3fb09dd0f70b68b74d59ce28761142bf0
Merge remote-tracking branch 'origin/xm-20221107' into xm-20221107
已添加11个文件
已修改18个文件
1918 ■■■■ 文件已修改
dao/src/main/java/com/sandu/ximon/dao/bo/NewNovaInfoBo.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/bo/NewNovaListBo.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/NewNovaLed.java 180 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/PoleBinding.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/enums/MenuEnum.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/mapper/NewNovaLedMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/NewNovaLedMapper.xml 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sandu-common/src/main/java/com/sandu/common/file/FileToThumbnail.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
sandu-common/src/main/java/com/sandu/common/file/impl/LocalFileUploadImpl.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/conf/FilePathConfig.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/file/NewNovaFileController.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/file/NewNovaFileService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/led/NewNovaLedController.java 124 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/led/NewNovaLedService.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/param/NewNovaLedParam.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/param/NewNovaStatusParam.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/param/ProgramPrarm.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/utils/CountDownLatchUtil.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/utils/NovaAPIUtil.java 841 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/vo/ProGenrateVO.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/vo/ProWHVO.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/vo/ProgramInfoVO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/vo/StatusVO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/vo/TransfromProgramVO.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/vo/TrasfromStatusVO.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/CountDownLatchUtil.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/CountDownResultUtil.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/resources/application-local.yml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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/