2021与蓝度共同重构项目,服务端
liuhaonan
2021-12-24 4965d8affe8ab2f3302bda6c62f45dc5fd455f93
LED节目完善
已修改18个文件
已添加34个文件
已删除4个文件
1773 ■■■■ 文件已修改
dao/src/main/java/com/sandu/ximon/dao/domain/AdvisementPlayerFile.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/IpVolumeFile.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/LED.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/LedPlayerEntity.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/LedPlayerInfoEntity.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/LedV2RegisterResultEntity.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/mapper/LEDMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/mapper/LedPlayerEntityMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/AdvisementPlayerFileMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/IpVolumeFileMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/LEDMapper.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/LedPlayerEntityMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/AdminApplication.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/config/RedisConfig.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/config/VnnoxConstant.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/config/VnnoxUrl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/IpVolumeFileController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LEDProgramController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LEDProgramFileController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LampPostController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/PlayPlanNvController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/PoleController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/VnnoxController.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/param/IpVolumeFileParam.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/param/VnnoxParam.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdvisementPlayerFileService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/ClientService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/IpVolumeFileService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LEDProgramFileService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LEDProgramService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LEDService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LedPlayerEntityService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/VnnoxService.java 192 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/RedisUtils.java 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/SpringContextUtil.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/SpringContextUtils.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/VnnoxAPIUtil.java 218 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/VnnoxRequestUtil.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/CommonHeader.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxBaseRequest.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxGetPlayerListRequest.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxGetTokenRequest.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxRequest.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxScreenStatusRequest.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxScreenStatusType.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxSyncCurrentInfoRequest.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/CommonResponse.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxGetTokenResponse.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerInfoResponse.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerListResponse.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerPageInfoResponse.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerResponse.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxResponse.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxResult.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxResultResponse.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxSyncCurrentInfoResponse.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/AdvisementPlayerFile.java
@@ -22,6 +22,11 @@
    private Long id;
    /**
     *
     */
    private String name;
    /**
     * ä¸Šä¼ äººid
     */
    private Long userId;
@@ -44,12 +49,12 @@
    /**
     * æ–‡ä»¶å¤§å°
     */
    private Double fileSize;
    private String fileSize;
    /**
     * 
     */
    private String fileBase64;
    private String fileUrl;
    /**
     * 
dao/src/main/java/com/sandu/ximon/dao/domain/IpVolumeFile.java
@@ -44,12 +44,12 @@
    /**
     * æ–‡ä»¶å¤§å°
     */
    private Double fileSize;
    private String fileSize;
    /**
     * 
     */
    private String fileBase64;
    private String fileUrl;
    /**
     * åˆ›å»ºæ—¶é—´
dao/src/main/java/com/sandu/ximon/dao/domain/LED.java
ÎļþÒÑɾ³ý
dao/src/main/java/com/sandu/ximon/dao/domain/LedPlayerEntity.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
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 java.beans.Transient;
import java.io.Serializable;
import lombok.Data;
/**
 *
 * @TableName led
 */
@Data
@TableName(value = "led")
public class LedPlayerEntity implements Serializable {
    /**
     * æ’­æ”¾å™¨ID
     */
    private Long id;
    /**
     * æ’­æ”¾å™¨åç§°(server)
     */
    private String playerName;
    /**
     * æ’­æ”¾å™¨ID(Vnnox)
     */
    private String playerId;
    /**
     * æ’­æ”¾å™¨å”¯ä¸€æ ‡è¯†,如果为null代表没有绑定播放器(Vnnox)
     */
    private String sn;
    /**
     * åˆ›å»ºæ—¶é—´æˆ³
     */
    private Long createTimestamp;
    private static final long serialVersionUID = 1L;
    @TableField(exist = false)
    private Long streetlightId;
    //  player配置信息(音量、屏幕开关状态、推送的节目ID)
    @TableField(exist = false)
    private LedPlayerInfoEntity playerInfo;
    //  æ’­æ”¾å™¨ç±»åž‹, 1-同步播放器,2-异步播放器(Vnnox)
    @TableField(exist = false)
    private Integer playerType;
    //  æ’­æ”¾å™¨å½“前在线状态,0-离线,1-在线(Vnnox)
    @TableField(exist = false)
    private Integer onlineStatus;
    //  æ’­æ”¾å™¨å½“前版本号
    @TableField(exist = false)
    private String version;
    //  æ’­æ”¾å™¨å½“前系统版本号
    @TableField(exist = false)
    private String osVersion;
    //  æ’­æ”¾å™¨æœ€åŽå¿ƒè·³æ—¶é—´(new)(Vnnox)
    @TableField(exist = false)
    private String lastOnlineTime;
    //  IP地址(Vnnox)
    @TableField(exist = false)
    private String ip;
    //  æ’­æ”¾å™¨å°ºå¯¸å®½åº¦
    @TableField(exist = false)
    private Integer width;
    //  æ’­æ”¾å™¨å°ºå¯¸é«˜åº¦
    @TableField(exist = false)
    private Integer height;
    //  å±å¹•缩略图URL
    @TableField(exist = false)
    private String screenShotUrl;
}
dao/src/main/java/com/sandu/ximon/dao/domain/LedPlayerInfoEntity.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.sandu.ximon.dao.domain;
import lombok.Data;
/**
 * led设备调整信息
 */
@Data
public class LedPlayerInfoEntity {
    //  0:黑屏  1:亮屏
    private Integer screenStatus;
    //  å±å¹•音量
    private Integer vol;
    //  å±å¹•亮度
    private Integer brightness;
}
dao/src/main/java/com/sandu/ximon/dao/domain/LedV2RegisterResultEntity.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.sandu.ximon.dao.domain;
import lombok.Data;
/**
 * åˆ¤æ–­led是否注册
 */
@Data
public class LedV2RegisterResultEntity {
    //  æ˜¯å¦æ³¨å†Œ
    private Integer register;
    //  ç»“果提示
    private String msg;
}
dao/src/main/java/com/sandu/ximon/dao/mapper/LEDMapper.java
ÎļþÒÑɾ³ý
dao/src/main/java/com/sandu/ximon/dao/mapper/LedPlayerEntityMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.sandu.ximon.dao.mapper;
import com.sandu.ximon.dao.domain.LedPlayerEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
 * @Entity com.sandu.ximon.dao.domain.LedPlayerEntity
 */
@Mapper
public interface LedPlayerEntityMapper extends BaseMapper<LedPlayerEntity> {
    boolean saveLed(LedPlayerEntity ledPlayerEntity);
}
dao/src/main/resources/mapper/AdvisementPlayerFileMapper.xml
@@ -6,19 +6,21 @@
    <resultMap id="BaseResultMap" type="com.sandu.ximon.dao.domain.AdvisementPlayerFile">
            <id property="id" column="id" jdbcType="BIGINT"/>
            <result property="name" column="name" jdbcType="VARCHAR"/>
            <result property="userId" column="user_id" jdbcType="BIGINT"/>
            <result property="userName" column="user_name" jdbcType="VARCHAR"/>
            <result property="clientId" column="client_id" jdbcType="BIGINT"/>
            <result property="fileName" column="file_name" jdbcType="VARCHAR"/>
            <result property="fileSize" column="file_size" jdbcType="DOUBLE"/>
            <result property="fileBase64" column="file_base64" jdbcType="VARCHAR"/>
            <result property="fileSize" column="file_size" jdbcType="VARCHAR"/>
            <result property="fileUrl" column="file_url" jdbcType="VARCHAR"/>
            <result property="fileType" column="file_type" jdbcType="VARCHAR"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,user_id,user_name,
        client_id,file_name,file_size,
        file_base64,file_type,create_time
        id,name,user_id,
        user_name,client_id,file_name,
        file_size,file_url,file_type,
        create_time
    </sql>
