2021与蓝度共同重构项目,服务端
liuhaonan
2022-11-10 6554fd4bf83e50d39fc75f1c4ac3fbf6675f1962
changes
已修改6个文件
已添加10个文件
已删除2个文件
872 ■■■■ 文件已修改
dao/src/main/java/com/sandu/ximon/dao/domain/NewNovaFile.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/NewNovaLed.java 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/mapper/NewNovaLedMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/NewNovaLedMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/PoleBindingMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sandu-common/src/main/java/com/sandu/common/file/config/NovaFileConfig.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sandu-common/src/main/java/com/sandu/common/file/impl/LocalFileUploadImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/pom.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/conf/FilePathConfig.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/led/NewNovaLedController.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/led/NewNovaLedService.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/libs/jna-5.6.0.jar 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/libs/jna-platform-5.6.0.jar 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/param/NewNovaLedParam.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/utils/APITest.java 275 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/utils/NovaAPIUtil.java 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/vo/StatusVO.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/resources/application-local.yml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/NewNovaFile.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import lombok.Data;
@@ -69,7 +70,7 @@
    /**
     * ä¸Šä¼ æ—¶é—´
     */
    private Date createTime;
    private LocalDateTime createTime;
    /**
     * è§†é¢‘æ—¶é•¿
dao/src/main/java/com/sandu/ximon/dao/domain/NewNovaLed.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,185 @@
package com.sandu.ximon.dao.domain;
import com.baomidou.mybatisplus.annotation.IdType;
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 lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * æ–°è¯ºç“¦è®¾å¤‡è¡¨
 *
 * @TableName new_nova_led
 */
@NoArgsConstructor
@TableName(value = "new_nova_led")
@Data
public class NewNovaLed implements Serializable {
    /**
     * æ’­æ”¾å™¨ID
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * æ’­æ”¾å™¨åç§°(数据库)
     */
    private String name;
    /**
     * æ’­æ”¾å™¨åç§°(server)
     */
    private String playerName;
    /**
     * æ’­æ”¾å™¨ID(Vnnox)
     */
    private String playerId;
    /**
     * æ’­æ”¾å™¨å”¯ä¸€æ ‡è¯†,如果为null代表没有绑定播放器(Vnnox)
     */
    private String sn;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    private LocalDateTime createTime;
    /**
     * åˆ†è¾¨çއ
     */
    private Integer onlineSign;
    /**
     * æ›´æ–°æ—¶é—´
     */
    private LocalDateTime updateTime;
    @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;
}
dao/src/main/java/com/sandu/ximon/dao/mapper/NewNovaLedMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.sandu.ximon.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sandu.ximon.dao.domain.NewNovaLed;
import org.apache.ibatis.annotations.Mapper;
/**
 * @author Administrator
 * @description é’ˆå¯¹è¡¨ã€new_nova_led(新诺瓦设备表)】的数据库操作Mapper
 * @createDate 2022-11-09 11:10:48
 * @Entity com.sandu.ximon.dao.domain.NewNovaLed
 */
@Mapper
public interface NewNovaLedMapper extends BaseMapper<NewNovaLed> {
}
dao/src/main/resources/mapper/NewNovaLedMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<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"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,name,player_name,
        player_id,sn,create_time,
        resolution,update_time
    </sql>
</mapper>
dao/src/main/resources/mapper/PoleBindingMapper.xml
@@ -23,9 +23,10 @@
    <select id="getPoleByBinding" resultType="com.sandu.ximon.dao.domain.Pole">
        SELECT t2.*
        FROM `pole_binding` t1
        LEFT JOIN pole t2 ON t1.pole_id = t2.id
        LEFT JOIN pole t2 ON t1.pole_id = t2.id  AND t1.device_type=0
        <where>
            t1.device_code = #{Mac}
            AND t1.device_type=0
            <if test="type != null">
                AND t1.device_type = #{type}
            </if>
sandu-common/src/main/java/com/sandu/common/file/config/NovaFileConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.sandu.common.file.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
 * @author LiuHaoNan
 * @date 2022/11/9
 */
