From 4965d8affe8ab2f3302bda6c62f45dc5fd455f93 Mon Sep 17 00:00:00 2001
From: liuhaonan <konodioda2333@vip.qq.com>
Date: 星期五, 24 十二月 2021 18:13:33 +0800
Subject: [PATCH] LED节目完善

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/ClientService.java                       |    2 
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerResponse.java          |   26 
 dao/src/main/resources/mapper/AdvisementPlayerFileMapper.xml                                     |   12 
 ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LEDProgramController.java             |   12 
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxResultResponse.java          |   15 
 dao/src/main/java/com/sandu/ximon/dao/domain/AdvisementPlayerFile.java                           |    9 
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/IpVolumeFileService.java                 |   11 
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxSyncCurrentInfoRequest.java   |   17 
 ximon-admin/src/main/java/com/sandu/ximon/admin/config/RedisConfig.java                          |   43 +
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxScreenStatusType.java         |   12 
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/CommonHeader.java                  |   42 +
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxSyncCurrentInfoResponse.java |   16 
 ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LEDProgramFileController.java         |    9 
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerListResponse.java      |   29 +
 ximon-admin/src/main/java/com/sandu/ximon/admin/controller/PoleController.java                   |    4 
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/LedPlayerEntityService.java              |   33 +
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxGetTokenRequest.java          |   17 
 ximon-admin/src/main/java/com/sandu/ximon/admin/controller/VnnoxController.java                  |   86 +++
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxBaseRequest.java              |   21 
 dao/src/main/resources/mapper/IpVolumeFileMapper.xml                                             |    6 
 dao/src/main/java/com/sandu/ximon/dao/mapper/LedPlayerEntityMapper.java                          |   18 
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxGetPlayerListRequest.java     |   24 
 ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LampPostController.java               |    2 
 ximon-admin/src/main/java/com/sandu/ximon/admin/config/VnnoxUrl.java                             |   28 +
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/VnnoxService.java                        |  192 ++++++
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxGetTokenResponse.java        |   25 
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxResponse.java                |    9 
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxScreenStatusRequest.java      |   19 
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/CommonResponse.java               |   21 
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/SpringContextUtil.java                     |   62 ++
 dao/src/main/java/com/sandu/ximon/dao/domain/LedPlayerEntity.java                                |   78 ++
 ximon-admin/src/main/java/com/sandu/ximon/admin/controller/PlayPlanNvController.java             |   11 
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/LEDProgramService.java                   |    6 
 ximon-admin/src/main/java/com/sandu/ximon/admin/param/VnnoxParam.java                            |   35 +
 dao/src/main/java/com/sandu/ximon/dao/domain/IpVolumeFile.java                                   |    4 
 dao/src/main/java/com/sandu/ximon/dao/domain/LedPlayerInfoEntity.java                            |   18 
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/SpringContextUtils.java                    |   43 +
 dao/src/main/resources/mapper/LedPlayerEntityMapper.xml                                          |   22 
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/VnnoxAPIUtil.java                          |  218 +++++++
 ximon-admin/src/main/java/com/sandu/ximon/admin/AdminApplication.java                            |    2 
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/LEDProgramFileService.java               |   13 
 ximon-admin/src/main/java/com/sandu/ximon/admin/config/VnnoxConstant.java                        |   28 +
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdvisementPlayerFileService.java         |   10 
 ximon-admin/src/main/java/com/sandu/ximon/admin/controller/IpVolumeFileController.java           |   10 
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxRequest.java                  |    7 
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxResult.java                  |   14 
 /dev/null                                                                                        |   15 
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/VnnoxRequestUtil.java                      |  105 +++
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerPageInfoResponse.java  |   12 
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerInfoResponse.java      |   30 +
 ximon-admin/src/main/java/com/sandu/ximon/admin/param/IpVolumeFileParam.java                     |    4 
 dao/src/main/java/com/sandu/ximon/dao/domain/LedV2RegisterResultEntity.java                      |   16 
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/RedisUtils.java                            |  132 ++++
 53 files changed, 1,598 insertions(+), 57 deletions(-)