</mapper>
dao/src/main/resources/mapper/IpVolumeFileMapper.xml
@@ -10,14 +10,14 @@
            <result property="userName" column="user_name" jdbcType="VARCHAR"/>
            <result property="clientId" column="client_id" jdbcType="BIGINT"/>
            <result property="fileName" column="file_name" jdbcType="VARCHAR"/>
            <result property="fileSize" column="file_size" jdbcType="DOUBLE"/>
            <result property="fileBase64" column="file_base64" jdbcType="VARCHAR"/>
            <result property="fileSize" column="file_size" jdbcType="VARCHAR"/>
            <result property="fileUrl" column="file_url" jdbcType="VARCHAR"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,user_id,user_name,
        client_id,file_name,file_size,
        file_base64,create_time
        file_url,create_time
    </sql>
</mapper>
dao/src/main/resources/mapper/LEDMapper.xml
ÎļþÒÑɾ³ý
dao/src/main/resources/mapper/LedPlayerEntityMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
<?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.LedPlayerEntityMapper">
    <resultMap id="BaseResultMap" type="com.sandu.ximon.dao.domain.LedPlayerEntity">
            <id property="id" column="id" jdbcType="BIGINT"/>
            <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="createTimestamp" column="create_timestamp" jdbcType="BIGINT"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,player_name,player_id,
        sn,create_timestamp
    </sql>
    <insert id="saveLed" parameterType="com.sandu.ximon.dao.domain.LedPlayerEntity">
        insert into led (player_name,player_id,sn,create_timestamp) values (#{playerName},#{playerId},#{sn},#{createTimestamp})
    </insert>
</mapper>
ximon-admin/src/main/java/com/sandu/ximon/admin/AdminApplication.java
@@ -2,6 +2,8 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootApplication(scanBasePackages = {"com.sandu.ximon.admin","com.sandu.common","com.sandu.ximon.dao"})
public class AdminApplication {
ximon-admin/src/main/java/com/sandu/ximon/admin/config/RedisConfig.java
@@ -1,7 +1,12 @@
package com.sandu.ximon.admin.config;
import com.sandu.common.config.BaseRedisConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
 * @author chenjiantian
@@ -10,4 +15,42 @@
 */
@Configuration
public class RedisConfig extends BaseRedisConfig {
    @Autowired
    private RedisConnectionFactory factory;
    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(factory);
        return redisTemplate;
    }
    @Bean
    public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForHash();
    }
    @Bean
    public ValueOperations<String, String> valueOperations(RedisTemplate<String, String> redisTemplate) {
        return redisTemplate.opsForValue();
    }
    @Bean
    public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForList();
    }
    @Bean
    public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForSet();
    }
    @Bean
    public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForZSet();
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/config/VnnoxConstant.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.sandu.ximon.admin.config;
import com.google.gson.Gson;
public class VnnoxConstant {
    //  VNNOX MINIO save bucket  suffix(companyId)
    public static final String MINIO_PREFIX = "vnnox.";
    public static final String REDIS_TOKEN_NAME = "vnnox_token";
    public static final String REDIS_SCREEN_STATUS = "vnnox_screen_status:";
    public static final String REDIS_VOL = "vnnox_vol:";
    public static final String REDIS_BRIGHTNESS = "vnnox_brightness:";
    public static final String REDIS_PROGRESS = "vnnox_progress:";
    public static final String REDIS_SCREEN_SHOT = "vnnox_screen_shot:";
    public static final Long REDIS_MAX_SAVE_TIME = 180 * 24 * 60 * 60L;
    public static final Long SCREEN_SHOT_TIMEOUT = 30 * 60L;
    public static final String NOTIFY_URL = "http://47.106.172.9:8888/machine-fast/serv/vnnox/progress";
    public static final String SCREEN_SHOT_NOTIFY_URL = "http://47.106.172.9:8888/machine-fast/serv/vnnox/screenshot";
    public static final String username = "zhxm";
    public static final String password = "xm2512209.";
    public static final Gson GSON = new Gson();
}
ximon-admin/src/main/java/com/sandu/ximon/admin/config/VnnoxUrl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.sandu.ximon.admin.config;
public class VnnoxUrl {
    private static String url = "https://openapi.vnnox.com";
    //  èŽ·å–æŽˆæƒä¿¡æ¯
    public static final String GET_TOKEN = "/v1/oauth/token";
    //  èŽ·å–LED列表
    public static String GET_PLAYER_LIST = "/v1/player/getPlayerList";
    //  èŽ·å–å½“å‰çŠ¶æ€
    public static String SYNC_CURRENT_INFO = "/v1/player/get/syncCurrentInfo";
    //  ä¿®æ”¹å±å¹•状态
    public static String SCREEN_STATUS = "/v1/player/immediateControl/screenStatus";
    //  ä¿®æ”¹éŸ³é‡
    public static String CHANGE_VOL = "/v1/player/immediateControl/volume";
    //  ä¿®æ”¹äº®åº¦
    public static String CHANGE_BRIGHTNESS = "/v1/player/immediateControl/brightness";
    //  æ™®é€šèŠ‚ç›®
    public static String NORMAL_PROGRAM = "/v1/player/program/normal";
    //  æˆªå›¾
    public static String SCREEN_SHOT = "/v1/player/control/screenshot";
    //  é‡å¯
    public static String REBOOT = "/v1/player/immediateControl/reboot";
    public static String getUrl(String urlSuffix) {
        return url + urlSuffix;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/IpVolumeFileController.java
@@ -16,7 +16,7 @@
 */
@RestController
@AllArgsConstructor
@RequestMapping("v1/IpVolumeFile")
@RequestMapping("/v1/IpVolumeFile")
public class IpVolumeFileController {
    private final IpVolumeFileService ipVolumeFileService;
@@ -26,13 +26,13 @@
        return ResponseUtil.success(ipVolumeFileService.addFile(fileParam));
    }
    @PostMapping("/delete/{id}")
    @PostMapping("/delete/{fileId}")
    public ResponseVO<Object> deleteFile(@PathVariable Long fileId){
        return ResponseUtil.success(ipVolumeFileService.deleteFile(fileId));
    }
    @PostMapping("/list}")
    public ResponseVO<Object> list(@RequestBody ReceiveParam receiveParam){
        return ResponseUtil.success(ipVolumeFileService.list(ipVolumeFileService.listFile(receiveParam)));
    @PostMapping("/list")
    public ResponseVO<Object> list(){
        return ResponseUtil.success(ipVolumeFileService.list());
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LEDProgramController.java
@@ -25,14 +25,14 @@
        return ResponseUtil.success(ledProgramService.addProgram(ledProgramParam));
    }
    @PostMapping("/update")
    public ResponseVO<Object> updateLEDProgram(@RequestBody @Validated LEDProgramParam ledProgramParam) {
        return ResponseUtil.success(ledProgramService.updateProgram(ledProgramParam));
    @PostMapping("/update/{pid}")
    public ResponseVO<Object> updateLEDProgram(@PathVariable Long pid, @RequestBody @Validated LEDProgramParam ledProgramParam) {
        return ResponseUtil.success(ledProgramService.updateProgram(pid,ledProgramParam));
    }
    @PostMapping("/delete/{id}")
    public ResponseVO<Object> deleteLEDProgram(@PathVariable Long id) {
        return ResponseUtil.success(ledProgramService.deleteProgram(id));
    @PostMapping("/delete/{pid}")
    public ResponseVO<Object> deleteLEDProgram(@PathVariable Long pid) {
        return ResponseUtil.success(ledProgramService.deleteProgram(pid));
    }
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LEDProgramFileController.java
@@ -3,6 +3,7 @@
import com.sandu.common.domain.ResponseVO;
import com.sandu.common.util.ResponseUtil;
import com.sandu.ximon.admin.param.LEDProgramFileParam;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.admin.service.LEDProgramFileService;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
@@ -26,8 +27,14 @@
        return ResponseUtil.success(ledProgramFileService.addProgramFile(param));
    }
    @PostMapping("/delete{fileId}")
    @PostMapping("/delete/{fileId}")
    public ResponseVO<Object> addLEDProgram(@PathVariable Long fileId) {
        return ResponseUtil.success(ledProgramFileService.deleteFile(fileId));
    }
    @GetMapping("/list")
    public ResponseVO<Object> listfile() {
        return ResponseUtil.success(ledProgramFileService.list(ledProgramFileService.listFile()));
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LampPostController.java
@@ -15,7 +15,7 @@
import java.util.List;
/**
 * ç¯æ†æ¨¡å—以及设置分组到对应灯杆
 * ç¯æ†æ¨¡å—以及设置分组到对应灯杆   å¼ƒç”¨
 */
@RestController
@AllArgsConstructor
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/PlayPlanNvController.java
@@ -24,8 +24,8 @@
        return ResponseUtil.success(playPlanNvService.addPlan(param));
    }
    @PostMapping("/update")
    public ResponseVO<Object> updateLEDPlan(@RequestBody @Validated Long planId, PlayPlanParam param) {
    @PostMapping("/update/{planId}")
    public ResponseVO<Object> updateLEDPlan(@PathVariable Long planId,@RequestBody @Validated  PlayPlanParam param) {
        return ResponseUtil.success(playPlanNvService.updatePlan(planId, param));
    }
@@ -34,8 +34,13 @@
        return ResponseUtil.success(playPlanNvService.deletePlan(plianId));
    }
    @PostMapping("/push{plianId}")
    @PostMapping("/push/{plianId}")
    public ResponseVO<Object> pushToLed(@PathVariable Long plianId) {
        return ResponseUtil.success(playPlanNvService.pushToLed(plianId));
    }
    @GetMapping("/listPaln")
    public ResponseVO<Object> list() {
        return ResponseUtil.success(playPlanNvService.list());
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/PoleController.java
@@ -69,7 +69,7 @@
    /**
     * è®¾ç½®ä¸‰å…ƒç 
     */
    @PostMapping("/setMac")
    @PostMapping("/setMac/{poleId}")
    public ResponseVO<Object> setMac(@PathVariable Long poleId) {
        return ResponseUtil.success(poleService.setMac(poleId));
    }
@@ -77,7 +77,7 @@
    /**
     * æ¢å¤ç¯æ†å‡ºåŽ‚è®¾ç½®
     */
    @PostMapping("/poleReset")
    @PostMapping("/poleReset/{poleId}")
    public ResponseVO<Object> poleReset(@PathVariable Long poleId) {
        return ResponseUtil.success(poleService.poleReset(poleId));
    }
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/VnnoxController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,86 @@
package com.sandu.ximon.admin.controller;
import com.sandu.common.domain.ResponseVO;
import com.sandu.common.util.ResponseUtil;
import com.sandu.ximon.admin.param.VnnoxParam;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.admin.service.LedPlayerEntityService;
import com.sandu.ximon.admin.service.VnnoxService;
import com.sandu.ximon.admin.utils.response.VnnoxResult;
import com.sandu.ximon.dao.domain.LedV2RegisterResultEntity;
import com.sandu.ximon.dao.enums.AdministratorEnums;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
 * @Author liuhaonan
 * @Date 2021/12/23 9:35
 * @Version 1.0
 * è¯ºç“¦LED处理
 */
@RestController
//@AllArgsConstructor
@RequestMapping("/v1/Vnnox")
public class VnnoxController {
    @Autowired
    private VnnoxService vnnoxService;
    @Autowired
    private LedPlayerEntityService ledPlayerEntityService;
    @GetMapping("/screenShot")
    public ResponseVO<Object> screenShot(@RequestBody VnnoxParam vnnoxWebRequest) {
        Map<String, String> map = vnnoxService.getScreenShotUrl(vnnoxWebRequest.getId());
        return ResponseUtil.success(map.get("url"));
    }
    @GetMapping("/reboot")
    public ResponseVO<Object> reboot(@RequestBody VnnoxParam vnnoxWebRequest) {
        VnnoxResult vnnoxResult = vnnoxService.reboot(vnnoxWebRequest.getPlayerList());
        return ResponseUtil.success(vnnoxResult);
    }
    @GetMapping("/screenStatusChange")
    public ResponseVO<Object> screenStatusChange(@RequestBody VnnoxParam vnnoxWebRequest) {
        VnnoxResult vnnoxResult = vnnoxService.screenStatusChange(vnnoxWebRequest.getPlayerList(),vnnoxWebRequest.getScreenStatus());
        return ResponseUtil.success(vnnoxResult);
    }
    @GetMapping("/volChange")
    public ResponseVO<Object> volChange(@RequestBody VnnoxParam vnnoxWebRequest) {
        VnnoxResult vnnoxResult = vnnoxService.volChange(vnnoxWebRequest.getPlayerList(),vnnoxWebRequest.getVol());
        return ResponseUtil.success(vnnoxResult);
    }
    @GetMapping("/brightnessChange")
    public ResponseVO<Object> brightnessChange(@RequestBody VnnoxParam vnnoxWebRequest) {
        VnnoxResult vnnoxResult = vnnoxService.brightnessChange(vnnoxWebRequest.getPlayerList(),vnnoxWebRequest.getBrightness());
        return ResponseUtil.success(vnnoxResult);
    }
  /*  @RequestMapping("/changeLedName")
    public R changeLedName(@RequestBody VnnoxParam vnnoxWebRequest) {
        vnnoxService.changeLedName(vnnoxWebRequest.getId(),vnnoxWebRequest.getPlayerName());
        return ResponseUtil.success();
    }*/
    @PostMapping("/validateSN")
    public ResponseVO<Object> validateSN(@RequestBody Map map) {
        String sn = (String)map.get("sn");
        LedV2RegisterResultEntity ledV2RegisterResultEntity = vnnoxService.validateSN(sn);
        return ResponseUtil.success(ledV2RegisterResultEntity);
    }
    @GetMapping("/list")
    public ResponseVO<Object> list() {
        if(AdministratorEnums.CUSTOMER.getCode().equals(SecurityUtils.getAdministratorIdentity())) {
            return ResponseUtil.success("");
        }else {
            return ResponseUtil.success(ledPlayerEntityService.list());
        }
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/param/IpVolumeFileParam.java
@@ -11,8 +11,8 @@
public class IpVolumeFileParam {
    private String fileName;
    private Double fileSize;
    private String fileBase64;
    private String fileSize;
    private String fileUrl;
    private String fileType;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/param/VnnoxParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.sandu.ximon.admin.param;
import com.sandu.ximon.dao.domain.LedPlayerEntity;
import lombok.Data;
import java.util.List;
@Data
public class VnnoxParam {
    //  playerID
    private Integer id;
    //  player实体List
    private List<LedPlayerEntity> playerList;
    //  playerIds
    private List<String> playerIds;
    //  å±å¹•状态 0:关闭   1:开启
    private Integer screenStatus;
    //  å±å¹•音量
    private Integer vol;
    //  å±å¹•亮度
    private Integer brightness;
    //  æ–‡ä»¶ID
    private Integer fileId;
    //  ç¯æ†ID
    private Long streetlightId;
    private String playerName;
    private String content;
    //  èŠ‚ç›®éƒ¨åˆ†
    private Integer pid;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdvisementPlayerFileService.java
@@ -27,11 +27,15 @@
    public boolean addFile(IpVolumeFileParam fileParam) {
        AdvisementPlayerFile file = new AdvisementPlayerFile();
        file.setUserId(SecurityUtils.getClientId());
        if(SecurityUtils.getClientId()!=null){
        file.setUserName(SecurityUtils.getUsername());
        }
        if(clientService.getClientId()!=null){
        file.setClientId(clientService.getClientId());
        }
        file.setFileName(fileParam.getFileName());
        file.setFileSize(fileParam.getFileSize());
        file.setFileBase64(fileParam.getFileBase64());
        file.setFileUrl(fileParam.getFileUrl());
        return save(file);
    }
ximon-admin/src/main/java/com/sandu/ximon/admin/service/ClientService.java
@@ -86,7 +86,7 @@
    public Long getClientId(){
        Long userId = SecurityUtils.getUserId();
        Client one = getOne(Wrappers.lambdaQuery(Client.class).eq(Client::getId, userId));
        if(one.getSuperiorId()!=null){
        if(one!=null&&one.getSuperiorId()!=null){
            return one.getSuperiorId();
        }else {
            return userId;
ximon-admin/src/main/java/com/sandu/ximon/admin/service/IpVolumeFileService.java
@@ -27,11 +27,16 @@
    public boolean addFile(IpVolumeFileParam fileParam) {
        IpVolumeFile file = new IpVolumeFile();
        file.setUserId(SecurityUtils.getClientId());
        if(SecurityUtils.getClientId()!=null){
        file.setUserName(SecurityUtils.getUsername());
        }
        if(clientService.getClientId()!=null){
        file.setClientId(clientService.getClientId());
        }
        file.setFileName(fileParam.getFileName());
        file.setFileSize(fileParam.getFileSize());
        file.setFileBase64(fileParam.getFileBase64());
        file.setFileUrl(fileParam.getFileUrl());
        return save(file);
    }
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LEDProgramFileService.java
@@ -1,5 +1,7 @@
package com.sandu.ximon.admin.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.param.LEDProgramFileParam;
@@ -34,5 +36,16 @@
        return removeById(id);
    }
    public LambdaQueryWrapper<LEDProgramFile> listFile(){
        LambdaQueryWrapper<LEDProgramFile> ledProgramFileLambdaQueryWrapper = Wrappers.lambdaQuery(LEDProgramFile.class);
        if(SecurityUtils.getClientId()!=null){
            return ledProgramFileLambdaQueryWrapper.eq(LEDProgramFile::getUserId,SecurityUtils.getUserId());
        }else {
            return ledProgramFileLambdaQueryWrapper;
        }
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LEDProgramService.java
@@ -31,15 +31,15 @@
    }
    public boolean updateProgram(LEDProgramParam receiveParam) {
    public boolean updateProgram(Long pid,LEDProgramParam receiveParam) {
        LEDProgram byId = getById(receiveParam.getId());
        LEDProgram byId = getById(pid);
        if (byId == null) {
            throw new BusinessException("未找到该节目");
        }
        LEDProgram led = new LEDProgram();
        led.setId(receiveParam.getId());
        led.setId(pid);
        //led.setUserId(SecurityUtils.getClientId());
        led.setName(receiveParam.getName());
        led.setPreview(receiveParam.getPreviewUrl());
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LEDService.java
ÎļþÒÑɾ³ý
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LedPlayerEntityService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.sandu.ximon.admin.service;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.sandu.common.service.impl.BaseServiceImpl;
import com.sandu.ximon.dao.domain.LedPlayerEntity;
import com.sandu.ximon.dao.mapper.LedPlayerEntityMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
/**
 * @Author liuhaonan
 * @Date 2021/12/22 15:27
 * @Version 1.0
 */
@Service
@AllArgsConstructor
public class LedPlayerEntityService extends BaseServiceImpl<LedPlayerEntityMapper, LedPlayerEntity> {
    private final LedPlayerEntityMapper ledPlayerEntityMapper;
    public LedPlayerEntity getBySn(String sn){
        return getOne(Wrappers.lambdaQuery(LedPlayerEntity.class).eq(LedPlayerEntity::getSn, sn));
    }
    public boolean saveLed(LedPlayerEntity ledPlayerEntity){
        return ledPlayerEntityMapper.saveLed(ledPlayerEntity);
    }
  /*  public void listLed(String keyWord){
        Wrappers.lambdaQuery(LedPlayerEntity.class).eq(LedPlayerEntity::get)
    }*/
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/VnnoxService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,192 @@
package com.sandu.ximon.admin.service;
import com.sandu.ximon.admin.config.VnnoxConstant;
import com.sandu.ximon.admin.utils.RedisUtils;
import com.sandu.ximon.admin.utils.VnnoxAPIUtil;
import com.sandu.ximon.admin.utils.request.VnnoxScreenStatusType;
import com.sandu.ximon.admin.utils.response.VnnoxPlayerListResponse;
import com.sandu.ximon.admin.utils.response.VnnoxPlayerResponse;
import com.sandu.ximon.admin.utils.response.VnnoxResult;
import com.sandu.ximon.dao.domain.LedPlayerEntity;
import com.sandu.ximon.dao.domain.LedV2RegisterResultEntity;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * @Author liuhaonan
 * @Date 2021/12/22 14:18
 * @Version 1.0
 */
@Service
@AllArgsConstructor
public class VnnoxService {
   // @Autowired
    private VnnoxAPIUtil vnnoxAPIUtil;
   // @Autowired
    private RedisUtils redisUtils;
   // @Autowired
    private LedPlayerEntityService ledPlayerEntityService;
    /**
     * è®¾å¤‡æ ¡éªŒæ³¨å†Œ
     *
     * @param sn
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public LedV2RegisterResultEntity validateSN(String sn) {
        LedV2RegisterResultEntity ledV2RegisterResultEntity = new LedV2RegisterResultEntity();
        //  åˆ¤æ–­æ•°æ®åº“是否存在,若不存在,判断是否已经注册到Vnnox服务器
        //LedPlayerEntity ledPlayerEntity = vnnoxDao.getBySN(sn);
        // LambdaQueryWrapper<LedPlayerEntity> eq = Wrappers.lambdaQuery(LedPlayerEntity.class).eq(LedPlayerEntity::getSn, sn);
        LedPlayerEntity ledPlayerEntity = ledPlayerEntityService.getBySn(sn);
        if (null != ledPlayerEntity) {
            ledV2RegisterResultEntity.setRegister(1);
            ledV2RegisterResultEntity.setMsg("设备已存在!");
            return ledV2RegisterResultEntity;
        }
        Integer page = 0;
        Integer limit = 200;
        List<VnnoxPlayerResponse> playerList;
        //  èŽ·å–Vnnox服务器列表
        VnnoxPlayerListResponse response = vnnoxAPIUtil.getPlayerList(limit, page);
        playerList = response.getRows();
        Integer total = response.getTotal() - limit;
        while (total > 0) {
            page = page + 1;
            total = total - limit;
            response = vnnoxAPIUtil.getPlayerList(limit, page);
            playerList.addAll(response.getRows());
        }
        ledPlayerEntity = new LedPlayerEntity();
        for (VnnoxPlayerResponse res : playerList) {
            if (res.getSn().equals(sn)) {
                ledPlayerEntity.setSn(sn);
                ledPlayerEntity.setPlayerId(res.getPlayerId());
                ledPlayerEntity.setPlayerName(res.getName());
                ledPlayerEntity.setCreateTimestamp(new Date().getTime());
                ledPlayerEntityService.saveLed(ledPlayerEntity);
                ledV2RegisterResultEntity.setRegister(1);
                ledV2RegisterResultEntity.setMsg("设备校验通过,设备注册成功!");
                return ledV2RegisterResultEntity;
            }
        }
        ledV2RegisterResultEntity.setRegister(0);
        ledV2RegisterResultEntity.setMsg("设备未注册到平台!");
        return ledV2RegisterResultEntity;
    }
    /**
     * å±å¹•状态调整-POST-JSON
     *
     * @param playerList
     * @param screenStatus
     * @return
     */
    public VnnoxResult screenStatusChange(List<LedPlayerEntity> playerList, Integer screenStatus) {
        VnnoxScreenStatusType type;
        if (screenStatus.equals(0)) {
            type = VnnoxScreenStatusType.CLOSE;
        } else {
            type = VnnoxScreenStatusType.OPEN;
        }
        VnnoxResult vnnoxResult = vnnoxAPIUtil.screenStatus(
                playerList.stream().map(item -> item.getPlayerId()).collect(Collectors.toList()),
                type
        );
        //  æ ¹æ®å±å¹•状态调整REDIS标识位
        for (String playerId : vnnoxResult.getSuccess()) {
            redisUtils.set(VnnoxConstant.REDIS_SCREEN_STATUS + playerId, screenStatus, VnnoxConstant.REDIS_MAX_SAVE_TIME);
        }
        return vnnoxResult;
    }
    public VnnoxResult volChange(List<LedPlayerEntity> playerList, Integer vol) {
        VnnoxResult vnnoxResult = vnnoxAPIUtil.volChange(
                playerList.stream().map(item -> item.getPlayerId()).collect(Collectors.toList()),
                vol
        );
        //  æ ¹æ®éŸ³é‡è°ƒæ•´REDIS标识位
        for (String playerId : vnnoxResult.getSuccess()) {
            redisUtils.set(VnnoxConstant.REDIS_VOL + playerId, vol, VnnoxConstant.REDIS_MAX_SAVE_TIME);
        }
        return vnnoxResult;
    }
    public VnnoxResult brightnessChange(List<LedPlayerEntity> playerList, Integer brightness) {
        VnnoxResult vnnoxResult = vnnoxAPIUtil.brightnessChange(
                playerList.stream().map(item -> item.getPlayerId()).collect(Collectors.toList()),
                brightness
        );
        //  æ ¹æ®äº®åº¦è°ƒæ•´REDIS标识位
        for (String playerId : vnnoxResult.getSuccess()) {
            redisUtils.set(VnnoxConstant.REDIS_BRIGHTNESS + playerId, brightness, VnnoxConstant.REDIS_MAX_SAVE_TIME);
        }
        return vnnoxResult;
    }
    public Map<String, String> getScreenShotUrl(Integer id) {
        Map<String, String> map = new HashMap();
        LedPlayerEntity playerEntity = ledPlayerEntityService.getById(id);
        try {
            redisUtils.delete(VnnoxConstant.REDIS_SCREEN_SHOT + playerEntity.getPlayerId());
        } catch (Exception e) {
        }
        VnnoxResult vnnoxResult = vnnoxAPIUtil.screenShot(playerEntity.getPlayerId());
        if (null == vnnoxResult) {
            map.put("code", "500");
            map.put("msg", "设备已下线");
            return map;
        }
        if (vnnoxResult.getSuccess().size() == 0) {
            map.put("code", "500");
            map.put("msg", "获取缩略图失败!");
            return map;
        }
        String url = null;
        Integer checkCount = 0;
        while (checkCount < 10) {
            url = redisUtils.get(VnnoxConstant.REDIS_SCREEN_SHOT + playerEntity.getPlayerId());
            if (null != url) {
                break;
            }
            try {
                Thread.sleep(2000);
                checkCount = checkCount + 1;
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        map.put("url", url);
        map.put("code", "200");
        return map;
    }
    public VnnoxResult reboot(List<LedPlayerEntity> playerList) {
        return vnnoxAPIUtil.reboot(
                playerList.stream().map(
                        item -> item.getPlayerId()
                ).collect(Collectors.toList())
        );
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/RedisUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,132 @@
package com.sandu.ximon.admin.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.google.gson.Gson;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.*;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
 * Redis工具类
 *
 * @author Mark sunlightcs@gmail.com
 */
@Component("RedisUtils")
public class RedisUtils {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    @Autowired
    private ValueOperations<String, String> valueOperations;
    private HashOperations<String, String, Object> hashOperations;
    private ListOperations<String, Object> listOperations;
    private SetOperations<String, Object> setOperations;
    private ZSetOperations<String, Object> zSetOperations;
    /**  é»˜è®¤è¿‡æœŸæ—¶é•¿ï¼Œå•位:秒 */
    public final static long DEFAULT_EXPIRE = 60 * 60 * 24;
    /**  ä¸è®¾ç½®è¿‡æœŸæ—¶é•¿ */
    public final static long NOT_EXPIRE = -1;
    private final static Gson gson = new Gson();
    /**
     *
     * @param key
     * @param value
     * @param expire    ç§’æ•°
     * @return
     */
    public boolean set(String key, Object value, long expire){
        valueOperations.set(key, toJson(value));
        if(expire != NOT_EXPIRE){
            return redisTemplate.expire(key, expire, TimeUnit.SECONDS);
        }
        return false;
    }
    public static RedisUtils getBean(){
        return (RedisUtils)SpringContextUtils.getBean("RedisUtils");
    }
    public boolean set(String key, Object value){
        return set(key, value, DEFAULT_EXPIRE);
    }
    public <T> T get(String key, Class<T> clazz, long expire) {
        String value = valueOperations.get(key);
        if(expire != NOT_EXPIRE){
            redisTemplate.expire(key, expire, TimeUnit.SECONDS);
        }
        return value == null ? null : fromJson(value, clazz);
    }
    public <T> T get(String key, Class<T> clazz) {
        return get(key, clazz, NOT_EXPIRE);
    }
    public String get(String key, long expire) {
        String value = valueOperations.get(key);
        if(expire != NOT_EXPIRE){
            redisTemplate.expire(key, expire, TimeUnit.SECONDS);
        }
        return value;
    }
    public String get(String key) {
        return get(key, NOT_EXPIRE);
    }
    public boolean delete(String key) {
        return redisTemplate.delete(key);
    }
    public Set<String> allKeys(){
        return redisTemplate.keys("*");
    }
    public Set<String> keys(String str) {
        return redisTemplate.keys(str);
    }
    /**
     * Object转成JSON数据
     */
    private String toJson(Object object){
        if(object instanceof Integer || object instanceof Long || object instanceof Float ||
                object instanceof Double || object instanceof Boolean || object instanceof String){
            return String.valueOf(object);
        }
        return gson.toJson(object);
    }
    /**
     * JSON数据,转成Object
     */
    private <T> T fromJson(String json, Class<T> clazz){
        return gson.fromJson(json, clazz);
    }
    public String listToJson(List list) {
        return JSON.toJSONString(list);
    }
    public List jsonToList(String json, Class clazz){
        if(json.length() == 0) {
            return null;
        }
        JSONArray jsonArray = JSON.parseArray(json);
        return jsonArray.toJavaList(clazz);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/SpringContextUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.sandu.ximon.admin.utils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class SpringContextUtil implements ApplicationContextAware {
    /**
     * ä¸Šä¸‹æ–‡å¯¹è±¡å®žä¾‹
     */
    private static ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringContextUtil.applicationContext = applicationContext;
    }
    /**
     * èŽ·å–applicationContext
     *
     * @return
     */
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }
    /**
     * é€šè¿‡name获取 Bean.
     *
     * @param name
     * @return
     */
    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);
    }
    /**
     * é€šè¿‡class获取Bean.
     *
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }
    /**
     * é€šè¿‡name,以及Clazz返回指定的Bean
     *
     * @param name
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(String name, Class<T> clazz) {
        return getApplicationContext().getBean(name, clazz);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/SpringContextUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package com.sandu.ximon.admin.utils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
 * Spring Context å·¥å…·ç±»
 *
 * @author Mark sunlightcs@gmail.com
 */
@Component
public class SpringContextUtils implements ApplicationContextAware {
    public static ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {
        SpringContextUtils.applicationContext = applicationContext;
    }
    public static Object getBean(String name) {
        return applicationContext.getBean(name);
    }
    public static <T> T getBean(String name, Class<T> requiredType) {
        return applicationContext.getBean(name, requiredType);
    }
    public static boolean containsBean(String name) {
        return applicationContext.containsBean(name);
    }
    public static boolean isSingleton(String name) {
        return applicationContext.isSingleton(name);
    }
    public static Class<? extends Object> getType(String name) {
        return applicationContext.getType(name);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/VnnoxAPIUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,218 @@
package com.sandu.ximon.admin.utils;
import com.alibaba.fastjson.JSON;
import com.sandu.ximon.admin.config.VnnoxConstant;
import com.sandu.ximon.admin.config.VnnoxUrl;
import com.sandu.ximon.admin.utils.request.*;
import com.sandu.ximon.admin.utils.response.*;
import com.sandu.ximon.dao.domain.LedPlayerEntity;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component("VnnoxAPIUtil")
@AllArgsConstructor
public class VnnoxAPIUtil {
    //@Autowired
    private RedisUtils redisUtils;
    public static VnnoxAPIUtil getBean() {
        return (VnnoxAPIUtil) SpringContextUtil.getBean("VnnoxAPIUtil");
    }
    /**
     * èŽ·å–token
     */
    public void getToken () {
        String result = VnnoxRequestUtil.PostWithHeader(
                VnnoxUrl.getUrl(VnnoxUrl.GET_TOKEN),
                new VnnoxGetTokenRequest().toJson(),
                new CommonHeader(CommonHeader.FORM, false)
        );
        CommonResponse commonResponse = JSON.parseObject(result,CommonResponse.class);
        VnnoxGetTokenResponse response = new VnnoxGetTokenResponse().parse(commonResponse);
        //  å°†token保存到redis缓存中
        redisUtils.set(VnnoxConstant.REDIS_TOKEN_NAME,response.getToken(),(long)(response.getExpire()-30));
    }
    /**
     * èŽ·å–æ’­æ”¾å™¨åˆ—è¡¨
     *
     * @param count æ¯æ¬¡è¯»å–数量,默认20,取值范围:1~100
     * @param start ä»Žç¬¬å‡ æ¡è®°å½•开始读取,默认0
     * @return
     */
    public VnnoxPlayerListResponse getPlayerList(Integer count, Integer start) {
        String result = VnnoxRequestUtil.GetWithHeader(
                VnnoxUrl.getUrl(VnnoxUrl.GET_PLAYER_LIST),
                new VnnoxGetPlayerListRequest(count, start).toJson(),
                new CommonHeader(CommonHeader.JSON, true)
        );
        VnnoxPlayerListResponse response =
                new VnnoxPlayerListResponse().parse(JSON.parseObject(result, CommonResponse.class));
        return response;
    }
    /**
     * èŽ·å–å½“å‰å±å¹•ä¿¡æ¯-POST-JSON
     *
     * @param list
     * @return
     */
    public List<LedPlayerEntity> syncCurrentInfo(List<LedPlayerEntity> list) {
        List<String> playerIds = new ArrayList<>();
        for (LedPlayerEntity playerEntity : list) {
            playerIds.add(playerEntity.getPlayerId());
        }
        VnnoxSyncCurrentInfoRequest vnnoxSyncCurrentInfoRequest = new VnnoxSyncCurrentInfoRequest();
        vnnoxSyncCurrentInfoRequest.setPlayerIds(playerIds);
        String result = VnnoxRequestUtil.PostWithHeader(
                VnnoxUrl.getUrl(VnnoxUrl.SYNC_CURRENT_INFO),
                vnnoxSyncCurrentInfoRequest.toJson(),
                new CommonHeader(CommonHeader.JSON, true)
        );
        VnnoxSyncCurrentInfoResponse response = JSON.parseObject(result, VnnoxSyncCurrentInfoResponse.class);
        for (LedPlayerEntity playerEntity : list) {
            for (VnnoxPlayerInfoResponse res : response.getData()) {
                if (res.getPlayerId().equals(playerEntity.getPlayerId())) {
                    playerEntity.setPlayerType(res.getPlayerType());
                    playerEntity.setOnlineStatus(res.getOnlineStatus());
                    playerEntity.setVersion(res.getVersion());
                    playerEntity.setOsVersion(res.getOsVersion());
                    playerEntity.setLastOnlineTime(res.getLastOnlineTime());
                    playerEntity.setIp(res.getIp());
                    playerEntity.setWidth(res.getWidth());
                    playerEntity.setHeight(res.getHeight());
                    break;
                }
            }
        }
        return list;
    }
    /**
     * è°ƒæ•´å±å¹•状态(亮屏/黑屏)-POST-JSON
     *
     * @param playerIds
     * @param type
     * @return
     */
    public VnnoxResult screenStatus(List<String> playerIds, VnnoxScreenStatusType type) {
        VnnoxScreenStatusRequest vnnoxScreenStatusRequest = new VnnoxScreenStatusRequest();
        vnnoxScreenStatusRequest.setPlayerIds(playerIds);
        vnnoxScreenStatusRequest.setStatus(type);
        String result = VnnoxRequestUtil.PostWithHeader(
                VnnoxUrl.getUrl(VnnoxUrl.SCREEN_STATUS),
                vnnoxScreenStatusRequest.toJson(),
                new CommonHeader(CommonHeader.JSON, true)
        );
        VnnoxResultResponse response = JSON.parseObject(result, VnnoxResultResponse.class);
        return response.getData();
    }
    /**
     * éŸ³é‡è°ƒæ•´-POST-JSON
     *
     * @param playerIds
     * @param vol
     * @return
     */
    public VnnoxResult volChange(List<String> playerIds, Integer vol) {
        VnnoxBaseRequest request = new VnnoxBaseRequest();
        request.setPlayerIds(playerIds);
        request.setValue(vol);
        String result = VnnoxRequestUtil.PostWithHeader(
                VnnoxUrl.getUrl(VnnoxUrl.CHANGE_VOL),
                request.toJson(),
                new CommonHeader(CommonHeader.JSON, true)
        );
        VnnoxResultResponse response = JSON.parseObject(result, VnnoxResultResponse.class);
        return response.getData();
    }
    /**
     * å±å¹•亮度调整
     *
     * @param playerIds
     * @param brightness
     * @return
     */
    public VnnoxResult brightnessChange(List<String> playerIds, Integer brightness) {
        VnnoxBaseRequest request = new VnnoxBaseRequest();
        request.setPlayerIds(playerIds);
        request.setValue(brightness);
        String result = VnnoxRequestUtil.PostWithHeader(
                VnnoxUrl.getUrl(VnnoxUrl.CHANGE_BRIGHTNESS),
                request.toJson(),
                new CommonHeader(CommonHeader.JSON, true)
        );
        VnnoxResultResponse response = JSON.parseObject(result, VnnoxResultResponse.class);
        return response.getData();
    }
    /**
     * å±å¹•截图
     *
     * @param playerId
     * @return
     */
    public VnnoxResult screenShot(String playerId) {
        List<String> players = new ArrayList<>();
        players.add(playerId);
        VnnoxBaseRequest request = new VnnoxBaseRequest();
        request.setPlayerIds(players);
        request.setNoticeUrl(VnnoxConstant.SCREEN_SHOT_NOTIFY_URL);
        String result = VnnoxRequestUtil.PostWithHeader(
                VnnoxUrl.getUrl(VnnoxUrl.SCREEN_SHOT),
                request.toJson(),
                new CommonHeader(CommonHeader.JSON, true)
        );
        VnnoxResultResponse response = JSON.parseObject(result, VnnoxResultResponse.class);
        return response.getData();
    }
    /**
     * è®¾å¤‡é‡å¯
     *
     * @param playerIdList
     * @return
     */
    public VnnoxResult reboot(List<String> playerIdList) {
        VnnoxBaseRequest request = new VnnoxBaseRequest();
        request.setPlayerIds(playerIdList);
        request.setNoticeUrl(VnnoxConstant.SCREEN_SHOT_NOTIFY_URL);
        String result = VnnoxRequestUtil.PostWithHeader(
                VnnoxUrl.getUrl(VnnoxUrl.REBOOT),
                request.toJson(),
                new CommonHeader(CommonHeader.JSON, true)
        );
        VnnoxResultResponse response = JSON.parseObject(result, VnnoxResultResponse.class);
        return response.getData();
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/VnnoxRequestUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,105 @@
package com.sandu.ximon.admin.utils;
import com.sandu.ximon.admin.utils.request.CommonHeader;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HTTP;
import java.io.IOException;
import java.io.InputStream;
public class VnnoxRequestUtil {
    private static final String UTF8 = "utf-8";
    public static String get(String url){
        CloseableHttpClient client = HttpClients.createDefault();
        HttpGet get = new HttpGet(url);
        String result = null;
        try {
            HttpResponse httpResponse = client.execute(get);
            InputStream inStream = httpResponse.getEntity().getContent();
            result = streamToString(inStream,UTF8);
            inStream.close();
        } catch (Exception e) {
            return null;
        }
        return result;
    }
    public static String GetWithHeader (String url, String params, CommonHeader header) {
        CloseableHttpClient client = HttpClients.createDefault();
        HttpGet get = new HttpGet(url);
        for(String key: header.keySet()) {
            get.setHeader(key, header.get(key));
        }
        String result = null;
        try {
            StringEntity s = new StringEntity(params, UTF8);
            s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
                    "application/json"));
            HttpResponse httpResponse = client.execute(get);
            InputStream inStream = httpResponse.getEntity().getContent();
            result = streamToString(inStream, UTF8);
            inStream.close();
        } catch (Exception e) {
            return null;
        }
        return result;
    }
    public static String PostWithHeader (String URL, String json, CommonHeader header) {
        CloseableHttpClient client = HttpClients.createDefault();
        HttpPost post = new HttpPost(URL);
        for(String key: header.keySet()) {
            post.setHeader(key, header.get(key));
        }
        String result = null;
        try {
            StringEntity s = new StringEntity(json, UTF8);
            s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
                    "application/json"));
            post.setEntity(s);
            HttpResponse httpResponse = client.execute(post);
            InputStream inStream = httpResponse.getEntity().getContent();
            result = streamToString(inStream,UTF8);
            inStream.close();
        } catch (Exception e) {
            return null;
        }
        return result;
    }
    public static String streamToString(InputStream in, String encoding){
        // å°†æµè½¬æ¢ä¸ºå­—符串
        try {
            StringBuffer sb = new StringBuffer();
            byte[] b = new byte[1024];
            for (int n; (n = in.read(b)) != -1;) {
                sb.append(new String(b, 0, n, encoding));
            }
            return sb.toString();
        }  catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("提取 requestBody å¼‚常", e);
        }
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/CommonHeader.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.sandu.ximon.admin.utils.request;
import com.sandu.ximon.admin.config.VnnoxConstant;
import com.sandu.ximon.admin.utils.RedisUtils;
import com.sandu.ximon.admin.utils.VnnoxAPIUtil;
import lombok.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
@Data
public class CommonHeader extends HashMap<String, String> {
    private static Logger logger = LoggerFactory.getLogger(CommonHeader.class);
    public static final String FORM = "form";
    public static final String JSON = "json";
    public CommonHeader(String type,boolean hasToken){
        super.put("username", VnnoxConstant.username);
        if(type.equals(FORM)) {
            super.put("Content-Type","application/x-www-form-urlencoded");
        } else if(type.equals(JSON)) {
            super.put("Content-Type","application/json");
        }
        if(hasToken) {
            String token = null;
            while(token == null) {
                token = RedisUtils.getBean().get(VnnoxConstant.REDIS_TOKEN_NAME);
                if(null == token) {
                    VnnoxAPIUtil.getBean().getToken();
                    logger.info("加载vnnox token");
                } else {
                    break;
                }
            }
            super.put("token", token);
        }
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxBaseRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.sandu.ximon.admin.utils.request;
import com.sandu.ximon.admin.config.VnnoxConstant;
import lombok.Data;
import java.util.List;
@Data
public class VnnoxBaseRequest implements VnnoxRequest {
    private List<String> playerIds;
    private Integer value;
    private String noticeUrl;
    @Override
    public String toJson() {
        return VnnoxConstant.GSON.toJson(this);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxGetPlayerListRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.sandu.ximon.admin.utils.request;
import com.sandu.ximon.admin.config.VnnoxConstant;
import lombok.Data;
@Data
public class VnnoxGetPlayerListRequest implements VnnoxRequest{
    private Integer count;
    private Integer start;
    private String name;
    public VnnoxGetPlayerListRequest(Integer count, Integer start){
        this.count = count;
        this.start = start;
    }
    @Override
    public String toJson() {
        return VnnoxConstant.GSON.toJson(this);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxGetTokenRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.sandu.ximon.admin.utils.request;
import com.sandu.ximon.admin.config.VnnoxConstant;
import lombok.Data;
@Data
public class VnnoxGetTokenRequest implements VnnoxRequest{
    private String username = VnnoxConstant.username;
    private String password = VnnoxConstant.password;
    @Override
    public String toJson() {
        return VnnoxConstant.GSON.toJson(this);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
package com.sandu.ximon.admin.utils.request;
public interface VnnoxRequest {
    String toJson();
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxScreenStatusRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.sandu.ximon.admin.utils.request;
import com.sandu.ximon.admin.config.VnnoxConstant;
import lombok.Data;
import java.util.List;
@Data
public class VnnoxScreenStatusRequest implements VnnoxRequest{
    private List<String> playerIds;
    private VnnoxScreenStatusType status;
    @Override
    public String toJson() {
        return VnnoxConstant.GSON.toJson(this);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxScreenStatusType.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.sandu.ximon.admin.utils.request;
/**
 * å±å¹•状态
 */
public enum VnnoxScreenStatusType {
    OPEN,
    CLOSE
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxSyncCurrentInfoRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.sandu.ximon.admin.utils.request;
import com.sandu.ximon.admin.config.VnnoxConstant;
import lombok.Data;
import java.util.List;
@Data
public class VnnoxSyncCurrentInfoRequest implements VnnoxRequest{
    private List<String> playerIds;
    @Override
    public String toJson() {
        return VnnoxConstant.GSON.toJson(this);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/CommonResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.sandu.ximon.admin.utils.response;
import com.alibaba.fastjson.JSON;
import lombok.Data;
import java.util.Map;
@Data
public class CommonResponse {
    private Long logid;
    private Integer status;
    private Map data;
    public String getDataJson(){
        return JSON.toJSONString(data);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxGetTokenResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.sandu.ximon.admin.utils.response;
import com.alibaba.fastjson.JSON;
import lombok.Data;
@Data
public class VnnoxGetTokenResponse implements VnnoxResponse<VnnoxGetTokenResponse> {
    //  èŽ·å–çš„å‡­è¯
    private String token;
    //  å‡­è¯æœ‰æ•ˆæ—¶é—´ï¼Œå•位:秒
    private Integer expire;
    @Override
    public VnnoxPlayerListResponse parse(com.aliyuncs.CommonResponse commonEntity) {
        return null;
    }
    @Override
    public VnnoxGetTokenResponse parse(CommonResponse commonEntity) {
        return JSON.parseObject(commonEntity.getDataJson(),VnnoxGetTokenResponse.class);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerInfoResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.sandu.ximon.admin.utils.response;
import lombok.Data;
@Data
public class VnnoxPlayerInfoResponse {
    //  æ’­æ”¾å™¨ID
    private String playerId;
    //  æ’­æ”¾å™¨ç±»åž‹,1-同步播放器,2-异步播放器
    private Integer playerType;
    //  æ’­æ”¾å™¨åç§°
    private String name;
    //  æ’­æ”¾å™¨å½“前在线状态,0-离线,1-在线
    private Integer onlineStatus;
    //  æ’­æ”¾å™¨å”¯ä¸€æ ‡è¯†,如果为null代表没有绑定播放器
    private String sn;
    //  æ’­æ”¾å™¨å½“前版本号
    private String version;
    //  æ’­æ”¾å™¨å½“前系统版本号
    private String osVersion;
    //  æ’­æ”¾å™¨ip地址
    private String ip;
    //  æ’­æ”¾å™¨å°ºå¯¸å®½åº¦
    private Integer width;
    //  æ’­æ”¾å™¨å°ºå¯¸é«˜åº¦
    private Integer height;
    //  æ’­æ”¾å™¨æœ€åŽå¿ƒè·³æ—¶é—´(new)
    private String lastOnlineTime;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerListResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.sandu.ximon.admin.utils.response;
import com.alibaba.fastjson.JSON;
import lombok.Data;
import java.util.List;
@Data
public class VnnoxPlayerListResponse implements VnnoxResponse<VnnoxPlayerListResponse> {
    private Integer total;
    private VnnoxPlayerPageInfoResponse pageInfo;
    private List<VnnoxPlayerResponse> rows;
    @Override
    public VnnoxPlayerListResponse parse(com.aliyuncs.CommonResponse commonEntity) {
        return null;
    }
    @Override
    public VnnoxPlayerListResponse parse(CommonResponse commonEntity) {
        return  JSON.parseObject(commonEntity.getDataJson(),VnnoxPlayerListResponse.class);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerPageInfoResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.sandu.ximon.admin.utils.response;
import lombok.Data;
@Data
public class VnnoxPlayerPageInfoResponse {
    private Integer start;
    private Integer count;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.sandu.ximon.admin.utils.response;
import lombok.Data;
@Data
public class VnnoxPlayerResponse {
    //  æ’­æ”¾å™¨ID
    private String playerId;
    //  æ’­æ”¾å™¨ç±»åž‹,1-同步播放器,2-异步播放器
    private Integer playerType;
    //  æ’­æ”¾å™¨åç§°
    private String name;
    //  æ’­æ”¾å™¨å½“前在线状态,0-离线,1-在线
    private Integer onlineStatus;
    //  æ’­æ”¾å™¨å”¯ä¸€æ ‡è¯†,如果为null代表没有绑定播放器
    private String sn;
    //  æ’­æ”¾å™¨å½“前版本号
    private String version;
    //  æ’­æ”¾å™¨æœ€åŽå¿ƒè·³æ—¶é—´(new)
    private String lastOnlineTime;
    //  IP地址
    private String ip;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.sandu.ximon.admin.utils.response;
public interface VnnoxResponse<T> {
    VnnoxPlayerListResponse parse(com.aliyuncs.CommonResponse commonEntity);
    T parse(CommonResponse commonEntity);
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxResult.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.sandu.ximon.admin.utils.response;
import lombok.Data;
import java.util.List;
@Data
public class VnnoxResult {
    private List<String> success;
    private List<String> fail;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxResultResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.sandu.ximon.admin.utils.response;
import lombok.Data;
@Data
public class VnnoxResultResponse {
    private String logid;
    private Integer status;
    private VnnoxResult data;
    private String errmsg;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxSyncCurrentInfoResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.sandu.ximon.admin.utils.response;
import lombok.Data;
import java.util.List;
@Data
public class VnnoxSyncCurrentInfoResponse {
    private Long logid;
    private Integer status;
    private List<VnnoxPlayerInfoResponse> data;
}