@Data
@Configuration
@ConfigurationProperties(prefix = "new-nova-file.upload")
public class NovaFileConfig {
    /**
     * æœåŠ¡å™¨å­˜å‚¨çš„æ ¹è·¯å¾„
     */
    private String uploadRootPath;
    /**
     * æœåС噍ip和端口
     */
    private String realUrl;
}
sandu-common/src/main/java/com/sandu/common/file/impl/LocalFileUploadImpl.java
@@ -9,6 +9,7 @@
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;
@@ -41,7 +42,7 @@
    @Override
    public FileUploadDto uploadFile(MultipartFile multipartFile) {
        FileProperties fileProperties = SpringContextHolder.getBean(FileProperties.class);
        NovaFileConfig fileProperties = SpringContextHolder.getBean(NovaFileConfig.class);
        String originalFilename = multipartFile.getOriginalFilename();
        long size = multipartFile.getSize();
        String suffix = FileUtil.getSuffix(originalFilename);
ximon-admin/pom.xml
@@ -105,6 +105,22 @@
                </exclusion>
            </exclusions>
        </dependency>
        <!--新诺瓦依赖-->
        <!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna -->
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>5.6.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna-platform -->
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna-platform</artifactId>
            <version>5.6.0</version>
        </dependency>
    </dependencies>
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/conf/FilePathConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.sandu.ximon.admin.newnova.conf;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
 * @author LiuHaoNan
 * @date 2022/11/9
 */
@Data
@Configuration
@ConfigurationProperties(prefix = "new-nova")
public class FilePathConfig {
    /**
     * ä¾èµ–存放路径
     */
    private String stringPath;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/led/NewNovaLedController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package com.sandu.ximon.admin.newnova.led;
import com.sandu.common.domain.ResponseVO;
import com.sandu.common.util.ResponseUtil;
import com.sandu.ximon.admin.newnova.param.NewNovaLedParam;
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 java.net.URISyntaxException;
import java.util.Map;
/**
 * @author LiuHaoNan
 * @date 2022/11/9
 */
@RestController
@AllArgsConstructor
@RequestMapping("/v1/nova/led")
public class NewNovaLedController {
    private final PermissionConfig permissionConfig;
    private final NewNovaLedService newNovaLedService;
    private final NovaAPIUtil novaApiUtil;
    @PostMapping("/validateSN")
    public ResponseVO<Object> validateSN(@RequestBody @Validated NewNovaLedParam param)  {
        if (!permissionConfig.check(MenuEnum.VNNOX_ADD.getCode())) {
            return ResponseUtil.fail("缺少对应用户权限");
        }
       boolean b= newNovaLedService.saveLed(param);
        return ResponseUtil.success("ledV2RegisterResultEntity");
    }
    @PostMapping("/test")
    public ResponseVO<Object> validateSN()  {
        StatusVO mzva51930N2113017308 = novaApiUtil.login("MZVA51930N2113017308");
        return ResponseUtil.success(mzva51930N2113017308);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/led/NewNovaLedService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
package com.sandu.ximon.admin.newnova.led;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.service.impl.BaseServiceImpl;
import com.sandu.ximon.admin.newnova.param.NewNovaLedParam;
import com.sandu.ximon.dao.domain.NewNovaLed;
import com.sandu.ximon.dao.mapper.NewNovaLedMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
/**
 * @author LiuHaoNan
 * @date 2022/11/9
 */
@Service
@AllArgsConstructor
public class NewNovaLedService extends BaseServiceImpl<NewNovaLedMapper, NewNovaLed> {
    /**
     * å±å¹•注册
     *
     * @param param
     * @return
     */
    public boolean saveLed(NewNovaLedParam param) {
        NewNovaLed one = getOne(Wrappers.lambdaQuery(NewNovaLed.class).eq(NewNovaLed::getSn, param.getSn()));
        if (one != null) {
            throw new BusinessException("设备已存在,请勿重复注册!");
        }
        NewNovaLed led = new NewNovaLed();
        led.setSn(param.getSn());
        led.setName(param.getName());
        return save(led);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/libs/jna-5.6.0.jar
Binary files differ
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/libs/jna-platform-5.6.0.jar
Binary files differ
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/param/NewNovaLedParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.sandu.ximon.admin.newnova.param;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
 * @author LiuHaoNan
 * @date 2022/11/9
 */
@Data
public class NewNovaLedParam {
    @NotBlank(message = "sn码不能为空")
    private String sn;
    private String name;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/utils/APITest.java
@@ -1,166 +1,161 @@
package com.sandu.ximon.admin.newnova.utils;
import com.sun.jna.Native;
/*
* ä½¿ç”¨å‰é˜…读:
* 1 å…³äºŽå¯èƒ½å‘生的搜索不到T卡的原因:
*   1.1. æ‰“开了express,导致udp端口被占用,请关闭express软件后重试
*   1.2. SDK和T卡不在同一个局域网,可以尝试指定ip搜索,使用方法见:https://docapi.vnnox.com/web/#/7?page_id=609
* 2 å…³äºŽä½¿ç”¨sdk动态库可能出现的问题及解决方法:
*
*     2.1. åœ¨linux下如果出现lib***.so  file too short ,这种错误,有可能是软连接失效,可以尝试删除原有文件,尝试 ln -s é‡æ–°ç”Ÿæˆè½¯è¿žæŽ¥ã€‚比如: ./libcurl.so: file too short,首先 rm libcurl.so,然后ln -s  libcurl.so.4.3.0 libcurl.so即可。
*     2.2. é’ˆå¯¹java项目,使用JNA加载so库时,请使用绝对路径。比如:
*     //winodws
*     ViplexCore instance = (ViplexCore) Native.loadLibrary("D:\\ViplexCore3.3.0.01_x64\\bin\\viplexcore.dll",ViplexCore.class);
*     //或者 linux
*     ViplexCore instance = (ViplexCore) Native.loadLibrary("home/user/desktop/ViplexCore_3.3.0.01_CentOS/bin/libviplexcore.so",ViplexCore.class);
*
*     2.3. é’ˆå¯¹java项目,如果要使用相对路径,请将sdk动态库路径添加到classpath环境变量,有下面几种方法(也可以搜索相关教程添加),例如:
*       2.3.1. å‘½ä»¤è¡Œä½¿ç”¨ï¼š         javac -cp "C:\Users\HiWin10\Downloads\ViplexCore3.3.0.01_x64\bin"   (详见SDK demo/java/下runDemo.sh或者runDemo.bat文件)
*       2.3.2. å¯¼å…¥çŽ¯å¢ƒå˜é‡ï¼Œå¦‚ï¼š   export CLASSPATH=$CLASSPATH:home/user/ViplexCore3.3.0.01_x64/
*       2.3.3. é’ˆå¯¹springboot项目: java -Xbootclasspath/a:/home/nova/novasdk/
* */
/*
 * ä½¿ç”¨å‰é˜…读:
 * 1 å…³äºŽå¯èƒ½å‘生的搜索不到T卡的原因:
 *   1.1. æ‰“开了express,导致udp端口被占用,请关闭express软件后重试
 *   1.2. SDK和T卡不在同一个局域网,可以尝试指定ip搜索,使用方法见:https://docapi.vnnox.com/web/#/7?page_id=609
 * 2 å…³äºŽä½¿ç”¨sdk动态库可能出现的问题及解决方法:
 *
 *     2.1. åœ¨linux下如果出现lib***.so  file too short ,这种错误,有可能是软连接失效,可以尝试删除原有文件,尝试 ln -s é‡æ–°ç”Ÿæˆè½¯è¿žæŽ¥ã€‚比如: ./libcurl.so: file too short,首先 rm libcurl.so,然后ln -s  libcurl.so.4.3.0 libcurl.so即可。
 *     2.2. é’ˆå¯¹java项目,使用JNA加载so库时,请使用绝对路径。比如:
 *     //winodws
 *     ViplexCore instance = (ViplexCore) Native.loadLibrary("D:\\ViplexCore3.3.0.01_x64\\bin\\viplexcore.dll",ViplexCore.class);
 *     //或者 linux
 *     ViplexCore instance = (ViplexCore) Native.loadLibrary("home/user/desktop/ViplexCore_3.3.0.01_CentOS/bin/libviplexcore.so",ViplexCore.class);
 *
 *     2.3. é’ˆå¯¹java项目,如果要使用相对路径,请将sdk动态库路径添加到classpath环境变量,有下面几种方法(也可以搜索相关教程添加),例如:
 *       2.3.1. å‘½ä»¤è¡Œä½¿ç”¨ï¼š         javac -cp "C:\Users\HiWin10\Downloads\ViplexCore3.3.0.01_x64\bin"   (详见SDK demo/java/下runDemo.sh或者runDemo.bat文件)
 *       2.3.2. å¯¼å…¥çŽ¯å¢ƒå˜é‡ï¼Œå¦‚ï¼š   export CLASSPATH=$CLASSPATH:home/user/ViplexCore3.3.0.01_x64/
 *       2.3.3. é’ˆå¯¹springboot项目: java -Xbootclasspath/a:/home/nova/novasdk/
 * */
public class APITest {
    static Boolean g_bAPIReturn = false;
    static int g_code = 0;
    static String g_sn = "BZSA79353N1310006847"; //BZSA07313J0350000997
    static String g_sn = "MZVA51930N2113017308"; //BZSA07313J0350000997
    static void waitAPIReturn() throws InterruptedException
    {
        while (!g_bAPIReturn)
        {
    static void waitAPIReturn() throws InterruptedException {
        while (!g_bAPIReturn) {
            Thread.sleep(1000);
        }
        g_bAPIReturn = false;
    }
    static void testApi() throws InterruptedException
        {
            System.setProperty("jna.encoding", "UTF-8");
            ViplexCore instance = (ViplexCore) Native.loadLibrary("viplexcore",ViplexCore.class);
            //当需要集成到项目中时,请修改上面加载库的位置为你下载的sdk库的绝对路径,windows下如:
            //ViplexCore instance = (ViplexCore) Native.loadLibrary("D:\\ViplexCore3.3.0.01_x64\\bin\\viplexcore.dll",ViplexCore.class);
            //当需要集成到项目中时,请修改此处加载库的位置为你下载的sdk库的绝对路径,linux下如:
            //ViplexCore instance = (ViplexCore) Native.loadLibrary("home/user/desktop/ViplexCore_3.3.0.01_CentOS/bin/libviplexcore.so",ViplexCore.class);
            ViplexCore.CallBack callBack = new ViplexCore.CallBack() {
    static void testApi() throws InterruptedException {
        System.setProperty("jna.encoding", "UTF-8");
//            ViplexCore instance = (ViplexCore) Native.loadLibrary("viplexcore",ViplexCore.class);
        //当需要集成到项目中时,请修改上面加载库的位置为你下载的sdk库的绝对路径,windows下如:
        ViplexCore instance = (ViplexCore) Native.loadLibrary("C:\\Users\\Administrator\\Desktop\\novaWin\\bin\\viplexcore.dll", ViplexCore.class);
                @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;
                }
            };
        //当需要集成到项目中时,请修改此处加载库的位置为你下载的sdk库的绝对路径,linux下如:
//            ViplexCore instance = (ViplexCore) Native.loadLibrary("C:\\Users\\Administrator\\Desktop\\novaLinux\\bin\\libviplexcore.so",ViplexCore.class);
        ViplexCore.CallBack callBack = new ViplexCore.CallBack() {
            String rootDir = System.getProperty("user.dir") + "/temp";
            rootDir = rootDir.replaceAll( "\\\\","/");
            String createProgram = "{\"name\":\"Demo\",\"width\":500,\"height\":500,\"tplID\":1,\"winInfo\":{\"height\":100,\"width\":100,\"left\":0,\"top\":0,\"zindex\":0,\"index\":0}}";
            String editProgram = "{\"programID\":1,\"pageID\":1,\"pageInfo\":{\"name\":\"节目\",\"widgetContainers\":[{\"audioGroup\":\"\",\"backgroundColor\":\"#00000000\",\"backgroundDrawable\":\"\",\"contents\":{\"widgetGroups\":[],\"widgets\":[{\"id\":1,\"enable\":true,\"repeatCount\":1,\"layout\":{\"y\":\"0\",\"height\":\"100%\",\"x\":\"0\",\"width\":\"100%\"},\"backgroundColor\":\"#00000000\",\"backgroundDrawable\":\"\",\"backgroundMusic\":\"\",\"zOrder\":0,\"displayRatio\":\"FULL\",\"outAnimation\":{\"type\":0,\"duration\":0},\"dataSource\":\"62ea7e60c493c1f860ae256eef8ec89c.png\",\"type\":\"PICTURE\",\"constraints\":[{\"cron\":[],\"endTime\":\"4017-12-30T23:59:59Z+8:00\",\"startTime\":\"1970-01-01T00:00:00Z+8:00\"}],\"border\":{\"borderThickness\":\"2px,3px,5%,6\",\"style\":0,\"backgroundColor\":\"#ff000000\",\"name\":\"border\",\"cornerRadius\":\"2%\",\"effects\":{\"headTailSpacing\":\"\",\"isHeadTail\":false,\"speedByPixelEnable\":true,\"speed\":0,\"animation\":\"CLOCK_WISE\"}},\"inAnimation\":{\"type\":0,\"duration\":1000},\"duration\":3605000,\"name\":\"test.png\",\"originalDataSource\":\"./test.png\",\"functionStorage\":\"\",\"isSupportSpecialEffects\":false}]},\"enable\":true,\"id\":1,\"itemsSource\":\"\",\"layout\":{\"height\":\"1.0\",\"width\":\"1.0\",\"x\":\"0.0\",\"y\":\"0.0\"},\"name\":\"widgetContainers1\",\"pickCount\":0,\"pickPolicy\":\"ORDER\",\"zOrder\":0}]}}";
            String genrateProgram = String.format(
                "{\"programID\":1,\"outPutPath\":\"%s/\",\"mediasPath\":[{\"oldPath\":\"test\",\"newPath\":\"test\"}]}",
                rootDir);
            String trasfromProgram = String.format(
                "{\"sn\": \"%s\",\"iconPath\": \"\",\"iconName\": \"\",\"sendProgramFilePaths\": {\"programPath\": \"%s/program1\",\"mediasPath\": {\"./test.png\": \"test.png\"}},\"programName\": \"program1\",\"deviceIdentifier\": \"Demo\",\"startPlayAfterTransferred\": true,\"insertPlay\": true}",
                g_sn,
                rootDir);
        Boolean bTestVideo = false;
        if (bTestVideo)
        {
            editProgram = "{\"programID\":1,\"pageID\":1,\"pageInfo\":{\"name\":\"Demo\",\"widgetContainers\":[{\"contents\":{\"widgets\":[{\"constraints\":[{\"cron\":[\"0 0 0 ? * 1,2,3,4,5,6,7\"],\"endTime\":\"4017-12-30T23:59:59Z 8:00\",\"startTime\":\"1970-01-01T00:00:00Z 8:00\"}],\"duration\":5000,\"dataSource\":\"219c7dd3260d6bf98ebf61b6da440ffd.avi\",\"type\":\"VIDEO\",\"name\":\"test.vai\",\"originalDataSource\":\"./test.avi\"}]},\"id\":1,\"name\":\"widgetContainers1\"}]}}";
            trasfromProgram = String.format(
            "{\"sn\":\"%s\",\"iconPath\": \"\",\"iconName\": \"\",\"sendProgramFilePaths\": {\"programPath\": \"%s/program1\",\"mediasPath\": {\"./test.avi\": \"test.avi\"}},\"programName\": \"program1\",\"deviceIdentifier\": \"Demo\",\"startPlayAfterTransferred\": true,\"insertPlay\": true}",
            g_sn,
            rootDir);
        }
            Boolean testText = false;
            if (testText) {
                editProgram = "{\"programID\":1,\"pageID\":1,\"pageInfo\":{\"name\":\"jiemu\",\"widgetContainers\":[{\"contents\":{\"widgets\":[{\"constraints\":[{\"cron\":[\"0 0 0 ? * 1,2,3,4,5,6,7\"],\"endTime\":\"4017-12-30T23:59:59Z+8:00\",\"startTime\":\"1970-01-01T00:00:00Z+8:00\"}],\"duration\":5000,\"metadata\":{\"content\":{\"autoPaging\":true,\"backgroundMusic\":{\"duration\":0,\"isTextSync\":false},\"displayStyle\":{\"scrollAttributes\":{\"effects\":{\"animation\":\"MARQUEE_LEFT\",\"speed\":3}},\"type\":\"SCROLL\"},\"paragraphs\":[{\"backgroundColor\":\"#00000000\",\"horizontalAlignment\":\"CENTER\",\"letterSpacing\":0,\"lineSpacing\":0,\"lines\":[{\"segs\":[{\"content\":\"简体繁體日本語한국어.English123\"}]}],\"verticalAlignment\":\"CENTER\"}],\"textAttributes\":[{\"backgroundColor\":\"#ff000000\",\"attributes\":{\"font\":{\"family\":[\"Arial\"],\"isUnderline\":false,\"size\":20,\"style\":\"NORMAL\"},\"letterSpacing\":0,\"textColor\":\"#ffff0000\"}}]}},\"name\":\"text\",\"type\":\"ARCH_TEXT\"}]},\"id\":1,\"name\":\"widgetContainers1\"}]}}";
                trasfromProgram = String.format(
                    "{\"sn\": \"%s\",\"iconPath\": \"\",\"iconName\": \"\",\"sendProgramFilePaths\": {\"programPath\": \"%s/program1\",\"mediasPath\": {}},\"programName\": \"program1\",\"deviceIdentifier\": \"Demo\",\"startPlayAfterTransferred\": true,\"insertPlay\": true}",
                    g_sn,
                    rootDir);
            }
            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));
            System.out.println("ViplexCore Demo nvSearchTerminalAsync(搜索) begin... ");
            instance.nvSearchTerminalAsync(callBack);
            Thread.sleep(3000);
            g_bAPIReturn = false;
            // System.out.println("ViplexCore Demo nvSearchAppointIpAsync(指定IP搜索) begin... ");
            // String requestData = "{\"ip\":\"172.18.179.106\"}";
            // instance.nvSearchAppointIpAsync(requestData, callBack);
            // Thread.sleep(2000);
            System.out.println("ViplexCore Demo nvLoginAsync(登录) begin... ");
            String loginParam = String.format("{\"sn\":\"%s\",\"username\":\"admin\",\"rememberPwd\":1,\"password\":\"1234567890\",\"loginType\":0}"
            , g_sn);
            instance.nvLoginAsync(loginParam, callBack);
            waitAPIReturn();
            if (g_code != 0) {
                System.out.println("ViplexCore Demo nvLoginAsync(登录) å¤±è´¥ï¼");
                return;
            @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;
            }
            System.out.println("ViplexCore Demo nvCreateProgramAsync(创建节目) begin... ");
            instance.nvCreateProgramAsync(createProgram, callBack);
            waitAPIReturn();
        };
        String rootDir = System.getProperty("user.dir") + "/temp";
        System.out.println("保存路径:" + rootDir);
        rootDir = rootDir.replaceAll("\\\\", "/");
        String createProgram = "{\"name\":\"jiemu1\",\"width\":240,\"height\":144}";
        String editProgram = "{\"programID\":13,\"pageID\":1,\"pageInfo\":{\"name\":\"节目01\",\"widgetContainers\":[{\"contents\":{\"widgets\":[{\"constraints\":[{\"cron\":[\"0 0 0 ? * 1,2,3,4,5,6,7\"],\"endTime\":\"4017-12-30T23:59:59Z+8:00\",\"startTime\":\"1970-01-01T00:00:00Z+8:00\"}],\"duration\":5000,\"dataSource\":\"62ea7e60c493c1f860ae256eef8ec89c.png\",\"type\":\"PICTURE\",\"name\":\"test.png\",\"originalDataSource\":\"C:/Users/Administrator/Desktop/novaWin/demo/java/test.png\"}]},\"id\":1,\"name\":\"widgetContainers1\"}]}}";
        String genrateProgram = String.format(
                "{\"programID\":13,\"outPutPath\":\"%s/\"}",
                rootDir);
        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);
            String requestDatapath = "{\"filePath\":\"./test.png\"}";
            System.out.println("ViplexCore Demo nvGetFileMD5Async(获取MD5) begin... ");
            instance.nvGetFileMD5Async(requestDatapath, callBack);
            waitAPIReturn();
//        Boolean bTestVideo = false;
//        if (bTestVideo) {
//            editProgram = "{\"programID\":1,\"pageID\":1,\"pageInfo\":{\"name\":\"Demo\",\"widgetContainers\":[{\"contents\":{\"widgets\":[{\"constraints\":[{\"cron\":[\"0 0 0 ? * 1,2,3,4,5,6,7\"],\"endTime\":\"4017-12-30T23:59:59Z 8:00\",\"startTime\":\"1970-01-01T00:00:00Z 8:00\"}],\"duration\":5000,\"dataSource\":\"219c7dd3260d6bf98ebf61b6da440ffd.avi\",\"type\":\"VIDEO\",\"name\":\"test.vai\",\"originalDataSource\":\"./test.avi\"}]},\"id\":1,\"name\":\"widgetContainers1\"}]}}";
//
//            trasfromProgram = String.format(
//                    "{\"sn\":\"%s\",\"iconPath\": \"\",\"iconName\": \"\",\"sendProgramFilePaths\": {\"programPath\": \"%s/program1\",\"mediasPath\": {\"./test.avi\": \"test.avi\"}},\"programName\": \"program1\",\"deviceIdentifier\": \"Demo\",\"startPlayAfterTransferred\": true,\"insertPlay\": true}",
//                    g_sn,
//                    rootDir);
//        }
//
//
//        Boolean testText = false;
//        if (testText) {
//            editProgram = "{\"programID\":1,\"pageID\":1,\"pageInfo\":{\"name\":\"jiemu\",\"widgetContainers\":[{\"contents\":{\"widgets\":[{\"constraints\":[{\"cron\":[\"0 0 0 ? * 1,2,3,4,5,6,7\"],\"endTime\":\"4017-12-30T23:59:59Z+8:00\",\"startTime\":\"1970-01-01T00:00:00Z+8:00\"}],\"duration\":5000,\"metadata\":{\"content\":{\"autoPaging\":true,\"backgroundMusic\":{\"duration\":0,\"isTextSync\":false},\"displayStyle\":{\"scrollAttributes\":{\"effects\":{\"animation\":\"MARQUEE_LEFT\",\"speed\":3}},\"type\":\"SCROLL\"},\"paragraphs\":[{\"backgroundColor\":\"#00000000\",\"horizontalAlignment\":\"CENTER\",\"letterSpacing\":0,\"lineSpacing\":0,\"lines\":[{\"segs\":[{\"content\":\"简体繁體日本語한국어.English123\"}]}],\"verticalAlignment\":\"CENTER\"}],\"textAttributes\":[{\"backgroundColor\":\"#ff000000\",\"attributes\":{\"font\":{\"family\":[\"Arial\"],\"isUnderline\":false,\"size\":20,\"style\":\"NORMAL\"},\"letterSpacing\":0,\"textColor\":\"#ffff0000\"}}]}},\"name\":\"text\",\"type\":\"ARCH_TEXT\"}]},\"id\":1,\"name\":\"widgetContainers1\"}]}}";
//            trasfromProgram = String.format(
//                    "{\"sn\": \"%s\",\"iconPath\": \"\",\"iconName\": \"\",\"sendProgramFilePaths\": {\"programPath\": \"%s/program1\",\"mediasPath\": {}},\"programName\": \"program1\",\"deviceIdentifier\": \"Demo\",\"startPlayAfterTransferred\": true,\"insertPlay\": true}",
//                    g_sn,
//                    rootDir);
//        }
            System.out.println("ViplexCore Demo nvSetPageProgramAsync(编辑节目) begin... ");
            instance.nvSetPageProgramAsync(editProgram, callBack);
            waitAPIReturn();
        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));
        System.out.println("ViplexCore Demo nvSearchTerminalAsync(搜索) begin... ");
        instance.nvSearchTerminalAsync(callBack);
        Thread.sleep(3000);
        g_bAPIReturn = false;
            System.out.println("ViplexCore Demo nvMakeProgramAsync(生成节目) begin... ");
            instance.nvMakeProgramAsync(genrateProgram, callBack);
            waitAPIReturn();
        // System.out.println("ViplexCore Demo nvSearchAppointIpAsync(指定IP搜索) begin... ");
        // String requestData = "{\"ip\":\"172.18.179.106\"}";
        // instance.nvSearchAppointIpAsync(requestData, callBack);
        // Thread.sleep(2000);
            System.out.println("ViplexCore Demo nvStartTransferProgramAsync(发送节目) begin... ");
            instance.nvStartTransferProgramAsync(trasfromProgram, callBack);
            Thread.sleep(10000);
            g_bAPIReturn = false;
            System.out.println("ViplexCore Demo nvGetProgramInfoAsync(获取节目信息) begin... ");
            String requestDatasn = String.format("{\"sn\":\"%s\"}", g_sn);
            instance.nvGetProgramInfoAsync(requestDatasn, callBack);
            waitAPIReturn();
            System.out.println("ViplexCore Demo nvSetVolumeAsync(设置音量) begin... ");
            String setVolumeParam = String.format("{\"sn\":\"%s\",\"volumeInfo\":{\"ratio\":60.0}}", g_sn);
            instance.nvSetVolumeAsync(setVolumeParam, callBack);
            waitAPIReturn();
            System.out.println("ViplexCore Demo nvGetVolumeAsync(获取音量) begin... ");
            String getVolumeParam = String.format("{\"sn\":\"%s\"}", g_sn);
            instance.nvGetVolumeAsync(getVolumeParam, callBack);
            waitAPIReturn();
        System.out.println("ViplexCore Demo nvLoginAsync(登录) begin... ");
        String loginParam = String.format("{\"sn\":\"MZVA51930N2113017308\",\"ip\":\"\",\"username\":\"admin\",\"rememberPwd\":0,\"password\":\"123456\",\"loginType\":0}"
                , g_sn);
        instance.nvLoginAsync(loginParam, callBack);
        waitAPIReturn();
        if (g_code != 0) {
            System.out.println("ViplexCore Demo nvLoginAsync(登录) å¤±è´¥ï¼");
            System.out.println("错误码:" + g_code);
            return;
        }
        System.out.println("ViplexCore Demo nvCreateProgramAsync(创建节目) begin... ");
        instance.nvCreateProgramAsync(createProgram, callBack);
        waitAPIReturn();
    public static void main(String[] args) throws InterruptedException{
        String requestDatapath = "{\"filePath\":\"C:/Users/Administrator/Desktop/novaWin/demo/java/test.png\"}";
        System.out.println("ViplexCore Demo nvGetFileMD5Async(获取MD5) begin... ");
        instance.nvGetFileMD5Async(requestDatapath, callBack);
        waitAPIReturn();
        System.out.println("ViplexCore Demo nvSetPageProgramAsync(编辑节目) begin... ");
        instance.nvSetPageProgramAsync(editProgram, callBack);
        waitAPIReturn();
        System.out.println("ViplexCore Demo nvMakeProgramAsync(生成节目) begin... ");
        instance.nvMakeProgramAsync(genrateProgram, callBack);
        waitAPIReturn();
        System.out.println("ViplexCore Demo nvStartTransferProgramAsync(发送节目) begin... ");
        System.out.println(trasfromProgram);
        instance.nvStartTransferProgramAsync(trasfromProgram, callBack);
        Thread.sleep(10000);
        g_bAPIReturn = false;
        System.out.println("ViplexCore Demo nvGetProgramInfoAsync(获取节目信息) begin... ");
        String requestDatasn = String.format("{\"sn\":\"%s\"}", g_sn);
        instance.nvGetProgramInfoAsync(requestDatasn, callBack);
        waitAPIReturn();
//
//        System.out.println("ViplexCore Demo nvSetVolumeAsync(设置音量) begin... ");
//        String setVolumeParam = String.format("{\"sn\":\"%s\",\"volumeInfo\":{\"ratio\":60.0}}", g_sn);
//        instance.nvSetVolumeAsync(setVolumeParam, callBack);
//        waitAPIReturn();
//
//        System.out.println("ViplexCore Demo nvGetVolumeAsync(获取音量) begin... ");
//        String getVolumeParam = String.format("{\"sn\":\"%s\"}", g_sn);
//        instance.nvGetVolumeAsync(getVolumeParam, callBack);
//        waitAPIReturn();
    }
    public static void main(String[] args) throws InterruptedException {
        testApi();
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/utils/NovaAPIUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,163 @@
package com.sandu.ximon.admin.newnova.utils;
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.sun.jna.Native;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.Map;
/**
 * @author LiuHaoNan
 * @date 2022/11/9
 */
@Component
@AllArgsConstructor
public class NovaAPIUtil {
//    @Value("${new-nova.string-path}")
//    public String getStringPath() {
//        return stringPath;
//    }
    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 static Map loginInfo = new LinkedHashMap();
//    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;
    }
    /**
     * ç™»å½•
     */
    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() {
            @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;
            }
        };
        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);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        g_bAPIReturn = false;
        System.out.println("ViplexCore Demo nvLoginAsync(登录) begin... ");
        String loginParam = String.format("{\"sn\":\"" + sn + "\",\"ip\":\"\",\"username\":\"admin\",\"rememberPwd\":0,\"password\":\"1234567890\",\"loginType\":0}"
                , g_sn);
        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;
            }
        });
        try {
            waitAPIReturn();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        if (g_code != 0) {
            System.out.println("ViplexCore Demo nvLoginAsync(登录) å¤±è´¥ï¼");
            System.out.println("错误码:" + g_code);
            return statusVO;
        }
        //登陆成功之后存入map保存登录信息
        loginInfo.put(sn, instance);
        return statusVO;
    }
    /**
     * åˆ›å»ºèŠ‚ç›®
     */
    public int createPro(String sn) throws InterruptedException {
        ViplexCore instance = (ViplexCore) loginInfo.get(sn);
        System.out.println("ViplexCore Demo nvCreateProgramAsync(创建节目) begin... ");
//        instance.nvCreateProgramAsync(createProgram, callBack);
        waitAPIReturn();
        return 1;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/newnova/vo/StatusVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.sandu.ximon.admin.newnova.vo;
import lombok.Data;
/**
 * @author LiuHaoNan
 * @date 2022/11/9
 */
@Data
public class StatusVO {
    private int statusCode;
    private String statusData;
}
ximon-admin/src/main/resources/application-local.yml
@@ -81,3 +81,16 @@
  key-id: LTAI5tPdpt5wvJyLipRijFSP
  key-secret: 1ahYfCKd0yTddsUnuDLQzI23MLh4VQ
  bucket-name: ximonsmart
#新诺瓦
new-nova:
  #依赖地址
  string-path: C:\Users\Administrator\Desktop\novaWin\bin\viplexcore.dll
new-nova-file:
  upload:
    #文件服务器路径
    upload-root-path: E:\file\novafile
    storage: local
    #服务器文件前缀
    real-url: http://localhost/