diff --git a/dao/src/main/java/com/sandu/ximon/dao/domain/AdvisementPlayerFile.java b/dao/src/main/java/com/sandu/ximon/dao/domain/AdvisementPlayerFile.java
index b7c9c38..a0a70fa 100644
--- a/dao/src/main/java/com/sandu/ximon/dao/domain/AdvisementPlayerFile.java
+++ b/dao/src/main/java/com/sandu/ximon/dao/domain/AdvisementPlayerFile.java
@@ -22,6 +22,11 @@
     private Long id;
 
     /**
+     * 
+     */
+    private String name;
+
+    /**
      * 涓婁紶浜篿d
      */
     private Long userId;
@@ -44,12 +49,12 @@
     /**
      * 鏂囦欢澶у皬
      */
-    private Double fileSize;
+    private String fileSize;
 
     /**
      * 
      */
-    private String fileBase64;
+    private String fileUrl;
 
     /**
      * 
diff --git a/dao/src/main/java/com/sandu/ximon/dao/domain/IpVolumeFile.java b/dao/src/main/java/com/sandu/ximon/dao/domain/IpVolumeFile.java
index 607631d..8453e23 100644
--- a/dao/src/main/java/com/sandu/ximon/dao/domain/IpVolumeFile.java
+++ b/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;
 
     /**
      * 鍒涘缓鏃堕棿
diff --git a/dao/src/main/java/com/sandu/ximon/dao/domain/LED.java b/dao/src/main/java/com/sandu/ximon/dao/domain/LED.java
deleted file mode 100644
index 0fb8378..0000000
--- a/dao/src/main/java/com/sandu/ximon/dao/domain/LED.java
+++ /dev/null
@@ -1,81 +0,0 @@
-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.io.Serializable;
-import java.time.LocalDateTime;
-import lombok.Data;
-
-/**
- * LED琛�
- * @TableName led
- */
-@TableName(value ="led")
-@Data
-public class LED implements Serializable {
-    /**
-     * 
-     */
-    @TableId
-    private Long id;
-
-    /**
-     * 
-     */
-    private Long userId;
-
-    /**
-     * 绉嶇被  0:N   1:S
-     */
-    private Integer kind;
-
-    /**
-     * 鏉垮崱鍙�
-     */
-    private String cardNo;
-
-    /**
-     * 鍦ㄧ嚎鐘舵�� 0:鍦ㄧ嚎  1:绂荤嚎
-     */
-    private Integer state;
-
-    /**
-     * 鎵�灞炵伅鏉�
-     */
-    private Long blongsPole;
-
-    /**
-     * 鎾斁璁″垝id
-     */
-    private Long playplanId;
-
-    /**
-     * IP鍦板潃
-     */
-    private String ip;
-
-    /**
-     * 澶囨敞
-     */
-    private String remark;
-
-    /**
-     * 鐏潌ID
-     */
-    private String poleId;
-
-    /**
-     * 鍒涘缓鏃堕棿
-     */
-    private LocalDateTime createTime;
-
-    /**
-     * 鏈�杩戜氦浜掓椂闂�
-     */
-    private LocalDateTime updateTime;
-
-    @TableField(exist = false)
-    private static final long serialVersionUID = 1L;
-}
\ No newline at end of file
diff --git a/dao/src/main/java/com/sandu/ximon/dao/domain/LedPlayerEntity.java b/dao/src/main/java/com/sandu/ximon/dao/domain/LedPlayerEntity.java
new file mode 100644
index 0000000..a52350b
--- /dev/null
+++ b/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 {
+    /**
+     * 鎾斁鍣↖D
+     */
+    private Long id;
+
+    /**
+     * 鎾斁鍣ㄥ悕绉�(server)
+     */
+    private String playerName;
+
+    /**
+     * 鎾斁鍣↖D(Vnnox)
+     */
+    private String playerId;
+
+    /**
+     * 鎾斁鍣ㄥ敮涓�鏍囪瘑,濡傛灉涓簄ull浠h〃娌℃湁缁戝畾鎾斁鍣�(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;
+    //  灞忓箷缂╃暐鍥綰RL
+    @TableField(exist = false)
+    private String screenShotUrl;
+}
\ No newline at end of file
diff --git a/dao/src/main/java/com/sandu/ximon/dao/domain/LedPlayerInfoEntity.java b/dao/src/main/java/com/sandu/ximon/dao/domain/LedPlayerInfoEntity.java
new file mode 100644
index 0000000..27656f7
--- /dev/null
+++ b/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;
+
+}
diff --git a/dao/src/main/java/com/sandu/ximon/dao/domain/LedV2RegisterResultEntity.java b/dao/src/main/java/com/sandu/ximon/dao/domain/LedV2RegisterResultEntity.java
new file mode 100644
index 0000000..8b39051
--- /dev/null
+++ b/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;
+
+}
\ No newline at end of file
diff --git a/dao/src/main/java/com/sandu/ximon/dao/mapper/LEDMapper.java b/dao/src/main/java/com/sandu/ximon/dao/mapper/LEDMapper.java
deleted file mode 100644
index 27bf96f..0000000
--- a/dao/src/main/java/com/sandu/ximon/dao/mapper/LEDMapper.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.sandu.ximon.dao.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.sandu.ximon.dao.domain.LED;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * @Entity com.sandu.ximon.dao.domain.Led
- */
-@Mapper
-public interface LEDMapper extends BaseMapper<LED> {
-
-}
-
-
-
-
diff --git a/dao/src/main/java/com/sandu/ximon/dao/mapper/LedPlayerEntityMapper.java b/dao/src/main/java/com/sandu/ximon/dao/mapper/LedPlayerEntityMapper.java
new file mode 100644
index 0000000..42b09cb
--- /dev/null
+++ b/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);
+}
+
+
+
+
diff --git a/dao/src/main/resources/mapper/AdvisementPlayerFileMapper.xml b/dao/src/main/resources/mapper/AdvisementPlayerFileMapper.xml
index 0a26868..c67dd1a 100644
--- a/dao/src/main/resources/mapper/AdvisementPlayerFileMapper.xml
+++ b/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>
diff --git a/dao/src/main/resources/mapper/IpVolumeFileMapper.xml b/dao/src/main/resources/mapper/IpVolumeFileMapper.xml
index 6ab304b..f8740bc 100644
--- a/dao/src/main/resources/mapper/IpVolumeFileMapper.xml
+++ b/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>
diff --git a/dao/src/main/resources/mapper/LEDMapper.xml b/dao/src/main/resources/mapper/LEDMapper.xml
deleted file mode 100644
index 74da5e6..0000000
--- a/dao/src/main/resources/mapper/LEDMapper.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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.LEDMapper">
-
-    <resultMap id="BaseResultMap" type="com.sandu.ximon.dao.domain.LED">
-            <id property="id" column="id" jdbcType="BIGINT"/>
-            <result property="userId" column="user__id" jdbcType="BIGINT"/>
-            <result property="kind" column="kind" jdbcType="INTEGER"/>
-            <result property="cardNo" column="card_no" jdbcType="VARCHAR"/>
-            <result property="state" column="state" jdbcType="INTEGER"/>
-            <result property="blongsPole" column="blongs_pole" jdbcType="BIGINT"/>
-            <result property="playplanId" column="playplan_id" jdbcType="BIGINT"/>
-            <result property="ip" column="ip" jdbcType="VARCHAR"/>
-            <result property="remark" column="remark" jdbcType="VARCHAR"/>
-            <result property="poleId" column="pole_id" jdbcType="VARCHAR"/>
-            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
-            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
-    </resultMap>
-
-    <sql id="Base_Column_List">
-        id,user__id,kind,
-        card_no,state,blongs_pole,
-        playplan_id,ip,remark,
-        pole_id,create_time,update_time
-    </sql>
-</mapper>
diff --git a/dao/src/main/resources/mapper/LedPlayerEntityMapper.xml b/dao/src/main/resources/mapper/LedPlayerEntityMapper.xml
new file mode 100644
index 0000000..17fc660
--- /dev/null
+++ b/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>
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/AdminApplication.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/AdminApplication.java
index 3087233..744d42d 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/AdminApplication.java
+++ b/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 {
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/config/RedisConfig.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/config/RedisConfig.java
index 1791b47..758e918 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/config/RedisConfig.java
+++ b/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();
+    }
 }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/config/VnnoxConstant.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/config/VnnoxConstant.java
new file mode 100644
index 0000000..9ba2426
--- /dev/null
+++ b/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();
+
+}
\ No newline at end of file
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/config/VnnoxUrl.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/config/VnnoxUrl.java
new file mode 100644
index 0000000..3f030ff
--- /dev/null
+++ b/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;
+    }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/IpVolumeFileController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/IpVolumeFileController.java
index 81c6b15..21273cb 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/IpVolumeFileController.java
+++ b/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());
     }
 }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LEDProgramController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LEDProgramController.java
index 809ff95..ca0fca9 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LEDProgramController.java
+++ b/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));
     }
 
 
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LEDProgramFileController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LEDProgramFileController.java
index ed0820a..2beb54c 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LEDProgramFileController.java
+++ b/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()));
+    }
+
 }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LampPostController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LampPostController.java
index 056b320..c8bb945 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LampPostController.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LampPostController.java
@@ -15,7 +15,7 @@
 import java.util.List;
 
 /**
- * 鐏潌妯″潡浠ュ強璁剧疆鍒嗙粍鍒板搴旂伅鏉�
+ * 鐏潌妯″潡浠ュ強璁剧疆鍒嗙粍鍒板搴旂伅鏉�   寮冪敤
  */
 @RestController
 @AllArgsConstructor
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/PlayPlanNvController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/PlayPlanNvController.java
index 7fc29c9..3ad5ff3 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/PlayPlanNvController.java
+++ b/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());
+    }
+
 }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/PoleController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/PoleController.java
index bf7a5df..186cc79 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/PoleController.java
+++ b/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));
     }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/VnnoxController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/VnnoxController.java
new file mode 100644
index 0000000..a9d6e36
--- /dev/null
+++ b/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());
+        }
+
+    }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/param/IpVolumeFileParam.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/param/IpVolumeFileParam.java
index f6c3253..83fa8f2 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/param/IpVolumeFileParam.java
+++ b/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;
 
 }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/param/VnnoxParam.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/param/VnnoxParam.java
new file mode 100644
index 0000000..26590ca
--- /dev/null
+++ b/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;
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdvisementPlayerFileService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdvisementPlayerFileService.java
index 741e83b..365a595 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/AdvisementPlayerFileService.java
+++ b/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());
-        file.setUserName(SecurityUtils.getUsername());
-        file.setClientId(clientService.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);
     }
 
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/ClientService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/ClientService.java
index da5c10d..8fbbdc6 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/ClientService.java
+++ b/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;
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/IpVolumeFileService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/IpVolumeFileService.java
index ab158d6..8053284 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/IpVolumeFileService.java
+++ b/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());
-        file.setUserName(SecurityUtils.getUsername());
-        file.setClientId(clientService.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);
     }
 
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LEDProgramFileService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LEDProgramFileService.java
index b11b94b..3e581c8 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LEDProgramFileService.java
+++ b/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;
+        }
+
+    }
+
 
 }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LEDProgramService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LEDProgramService.java
index 54112b9..31cdcad 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LEDProgramService.java
+++ b/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());
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LEDService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LEDService.java
deleted file mode 100644
index 16644c7..0000000
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LEDService.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.sandu.ximon.admin.service;
-
-import com.sandu.common.service.impl.BaseServiceImpl;
-import com.sandu.ximon.dao.domain.LED;
-import com.sandu.ximon.dao.mapper.LEDMapper;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-
-@Service
-@AllArgsConstructor
-public class LEDService extends BaseServiceImpl<LEDMapper, LED> {
-
-    private final LEDMapper ledMapper;
-
-}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LedPlayerEntityService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LedPlayerEntityService.java
new file mode 100644
index 0000000..9581364
--- /dev/null
+++ b/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)
+    }*/
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/VnnoxService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/VnnoxService.java
new file mode 100644
index 0000000..bec5dee
--- /dev/null
+++ b/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
+        );
+        //  鏍规嵁灞忓箷鐘舵�佽皟鏁碦EDIS鏍囪瘑浣�
+        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())
+        );
+    }
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/RedisUtils.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/RedisUtils.java
new file mode 100644
index 0000000..fe6467a
--- /dev/null
+++ b/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鏁版嵁锛岃浆鎴怬bject
+     */
+    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);
+    }
+
+}
\ No newline at end of file
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/SpringContextUtil.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/SpringContextUtil.java
new file mode 100644
index 0000000..df7c8e6
--- /dev/null
+++ b/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杩斿洖鎸囧畾鐨凚ean
+     *
+     * @param name
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+    public static <T> T getBean(String name, Class<T> clazz) {
+        return getApplicationContext().getBean(name, clazz);
+    }
+
+}
\ No newline at end of file
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/SpringContextUtils.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/SpringContextUtils.java
new file mode 100644
index 0000000..749c21c
--- /dev/null
+++ b/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);
+	}
+
+}
\ No newline at end of file
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/VnnoxAPIUtil.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/VnnoxAPIUtil.java
new file mode 100644
index 0000000..f48ce5f
--- /dev/null
+++ b/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);
+        //  灏唗oken淇濆瓨鍒皉edis缂撳瓨涓�
+        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();
+    }
+
+}
\ No newline at end of file
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/VnnoxRequestUtil.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/VnnoxRequestUtil.java
new file mode 100644
index 0000000..3b9e37a
--- /dev/null
+++ b/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);
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/CommonHeader.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/CommonHeader.java
new file mode 100644
index 0000000..e08c313
--- /dev/null
+++ b/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);
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxBaseRequest.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxBaseRequest.java
new file mode 100644
index 0000000..1240eb2
--- /dev/null
+++ b/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);
+    }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxGetPlayerListRequest.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxGetPlayerListRequest.java
new file mode 100644
index 0000000..45c6a04
--- /dev/null
+++ b/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);
+    }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxGetTokenRequest.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxGetTokenRequest.java
new file mode 100644
index 0000000..26e4ab2
--- /dev/null
+++ b/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);
+    }
+}
\ No newline at end of file
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxRequest.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxRequest.java
new file mode 100644
index 0000000..a967749
--- /dev/null
+++ b/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();
+
+}
\ No newline at end of file
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxScreenStatusRequest.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxScreenStatusRequest.java
new file mode 100644
index 0000000..7b2c003
--- /dev/null
+++ b/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);
+    }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxScreenStatusType.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxScreenStatusType.java
new file mode 100644
index 0000000..971a240
--- /dev/null
+++ b/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
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxSyncCurrentInfoRequest.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/request/VnnoxSyncCurrentInfoRequest.java
new file mode 100644
index 0000000..b092a14
--- /dev/null
+++ b/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);
+    }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/CommonResponse.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/CommonResponse.java
new file mode 100644
index 0000000..62d5dbd
--- /dev/null
+++ b/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);
+    }
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxGetTokenResponse.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxGetTokenResponse.java
new file mode 100644
index 0000000..898e2ec
--- /dev/null
+++ b/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);
+    }
+
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerInfoResponse.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerInfoResponse.java
new file mode 100644
index 0000000..d7af1f3
--- /dev/null
+++ b/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 {
+    //  鎾斁鍣↖D
+    private String playerId;
+    //  鎾斁鍣ㄧ被鍨�,1-鍚屾鎾斁鍣紝2-寮傛鎾斁鍣�
+    private Integer playerType;
+    //  鎾斁鍣ㄥ悕绉�
+    private String name;
+    //  鎾斁鍣ㄥ綋鍓嶅湪绾跨姸鎬侊紝0-绂荤嚎锛�1-鍦ㄧ嚎
+    private Integer onlineStatus;
+    //  鎾斁鍣ㄥ敮涓�鏍囪瘑,濡傛灉涓簄ull浠h〃娌℃湁缁戝畾鎾斁鍣�
+    private String sn;
+    //  鎾斁鍣ㄥ綋鍓嶇増鏈彿
+    private String version;
+    //  鎾斁鍣ㄥ綋鍓嶇郴缁熺増鏈彿
+    private String osVersion;
+    //  鎾斁鍣╥p鍦板潃
+    private String ip;
+    //  鎾斁鍣ㄥ昂瀵稿搴�
+    private Integer width;
+    //  鎾斁鍣ㄥ昂瀵搁珮搴�
+    private Integer height;
+    //  鎾斁鍣ㄦ渶鍚庡績璺虫椂闂�(new)
+    private String lastOnlineTime;
+
+}
\ No newline at end of file
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerListResponse.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerListResponse.java
new file mode 100644
index 0000000..2daa4c8
--- /dev/null
+++ b/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);
+    }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerPageInfoResponse.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerPageInfoResponse.java
new file mode 100644
index 0000000..9b580f2
--- /dev/null
+++ b/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;
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerResponse.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxPlayerResponse.java
new file mode 100644
index 0000000..6d4047c
--- /dev/null
+++ b/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 {
+
+    //  鎾斁鍣↖D
+    private String playerId;
+    //  鎾斁鍣ㄧ被鍨�,1-鍚屾鎾斁鍣紝2-寮傛鎾斁鍣�
+    private Integer playerType;
+    //  鎾斁鍣ㄥ悕绉�
+    private String name;
+    //  鎾斁鍣ㄥ綋鍓嶅湪绾跨姸鎬侊紝0-绂荤嚎锛�1-鍦ㄧ嚎
+    private Integer onlineStatus;
+    //  鎾斁鍣ㄥ敮涓�鏍囪瘑,濡傛灉涓簄ull浠h〃娌℃湁缁戝畾鎾斁鍣�
+    private String sn;
+    //  鎾斁鍣ㄥ綋鍓嶇増鏈彿
+    private String version;
+    //  鎾斁鍣ㄦ渶鍚庡績璺虫椂闂�(new)
+    private String lastOnlineTime;
+    //  IP鍦板潃
+    private String ip;
+
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxResponse.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxResponse.java
new file mode 100644
index 0000000..a0d3905
--- /dev/null
+++ b/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);
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxResult.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxResult.java
new file mode 100644
index 0000000..c08995c
--- /dev/null
+++ b/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;
+
+}
\ No newline at end of file
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxResultResponse.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxResultResponse.java
new file mode 100644
index 0000000..576d673
--- /dev/null
+++ b/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;
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxSyncCurrentInfoResponse.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/response/VnnoxSyncCurrentInfoResponse.java
new file mode 100644
index 0000000..9914fa7
--- /dev/null
+++ b/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;
+
+}
\ No newline at end of file

--
Gitblit v1.9.3