From 69962e25b95593a0138f7be2b49dd51fa76ab8d7 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期六, 14 十月 2023 17:13:58 +0800
Subject: [PATCH] 增加大华sdk初始化环境 增加大华设备登录 增加大华ptz获取和云台控制接口 增加相机通用SDK接口

---
 ard-work/src/main/resources/resources_zh_CN.properties                                |    1 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/common/DeviceManagerListener.java       |    5 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/common/Base64.java                      |  553 ++++
 lib/dhDll/avnetsdk.dll                                                                |    0 
 lib/hikDll/HCNetSDKCom/HCPlayBack.dll                                                 |    0 
 lib/dhDll/Infra.dll                                                                   |    0 
 lib/hikDll/HCNetSDKCom/HCCoreDevCfg.dll                                               |    0 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/module/ConfigModule.java                |   36 
 lib/dhDll/StreamConvertor.dll                                                         |    0 
 lib/hikDll/HCNetSDKCom/HCAlarm.dll                                                    |    0 
 lib/hikDll/HCNetSDKCom/AudioIntercom.dll                                              |    0 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/module/PtzControlModule.java            |  206 +
 lib/hikDll/HCNetSDKCom/HCIndustry.dll                                                 |    0 
 lib/hikDll/HCNetSDKCom/HCPreview.dll                                                  |    0 
 lib/dhDll/ImageAlg.dll                                                                |    0 
 lib/hikDll/NPQos.dll                                                                  |    0 
 ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java   |   56 
 lib/hikDll/SuperRender.dll                                                            |    0 
 ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java                 |    6 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/common/DateChooserJButton.java          |  606 ++++
 ard-work/src/main/java/com/ruoyi/device/dhsdk/common/ErrorCode.java                   |  871 ++++++
 lib/hikDll/ClientDemoDll/zlib1.dll                                                    |    0 
 ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java    |  361 ++
 lib/hikDll/HCNetSDKCom/HCVoiceTalk.dll                                                |    0 
 lib/dhDll/RenderEngine.dll                                                            |    0 
 lib/hikDll/libssl-1_1-x64.dll                                                         |    0 
 lib/hikDll/HCNetSDKCom/HCAlarm.lib                                                    |    0 
 lib/hikDll/libmmd.dll                                                                 |    0 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/common/EventTaskCommonQueue.java        |   79 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/common/CaseMenu.java                    |   93 
 lib/hikDll/MP_Render.dll                                                              |    0 
 ruoyi-admin/src/main/resources/logback.xml                                            |   17 
 lib/hikDll/GdiPlus.dll                                                                |    0 
 lib/hikDll/OpenAL32.dll                                                               |    0 
 lib/hikDll/HCNetSDKCom/AudioRender.dll                                                |    0 
 lib/hikDll/HCNetSDKCom/HCPreview.lib                                                  |    0 
 lib/hikDll/HCNetSDKCom/HCGeneralCfgMgr.dll                                            |    0 
 lib/hikDll/HCNetSDKCom/OpenAL32.dll                                                   |    0 
 lib/hikDll/HCNetSDK.dll                                                               |    0 
 lib/hikDll/HCNetSDKCom/HCDisplay.dll                                                  |    0 
 lib/hikDll/ClientDemoDll/calib.dll                                                    |    0 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/service/IDhClientService.java           |   35 
 lib/hikDll/ClientDemoDll/libxml2.dll                                                  |    0 
 lib/hikDll/ClientDemoDll/iconv.dll                                                    |    0 
 lib/hikDll/HCNetSDKCom/StreamTransClient.dll                                          |    0 
 lib/hikDll/PlayCtrl.dll                                                               |    0 
 lib/hikDll/HmMerge.dll                                                                |    0 
 lib/hikDll/libcrypto-1_1-x64.dll                                                      |    0 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/common/SavePath.java                    |   76 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/common/DateChooserJButtonEx.java        |  568 ++++
 lib/hikDll/AudioRender.dll                                                            |    0 
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java                        |    6 
 lib/hikDll/HCCore.dll                                                                 |    0 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/common/Res.java                         | 2883 ++++++++++++++++++++
 lib/hikDll/YUVProcess.dll                                                             |    0 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/common/ListPictureShowDialog.java       |   34 
 ard-work/src/main/resources/resources_en_US.properties                                | 1071 +++++++
 ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/SdkController.java          |    3 
 lib/hikDll/ClientDemoDll/libcrypto-1_1-x64.dll                                        |    0 
 lib/hikDll/zlib1.dll                                                                  |    0 
 lib/dhDll/dhconfigsdk.dll                                                             |    0 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/controller/DhSdkController.java         |   78 
 ard-work/src/main/java/com/ruoyi/device/hiksdk/common/GlobalVariable.java             |    2 
 lib/hikDll/HCNetSDKCom/HCGeneralCfgMgr.lib                                            |    0 
 lib/hikDll/hlog.dll                                                                   |    0 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/common/WindowCloseListener.java         |    5 
 lib/hikDll/HCNetSDKCom/libiconv2.dll                                                  |    0 
 lib/hikDll/HXVA.dll                                                                   |    0 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/common/BorderEx.java                    |   16 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/common/PaintPanel.java                  |   32 
 lib/dhDll/IvsDrawer.dll                                                               |    0 
 lib/hikDll/HCNetSDKCom/SystemTransform.dll                                            |    0 
 ard-work/src/main/resources/dynamic-lib-load.xml                                      |   41 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java   |  255 +
 ard-work/src/main/java/com/ruoyi/device/dhsdk/common/EventTaskHandler.java            |    6 
 ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java         |    2 
 ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml                        |    7 
 ard-work/pom.xml                                                                      |    7 
 lib/dhDll/dhnetsdk.dll                                                                |    0 
 ard-work/src/main/java/com/ruoyi/device/dhsdk/module/LoginModule.java                 |  152 +
 lib/dhDll/dhplay.dll                                                                  |    0 
 lib/hikDll/hpr.dll                                                                    |    0 
 ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java |   62 
 lib/hikDll/ClientDemoDll/libssl-1_1-x64.dll                                           |    0 
 ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java           |    3 
 85 files changed, 8,176 insertions(+), 58 deletions(-)

diff --git a/ard-work/pom.xml b/ard-work/pom.xml
index 6a534ec..dac7c9b 100644
--- a/ard-work/pom.xml
+++ b/ard-work/pom.xml
@@ -31,7 +31,12 @@
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-common</artifactId>
         </dependency>
-
+        <!--澶у崕浜屾寮�鍙戜緷璧杍ar鍖�-->
+        <dependency>
+            <groupId>net.java.dev.jna</groupId>
+            <artifactId>jna</artifactId>
+            <version>5.4.0</version>
+        </dependency>
         <!--娴峰悍褰曞儚鏈轰簩娆″紑鍙戜緷璧杍ar鍖�-->
         <dependency>
             <groupId>net.java.jna</groupId>
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java b/ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java
index ccd6313..2ffda2a 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java
@@ -7,6 +7,7 @@
 import com.ruoyi.device.camera.domain.ArdCameras;
 import com.ruoyi.device.camera.domain.CameraCmd;
 import com.ruoyi.device.camera.service.IArdCamerasService;
+import com.ruoyi.device.dhsdk.service.IDhClientService;
 import com.ruoyi.device.hiksdk.service.IHikClientService;
 import com.ruoyi.device.hiksdk.service.impl.HikClientServiceImpl;
 import com.ruoyi.common.utils.poi.ExcelUtil;
@@ -30,6 +31,7 @@
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.core.page.TableDataInfo;
+
 import java.util.*;
 
 /**
@@ -44,7 +46,9 @@
 @Api(tags = "鐩告満绠$悊鎺ュ彛")
 public class ArdCamerasController extends BaseController {
     @Resource
-    private IHikClientService sdk;
+    private IHikClientService hikSdk;
+    @Resource
+    private IDhClientService dhSdk;
     @Resource
     private IArdCamerasService ardCamerasService;
     @Resource
@@ -94,11 +98,18 @@
     @PostMapping
     public AjaxResult add(@RequestBody ArdCameras camera) {
         int i = ardCamerasService.insertArdCameras(camera);
-        if(i>0) {
-            //娉ㄩ攢
-            sdk.loginOut(camera.getId());
-            //寮傛鐧诲綍
-            sdk.asyncLogin(camera);
+        if (i > 0) {
+            if (camera.getFactory().equals("1")) {
+                //娉ㄩ攢
+                hikSdk.logout(camera.getId());
+                //寮傛鐧诲綍
+                hikSdk.asyncLogin(camera);
+            }
+            else if(camera.getFactory().equals("2"))
+            {
+                dhSdk.logout(camera.getId());
+                dhSdk.login(camera);
+            }
         }
         return toAjax(i);
     }
@@ -112,11 +123,16 @@
     @PutMapping
     public AjaxResult edit(@RequestBody ArdCameras camera) {
         int i = ardCamerasService.updateArdCameras(camera);
-        if(i>0)
-        {
-            ArdCameras cameras = ardCamerasService.selectArdCamerasById(camera.getId());
-            sdk.loginOut(cameras.getId());
-            sdk.asyncLogin(cameras);
+        if (i > 0) {
+            camera= ardCamerasService.selectArdCamerasById(camera.getId());
+            if(camera.getFactory().equals("1")) {
+                hikSdk.logout(camera.getId());
+                hikSdk.asyncLogin(camera);
+            }
+            else if(camera.getFactory().equals("2")) {
+                dhSdk.logout(camera.getId());
+                dhSdk.login(camera);
+            }
         }
         return toAjax(i);
     }
@@ -129,9 +145,9 @@
     @Log(title = "鐩告満璁惧", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
     public AjaxResult remove(@PathVariable String[] ids) {
-        for(String id :ids)
-        {
-            sdk.loginOut(id);
+        for (String id : ids) {
+            hikSdk.logout(id);
+            dhSdk.logout(id);
         }
         return toAjax(ardCamerasService.deleteArdCamerasByIds(ids));
     }
@@ -152,25 +168,25 @@
         }
         return options;
     }
+
     @GetMapping("/getDeptAndCamera")
     @ApiOperation("鑾峰彇閮ㄩ棬鍜岀浉鏈�")
-    public AjaxResult getDeptAndCamera()
-    {
+    public AjaxResult getDeptAndCamera() {
         Map deptAndCamera = ardCamerasService.getChildDeptAndCamera(true);
         return AjaxResult.success(deptAndCamera);
     }
+
     @GetMapping("/getDeptAndCameraWithCheckBox")
     @ApiOperation("鑾峰彇閮ㄩ棬鍜岀浉鏈�(寮�鍚閫夋)")
-    public AjaxResult getDeptAndCameraWithCheckBox()
-    {
+    public AjaxResult getDeptAndCameraWithCheckBox() {
         Map deptAndCamera = ardCamerasService.getChildDeptAndCamera(false);
         return AjaxResult.success(deptAndCamera);
     }
+
     @PostMapping("/getNearCamerasBycoordinate")
     @ApiOperation("鑾峰彇闄勮繎鐨勭浉鏈�")
     @ApiOperationSupport(includeParameters = {"targetPosition"})
-    public AjaxResult getNearCamerasBycoordinate(@RequestBody CameraCmd cmd)
-    {
+    public AjaxResult getNearCamerasBycoordinate(@RequestBody CameraCmd cmd) {
         TreeMap nearCamerasBycoordinate = ardCamerasService.getNearCamerasBycoordinate(cmd);
         return AjaxResult.success(nearCamerasBycoordinate);
     }
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java b/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java
new file mode 100644
index 0000000..b7e6aef
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java
@@ -0,0 +1,361 @@
+package com.ruoyi.device.camera.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.ruoyi.common.annotation.Anonymous;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.camera.domain.ArdCameras;
+import com.ruoyi.device.camera.domain.CameraCmd;
+import com.ruoyi.device.camera.service.IArdCamerasService;
+import com.ruoyi.device.dhsdk.service.IDhClientService;
+import com.ruoyi.device.hiksdk.service.IHikClientService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.camera.domain.ArdCameras;
+import com.ruoyi.device.camera.domain.CameraCmd;
+import com.ruoyi.device.camera.service.IArdCamerasService;
+import com.ruoyi.device.dhsdk.service.IDhClientService;
+import com.ruoyi.device.hiksdk.service.IHikClientService;
+import com.ruoyi.common.annotation.Anonymous;
+import com.ruoyi.common.core.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @ClassName: CameraSdkController
+ * @Author: 鍒樿嫃涔�
+ * @Date: 2023骞�10鏈�14鏃�17:02:56
+ **/
+
+@Api(tags = "鐩告満閫氱敤SDK鎺ュ彛")
+@Controller
+@RequestMapping("/cameraSdk")
+@Anonymous
+public class CameraSdkController extends BaseController {
+
+    @Resource
+    private IHikClientService hikClientService;
+    @Resource
+    private IDhClientService dhClientService;
+    @Resource
+    private IArdCamerasService ardCamerasService;
+
+    /**
+     * @鎻忚堪 鍒濆鍔犺浇娴峰悍搴撴枃浠�
+     * @鍙傛暟 []
+     * @杩斿洖鍊� void
+     * @鍒涘缓浜� 鍒樿嫃涔�
+     * @鍒涘缓鏃堕棿 2023/1/17 16:13
+     * @淇敼浜哄拰鍏跺畠淇℃伅 if (Platform.isLinux())
+     */
+    @PostConstruct
+    public void initHCNetSDK() {
+        //鍒濆鍖栧姞杞絪dk搴撴枃浠�
+        hikClientService.loadHCNetSDKLib();
+        //鐧诲綍鎵�鏈夌浉鏈�
+        hikClientService.loginAll();
+    }
+
+    @RequestMapping("/preview")
+    private String preview() {
+        return "preview";
+    }
+
+    @RequestMapping("/index")
+    private String index() {
+        return "test";
+    }
+
+    @GetMapping("/list")
+    public @ResponseBody
+    AjaxResult list(ArdCameras ardCamera) {
+        List<ArdCameras> list = ardCamerasService.selectArdCamerasListNoDataScope(ardCamera);
+        return AjaxResult.success("鐩告満鍒楄〃锛�", list);
+    }
+
+    @ApiOperation("鑾峰彇鐮佹祦鍘嬬缉鍙傛暟")
+    @PostMapping("/getVideoCompressionCfg")
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
+    @Log(title = "鑾峰彇鐮佹祦鍘嬬缉鍙傛暟", businessType = BusinessType.CONTROL)
+    public @ResponseBody
+    AjaxResult getVideoCompressionCfg(@RequestBody CameraCmd cmd) {
+        return AjaxResult.success(hikClientService.getVideoCompressionCfg(cmd));
+    }
+
+    @ApiOperation("鍦ㄧ嚎鐘舵��")
+    @PostMapping("/state")
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId"})
+    @Log(title = "鍦ㄧ嚎鐘舵��", businessType = BusinessType.CONTROL)
+    public @ResponseBody
+    AjaxResult getOnlineState(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        boolean onLine = hikClientService.isOnLine(cmd);
+        return AjaxResult.success(onLine);
+    }
+
+    @ApiOperation(value = "浜戝彴鎺у埗", notes = "Code:1-宸︿笂 2-涓� 3-鍙充笂 4-宸� 5-宸¤埅 6-鍙� 7-宸︿笅 8-涓� 9-鍙充笅 10-鐒﹁窛鍙樺ぇ 11-鐒﹁窛鍙樺皬\n" +
+            "12-鐒︾偣鍓嶈皟 13-鐒︾偣鍚庤皟 14-鍏夊湀鎵╁ぇ 15-鍏夊湀缂╁皬 16-闆ㄥ埛寮�鍚�")
+    @PostMapping("/PTZControlWithSpeed")
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.speed", "cmd.enable", "cmd.code"})
+    @Log(title = "浜戝彴鎺у埗", businessType = BusinessType.CONTROL)
+    public @ResponseBody
+    AjaxResult PTZControlWithSpeed(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        return toAjax(hikClientService.pTZControlWithSpeed(cmd));
+    }
+
+    @ApiOperation("璋冪敤棰勭疆鐐�")
+    @PostMapping("/gotoPreset")
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.presetIndex"})
+    @Log(title = "璋冪敤棰勭疆鐐�", businessType = BusinessType.CONTROL)
+    public @ResponseBody
+    AjaxResult gotoPreset(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        return toAjax(hikClientService.gotoPreset(cmd));
+    }
+
+    @ApiOperation("璁剧疆棰勭疆鐐�")
+    @PostMapping("/setPreset")
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.presetIndex"})
+    @Log(title = "璁剧疆棰勭疆鐐�", businessType = BusinessType.CONTROL)
+    public @ResponseBody
+    AjaxResult setPreset(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        return toAjax(hikClientService.setPreset(cmd));
+    }
+
+    @ApiOperation("鑾峰彇鑱氱劍鍊�")
+    @PostMapping("/getFocusPos")
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
+    @Log(title = "鑾峰彇鑱氱劍鍊�", businessType = BusinessType.CONTROL)
+    public @ResponseBody
+    AjaxResult getFocusPos(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        Map<String, Object> Map = hikClientService.getFocusPos(cmd);
+        return AjaxResult.success("鑾峰彇鑱氱劍鍊�", Map);
+    }
+
+    @ApiOperation("璁剧疆鑱氱劍鍊�")
+    @PostMapping("/setFocusPos")
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.dwFocusPos"})
+    @Log(title = "璁剧疆鑱氱劍鍊�", businessType = BusinessType.CONTROL)
+    public @ResponseBody
+    AjaxResult setFocusPos(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        return toAjax(hikClientService.setFocusPos(cmd));
+    }
+
+    @ApiOperation("鑾峰彇PTZ")
+    @PostMapping("/getPTZ")
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
+    @Log(title = "鑾峰彇PTZ", businessType = BusinessType.CONTROL)
+    public @ResponseBody
+    AjaxResult getPTZ(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        Map<String, Object> ptzMap = hikClientService.getPtz(cmd);
+        return AjaxResult.success("鑾峰彇ptz", ptzMap);
+    }
+
+    @ApiOperation("鑾峰彇PTZ鑼冨洿")
+    @PostMapping("/getPTZScope")
+    @Log(title = "鑾峰彇PTZ鑼冨洿", businessType = BusinessType.CONTROL)
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
+    public @ResponseBody
+    AjaxResult getPTZScope(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        Map<String, Object> ptzMap = hikClientService.getPtzScope(cmd);
+        return AjaxResult.success("鑾峰彇ptz鑼冨洿", ptzMap);
+    }
+
+    @ApiOperation("璁剧疆PTZ")
+    @PostMapping("/setPTZ")
+    @Log(title = "璁剧疆PTZ", businessType = BusinessType.CONTROL)
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.ptzMap"})
+    public @ResponseBody
+    AjaxResult setPTZ(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        return toAjax(hikClientService.setPtz(cmd));
+    }
+
+    @ApiOperation("鎸囧悜鐩爣")
+    @PostMapping("/setTargetPosition")
+    @Log(title = "鎸囧悜鐩爣", businessType = BusinessType.CONTROL)
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.targetPosition"})
+    public @ResponseBody
+    AjaxResult setTargetPosition(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        return toAjax(hikClientService.guideTargetPosition(cmd));
+    }
+
+
+    @ApiOperation("璁剧疆闆舵柟浣嶈")
+    @PostMapping("/setZeroPTZ")
+    @Log(title = "璁剧疆闆舵柟浣嶈", businessType = BusinessType.CONTROL)
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.cmd.chanNo"})
+    public @ResponseBody
+    AjaxResult setZeroPTZ(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        return toAjax(hikClientService.setZeroPtz(cmd));
+    }
+
+    @ApiOperation("璁剧疆閿佸畾")
+    @PostMapping("/setPTZLock")
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.expired"})
+    @Log(title = "璁剧疆閿佸畾", businessType = BusinessType.CONTROL)
+    public @ResponseBody
+    AjaxResult setPTZLock(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        return AjaxResult.success(hikClientService.controlLock(cmd));
+    }
+
+    @ApiOperation("璁剧疆瑙i攣")
+    @PostMapping("/setPTZUnLock")
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId"})
+    @Log(title = "璁剧疆瑙i攣", businessType = BusinessType.CONTROL)
+    public @ResponseBody
+    AjaxResult setPTZUnLock(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        return AjaxResult.success(hikClientService.controlUnLock(cmd));
+    }
+
+    @ApiOperation("鑾峰彇浜戝彴閿佸畾淇℃伅")
+    @PostMapping("/getPTZLockInfo")
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
+    @Log(title = "鑾峰彇浜戝彴閿佸畾淇℃伅", businessType = BusinessType.CONTROL)
+    public @ResponseBody
+    AjaxResult getPTZLockInfo(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        int byWorkMode = hikClientService.getPTZLockInfo(cmd);
+        if (byWorkMode == 0) {
+            return AjaxResult.success("浜戝彴閿佸畾鐘舵�侊細瑙i攣");
+        } else if (byWorkMode == 1) {
+            return AjaxResult.success("浜戝彴閿佸畾鐘舵�侊細閿佸畾");
+        } else {
+            return AjaxResult.error("浜戝彴閿佸畾鐘舵�侊細澶辫触");
+        }
+    }
+
+    @ApiOperation("閫忛浘寮�鍏�")
+    @PostMapping("/defogcfg")
+    @Log(title = "閫忛浘寮�鍏�", businessType = BusinessType.CONTROL)
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
+    public @ResponseBody
+    AjaxResult defogcfg(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        return toAjax(hikClientService.controlDefogcfg(cmd));
+    }
+
+    @ApiOperation("绾㈠寮�鍏�")
+    @PostMapping("/infrarecfg")
+    @Log(title = "绾㈠寮�鍏�", businessType = BusinessType.CONTROL)
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
+    public @ResponseBody
+    AjaxResult infrarecfg(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        return toAjax(hikClientService.controlInfrarecfg(cmd));
+    }
+
+    @ApiOperation(value = "鎵嬪姩/鑷姩鑱氱劍", notes = "true鎵嬪姩flase鑷姩")
+    @PostMapping("/focusMode")
+    @Log(title = "鎵嬪姩/鑷姩鑱氱劍", businessType = BusinessType.CONTROL)
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
+    public @ResponseBody
+    AjaxResult enableFocusMode(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        return toAjax(hikClientService.controlFocusMode(cmd));
+    }
+
+    @ApiOperation(value = "鑾峰彇鑱氱劍妯″紡", notes = "1鎵嬪姩2鑷姩")
+    @PostMapping("/getFocusMode")
+    public @ResponseBody
+    AjaxResult getFocusMode(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        String focusMode = hikClientService.getFocusMode(cmd);
+        return AjaxResult.success(focusMode);
+    }
+
+    @ApiOperation("浜戝彴鍔犵儹")
+    @PostMapping("/heateRpwron")
+    @Log(title = "浜戝彴鍔犵儹", businessType = BusinessType.CONTROL)
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
+    public @ResponseBody
+    AjaxResult heateRpwron(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        return toAjax(hikClientService.controlPTHeateRpwron(cmd));
+    }
+
+
+    @ApiOperation("闀滃ご鍔犵儹")
+    @PostMapping("/cameraDeicing")
+    @Log(title = "闀滃ご鍔犵儹", businessType = BusinessType.CONTROL)
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
+    public @ResponseBody
+    AjaxResult cameraDeicing(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        return toAjax(hikClientService.controlCameraDeicing(cmd));
+    }
+
+    @PostMapping("/captureJPEGPicture")
+    public @ResponseBody
+    AjaxResult captureJPEGPicture(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        String base64Str = hikClientService.captureJPEGPicture(cmd);
+        return toAjaxString(base64Str, "鐩告満鎶撳浘");
+    }
+
+    @ApiOperation("鐩告満鎶撳浘")
+    @PostMapping("/picCutCate")
+    @Log(title = "鐩告満鎶撳浘", businessType = BusinessType.CONTROL)
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"})
+    public @ResponseBody
+    AjaxResult picCutCate(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        String path = hikClientService.picCutCate(cmd);
+        return toAjaxString(path, "鐩告満鎶撳浘");
+    }
+
+    @ApiOperation("鎵嬪姩褰曞儚")
+    @PostMapping("/record")
+    @Log(title = "鎵嬪姩褰曞儚", businessType = BusinessType.CONTROL)
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
+    public @ResponseBody
+    AjaxResult record(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        String path = hikClientService.record(cmd);
+        return toAjaxString(path, "鎵嬪姩褰曞儚");
+    }
+
+    @ApiOperation("鑾峰彇鐩告満鏋惰鍙傛暟")
+    @PostMapping("/getCameraSetupCFG")
+    @Log(title = "鑾峰彇鐩告満鏋惰鍙傛暟", businessType = BusinessType.CONTROL)
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"})
+    public @ResponseBody
+    AjaxResult getCameraSetupCFG(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        return AjaxResult.success(hikClientService.getGisInfo(cmd));
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java b/ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java
index aaec59e..358aca0 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java
@@ -74,7 +74,11 @@
     @Excel(name = "鍏夌數绫诲瀷")
     private String gdtype;
 
-
+    /**
+     * 鍘傚晢
+     */
+    @Excel(name = "鍘傚晢")
+    private String factory;
 
     /**
      * 缁忓害
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/Base64.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/Base64.java
new file mode 100644
index 0000000..45a8eb8
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/Base64.java
@@ -0,0 +1,553 @@
+/*
+ * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ */
+
+
+// Base64瑙g爜 浣跨敤1.8鐗堟湰婧愮爜  閴翠簬1.8閮ㄥ垎鐗规��1.6鐗堟湰浣跨敤涓嶅埌 鏁呭彧淇濈暀鑳戒娇鐢ㄥ埌鐨勪唬鐮� 鍏朵綑鍒犻櫎 
+package com.ruoyi.device.dhsdk.common;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import java.util.Arrays;
+
+/**
+ * This class consists exclusively of static methods for obtaining
+ * encoders and decoders for the Base64 encoding scheme. The
+ * implementation of this class supports the following types of Base64
+ * as specified in
+ * <a href="http://www.ietf.org/rfc/rfc4648.txt">RFC 4648</a> and
+ *
+ * <ul>
+ * <li><a name="basic"><b>Basic</b></a>
+ * <p> Uses "The Base64 Alphabet" as specified in Table 1 of
+ *     RFC 4648 and RFC 2045 for encoding and decoding operation.
+ *     The encoder does not add any line feed (line separator)
+ *     character. The decoder rejects data that contains characters
+ *     outside the base64 alphabet.</p></li>
+ *
+ * <p> Unless otherwise noted, passing a {@code null} argument to a
+ * method of this class will cause a {@link NullPointerException
+ * NullPointerException} to be thrown.
+ *
+ * @author  Xueming Shen
+ * @since   1.8
+ */
+
+public class Base64 {
+
+    private Base64() {}
+
+    /**
+     * Returns a {@link Encoder} that encodes using the
+     * <a href="#basic">Basic</a> type base64 encoding scheme.
+     *
+     * @return  A Base64 encoder.
+     */
+    public static Encoder getEncoder() {
+         return Encoder.RFC4648;
+    }
+
+    /**
+     * This class implements an encoder for encoding byte data using
+     * the Base64 encoding scheme as specified in RFC 4648 and RFC 2045.
+     *
+     * <p> Instances of {@link Encoder} class are safe for use by
+     * multiple concurrent threads.
+     *
+     * <p> Unless otherwise noted, passing a {@code null} argument to
+     * a method of this class will cause a
+     * {@link NullPointerException NullPointerException} to
+     * be thrown.
+     *
+     * @see     Decoder
+     * @since   1.8
+     */
+    public static class Encoder {
+
+        private final byte[] newline;
+        private final int linemax;
+        private final boolean isURL;
+        private final boolean doPadding;
+
+        private Encoder(boolean isURL, byte[] newline, int linemax, boolean doPadding) {
+            this.isURL = isURL;
+            this.newline = newline;
+            this.linemax = linemax;
+            this.doPadding = doPadding;
+        }
+
+        /**
+         * This array is a lookup table that translates 6-bit positive integer
+         * index values into their "Base64 Alphabet" equivalents as specified
+         * in "Table 1: The Base64 Alphabet" of RFC 2045 (and RFC 4648).
+         */
+        private static final char[] toBase64 = {
+            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+            'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'
+        };
+
+        /**
+         * It's the lookup table for "URL and Filename safe Base64" as specified
+         * in Table 2 of the RFC 4648, with the '+' and '/' changed to '-' and
+         * '_'. This table is used when BASE64_URL is specified.
+         */
+        private static final char[] toBase64URL = {
+            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+            'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '_'
+        };
+
+        static final Encoder RFC4648 = new Encoder(false, null, -1, true);
+
+        private final int outLength(int srclen) {
+            int len = 0;
+            if (doPadding) {
+                len = 4 * ((srclen + 2) / 3);
+            } else {
+                int n = srclen % 3;
+                len = 4 * (srclen / 3) + (n == 0 ? 0 : n + 1);
+            }
+            if (linemax > 0)                                  // line separators
+                len += (len - 1) / linemax * newline.length;
+            return len;
+        }
+
+        /**
+         * Encodes all bytes from the specified byte array into a newly-allocated
+         * byte array using the {@link Base64} encoding scheme. The returned byte
+         * array is of the length of the resulting bytes.
+         *
+         * @param   src
+         *          the byte array to encode
+         * @return  A newly-allocated byte array containing the resulting
+         *          encoded bytes.
+         */
+        public byte[] encode(byte[] src) {
+            int len = outLength(src.length);          // dst array size
+            byte[] dst = new byte[len];
+            int ret = encode0(src, 0, src.length, dst);
+            if (ret != dst.length)
+                 return Arrays.copyOf(dst, ret);
+            return dst;
+        }
+
+        /**
+         * Encodes all bytes from the specified byte array using the
+         * {@link Base64} encoding scheme, writing the resulting bytes to the
+         * given output byte array, starting at offset 0.
+         *
+         * <p> It is the responsibility of the invoker of this method to make
+         * sure the output byte array {@code dst} has enough space for encoding
+         * all bytes from the input byte array. No bytes will be written to the
+         * output byte array if the output byte array is not big enough.
+         *
+         * @param   src
+         *          the byte array to encode
+         * @param   dst
+         *          the output byte array
+         * @return  The number of bytes written to the output byte array
+         *
+         * @throws  IllegalArgumentException if {@code dst} does not have enough
+         *          space for encoding all input bytes.
+         */
+        public int encode(byte[] src, byte[] dst) {
+            int len = outLength(src.length);         // dst array size
+            if (dst.length < len)
+                throw new IllegalArgumentException(
+                    "Output byte array is too small for encoding all input bytes");
+            return encode0(src, 0, src.length, dst);
+        }
+
+        /**
+         * Encodes the specified byte array into a String using the {@link Base64}
+         * encoding scheme.
+         *
+         * <p> In other words, an invocation of this method has exactly the same
+         * effect as invoking
+         * {@code new String(encode(src), StandardCharsets.ISO_8859_1)}.
+         *
+         * @param   src
+         *          the byte array to encode
+         * @return  A String containing the resulting Base64 encoded characters
+         */
+        @SuppressWarnings("deprecation")
+        public String encodeToString(byte[] src) {
+            byte[] encoded = encode(src);
+            return new String(encoded, 0, 0, encoded.length);
+        }
+
+        /**
+         * Returns an encoder instance that encodes equivalently to this one,
+         * but without adding any padding character at the end of the encoded
+         * byte data.
+         *
+         * <p> The encoding scheme of this encoder instance is unaffected by
+         * this invocation. The returned encoder instance should be used for
+         * non-padding encoding operation.
+         *
+         * @return an equivalent encoder that encodes without adding any
+         *         padding character at the end
+         */
+        public Encoder withoutPadding() {
+            if (!doPadding)
+                return this;
+            return new Encoder(isURL, newline, linemax, false);
+        }
+
+        private int encode0(byte[] src, int off, int end, byte[] dst) {
+            char[] base64 = isURL ? toBase64URL : toBase64;
+            int sp = off;
+            int slen = (end - off) / 3 * 3;
+            int sl = off + slen;
+            if (linemax > 0 && slen  > linemax / 4 * 3)
+                slen = linemax / 4 * 3;
+            int dp = 0;
+            while (sp < sl) {
+                int sl0 = Math.min(sp + slen, sl);
+                for (int sp0 = sp, dp0 = dp ; sp0 < sl0; ) {
+                    int bits = (src[sp0++] & 0xff) << 16 |
+                               (src[sp0++] & 0xff) <<  8 |
+                               (src[sp0++] & 0xff);
+                    dst[dp0++] = (byte)base64[(bits >>> 18) & 0x3f];
+                    dst[dp0++] = (byte)base64[(bits >>> 12) & 0x3f];
+                    dst[dp0++] = (byte)base64[(bits >>> 6)  & 0x3f];
+                    dst[dp0++] = (byte)base64[bits & 0x3f];
+                }
+                int dlen = (sl0 - sp) / 3 * 4;
+                dp += dlen;
+                sp = sl0;
+                if (dlen == linemax && sp < end) {
+                    for (byte b : newline){
+                        dst[dp++] = b;
+                    }
+                }
+            }
+            if (sp < end) {               // 1 or 2 leftover bytes
+                int b0 = src[sp++] & 0xff;
+                dst[dp++] = (byte)base64[b0 >> 2];
+                if (sp == end) {
+                    dst[dp++] = (byte)base64[(b0 << 4) & 0x3f];
+                    if (doPadding) {
+                        dst[dp++] = '=';
+                        dst[dp++] = '=';
+                    }
+                } else {
+                    int b1 = src[sp++] & 0xff;
+                    dst[dp++] = (byte)base64[(b0 << 4) & 0x3f | (b1 >> 4)];
+                    dst[dp++] = (byte)base64[(b1 << 2) & 0x3f];
+                    if (doPadding) {
+                        dst[dp++] = '=';
+                    }
+                }
+            }
+            return dp;
+        }
+    }
+
+    /**
+     * Returns a {@link Decoder} that decodes using the
+     * <a href="#basic">Basic</a> type base64 encoding scheme.
+     *
+     * @return  A Base64 decoder.
+     */
+    public static Decoder getDecoder() {
+        return Decoder.RFC4648;
+    }
+    /**
+     * This class implements a decoder for decoding byte data using the
+     * Base64 encoding scheme as specified in RFC 4648 and RFC 2045.
+     *
+     * <p> The Base64 padding character {@code '='} is accepted and
+     * interpreted as the end of the encoded byte data, but is not
+     * required. So if the final unit of the encoded byte data only has
+     * two or three Base64 characters (without the corresponding padding
+     * character(s) padded), they are decoded as if followed by padding
+     * character(s). If there is a padding character present in the
+     * final unit, the correct number of padding character(s) must be
+     * present, otherwise {@code IllegalArgumentException} (
+     * {@code IOException} when reading from a Base64 stream) is thrown
+     * during decoding.
+     *
+     * <p> Instances of {@link Decoder} class are safe for use by
+     * multiple concurrent threads.
+     *
+     * <p> Unless otherwise noted, passing a {@code null} argument to
+     * a method of this class will cause a
+     * {@link NullPointerException NullPointerException} to
+     * be thrown.
+     *
+     * @see     Encoder
+     * @since   1.8
+     */
+    public static class Decoder {
+
+        private final boolean isURL;
+        private final boolean isMIME;
+
+        private Decoder(boolean isURL, boolean isMIME) {
+            this.isURL = isURL;
+            this.isMIME = isMIME;
+        }
+
+        /**
+         * Lookup table for decoding unicode characters drawn from the
+         * "Base64 Alphabet" (as specified in Table 1 of RFC 2045) into
+         * their 6-bit positive integer equivalents.  Characters that
+         * are not in the Base64 alphabet but fall within the bounds of
+         * the array are encoded to -1.
+         *
+         */
+        private static final int[] fromBase64 = new int[256];
+        static {
+            Arrays.fill(fromBase64, -1);
+            for (int i = 0; i < Encoder.toBase64.length; i++)
+                fromBase64[Encoder.toBase64[i]] = i;
+            fromBase64['='] = -2;
+        }
+
+        /**
+         * Lookup table for decoding "URL and Filename safe Base64 Alphabet"
+         * as specified in Table2 of the RFC 4648.
+         */
+        private static final int[] fromBase64URL = new int[256];
+
+        static {
+            Arrays.fill(fromBase64URL, -1);
+            for (int i = 0; i < Encoder.toBase64URL.length; i++)
+                fromBase64URL[Encoder.toBase64URL[i]] = i;
+            fromBase64URL['='] = -2;
+        }
+
+        static final Decoder RFC4648         = new Decoder(false, false);
+        static final Decoder RFC4648_URLSAFE = new Decoder(true, false);
+        static final Decoder RFC2045         = new Decoder(false, true);
+
+        /**
+         * Decodes all bytes from the input byte array using the {@link Base64}
+         * encoding scheme, writing the results into a newly-allocated output
+         * byte array. The returned byte array is of the length of the resulting
+         * bytes.
+         *
+         * @param   src
+         *          the byte array to decode
+         *
+         * @return  A newly-allocated byte array containing the decoded bytes.
+         *
+         * @throws  IllegalArgumentException
+         *          if {@code src} is not in valid Base64 scheme
+         */
+        public byte[] decode(byte[] src) {
+            byte[] dst = new byte[outLength(src, 0, src.length)];
+            int ret = decode0(src, 0, src.length, dst);
+            if (ret != dst.length) {
+                dst = Arrays.copyOf(dst, ret);
+            }
+            return dst;
+        }
+
+        public byte[] decode(String src) {
+            return decode(src.getBytes(Charset.forName("ISO-8859-1")));
+        }
+
+        /**
+         * Decodes all bytes from the input byte array using the {@link Base64}
+         * encoding scheme, writing the results into the given output byte array,
+         * starting at offset 0.
+         *
+         * <p> It is the responsibility of the invoker of this method to make
+         * sure the output byte array {@code dst} has enough space for decoding
+         * all bytes from the input byte array. No bytes will be be written to
+         * the output byte array if the output byte array is not big enough.
+         *
+         * <p> If the input byte array is not in valid Base64 encoding scheme
+         * then some bytes may have been written to the output byte array before
+         * IllegalargumentException is thrown.
+         *
+         * @param   src
+         *          the byte array to decode
+         * @param   dst
+         *          the output byte array
+         *
+         * @return  The number of bytes written to the output byte array
+         *
+         * @throws  IllegalArgumentException
+         *          if {@code src} is not in valid Base64 scheme, or {@code dst}
+         *          does not have enough space for decoding all input bytes.
+         */
+        public int decode(byte[] src, byte[] dst) {
+            int len = outLength(src, 0, src.length);
+            if (dst.length < len)
+                throw new IllegalArgumentException(
+                        "Output byte array is too small for decoding all input bytes");
+            return decode0(src, 0, src.length, dst);
+        }
+
+        /**
+         * Decodes all bytes from the input byte buffer using the {@link Base64}
+         * encoding scheme, writing the results into a newly-allocated ByteBuffer.
+         *
+         * <p> Upon return, the source buffer's position will be updated to
+         * its limit; its limit will not have been changed. The returned
+         * output buffer's position will be zero and its limit will be the
+         * number of resulting decoded bytes
+         *
+         * <p> {@code IllegalArgumentException} is thrown if the input buffer
+         * is not in valid Base64 encoding scheme. The position of the input
+         * buffer will not be advanced in this case.
+         *
+         * @param   buffer
+         *          the ByteBuffer to decode
+         *
+         * @return  A newly-allocated byte buffer containing the decoded bytes
+         *
+         * @throws  IllegalArgumentException
+         *          if {@code src} is not in valid Base64 scheme.
+         */
+        public ByteBuffer decode(ByteBuffer buffer) {
+            int pos0 = buffer.position();
+            try {
+                byte[] src;
+                int sp, sl;
+                if (buffer.hasArray()) {
+                    src = buffer.array();
+                    sp = buffer.arrayOffset() + buffer.position();
+                    sl = buffer.arrayOffset() + buffer.limit();
+                    buffer.position(buffer.limit());
+                } else {
+                    src = new byte[buffer.remaining()];
+                    buffer.get(src);
+                    sp = 0;
+                    sl = src.length;
+                }
+                byte[] dst = new byte[outLength(src, sp, sl)];
+                return ByteBuffer.wrap(dst, 0, decode0(src, sp, sl, dst));
+            } catch (IllegalArgumentException iae) {
+                buffer.position(pos0);
+                throw iae;
+            }
+        }
+
+        private int outLength(byte[] src, int sp, int sl) {
+            int[] base64 = isURL ? fromBase64URL : fromBase64;
+            int paddings = 0;
+            int len = sl - sp;
+            if (len == 0)
+                return 0;
+            if (len < 2) {
+                if (isMIME && base64[0] == -1)
+                    return 0;
+                throw new IllegalArgumentException(
+                        "Input byte[] should at least have 2 bytes for base64 bytes");
+            }
+            if (isMIME) {
+                // scan all bytes to fill out all non-alphabet. a performance
+                // trade-off of pre-scan or Arrays.copyOf
+                int n = 0;
+                while (sp < sl) {
+                    int b = src[sp++] & 0xff;
+                    if (b == '=') {
+                        len -= (sl - sp + 1);
+                        break;
+                    }
+                    if ((b = base64[b]) == -1)
+                        n++;
+                }
+                len -= n;
+            } else {
+                if (src[sl - 1] == '=') {
+                    paddings++;
+                    if (src[sl - 2] == '=')
+                        paddings++;
+                }
+            }
+            if (paddings == 0 && (len & 0x3) !=  0)
+                paddings = 4 - (len & 0x3);
+            return 3 * ((len + 3) / 4) - paddings;
+        }
+
+        private int decode0(byte[] src, int sp, int sl, byte[] dst) {
+            int[] base64 = isURL ? fromBase64URL : fromBase64;
+            int dp = 0;
+            int bits = 0;
+            int shiftto = 18;       // pos of first byte of 4-byte atom
+            while (sp < sl) {
+                int b = src[sp++] & 0xff;
+                if ((b = base64[b]) < 0) {
+                    if (b == -2) {         // padding byte '='
+                        // =     shiftto==18 unnecessary padding
+                        // x=    shiftto==12 a dangling single x
+                        // x     to be handled together with non-padding case
+                        // xx=   shiftto==6&&sp==sl missing last =
+                        // xx=y  shiftto==6 last is not =
+                        if (shiftto == 6 && (sp == sl || src[sp++] != '=') ||
+                                shiftto == 18) {
+                            throw new IllegalArgumentException(
+                                    "Input byte array has wrong 4-byte ending unit");
+                        }
+                        break;
+                    }
+                    if (isMIME)    // skip if for rfc2045
+                        continue;
+                    else
+                        throw new IllegalArgumentException(
+                                "Illegal base64 character " +
+                                        Integer.toString(src[sp - 1], 16));
+                }
+                bits |= (b << shiftto);
+                shiftto -= 6;
+                if (shiftto < 0) {
+                    dst[dp++] = (byte)(bits >> 16);
+                    dst[dp++] = (byte)(bits >>  8);
+                    dst[dp++] = (byte)(bits);
+                    shiftto = 18;
+                    bits = 0;
+                }
+            }
+            // reached end of byte array or hit padding '=' characters.
+            if (shiftto == 6) {
+                dst[dp++] = (byte)(bits >> 16);
+            } else if (shiftto == 0) {
+                dst[dp++] = (byte)(bits >> 16);
+                dst[dp++] = (byte)(bits >>  8);
+            } else if (shiftto == 12) {
+                // dangling single "x", incorrectly encoded.
+                throw new IllegalArgumentException(
+                        "Last unit does not have enough valid bits");
+            }
+            // anything left is invalid, if is not MIME.
+            // if MIME, ignore all non-base64 character
+            while (sp < sl) {
+                if (isMIME && base64[src[sp++]] < 0)
+                    continue;
+                throw new IllegalArgumentException(
+                        "Input byte array has incorrect ending byte at " + sp);
+            }
+            return dp;
+        }
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/BorderEx.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/BorderEx.java
new file mode 100644
index 0000000..838be6a
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/BorderEx.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.dhsdk.common;
+
+import javax.swing.*;
+import javax.swing.border.Border;
+
+/*
+ * 杈规璁剧疆
+ */
+public class BorderEx {
+	public static void set(JComponent object, String title, int width) {
+		Border innerBorder = BorderFactory.createTitledBorder(title);
+	    Border outerBorder = BorderFactory.createEmptyBorder(width, width, width, width);
+	    object.setBorder(BorderFactory.createCompoundBorder(outerBorder, innerBorder));	 
+	}
+
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/CaseMenu.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/CaseMenu.java
new file mode 100644
index 0000000..1bda060
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/CaseMenu.java
@@ -0,0 +1,93 @@
+package com.ruoyi.device.dhsdk.common;
+
+import java.lang.reflect.Method;
+import java.util.NoSuchElementException;
+import java.util.Scanner;
+import java.util.Vector;
+
+public class CaseMenu {
+	
+	public static class Item {
+		private Object object;
+		private String itemName;
+		private String methodName;
+		
+		public Item(Object object, String itemName, String methodName) {
+			super();
+			this.object = object;
+			this.itemName = itemName;
+			this.methodName = methodName;
+		}
+
+		public Object getObject() {
+			return object;
+		}
+
+		public String getItemName() {
+			return itemName;
+		}
+
+		public String getMethodName() {
+			return methodName;
+		}
+	}
+	
+	private Vector<Item> items;
+
+	public CaseMenu() {
+		super();
+		items = new Vector<Item>();
+	}
+	
+	public void addItem(Item item) {
+		items.add(item);
+	}
+	
+	private void showItem() {
+		final String format = "%2d\t%-20s\n";
+		int index = 0; 
+		System.out.printf(format, index++, "exit App");
+		for (Item item : items) {
+			System.out.printf(format, index++, item.getItemName());
+		}
+		System.out.println("Please input a item index to invoke the method:");
+	}
+	
+	public void run() {
+		Scanner scanner = new Scanner(System.in);
+		while(true) {			
+			showItem();			
+			try {		
+				int input = Integer.parseInt(scanner.nextLine());
+
+				if (input <= 0 ) {
+					System.err.println("input <= 0 || scanner.nextLine() == null");
+//					scanner.close();
+//					System.exit(0);
+					break;
+				}
+					
+				if (input < 0 || input > items.size()) {
+					System.err.println("Input Error Item Index.");
+					continue;
+				}
+				
+				Item item = items.get(input - 1);
+				Class<?> itemClass = item.getObject().getClass();
+				Method method = itemClass.getMethod(item.getMethodName());
+				method.invoke(item.getObject());
+			} catch (NoSuchElementException e) {
+//				scanner.close();
+//				System.exit(0);
+				break;
+			} catch (NumberFormatException e) {
+				System.err.println("Input Error NumberFormat.");
+				continue;
+			} catch (Exception e) {
+				e.printStackTrace();
+			} 
+		}
+		
+		scanner.close();
+	}
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/DateChooserJButton.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/DateChooserJButton.java
new file mode 100644
index 0000000..f2f0b24
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/DateChooserJButton.java
@@ -0,0 +1,606 @@
+package com.ruoyi.device.dhsdk.common;
+
+import javax.swing.*;
+import javax.swing.border.LineBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import java.awt.*;
+import java.awt.event.*;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * 鏃堕棿閫夋嫨鍣�, 骞存湀鏃�-鏃跺垎绉�
+ */
+public class DateChooserJButton extends JButton {
+	private static final long serialVersionUID = 1L;
+	
+    int startYear = 1980; // 榛樿銆愭渶灏忋�戞樉绀哄勾浠�
+    int lastYear = 2050; // 榛樿銆愭渶澶с�戞樉绀哄勾浠�
+    
+    private DateChooser dateChooser = null;
+    private String preLabel = "";
+    private String originalText = null;
+    private SimpleDateFormat sdf = null;
+    
+    private JSpinner yearSpin;
+    private JSpinner monthSpin;
+    private JSpinner daySpin;
+    private JSpinner hourSpin;
+    private JSpinner minuteSpin;
+    private JSpinner secondSpin;
+    
+    public DateChooserJButton() {
+        this(getNowDate());   
+        
+		try {
+	        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+	    } catch (Exception e) {
+	    	e.printStackTrace();
+	    } 
+    }
+
+    public DateChooserJButton(String dateString) {
+        this();     
+    	
+        setText(getDefaultDateFormat(), dateString);
+        //淇濆瓨鍘熷鏄棩鏈熸椂闂�
+        initOriginalText(dateString);
+    }
+
+    public DateChooserJButton(SimpleDateFormat df, String dateString) {
+        this();
+        setText(df, dateString);
+
+        //璁板繂褰撳墠鐨勬棩鏈熸牸寮忓寲鍣�
+        this.sdf = df;
+
+        //璁板繂鍘熷鏃ユ湡鏃堕棿
+        Date originalDate = null;
+        try {
+            originalDate = df.parse(dateString);
+        } catch (ParseException ex) {
+            originalDate = getNowDate();
+        }
+        initOriginalText(originalDate);
+    }
+
+    public DateChooserJButton(Date date) {
+        this("", date);
+        //璁板繂鍘熷鏃ユ湡鏃堕棿
+        initOriginalText(date);
+    }
+
+    public DateChooserJButton(String preLabel, Date date) {
+        if (preLabel != null) {
+            this.preLabel = preLabel;
+        }
+        setDate(date);
+        //璁板繂鍘熷鏄棩鏈熸椂闂�
+        initOriginalText(date);
+
+        setBorder(null);
+        setCursor(new Cursor(Cursor.HAND_CURSOR));
+        super.addActionListener(new ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                if (dateChooser == null) {
+                    dateChooser = new DateChooser();
+                }
+
+                dateChooser.showDateChooser();          
+            }
+        });
+    }
+    
+    public DateChooserJButton(int startYear, int lastYear) {
+        this();
+        this.startYear = startYear;
+        this.lastYear = lastYear;
+    }
+
+    private static Date getNowDate() {
+        return Calendar.getInstance().getTime();
+    }
+
+    private static SimpleDateFormat getDefaultDateFormat() {
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    }
+
+    /**
+     * 寰楀埌褰撳墠浣跨敤鐨勬棩鏈熸牸寮忓寲鍣�
+     * @return 鏃ユ湡鏍煎紡鍖栧櫒
+     */
+    public SimpleDateFormat getCurrentSimpleDateFormat(){
+        if(this.sdf != null){
+            return sdf;
+        }else{
+            return getDefaultDateFormat();
+        }
+    }
+
+
+    //淇濆瓨鍘熷鏄棩鏈熸椂闂�
+    private void initOriginalText(String dateString) {
+        this.originalText = dateString;
+    }
+
+    //淇濆瓨鍘熷鏄棩鏈熸椂闂�
+    private void initOriginalText(Date date) {
+        this.originalText = preLabel + getDefaultDateFormat().format(date);
+    }
+
+    /** 
+     * 寰楀埌褰撳墠璁板繂鐨勫師濮嬫棩鏈熸椂闂�
+     * @return 褰撳墠璁板繂鐨勫師濮嬫棩鏈熸椂闂达紙鏈慨鏀瑰墠鐨勬棩鏈熸椂闂达級
+     */
+    public String getOriginalText() {
+        return originalText;
+    }
+
+    // 瑕嗙洊鐖剁被鐨勬柟娉�
+    @Override
+    public void setText(String s) {
+        Date date;
+        try {
+            date = getDefaultDateFormat().parse(s);
+        } catch (ParseException e) {
+            date = getNowDate();
+        }
+        setDate(date);
+        initOriginalText(date);
+    }
+
+    public void setText(SimpleDateFormat df, String s) {
+        Date date;
+        try {
+            date = df.parse(s);
+        } catch (ParseException e) {
+            date = getNowDate();
+        }
+        setDate(date);
+        initOriginalText(date);
+    }
+
+    public void setDate(Date date) {
+        super.setText(preLabel + getDefaultDateFormat().format(date));
+    }
+
+    public Date getDate() {
+        String dateString = getText().substring(preLabel.length());
+        try {
+            SimpleDateFormat currentSdf = getCurrentSimpleDateFormat();
+            return currentSdf.parse(dateString);
+        } catch (ParseException e) {
+            return getNowDate();
+        }
+    }
+
+    /**  
+     * 瑕嗙洊鐖剁被鐨勬柟娉曚娇涔嬫棤鏁�
+     * @param listener 鍝嶅簲鐩戝惉鍣�
+     */
+    @Override
+    public void addActionListener(ActionListener listener) {
+    }
+
+    /**
+     * 鍐呴儴绫伙紝涓昏鏄畾涔変竴涓狫Panel锛岀劧鍚庢妸鏃ュ巻鐩稿叧鐨勬墍鏈夊唴瀹瑰~鍏ユ湰JPanel锛�
+     * 鐒跺悗鍐嶅垱寤轰竴涓狫Dialog锛屾妸鏈唴閮ㄧ被瀹氫箟鐨凧Panel鏀惧叆JDialog鐨勫唴瀹瑰尯
+     */
+    private class DateChooser extends JPanel implements MouseListener, ChangeListener {
+    	private static final long serialVersionUID = 1L;
+    	
+        JLabel yearLabel;
+        JLabel monthLabel;
+        JLabel dayLabel;
+        JLabel hourLabel;
+        JLabel minuteLabel;
+        JLabel secondLabel;
+        
+        int width = 485; // 鐣岄潰瀹藉害
+        int height = 230; // 鐣岄潰楂樺害
+        Color backGroundColor = Color.gray; // 搴曡壊
+        // 鏈堝巻琛ㄦ牸閰嶈壊----------------//
+        Color palletTableColor = Color.white; // 鏃ュ巻琛ㄥ簳鑹�
+        Color todayBackColor = Color.orange; // 浠婂ぉ鑳屾櫙鑹�
+        Color weekFontColor = Color.blue; // 鏄熸湡鏂囧瓧鑹�
+        Color dateFontColor = Color.black; // 鏃ユ湡鏂囧瓧鑹�
+        Color weekendFontColor = Color.red; // 鍛ㄦ湯鏂囧瓧鑹�
+        // 鎺у埗鏉¢厤鑹�------------------//
+        Color controlLineColor = Color.pink; // 鎺у埗鏉″簳鑹�
+        Color controlTextColor = Color.white; // 鎺у埗鏉℃爣绛炬枃瀛楄壊
+        
+        /** 鐐瑰嚮DateChooserButton鏃跺脊鍑虹殑瀵硅瘽妗嗭紝鏃ュ巻鍐呭鍦ㄨ繖涓璇濇鍐� */
+        JDialog dialog;
+        JLabel[][] daysLabels = new JLabel[6][7];
+
+        DateChooser() {
+            setLayout(new BorderLayout());
+            setBorder(new LineBorder(backGroundColor, 2));
+            setBackground(backGroundColor);
+
+            JPanel topYearAndMonth = createYearAndMonthPanal();
+            add(topYearAndMonth, BorderLayout.NORTH);
+            JPanel centerWeekAndDay = createWeekAndDayPanal();
+            add(centerWeekAndDay, BorderLayout.CENTER);
+            JPanel buttonBarPanel = createButtonBarPanel();
+            this.add(buttonBarPanel, BorderLayout.SOUTH);
+        }
+
+        private JPanel createYearAndMonthPanal() {
+            Calendar c = getCalendar();
+            int currentYear = c.get(Calendar.YEAR);
+            int currentMonth = c.get(Calendar.MONTH) + 1;
+            int currentDay = c.get(Calendar.DAY_OF_MONTH);
+            int currentHour = c.get(Calendar.HOUR_OF_DAY);
+            int currentMinute = c.get(Calendar.MINUTE);
+            int currentSecond = c.get(Calendar.SECOND);
+
+            JPanel result = new JPanel();
+            result.setLayout(new FlowLayout());
+            result.setBackground(controlLineColor);
+
+            yearSpin = new JSpinner(new SpinnerNumberModel(currentYear, startYear, lastYear, 1));
+            yearSpin.setPreferredSize(new Dimension(48, 20));
+            yearSpin.setName("Year");
+            yearSpin.setEditor(new JSpinner.NumberEditor(yearSpin, "####"));
+            yearSpin.addChangeListener(this);
+            result.add(yearSpin);
+
+            yearLabel = new JLabel(Res.string().getYear());
+            yearLabel.setForeground(controlTextColor);
+            result.add(yearLabel);
+
+            monthSpin = new JSpinner(new SpinnerNumberModel(currentMonth, 1, 12, 1));
+            monthSpin.setPreferredSize(new Dimension(35, 20));
+            monthSpin.setName("Month");
+            monthSpin.addChangeListener(this);
+            result.add(monthSpin);
+
+            monthLabel = new JLabel(Res.string().getMonth());
+            monthLabel.setForeground(controlTextColor);
+            result.add(monthLabel);
+
+            //濡傛灉杩欓噷瑕佽兘澶熼�夋嫨,浼氳鍒ゆ柇寰堝涓滆タ,姣斿姣忎釜鏈堝垎鍒敱澶氬皯鏃�,浠ュ強闂板勾闂.鎵�浠�,灏卞共鑴嗘妸Enable璁句负false
+            daySpin = new JSpinner(new SpinnerNumberModel(currentDay, 1, 31, 1));
+            daySpin.setPreferredSize(new Dimension(35, 20));
+            daySpin.setName("Day");
+            daySpin.addChangeListener(this);
+            daySpin.setEnabled(false);
+            result.add(daySpin);
+
+            dayLabel = new JLabel(Res.string().getDay());
+            dayLabel.setForeground(controlTextColor);
+            result.add(dayLabel);
+
+            hourSpin = new JSpinner(new SpinnerNumberModel(currentHour, 0, 23, 1));
+            hourSpin.setPreferredSize(new Dimension(35, 20));
+            hourSpin.setName("Hour");
+            hourSpin.addChangeListener(this);
+            result.add(hourSpin);
+
+            hourLabel = new JLabel(Res.string().getHour());
+            hourLabel.setForeground(controlTextColor);
+            result.add(hourLabel);
+
+            minuteSpin = new JSpinner(new SpinnerNumberModel(currentMinute, 0, 59, 1));
+            minuteSpin.setPreferredSize(new Dimension(35, 20));
+            minuteSpin.setName("Minute");
+            minuteSpin.addChangeListener(this);
+            result.add(minuteSpin);
+
+            minuteLabel = new JLabel(Res.string().getMinute());
+            minuteLabel.setForeground(controlTextColor);
+            result.add(minuteLabel);
+
+            secondSpin = new JSpinner(new SpinnerNumberModel(currentSecond, 0, 59, 1));
+            secondSpin.setPreferredSize(new Dimension(35, 20));
+            secondSpin.setName("Second");
+            secondSpin.addChangeListener(this);
+            result.add(secondSpin);
+
+            secondLabel = new JLabel(Res.string().getSecond());
+            secondLabel.setForeground(controlTextColor);
+            result.add(secondLabel);
+
+            return result;
+        }
+
+        private JPanel createWeekAndDayPanal() {
+        	Res.string().getWeek();
+            JPanel result = new JPanel();
+            // 璁剧疆鍥哄畾瀛椾綋锛屼互鍏嶈皟鐢ㄧ幆澧冩敼鍙樺奖鍝嶇晫闈㈢編瑙�
+            result.setFont(new Font("瀹嬩綋", Font.PLAIN, 12));
+            result.setLayout(new GridLayout(7, 7));
+            result.setBackground(Color.white);
+            JLabel cell;
+
+            for (int i = 0; i < 7; i++) {
+                cell = new JLabel(Res.string().getWeek()[i]);
+                cell.setHorizontalAlignment(JLabel.RIGHT);
+                if (i == 0 || i == 6) {
+                    cell.setForeground(weekendFontColor);
+                } else {
+                    cell.setForeground(weekFontColor);
+                }
+                result.add(cell);
+            }
+
+//            int actionCommandId = 0;
+            for (int i = 0; i < 6; i++) {
+                for (int j = 0; j < 7; j++) {
+                    JLabel numberLabel = new JLabel();
+                    numberLabel.setBorder(null);
+                    numberLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+//                    numberLabel.setActionCommand(String.valueOf(actionCommandId));
+                    numberLabel.addMouseListener(this);
+                    numberLabel.setBackground(palletTableColor);
+                    numberLabel.setForeground(dateFontColor);
+                    if (j == 0 || j == 6) {
+                    	numberLabel.setForeground(weekendFontColor);
+                    } else {
+                    	numberLabel.setForeground(dateFontColor);
+                    }
+                    daysLabels[i][j] = numberLabel;
+                    result.add(numberLabel);
+//                    actionCommandId++;
+                }
+            }
+
+            return result;
+        }
+
+        /** 寰楀埌DateChooserButton鐨勫綋鍓峵ext锛屾湰鏂规硶鏄负鎸夐挳浜嬩欢鍖垮悕绫诲噯澶囩殑銆� */
+        public String getTextOfDateChooserButton() {
+            return getText();
+        }
+
+        /** 鎭㈠DateChooserButton鐨勫師濮嬫棩鏈熸椂闂磘ext锛屾湰鏂规硶鏄负鎸夐挳浜嬩欢鍖垮悕绫诲噯澶囩殑銆� */
+        public void restoreTheOriginalDate() {
+            String originalText = getOriginalText();
+            setText(originalText);
+        }
+
+        private JPanel createButtonBarPanel() {
+            JPanel panel = new JPanel();
+            panel.setLayout(new GridLayout(1, 2));
+
+            JButton ok = new JButton(Res.string().getConfirm());
+            ok.addActionListener(new ActionListener() {
+
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    //璁板繂鍘熷鏃ユ湡鏃堕棿
+                    initOriginalText(getTextOfDateChooserButton());
+                    //闅愯棌鏃ュ巻瀵硅瘽妗�
+                    dialog.setVisible(false);
+                }
+            });
+            panel.add(ok);
+
+            JButton cancel = new JButton(Res.string().getCancel());
+            cancel.addActionListener(new ActionListener() {
+
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    //鎭㈠鍘熷鐨勬棩鏈熸椂闂�
+                    restoreTheOriginalDate();     
+                    //闅愯棌鏃ュ巻瀵硅瘽妗�
+                    dialog.setVisible(false);
+                }
+            });
+
+            panel.add(cancel);
+            return panel;
+        }
+
+        private JDialog createDialog() {
+            JDialog result = new JDialog();
+            result.setTitle(Res.string().getDateChooser());
+            result.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+            result.getContentPane().add(this, BorderLayout.CENTER);
+            result.pack();
+            result.setSize(width, height);
+            result.setModal(true);  
+            
+            result.addWindowListener(new WindowAdapter() {
+    	    	public void windowClosing(WindowEvent e) {
+    	    	     //鎭㈠鍘熷鐨勬棩鏈熸椂闂�
+                    restoreTheOriginalDate();     
+                    //闅愯棌鏃ュ巻瀵硅瘽妗�
+                    dialog.setVisible(false);
+    	    	}
+            });
+            
+            return result;
+        }
+
+        void showDateChooser() {
+            if (dialog == null) {
+                dialog = createDialog();
+            }
+            dialog.setLocationRelativeTo(null);
+            flushWeekAndDay();
+            dialog.setVisible(true);
+        }
+
+        private Calendar getCalendar() {
+            Calendar result = Calendar.getInstance();
+            result.setTime(getDate());
+            return result;
+        }
+
+        private int getSelectedYear() {
+            return ((Integer) yearSpin.getValue()).intValue();
+        }
+
+        private int getSelectedMonth() {
+            return ((Integer) monthSpin.getValue()).intValue();
+        }
+
+        private int getSelectedHour() {
+            return ((Integer) hourSpin.getValue()).intValue();
+        }
+
+        private int getSelectedMinite() {
+            return ((Integer) minuteSpin.getValue()).intValue();
+        }
+
+        private int getSelectedSecond() {
+            return ((Integer) secondSpin.getValue()).intValue();
+        }
+
+        private void dayColorUpdate(boolean isOldDay) {
+            Calendar c = getCalendar();
+            int day = c.get(Calendar.DAY_OF_MONTH);
+            c.set(Calendar.DAY_OF_MONTH, 1);
+            int actionCommandId = day - 2 + c.get(Calendar.DAY_OF_WEEK);
+            int i = actionCommandId / 7;
+            int j = actionCommandId % 7;
+            if (isOldDay) {
+            	daysLabels[i][j].setForeground(dateFontColor);
+            } else {
+            	daysLabels[i][j].setForeground(todayBackColor);
+            }
+        }
+
+        private void flushWeekAndDay() {     
+            Calendar c = getCalendar();
+            c.set(Calendar.DAY_OF_MONTH, 1);
+            int maxDayNo = c.getActualMaximum(Calendar.DAY_OF_MONTH);
+            int dayNo = 2 - c.get(Calendar.DAY_OF_WEEK);
+            for (int i = 0; i < 6; i++) {
+                for (int j = 0; j < 7; j++) {
+                    String s = "";
+                    if (dayNo >= 1 && dayNo <= maxDayNo) {
+                        s = String.valueOf(dayNo);
+                    }
+                    daysLabels[i][j].setText(s);
+                    dayNo++;
+                }
+            }
+
+            // 鎵撳紑鏃ュ巻鏃讹紝鏍规嵁鎸夐挳鐨勬椂闂达紝璁剧疆鏃ュ巻鐨勬椂闂�
+            String[] date1 = getText().split(" ")[0].split("-");
+            String[] date2 = getText().split(" ")[1].split(":");
+
+            yearSpin.setValue(new Integer(date1[0]));
+            monthSpin.setValue(new Integer(date1[1]));
+            daySpin.setValue(new Integer(date1[2]));
+            hourSpin.setValue(new Integer(date2[0]));
+            minuteSpin.setValue(new Integer(date2[1]));
+            secondSpin.setValue(new Integer(date2[2]));
+
+            // 閲嶇疆鏃ュ巻澶╃殑鏁板瓧棰滆壊
+            for(int i = 0; i < 6; i++) {
+            	for(int j = 0; j < 7; j++) {
+            		if(!daysLabels[i][j].getText().equals("")) {
+            			daysLabels[i][j].setForeground(Color.BLACK);
+            		}
+            	}
+            }
+            
+            // 閲嶇疆鏃ュ巻鏄熸湡鍏�佹槦鏈熸棩鐨勬暟瀛楅鑹�
+            for(int i = 0; i < 6; i++) {
+            	if(!daysLabels[i][0].getText().equals("")) {
+            		daysLabels[i][0].setForeground(weekendFontColor);
+            	}
+            	if(!daysLabels[i][6].getText().equals("")) {
+            		daysLabels[i][6].setForeground(weekendFontColor);
+            	}
+            }
+            
+            // 璁剧疆褰撳ぉ鐨勬暟瀛楅鑹�
+            for(int i = 0; i < 6; i++) {
+            	for(int j = 0; j < 7; j++) {
+            		if(daysLabels[i][j].getText().equals(date1[2])) {
+            			daysLabels[i][j].setForeground(todayBackColor);
+            		}
+            	}
+            }
+
+            dayColorUpdate(false);
+        }
+
+        /**
+         * 閫夋嫨鏃ユ湡鏃剁殑鍝嶅簲浜嬩欢
+         */
+        @Override
+        public void stateChanged(ChangeEvent e) {
+            JSpinner source = (JSpinner) e.getSource();
+            Calendar c = getCalendar();
+            if (source.getName().equals("Hour")) {
+                c.set(Calendar.HOUR_OF_DAY, getSelectedHour());
+                setDate(c.getTime());
+                return;
+            }
+            if (source.getName().equals("Minute")) {
+                c.set(Calendar.MINUTE, getSelectedMinite());
+                setDate(c.getTime());
+                return;
+            }
+            if (source.getName().equals("Second")) {
+                c.set(Calendar.SECOND, getSelectedSecond());
+                setDate(c.getTime());
+                return;
+            }
+
+            dayColorUpdate(true);
+
+            if (source.getName().equals("Year")) {
+                c.set(Calendar.YEAR, getSelectedYear());
+            } else if (source.getName().equals("Month")) {
+                c.set(Calendar.MONTH, getSelectedMonth() - 1);
+            }
+            setDate(c.getTime());
+            flushWeekAndDay();
+        }
+
+        /**
+         * 閫夋嫨鏃ユ湡鏃剁殑鍝嶅簲浜嬩欢
+         */
+		@Override
+		public void mouseClicked(MouseEvent e) {
+            JLabel source = (JLabel) e.getSource();
+            if (source.getText().length() == 0) {
+                return;
+            }
+            dayColorUpdate(true);
+            source.setForeground(todayBackColor);
+            int newDay = Integer.parseInt(source.getText());
+            Calendar c = getCalendar();
+            c.set(Calendar.DAY_OF_MONTH, newDay);
+            setDate(c.getTime());
+            //鎶奷aySpin涓殑鍊间篃鍙樹簡
+            daySpin.setValue(Integer.valueOf(newDay));
+		}
+
+		@Override
+		public void mouseEntered(MouseEvent arg0) {
+			// TODO Auto-generated method stub
+			
+		}
+
+		@Override
+		public void mouseExited(MouseEvent arg0) {
+			// TODO Auto-generated method stub
+			
+		}
+
+		@Override
+		public void mousePressed(MouseEvent arg0) {
+			// TODO Auto-generated method stub
+			
+		}
+
+		@Override
+		public void mouseReleased(MouseEvent arg0) {
+			// TODO Auto-generated method stub
+			
+		}
+    }
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/DateChooserJButtonEx.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/DateChooserJButtonEx.java
new file mode 100644
index 0000000..ab06b73
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/DateChooserJButtonEx.java
@@ -0,0 +1,568 @@
+package com.ruoyi.device.dhsdk.common;
+
+import javax.swing.*;
+import javax.swing.border.LineBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import java.awt.*;
+import java.awt.event.*;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * 鏃堕棿閫夋嫨鍣�, 骞存湀鏃�
+ */
+public class DateChooserJButtonEx extends JButton {
+	private static final long serialVersionUID = 1L;
+	
+    int startYear = 1980; // 榛樿銆愭渶灏忋�戞樉绀哄勾浠�
+    int lastYear = 2050; // 榛樿銆愭渶澶с�戞樉绀哄勾浠�
+    
+    private DateChooser dateChooser = null;
+    private String preLabel = "";
+    private String originalText = null;
+    private SimpleDateFormat sdf = null;
+    
+    private JSpinner yearSpin;
+    private JSpinner monthSpin;
+    private JSpinner daySpin;
+    private JSpinner hourSpin;
+    private JSpinner minuteSpin;
+    private JSpinner secondSpin;
+    
+    public DateChooserJButtonEx() {
+        this(getNowDate());   
+        
+		try {
+	        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+	    } catch (Exception e) {
+	    	e.printStackTrace();
+	    } 
+    }
+
+    public DateChooserJButtonEx(String dateString) {
+        this();     
+    	
+        setText(getDefaultDateFormat(), dateString);
+        //淇濆瓨鍘熷鏄棩鏈熸椂闂�
+        initOriginalText(dateString);
+    }
+
+    public DateChooserJButtonEx(SimpleDateFormat df, String dateString) {
+        this();
+        setText(df, dateString);
+
+        //璁板繂褰撳墠鐨勬棩鏈熸牸寮忓寲鍣�
+        this.sdf = df;
+
+        //璁板繂鍘熷鏃ユ湡鏃堕棿
+        Date originalDate = null;
+        try {
+            originalDate = df.parse(dateString);
+        } catch (ParseException ex) {
+            originalDate = getNowDate();
+        }
+        initOriginalText(originalDate);
+    }
+
+    public DateChooserJButtonEx(Date date) {
+        this("", date);
+        //璁板繂鍘熷鏃ユ湡鏃堕棿
+        initOriginalText(date);
+    }
+
+    public DateChooserJButtonEx(String preLabel, Date date) {
+        if (preLabel != null) {
+            this.preLabel = preLabel;
+        }
+        setDate(date);
+        //璁板繂鍘熷鏄棩鏈熸椂闂�
+        initOriginalText(date);
+
+        setBorder(null);
+        setCursor(new Cursor(Cursor.HAND_CURSOR));
+        super.addActionListener(new ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                if (dateChooser == null) {
+                    dateChooser = new DateChooser();
+                }
+
+                dateChooser.showDateChooser();          
+            }
+        });
+    }
+    
+    public void setStartYear(int startYear) {
+        this.startYear = startYear;
+    }
+    
+    public void setLastYear(int lastYear) {
+        this.lastYear = lastYear;
+    }
+
+    private static Date getNowDate() {
+        return Calendar.getInstance().getTime();
+    }
+
+    private static SimpleDateFormat getDefaultDateFormat() {
+        return new SimpleDateFormat("yyyy-MM-dd");
+    }
+
+    /**
+     * 寰楀埌褰撳墠浣跨敤鐨勬棩鏈熸牸寮忓寲鍣�
+     * @return 鏃ユ湡鏍煎紡鍖栧櫒
+     */
+    public SimpleDateFormat getCurrentSimpleDateFormat(){
+        if(this.sdf != null){
+            return sdf;
+        }else{
+            return getDefaultDateFormat();
+        }
+    }
+
+
+    //淇濆瓨鍘熷鏄棩鏈熸椂闂�
+    private void initOriginalText(String dateString) {
+        this.originalText = dateString;
+    }
+
+    //淇濆瓨鍘熷鏄棩鏈熸椂闂�
+    private void initOriginalText(Date date) {
+        this.originalText = preLabel + getDefaultDateFormat().format(date);
+    }
+
+    /** 
+     * 寰楀埌褰撳墠璁板繂鐨勫師濮嬫棩鏈熸椂闂�
+     * @return 褰撳墠璁板繂鐨勫師濮嬫棩鏈熸椂闂达紙鏈慨鏀瑰墠鐨勬棩鏈熸椂闂达級
+     */
+    public String getOriginalText() {
+        return originalText;
+    }
+
+    // 瑕嗙洊鐖剁被鐨勬柟娉�
+    @Override
+    public void setText(String s) {
+        Date date;
+        try {
+            date = getDefaultDateFormat().parse(s);
+        } catch (ParseException e) {
+            date = getNowDate();
+        }
+        setDate(date);
+        initOriginalText(date);
+    }
+
+    public void setText(SimpleDateFormat df, String s) {
+        Date date;
+        try {
+            date = df.parse(s);
+        } catch (ParseException e) {
+            date = getNowDate();
+        }
+        setDate(date);
+        initOriginalText(date);
+    }
+
+    public void setDate(Date date) {
+        super.setText(preLabel + getDefaultDateFormat().format(date));
+    }
+
+    public Date getDate() {
+        String dateString = getText().substring(preLabel.length());
+        try {
+            SimpleDateFormat currentSdf = getCurrentSimpleDateFormat();
+            return currentSdf.parse(dateString);
+        } catch (ParseException e) {
+            return getNowDate();
+        }
+    }
+
+    /**  
+     * 瑕嗙洊鐖剁被鐨勬柟娉曚娇涔嬫棤鏁�
+     * @param listener 鍝嶅簲鐩戝惉鍣�
+     */
+    @Override
+    public void addActionListener(ActionListener listener) {
+    }
+
+    /**
+     * 鍐呴儴绫伙紝涓昏鏄畾涔変竴涓狫Panel锛岀劧鍚庢妸鏃ュ巻鐩稿叧鐨勬墍鏈夊唴瀹瑰~鍏ユ湰JPanel锛�
+     * 鐒跺悗鍐嶅垱寤轰竴涓狫Dialog锛屾妸鏈唴閮ㄧ被瀹氫箟鐨凧Panel鏀惧叆JDialog鐨勫唴瀹瑰尯
+     */
+    private class DateChooser extends JPanel implements MouseListener, ChangeListener {
+    	private static final long serialVersionUID = 1L;
+    	
+        JLabel yearLabel;
+        JLabel monthLabel;
+        JLabel dayLabel;
+        
+        int width = 485; // 鐣岄潰瀹藉害
+        int height = 230; // 鐣岄潰楂樺害
+        Color backGroundColor = Color.gray; // 搴曡壊
+        // 鏈堝巻琛ㄦ牸閰嶈壊----------------//
+        Color palletTableColor = Color.white; // 鏃ュ巻琛ㄥ簳鑹�
+        Color todayBackColor = Color.orange; // 浠婂ぉ鑳屾櫙鑹�
+        Color weekFontColor = Color.blue; // 鏄熸湡鏂囧瓧鑹�
+        Color dateFontColor = Color.black; // 鏃ユ湡鏂囧瓧鑹�
+        Color weekendFontColor = Color.red; // 鍛ㄦ湯鏂囧瓧鑹�
+        // 鎺у埗鏉¢厤鑹�------------------//
+        Color controlLineColor = Color.pink; // 鎺у埗鏉″簳鑹�
+        Color controlTextColor = Color.white; // 鎺у埗鏉℃爣绛炬枃瀛楄壊
+        
+        /** 鐐瑰嚮DateChooserButton鏃跺脊鍑虹殑瀵硅瘽妗嗭紝鏃ュ巻鍐呭鍦ㄨ繖涓璇濇鍐� */
+        JDialog dialog;
+        JLabel[][] daysLabels = new JLabel[6][7];
+
+        DateChooser() {
+            setLayout(new BorderLayout());
+            setBorder(new LineBorder(backGroundColor, 2));
+            setBackground(backGroundColor);
+
+            JPanel topYearAndMonth = createYearAndMonthPanal();
+            add(topYearAndMonth, BorderLayout.NORTH);
+            JPanel centerWeekAndDay = createWeekAndDayPanal();
+            add(centerWeekAndDay, BorderLayout.CENTER);
+            JPanel buttonBarPanel = createButtonBarPanel();
+            this.add(buttonBarPanel, BorderLayout.SOUTH);
+        }
+
+        private JPanel createYearAndMonthPanal() {
+            Calendar c = getCalendar();
+            int currentYear = c.get(Calendar.YEAR);
+            int currentMonth = c.get(Calendar.MONTH) + 1;
+            int currentDay = c.get(Calendar.DAY_OF_MONTH);
+
+            JPanel result = new JPanel();
+            result.setLayout(new FlowLayout());
+            result.setBackground(controlLineColor);
+
+            yearSpin = new JSpinner(new SpinnerNumberModel(currentYear, startYear, lastYear, 1));
+            yearSpin.setPreferredSize(new Dimension(48, 20));
+            yearSpin.setName("Year");
+            yearSpin.setEditor(new JSpinner.NumberEditor(yearSpin, "####"));
+            yearSpin.addChangeListener(this);
+            result.add(yearSpin);
+
+            yearLabel = new JLabel(Res.string().getYear());
+            yearLabel.setForeground(controlTextColor);
+            result.add(yearLabel);
+
+            monthSpin = new JSpinner(new SpinnerNumberModel(currentMonth, 1, 12, 1));
+            monthSpin.setPreferredSize(new Dimension(35, 20));
+            monthSpin.setName("Month");
+            monthSpin.addChangeListener(this);
+            result.add(monthSpin);
+
+            monthLabel = new JLabel(Res.string().getMonth());
+            monthLabel.setForeground(controlTextColor);
+            result.add(monthLabel);
+
+            //濡傛灉杩欓噷瑕佽兘澶熼�夋嫨,浼氳鍒ゆ柇寰堝涓滆タ,姣斿姣忎釜鏈堝垎鍒敱澶氬皯鏃�,浠ュ強闂板勾闂.鎵�浠�,灏卞共鑴嗘妸Enable璁句负false
+            daySpin = new JSpinner(new SpinnerNumberModel(currentDay, 1, 31, 1));
+            daySpin.setPreferredSize(new Dimension(35, 20));
+            daySpin.setName("Day");
+            daySpin.addChangeListener(this);
+            daySpin.setEnabled(false);
+            result.add(daySpin);
+
+            dayLabel = new JLabel(Res.string().getDay());
+            dayLabel.setForeground(controlTextColor);
+            result.add(dayLabel);      
+
+            return result;
+        }
+
+        private JPanel createWeekAndDayPanal() {
+        	Res.string().getWeek();
+            JPanel result = new JPanel();
+            // 璁剧疆鍥哄畾瀛椾綋锛屼互鍏嶈皟鐢ㄧ幆澧冩敼鍙樺奖鍝嶇晫闈㈢編瑙�
+            result.setFont(new Font("瀹嬩綋", Font.PLAIN, 12));
+            result.setLayout(new GridLayout(7, 7));
+            result.setBackground(Color.white);
+            JLabel cell;
+
+            for (int i = 0; i < 7; i++) {
+                cell = new JLabel(Res.string().getWeek()[i]);
+                cell.setHorizontalAlignment(JLabel.RIGHT);
+                if (i == 0 || i == 6) {
+                    cell.setForeground(weekendFontColor);
+                } else {
+                    cell.setForeground(weekFontColor);
+                }
+                result.add(cell);
+            }
+
+//            int actionCommandId = 0;
+            for (int i = 0; i < 6; i++) {
+                for (int j = 0; j < 7; j++) {
+                    JLabel numberLabel = new JLabel();
+                    numberLabel.setBorder(null);
+                    numberLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+//                    numberLabel.setActionCommand(String.valueOf(actionCommandId));
+                    numberLabel.addMouseListener(this);
+                    numberLabel.setBackground(palletTableColor);
+                    numberLabel.setForeground(dateFontColor);
+                    if (j == 0 || j == 6) {
+                    	numberLabel.setForeground(weekendFontColor);
+                    } else {
+                    	numberLabel.setForeground(dateFontColor);
+                    }
+                    daysLabels[i][j] = numberLabel;
+                    result.add(numberLabel);
+//                    actionCommandId++;
+                }
+            }
+
+            return result;
+        }
+
+        /** 寰楀埌DateChooserButton鐨勫綋鍓峵ext锛屾湰鏂规硶鏄负鎸夐挳浜嬩欢鍖垮悕绫诲噯澶囩殑銆� */
+        public String getTextOfDateChooserButton() {
+            return getText();
+        }
+
+        /** 鎭㈠DateChooserButton鐨勫師濮嬫棩鏈熸椂闂磘ext锛屾湰鏂规硶鏄负鎸夐挳浜嬩欢鍖垮悕绫诲噯澶囩殑銆� */
+        public void restoreTheOriginalDate() {
+            String originalText = getOriginalText();
+            setText(originalText);
+        }
+
+        private JPanel createButtonBarPanel() {
+            JPanel panel = new JPanel();
+            panel.setLayout(new GridLayout(1, 2));
+
+            JButton ok = new JButton(Res.string().getConfirm());
+            ok.addActionListener(new ActionListener() {
+
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    //璁板繂鍘熷鏃ユ湡鏃堕棿
+                    initOriginalText(getTextOfDateChooserButton());
+                    //闅愯棌鏃ュ巻瀵硅瘽妗�
+                    dialog.setVisible(false);
+                }
+            });
+            panel.add(ok);
+
+            JButton cancel = new JButton(Res.string().getCancel());
+            cancel.addActionListener(new ActionListener() {
+
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    //鎭㈠鍘熷鐨勬棩鏈熸椂闂�
+                    restoreTheOriginalDate();     
+                    //闅愯棌鏃ュ巻瀵硅瘽妗�
+                    dialog.setVisible(false);
+                }
+            });
+
+            panel.add(cancel);
+            return panel;
+        }
+
+        private JDialog createDialog() {
+            JDialog result = new JDialog();
+            result.setTitle(Res.string().getDateChooser());
+            result.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+            result.getContentPane().add(this, BorderLayout.CENTER);
+            result.pack();
+            result.setSize(width, height);
+            result.setModal(true);  
+            
+            result.addWindowListener(new WindowAdapter() {
+    	    	public void windowClosing(WindowEvent e) {
+    	    	     //鎭㈠鍘熷鐨勬棩鏈熸椂闂�
+                    restoreTheOriginalDate();     
+                    //闅愯棌鏃ュ巻瀵硅瘽妗�
+                    dialog.setVisible(false);
+    	    	}
+            });
+            
+            return result;
+        }
+
+        void showDateChooser() {
+            if (dialog == null) {
+                dialog = createDialog();
+            }
+            dialog.setLocationRelativeTo(null);
+            flushWeekAndDay();
+            dialog.setVisible(true);
+        }
+
+        private Calendar getCalendar() {
+            Calendar result = Calendar.getInstance();
+            result.setTime(getDate());
+            return result;
+        }
+
+        private int getSelectedYear() {
+            return ((Integer) yearSpin.getValue()).intValue();
+        }
+
+        private int getSelectedMonth() {
+            return ((Integer) monthSpin.getValue()).intValue();
+        }
+
+        private int getSelectedHour() {
+            return ((Integer) hourSpin.getValue()).intValue();
+        }
+
+        private int getSelectedMinite() {
+            return ((Integer) minuteSpin.getValue()).intValue();
+        }
+
+        private int getSelectedSecond() {
+            return ((Integer) secondSpin.getValue()).intValue();
+        }
+
+        private void dayColorUpdate(boolean isOldDay) {
+            Calendar c = getCalendar();
+            int day = c.get(Calendar.DAY_OF_MONTH);
+            c.set(Calendar.DAY_OF_MONTH, 1);
+            int actionCommandId = day - 2 + c.get(Calendar.DAY_OF_WEEK);
+            int i = actionCommandId / 7;
+            int j = actionCommandId % 7;
+            if (isOldDay) {
+            	daysLabels[i][j].setForeground(dateFontColor);
+            } else {
+            	daysLabels[i][j].setForeground(todayBackColor);
+            }
+        }
+
+        private void flushWeekAndDay() {     
+            Calendar c = getCalendar();
+            c.set(Calendar.DAY_OF_MONTH, 1);
+            int maxDayNo = c.getActualMaximum(Calendar.DAY_OF_MONTH);
+            int dayNo = 2 - c.get(Calendar.DAY_OF_WEEK);
+            for (int i = 0; i < 6; i++) {
+                for (int j = 0; j < 7; j++) {
+                    String s = "";
+                    if (dayNo >= 1 && dayNo <= maxDayNo) {
+                        s = String.valueOf(dayNo);
+                    }
+                    daysLabels[i][j].setText(s);
+                    dayNo++;
+                }
+            }
+
+            // 鎵撳紑鏃ュ巻鏃讹紝鏍规嵁鎸夐挳鐨勬椂闂达紝璁剧疆鏃ュ巻鐨勬椂闂�
+            String[] date1 = getText().split(" ")[0].split("-");
+
+            yearSpin.setValue(new Integer(date1[0]));
+            monthSpin.setValue(new Integer(date1[1]));
+            daySpin.setValue(new Integer(date1[2]));
+
+            // 閲嶇疆鏃ュ巻澶╃殑鏁板瓧棰滆壊
+            for(int i = 0; i < 6; i++) {
+            	for(int j = 0; j < 7; j++) {
+            		if(!daysLabels[i][j].getText().equals("")) {
+            			daysLabels[i][j].setForeground(Color.BLACK);
+            		}
+            	}
+            }
+            
+            // 閲嶇疆鏃ュ巻鏄熸湡鍏�佹槦鏈熸棩鐨勬暟瀛楅鑹�
+            for(int i = 0; i < 6; i++) {
+            	if(!daysLabels[i][0].getText().equals("")) {
+            		daysLabels[i][0].setForeground(weekendFontColor);
+            	}
+            	if(!daysLabels[i][6].getText().equals("")) {
+            		daysLabels[i][6].setForeground(weekendFontColor);
+            	}
+            }
+            
+            // 璁剧疆褰撳ぉ鐨勬暟瀛楅鑹�
+            for(int i = 0; i < 6; i++) {
+            	for(int j = 0; j < 7; j++) {
+            		if(daysLabels[i][j].getText().equals(date1[2])) {
+            			daysLabels[i][j].setForeground(todayBackColor);
+            		}
+            	}
+            }
+
+            dayColorUpdate(false);
+        }
+
+        /**
+         * 閫夋嫨鏃ユ湡鏃剁殑鍝嶅簲浜嬩欢
+         */
+        @Override
+        public void stateChanged(ChangeEvent e) {
+            JSpinner source = (JSpinner) e.getSource();
+            Calendar c = getCalendar();
+            if (source.getName().equals("Hour")) {
+                c.set(Calendar.HOUR_OF_DAY, getSelectedHour());
+                setDate(c.getTime());
+                return;
+            }
+            if (source.getName().equals("Minute")) {
+                c.set(Calendar.MINUTE, getSelectedMinite());
+                setDate(c.getTime());
+                return;
+            }
+            if (source.getName().equals("Second")) {
+                c.set(Calendar.SECOND, getSelectedSecond());
+                setDate(c.getTime());
+                return;
+            }
+
+            dayColorUpdate(true);
+
+            if (source.getName().equals("Year")) {
+                c.set(Calendar.YEAR, getSelectedYear());
+            } else if (source.getName().equals("Month")) {
+                c.set(Calendar.MONTH, getSelectedMonth() - 1);
+            }
+            setDate(c.getTime());
+            flushWeekAndDay();
+        }
+
+        /**
+         * 閫夋嫨鏃ユ湡鏃剁殑鍝嶅簲浜嬩欢
+         */
+		@Override
+		public void mouseClicked(MouseEvent e) {
+            JLabel source = (JLabel) e.getSource();
+            if (source.getText().length() == 0) {
+                return;
+            }
+            dayColorUpdate(true);
+            source.setForeground(todayBackColor);
+            int newDay = Integer.parseInt(source.getText());
+            Calendar c = getCalendar();
+            c.set(Calendar.DAY_OF_MONTH, newDay);
+            setDate(c.getTime());
+            //鎶奷aySpin涓殑鍊间篃鍙樹簡
+            daySpin.setValue(Integer.valueOf(newDay));
+		}
+
+		@Override
+		public void mouseEntered(MouseEvent arg0) {
+			// TODO Auto-generated method stub
+			
+		}
+
+		@Override
+		public void mouseExited(MouseEvent arg0) {
+			// TODO Auto-generated method stub
+			
+		}
+
+		@Override
+		public void mousePressed(MouseEvent arg0) {
+			// TODO Auto-generated method stub
+			
+		}
+
+		@Override
+		public void mouseReleased(MouseEvent arg0) {
+			// TODO Auto-generated method stub
+			
+		}
+    }
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/DeviceManagerListener.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/DeviceManagerListener.java
new file mode 100644
index 0000000..45f97b8
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/DeviceManagerListener.java
@@ -0,0 +1,5 @@
+package com.ruoyi.device.dhsdk.common;
+
+public interface DeviceManagerListener {
+	void onDeviceManager(String deviceId, String username, String password);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/ErrorCode.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/ErrorCode.java
new file mode 100644
index 0000000..5be51dc
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/ErrorCode.java
@@ -0,0 +1,871 @@
+package com.ruoyi.device.dhsdk.common;
+
+import com.ruoyi.device.dhsdk.lib.LastError;
+
+/**
+ * 鐧诲綍璁惧璁惧閿欒鐘舵��
+ */
+public class ErrorCode {
+
+	/**
+	 * 鐧诲綍璁惧璁惧閿欒鐘舵�佷腑鑻辨枃
+	 * @param err 鎺ュ彛CLIENT_GetLastError杩斿洖, error code: (0x80000000|" + (LoginModule.netsdk.CLIENT_GetLastError() & 0x7fffffff) +")
+	 * @return
+	 */
+	public static String getErrorCode(int err) {
+		String msg = "";
+		switch(err) {
+		case LastError.NET_NOERROR:  // 0  娌℃湁閿欒
+			msg = Res.string().getBundle().getString("NET_ERROR"); 
+			break;
+		case LastError.NET_ERROR:  // -1  鏈煡閿欒
+			msg = Res.string().getBundle().getString("NET_ERROR"); 
+			break;
+		case LastError.NET_SYSTEM_ERROR: // (0x80000000|1) Windows绯荤粺鍑洪敊
+			msg = Res.string().getBundle().getString("NET_SYSTEM_ERROR"); 
+			break;
+		case LastError.NET_NETWORK_ERROR: // (0x80000000|2) 缃戠粶閿欒锛屽彲鑳芥槸鍥犱负缃戠粶瓒呮椂
+			msg = Res.string().getBundle().getString("NET_NETWORK_ERROR"); 
+			break;
+		case LastError.NET_DEV_VER_NOMATCH: // (0x80000000|3) 璁惧鍗忚涓嶅尮閰�
+			msg = Res.string().getBundle().getString("NET_DEV_VER_NOMATCH"); 
+			break;
+		case LastError.NET_INVALID_HANDLE: // (0x80000000|4) 鍙ユ焺鏃犳晥
+			msg = Res.string().getBundle().getString("NET_INVALID_HANDLE"); 
+			break;
+		case LastError.NET_OPEN_CHANNEL_ERROR: // (0x80000000|5) 鎵撳紑閫氶亾澶辫触
+			msg = Res.string().getBundle().getString("NET_OPEN_CHANNEL_ERROR"); 
+			break;
+		case LastError.NET_CLOSE_CHANNEL_ERROR: // (0x80000000|6) 鍏抽棴閫氶亾澶辫触
+			msg = Res.string().getBundle().getString("NET_CLOSE_CHANNEL_ERROR"); 
+			break;
+		case LastError.NET_ILLEGAL_PARAM: // (0x80000000|7) 鐢ㄦ埛鍙傛暟涓嶅悎娉�
+			msg = Res.string().getBundle().getString("NET_ILLEGAL_PARAM"); 
+			break;
+		case LastError.NET_SDK_INIT_ERROR: // (0x80000000|8) SDK鍒濆鍖栧嚭閿�
+			msg = Res.string().getBundle().getString("NET_SDK_INIT_ERROR"); 
+			break;
+		case LastError.NET_SDK_UNINIT_ERROR: // (0x80000000|9) SDK娓呯悊鍑洪敊
+			msg = Res.string().getBundle().getString("NET_SDK_UNINIT_ERROR"); 
+			break;
+		case LastError.NET_RENDER_OPEN_ERROR: // (0x80000000|10) 鐢宠render璧勬簮鍑洪敊
+			msg = Res.string().getBundle().getString("NET_RENDER_OPEN_ERROR"); 
+			break;
+		case LastError.NET_DEC_OPEN_ERROR: // (0x80000000|11) 鎵撳紑瑙g爜搴撳嚭閿�
+			msg = Res.string().getBundle().getString("NET_DEC_OPEN_ERROR"); 
+			break;
+		case LastError.NET_DEC_CLOSE_ERROR: // (0x80000000|12) 鍏抽棴瑙g爜搴撳嚭閿�
+			msg = Res.string().getBundle().getString("NET_DEC_CLOSE_ERROR"); 
+			break;
+		case LastError.NET_MULTIPLAY_NOCHANNEL: // (0x80000000|13) 澶氱敾闈㈤瑙堜腑妫�娴嬪埌閫氶亾鏁颁负0
+			msg = Res.string().getBundle().getString("NET_MULTIPLAY_NOCHANNEL"); 
+			break;
+		case LastError.NET_TALK_INIT_ERROR: // (0x80000000|14) 褰曢煶搴撳垵濮嬪寲澶辫触
+			msg = Res.string().getBundle().getString("NET_TALK_INIT_ERROR"); 
+			break; 
+		case LastError.NET_TALK_NOT_INIT:  // (0x80000000|15) 褰曢煶搴撴湭缁忓垵濮嬪寲
+			msg = Res.string().getBundle().getString("NET_TALK_NOT_INIT"); 
+			break;
+		case LastError.NET_TALK_SENDDATA_ERROR: // (0x80000000|16) 鍙戦�侀煶棰戞暟鎹嚭閿�
+			msg = Res.string().getBundle().getString("NET_TALK_SENDDATA_ERROR"); 
+			break;
+		case LastError.NET_REAL_ALREADY_SAVING: // (0x80000000|17) 瀹炴椂鏁版嵁宸茬粡澶勪簬淇濆瓨鐘舵��
+			msg = Res.string().getBundle().getString("NET_REAL_ALREADY_SAVING"); 
+			break;
+		case LastError.NET_NOT_SAVING: // (0x80000000|18) 鏈繚瀛樺疄鏃舵暟鎹�
+			msg = Res.string().getBundle().getString("NET_NOT_SAVING"); 
+			break;
+		case LastError.NET_OPEN_FILE_ERROR: // (0x80000000|19) 鎵撳紑鏂囦欢鍑洪敊
+			msg = Res.string().getBundle().getString("NET_OPEN_FILE_ERROR"); 
+			break;
+		case LastError.NET_PTZ_SET_TIMER_ERROR: // (0x80000000|20) 鍚姩浜戝彴鎺у埗瀹氭椂鍣ㄥけ璐�
+			msg = Res.string().getBundle().getString("NET_PTZ_SET_TIMER_ERROR"); 
+			break;
+		case LastError.NET_RETURN_DATA_ERROR: // (0x80000000|21) 瀵硅繑鍥炴暟鎹殑鏍¢獙鍑洪敊
+			msg = Res.string().getBundle().getString("NET_RETURN_DATA_ERROR"); 
+			break;
+		case LastError.NET_INSUFFICIENT_BUFFER: // (0x80000000|22) 娌℃湁瓒冲鐨勭紦瀛�
+			msg = Res.string().getBundle().getString("NET_INSUFFICIENT_BUFFER"); 
+			break;
+		case LastError.NET_NOT_SUPPORTED: // (0x80000000|23) 褰撳墠SDK鏈敮鎸佽鍔熻兘
+			msg = Res.string().getBundle().getString("NET_NOT_SUPPORTED"); 
+			break;
+		case LastError.NET_NO_RECORD_FOUND: // (0x80000000|24) 鏌ヨ涓嶅埌褰曞儚
+			msg = Res.string().getBundle().getString("NET_NO_RECORD_FOUND"); 
+			break;
+		case LastError.NET_NOT_AUTHORIZED: // (0x80000000|25) 鏃犳搷浣滄潈闄�
+			msg = Res.string().getBundle().getString("NET_NOT_AUTHORIZED"); 
+			break;
+		case LastError.NET_NOT_NOW: // (0x80000000|26) 鏆傛椂鏃犳硶鎵ц
+			msg = Res.string().getBundle().getString("NET_NOT_NOW"); 
+			break;
+		case LastError.NET_NO_TALK_CHANNEL: // (0x80000000|27) 鏈彂鐜板璁查�氶亾
+			msg = Res.string().getBundle().getString("NET_NO_TALK_CHANNEL"); 
+			break;
+		case LastError.NET_NO_AUDIO: // (0x80000000|28) 鏈彂鐜伴煶棰�
+			msg = Res.string().getBundle().getString("NET_NO_AUDIO"); 
+			break;
+		case LastError.NET_NO_INIT: // (0x80000000|29) 缃戠粶SDK鏈粡鍒濆鍖�
+			msg = Res.string().getBundle().getString("NET_NO_INIT"); 
+			break;
+		case LastError.NET_DOWNLOAD_END: // (0x80000000|30) 涓嬭浇宸茬粨鏉�
+			msg = Res.string().getBundle().getString("NET_DOWNLOAD_END"); 
+			break;
+		case LastError.NET_EMPTY_LIST: // (0x80000000|31) 鏌ヨ缁撴灉涓虹┖
+			msg = Res.string().getBundle().getString("NET_EMPTY_LIST"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_SYSATTR: // (0x80000000|32) 鑾峰彇绯荤粺灞炴�ч厤缃け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SYSATTR"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_SERIAL: // (0x80000000|33) 鑾峰彇搴忓垪鍙峰け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SERIAL"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_GENERAL: // (0x80000000|34) 鑾峰彇甯歌灞炴�уけ璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_GENERAL"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_DSPCAP: // (0x80000000|35) 鑾峰彇DSP鑳藉姏鎻忚堪澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_DSPCAP"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_NETCFG: // (0x80000000|36) 鑾峰彇缃戠粶閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_NETCFG"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_CHANNAME: // (0x80000000|37) 鑾峰彇閫氶亾鍚嶇О澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_CHANNAME"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_VIDEO: // (0x80000000|38) 鑾峰彇瑙嗛灞炴�уけ璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_VIDEO"); 
+			break; 
+		case LastError.NET_ERROR_GETCFG_RECORD: // (0x80000000|39) 鑾峰彇褰曡薄閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_RECORD"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_PRONAME: // (0x80000000|40) 鑾峰彇瑙g爜鍣ㄥ崗璁悕绉板け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_PRONAME"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_FUNCNAME: // (0x80000000|41)  鑾峰彇232涓插彛鍔熻兘鍚嶇О澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_FUNCNAME"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_485DECODER: // (0x80000000|42) 鑾峰彇瑙g爜鍣ㄥ睘鎬уけ璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_485DECODER"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_232COM:   // (0x80000000|43) 鑾峰彇232涓插彛閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_232COM"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_ALARMIN:  // (0x80000000|44) 鑾峰彇澶栭儴鎶ヨ杈撳叆閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_ALARMIN"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_ALARMDET: // (0x80000000|45) 鑾峰彇鍔ㄦ�佹娴嬫姤璀﹀け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_ALARMDET"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_SYSTIME: // (0x80000000|46) 鑾峰彇璁惧鏃堕棿澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SYSTIME"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_PREVIEW: // (0x80000000|47) 鑾峰彇棰勮鍙傛暟澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_PREVIEW"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_AUTOMT: // (0x80000000|48) 鑾峰彇鑷姩缁存姢閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_AUTOMT"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_VIDEOMTRX: // (0x80000000|49) 鑾峰彇瑙嗛鐭╅樀閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_VIDEOMTRX"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_COVER:  // (0x80000000|50) 鑾峰彇鍖哄煙閬尅閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_COVER"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_WATERMAKE: // (0x80000000|51) 鑾峰彇鍥捐薄姘村嵃閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_WATERMAKE"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_MULTICAST: // (0x80000000|52) 鑾峰彇閰嶇疆澶辫触浣嶇疆锛氱粍鎾鍙f寜閫氶亾閰嶇疆
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_MULTICAST"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_GENERAL:  // (0x80000000|55) 淇敼甯歌灞炴�уけ璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_GENERAL"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_NETCFG:  // (0x80000000|56) 鏀圭綉缁滈厤缃け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_NETCFG"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_CHANNAME: // (0x80000000|57) 淇敼閫氶亾鍚嶇О澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_CHANNAME"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_VIDEO:  // (0x80000000|58) 淇敼瑙嗛灞炴�уけ璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_VIDEO"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_RECORD: // (0x80000000|59) 淇敼褰曡薄閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_RECORD"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_485DECODER: // (0x80000000|60) 淇敼瑙g爜鍣ㄥ睘鎬уけ璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_485DECODER"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_232COM:  // (0x80000000|61) 淇敼232涓插彛閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_232COM"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_ALARMIN: // (0x80000000|62) 淇敼澶栭儴杈撳叆鎶ヨ閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_ALARMIN"); 
+			break; 
+		case LastError.NET_ERROR_SETCFG_ALARMDET: // (0x80000000|63)  淇敼鍔ㄦ�佹娴嬫姤璀﹂厤缃け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_ALARMDET"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_SYSTIME: // (0x80000000|64) 淇敼璁惧鏃堕棿澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_SYSTIME"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_PREVIEW: // (0x80000000|65) 淇敼棰勮鍙傛暟澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_PREVIEW"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_AUTOMT: // (0x80000000|66) 淇敼鑷姩缁存姢閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_AUTOMT"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_VIDEOMTRX: // (0x80000000|67) 淇敼瑙嗛鐭╅樀閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_VIDEOMTRX"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_COVER:  // (0x80000000|68) 淇敼鍖哄煙閬尅閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_COVER"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_WATERMAKE: // (0x80000000|69) 淇敼鍥捐薄姘村嵃閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_WATERMAKE"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_WLAN:  // (0x80000000|70) 淇敼鏃犵嚎缃戠粶淇℃伅澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_WLAN"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_WLANDEV: // (0x80000000|71) 閫夋嫨鏃犵嚎缃戠粶璁惧澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_WLANDEV"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_REGISTER: // (0x80000000|72) 淇敼涓诲姩娉ㄥ唽鍙傛暟閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_REGISTER"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_CAMERA:  // (0x80000000|73) 淇敼鎽勫儚澶村睘鎬ч厤缃け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_CAMERA"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_INFRARED: // (0x80000000|74)  淇敼绾㈠鎶ヨ閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_INFRARED"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_SOUNDALARM: // (0x80000000|75) 淇敼闊抽鎶ヨ閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_SOUNDALARM"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_STORAGE:  // (0x80000000|76) 淇敼瀛樺偍浣嶇疆閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_STORAGE"); 
+			break;
+		case LastError.NET_AUDIOENCODE_NOTINIT:  // (0x80000000|77) 闊抽缂栫爜鎺ュ彛娌℃湁鎴愬姛鍒濆鍖�
+			msg = Res.string().getBundle().getString("NET_AUDIOENCODE_NOTINIT"); 
+			break;
+		case LastError.NET_DATA_TOOLONGH:  // (0x80000000|78) 鏁版嵁杩囬暱
+			msg = Res.string().getBundle().getString("NET_DATA_TOOLONGH"); 
+			break;
+		case LastError.NET_UNSUPPORTED:  // (0x80000000|79) 澶囦笉鏀寔璇ユ搷浣�
+			msg = Res.string().getBundle().getString("NET_UNSUPPORTED"); 
+			break;
+		case LastError.NET_DEVICE_BUSY:  // (0x80000000|80) 璁惧璧勬簮涓嶈冻
+			msg = Res.string().getBundle().getString("NET_DEVICE_BUSY"); 
+			break;
+		case LastError.NET_SERVER_STARTED: // (0x80000000|81) 鏈嶅姟鍣ㄥ凡缁忓惎鍔�
+			msg = Res.string().getBundle().getString("NET_SERVER_STARTED"); 
+			break;
+		case LastError.NET_SERVER_STOPPED: // (0x80000000|82) 鏈嶅姟鍣ㄥ皻鏈垚鍔熷惎鍔�
+			msg = Res.string().getBundle().getString("NET_SERVER_STOPPED"); 
+			break;
+		case LastError.NET_LISTER_INCORRECT_SERIAL: // (0x80000000|83) 杈撳叆搴忓垪鍙锋湁璇�
+			msg = Res.string().getBundle().getString("NET_LISTER_INCORRECT_SERIAL"); 
+			break;
+		case LastError.NET_QUERY_DISKINFO_FAILED:  // (0x80000000|84) 鑾峰彇纭洏淇℃伅澶辫触
+			msg = Res.string().getBundle().getString("NET_QUERY_DISKINFO_FAILED"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_SESSION:  // (0x80000000|85) 鑾峰彇杩炴帴Session淇℃伅
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SESSION"); 
+			break;
+		case LastError.NET_USER_FLASEPWD_TRYTIME: // (0x80000000|86) 杈撳叆瀵嗙爜閿欒瓒呰繃闄愬埗娆℃暟
+			msg = Res.string().getBundle().getString("NET_USER_FLASEPWD_TRYTIME"); 
+			break;
+		case LastError.NET_LOGIN_ERROR_PASSWORD:  // (0x80000000|100) 瀵嗙爜涓嶆纭�
+			msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_PASSWORD"); 
+			break; 
+		case LastError.NET_LOGIN_ERROR_USER:  // (0x80000000|101) 甯愭埛涓嶅瓨鍦�
+			msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_USER"); 
+			break;
+		case LastError.NET_LOGIN_ERROR_TIMEOUT:  // (0x80000000|102) 绛夊緟鐧诲綍杩斿洖瓒呮椂
+			msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_TIMEOUT"); 
+			break;
+		case LastError.NET_LOGIN_ERROR_RELOGGIN: // (0x80000000|103) 甯愬彿宸茬櫥褰�
+			msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_RELOGGIN"); 
+			break;
+		case LastError.NET_LOGIN_ERROR_LOCKED:  // (0x80000000|104) 甯愬彿宸茶閿佸畾
+			msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_LOCKED"); 
+			break;
+		case LastError.NET_LOGIN_ERROR_BLACKLIST: // (0x80000000|105) 甯愬彿宸茶鍒椾负绂佹鍚嶅崟
+			msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_BLACKLIST"); 
+			break;
+		case LastError.NET_LOGIN_ERROR_BUSY:  // (0x80000000|106) 璧勬簮涓嶈冻锛岀郴缁熷繖
+			msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_BUSY"); 
+			break;
+		case LastError.NET_LOGIN_ERROR_CONNECT:  // (0x80000000|107) 鐧诲綍璁惧瓒呮椂锛岃妫�鏌ョ綉缁滃苟閲嶈瘯
+			msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_CONNECT"); 
+			break;
+		case LastError.NET_LOGIN_ERROR_NETWORK: // (0x80000000|108)  缃戠粶杩炴帴澶辫触
+			msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_NETWORK"); 
+			break;
+		case LastError.NET_LOGIN_ERROR_SUBCONNECT: // (0x80000000|109) 鐧诲綍璁惧鎴愬姛锛屼絾鏃犳硶鍒涘缓瑙嗛閫氶亾锛岃妫�鏌ョ綉
+			msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_SUBCONNECT"); 
+			break;
+		case LastError.NET_LOGIN_ERROR_MAXCONNECT:  // (0x80000000|110) 瓒呰繃鏈�澶ц繛鎺ユ暟
+			msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_MAXCONNECT"); 
+			break;
+		case LastError.NET_LOGIN_ERROR_PROTOCOL3_ONLY: // (0x80000000|111) 鍙敮鎸�3浠e崗璁�
+			msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_PROTOCOL3_ONLY"); 
+			break;
+		case LastError.NET_LOGIN_ERROR_UKEY_LOST:  // (0x80000000|112) 鎻掑叆U鐩炬垨U鐩句俊鎭敊璇�
+			msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_UKEY_LOST"); 
+			break;
+		case LastError.NET_LOGIN_ERROR_NO_AUTHORIZED: // (0x80000000|113) 瀹㈡埛绔疘P鍦板潃娌℃湁鐧诲綍鏉冮檺
+			msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_NO_AUTHORIZED"); 
+			break;
+		case LastError.NET_LOGIN_ERROR_USER_OR_PASSOWRD:  // (0x80000000|117) 璐﹀彿鎴栧瘑鐮侀敊璇� 
+			msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_USER_OR_PASSOWRD"); 
+			break;
+		case LastError.NET_LOGIN_ERROR_DEVICE_NOT_INIT:  // (0x80000000|118) 璁惧灏氭湭鍒濆鍖栵紝涓嶈兘鐧诲綍锛岃鍏堝垵濮嬪寲璁惧
+			msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_DEVICE_NOT_INIT"); 
+			break;
+		case LastError.NET_RENDER_SOUND_ON_ERROR:  // (0x80000000|120) Render搴撴墦寮�闊抽鍑洪敊
+			msg = Res.string().getBundle().getString("NET_RENDER_SOUND_ON_ERROR"); 
+			break;
+		case LastError.NET_RENDER_SOUND_OFF_ERROR: // (0x80000000|121) Render搴撳叧闂煶棰戝嚭閿�
+			msg = Res.string().getBundle().getString("NET_RENDER_SOUND_OFF_ERROR"); 
+			break;
+		case LastError.NET_RENDER_SET_VOLUME_ERROR: // (0x80000000|122) Render搴撴帶鍒堕煶閲忓嚭閿�
+			msg = Res.string().getBundle().getString("NET_RENDER_SET_VOLUME_ERROR"); 
+			break;
+		case LastError.NET_RENDER_ADJUST_ERROR:  // (0x80000000|123) Render搴撹缃敾闈㈠弬鏁板嚭閿�
+			msg = Res.string().getBundle().getString("NET_RENDER_ADJUST_ERROR"); 
+			break;
+		case LastError.NET_RENDER_PAUSE_ERROR: // (0x80000000|124) Render搴撴殏鍋滄挱鏀惧嚭閿�
+			msg = Res.string().getBundle().getString("NET_RENDER_PAUSE_ERROR"); 
+			break;
+		case LastError.NET_RENDER_SNAP_ERROR:  // (0x80000000|125) Render搴撴姄鍥惧嚭閿�
+			msg = Res.string().getBundle().getString("NET_RENDER_SNAP_ERROR"); 
+			break;
+		case LastError.NET_RENDER_STEP_ERROR:  // (0x80000000|126) Render搴撴杩涘嚭閿�
+			msg = Res.string().getBundle().getString("NET_RENDER_STEP_ERROR"); 
+			break;
+		case LastError.NET_RENDER_FRAMERATE_ERROR:  // (0x80000000|127) Render搴撹缃抚鐜囧嚭閿�
+			msg = Res.string().getBundle().getString("NET_RENDER_FRAMERATE_ERROR"); 
+			break;
+		case LastError.NET_RENDER_DISPLAYREGION_ERROR: // (0x80000000|128) Render搴撹缃樉绀哄尯鍩熷嚭閿�
+			msg = Res.string().getBundle().getString("NET_RENDER_DISPLAYREGION_ERROR"); 
+			break;
+		case LastError.NET_RENDER_GETOSDTIME_ERROR: // (0x80000000|129) Render搴撹幏鍙栧綋鍓嶆挱鏀炬椂闂村嚭閿�
+			msg = Res.string().getBundle().getString("NET_RENDER_GETOSDTIME_ERROR"); 
+			break;
+		case LastError.NET_GROUP_EXIST: // (0x80000000|140) 缁勫悕宸插瓨鍦�
+			msg = Res.string().getBundle().getString("NET_GROUP_EXIST"); 
+			break;
+		case LastError.NET_GROUP_NOEXIST: // (0x80000000|141) 缁勫悕涓嶅瓨鍦�
+			msg = Res.string().getBundle().getString("NET_GROUP_NOEXIST"); 
+			break;
+		case LastError.NET_GROUP_RIGHTOVER: // (0x80000000|142) 缁勭殑鏉冮檺瓒呭嚭鏉冮檺鍒楄〃鑼冨洿
+			msg = Res.string().getBundle().getString("NET_GROUP_RIGHTOVER"); 
+			break;
+		case LastError.NET_GROUP_HAVEUSER: // (0x80000000|143) 缁勪笅鏈夌敤鎴凤紝涓嶈兘鍒犻櫎
+			msg = Res.string().getBundle().getString("NET_GROUP_HAVEUSER"); 
+			break;
+		case LastError.NET_GROUP_RIGHTUSE: // (0x80000000|144) 缁勭殑鏌愪釜鏉冮檺琚敤鎴蜂娇鐢紝涓嶈兘鍑洪櫎
+			msg = Res.string().getBundle().getString("NET_GROUP_RIGHTUSE"); 
+			break;
+		case LastError.NET_GROUP_SAMENAME: // (0x80000000|145) 鏂扮粍鍚嶅悓宸叉湁缁勫悕閲嶅
+			msg = Res.string().getBundle().getString("NET_GROUP_SAMENAME"); 
+			break; 
+		case LastError.NET_USER_EXIST:  // (0x80000000|146) 鐢ㄦ埛宸插瓨鍦�
+			msg = Res.string().getBundle().getString("NET_USER_EXIST"); 
+			break;
+		case LastError.NET_USER_NOEXIST: // (0x80000000|147) 鐢ㄦ埛涓嶅瓨鍦�
+			msg = Res.string().getBundle().getString("NET_USER_NOEXIST"); 
+			break; 
+		case LastError.NET_USER_RIGHTOVER: // (0x80000000|148) 鐢ㄦ埛鏉冮檺瓒呭嚭缁勬潈闄�
+			msg = Res.string().getBundle().getString("NET_USER_RIGHTOVER"); 
+			break;
+		case LastError.NET_USER_PWD: // (0x80000000|149) 淇濈暀甯愬彿锛屼笉瀹硅淇敼瀵嗙爜
+			msg = Res.string().getBundle().getString("NET_USER_PWD"); 
+			break;
+		case LastError.NET_USER_FLASEPWD: // (0x80000000|150) 瀵嗙爜涓嶆纭�
+			msg = Res.string().getBundle().getString("NET_USER_FLASEPWD"); 
+			break;
+		case LastError.NET_USER_NOMATCHING: // (0x80000000|151)  瀵嗙爜涓嶅尮閰�
+			msg = Res.string().getBundle().getString("NET_USER_NOMATCHING"); 
+			break;
+		case LastError.NET_USER_INUSE: // (0x80000000|152)  璐﹀彿姝e湪浣跨敤涓�
+			msg = Res.string().getBundle().getString("NET_USER_INUSE"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_ETHERNET: // (0x80000000|300) 鑾峰彇缃戝崱閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_ETHERNET"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_WLAN: // (0x80000000|301) 鑾峰彇鏃犵嚎缃戠粶淇℃伅澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_WLAN"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_WLANDEV:  // (0x80000000|302) 鑾峰彇鏃犵嚎缃戠粶璁惧澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_WLANDEV"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_REGISTER: // (0x80000000|303) 鑾峰彇涓诲姩娉ㄥ唽鍙傛暟澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_REGISTER"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_CAMERA: // (0x80000000|304) 鑾峰彇鎽勫儚澶村睘鎬уけ璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_CAMERA"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_INFRARED: // (0x80000000|305) 鑾峰彇绾㈠鎶ヨ閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_INFRARED"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_SOUNDALARM: // (0x80000000|306)  鑾峰彇闊抽鎶ヨ閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SOUNDALARM"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_STORAGE:  // (0x80000000|307)  鑾峰彇瀛樺偍浣嶇疆閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_STORAGE"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_MAIL:  // (0x80000000|308) 鑾峰彇閭欢閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_MAIL"); 
+			break;
+		case LastError.NET_CONFIG_DEVBUSY: // (0x80000000|309) 鏆傛椂鏃犳硶璁剧疆
+			msg = Res.string().getBundle().getString("NET_CONFIG_DEVBUSY"); 
+			break;
+		case LastError.NET_CONFIG_DATAILLEGAL: // (0x80000000|310) 閰嶇疆鏁版嵁涓嶅悎娉�
+			msg = Res.string().getBundle().getString("NET_CONFIG_DATAILLEGAL"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_DST: // (0x80000000|311) 鑾峰彇澶忎护鏃堕厤缃け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_DST"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_DST: // (0x80000000|312) 璁剧疆澶忎护鏃堕厤缃け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_DST"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_VIDEO_OSD: // (0x80000000|313) 鑾峰彇瑙嗛OSD鍙犲姞閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_VIDEO_OSD"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_VIDEO_OSD:  // (0x80000000|314) 璁剧疆瑙嗛OSD鍙犲姞閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_VIDEO_OSD"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_GPRSCDMA:  // (0x80000000|315) 鑾峰彇CDMA\GPRS缃戠粶閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_GPRSCDMA"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_GPRSCDMA: // (0x80000000|316) 璁剧疆CDMA\GPRS缃戠粶閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_GPRSCDMA"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_IPFILTER: // (0x80000000|317) 鑾峰彇IP杩囨护閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_IPFILTER"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_IPFILTER: // (0x80000000|318) 璁剧疆IP杩囨护閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_IPFILTER"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_TALKENCODE: // (0x80000000|319) 鑾峰彇璇煶瀵硅缂栫爜閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_TALKENCODE"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_TALKENCODE: // (0x80000000|320) 璁剧疆璇煶瀵硅缂栫爜閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_TALKENCODE"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_RECORDLEN: // (0x80000000|321) 鑾峰彇褰曞儚鎵撳寘闀垮害閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_RECORDLEN"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_RECORDLEN: // (0x80000000|322) 璁剧疆褰曞儚鎵撳寘闀垮害閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_RECORDLEN"); 
+			break;
+		case LastError.NET_DONT_SUPPORT_SUBAREA: // (0x80000000|323) 涓嶆敮鎸佺綉缁滅‖鐩樺垎鍖�
+			msg = Res.string().getBundle().getString("NET_DONT_SUPPORT_SUBAREA"); 
+			break;
+		case LastError.NET_ERROR_GET_AUTOREGSERVER: // (0x80000000|324) 鑾峰彇璁惧涓婁富鍔ㄦ敞鍐屾湇鍔″櫒淇℃伅澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GET_AUTOREGSERVER"); 
+			break;
+		case LastError.NET_ERROR_CONTROL_AUTOREGISTER: // (0x80000000|325) 涓诲姩娉ㄥ唽閲嶅畾鍚戞敞鍐岄敊璇�
+			msg = Res.string().getBundle().getString("NET_ERROR_CONTROL_AUTOREGISTER"); 
+			break;
+		case LastError.NET_ERROR_DISCONNECT_AUTOREGISTER: // (0x80000000|326) 鏂紑涓诲姩娉ㄥ唽鏈嶅姟鍣ㄩ敊璇�
+			msg = Res.string().getBundle().getString("NET_ERROR_DISCONNECT_AUTOREGISTER"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_MMS: // (0x80000000|327) 鑾峰彇mms閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_MMS"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_MMS: // (0x80000000|328) 璁剧疆mms閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_MMS"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_SMSACTIVATION: // (0x80000000|329) 鑾峰彇鐭俊婵�娲绘棤绾胯繛鎺ラ厤缃け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SMSACTIVATION"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_SMSACTIVATION: // (0x80000000|330) 璁剧疆鐭俊婵�娲绘棤绾胯繛鎺ラ厤缃け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_SMSACTIVATION"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_DIALINACTIVATION: // (0x80000000|331) 鑾峰彇鎷ㄥ彿婵�娲绘棤绾胯繛鎺ラ厤缃け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_DIALINACTIVATION"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_DIALINACTIVATION: // (0x80000000|332) 璁剧疆鎷ㄥ彿婵�娲绘棤绾胯繛鎺ラ厤缃け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_DIALINACTIVATION"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_VIDEOOUT: // (0x80000000|333) 鏌ヨ瑙嗛杈撳嚭鍙傛暟閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_VIDEOOUT"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_VIDEOOUT: // (0x80000000|334) 璁剧疆瑙嗛杈撳嚭鍙傛暟閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_VIDEOOUT"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_OSDENABLE: // (0x80000000|335) 鑾峰彇osd鍙犲姞浣胯兘閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_OSDENABLE"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_OSDENABLE: // (0x80000000|336) 璁剧疆osd鍙犲姞浣胯兘閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_OSDENABLE"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_ENCODERINFO: // (0x80000000|337) 璁剧疆鏁板瓧閫氶亾鍓嶇缂栫爜鎺ュ叆閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_ENCODERINFO"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_TVADJUST: // (0x80000000|338) 鑾峰彇TV璋冭妭閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_TVADJUST"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_TVADJUST: // (0x80000000|339) 璁剧疆TV璋冭妭閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_TVADJUST"); 
+			break;
+		case LastError.NET_ERROR_CONNECT_FAILED: // (0x80000000|340) 璇锋眰寤虹珛杩炴帴澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_CONNECT_FAILED"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_BURNFILE: // (0x80000000|341) 璇锋眰鍒诲綍鏂囦欢涓婁紶澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_BURNFILE"); 
+			break;
+		case LastError.NET_ERROR_SNIFFER_GETCFG: // (0x80000000|342) 鑾峰彇鎶撳寘閰嶇疆淇℃伅澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SNIFFER_GETCFG"); 
+			break;
+		case LastError.NET_ERROR_SNIFFER_SETCFG: // (0x80000000|343) 璁剧疆鎶撳寘閰嶇疆淇℃伅澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SNIFFER_SETCFG"); 
+			break;
+		case LastError.NET_ERROR_DOWNLOADRATE_GETCFG: // (0x80000000|344) 鏌ヨ涓嬭浇闄愬埗淇℃伅澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_DOWNLOADRATE_GETCFG"); 
+			break;
+		case LastError.NET_ERROR_DOWNLOADRATE_SETCFG: // (0x80000000|345) 璁剧疆涓嬭浇闄愬埗淇℃伅澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_DOWNLOADRATE_SETCFG"); 
+			break;
+		case LastError.NET_ERROR_SEARCH_TRANSCOM:  // (0x80000000|346) 鏌ヨ涓插彛鍙傛暟澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SEARCH_TRANSCOM"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_POINT: // (0x80000000|347) 鑾峰彇棰勫埗鐐逛俊鎭敊璇�
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_POINT"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_POINT: // (0x80000000|348) 璁剧疆棰勫埗鐐逛俊鎭敊璇�
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_POINT"); 
+			break;
+		case LastError.NET_SDK_LOGOUT_ERROR:  // (0x80000000|349) SDK娌℃湁姝e父鐧诲嚭璁惧
+			msg = Res.string().getBundle().getString("NET_SDK_LOGOUT_ERROR"); 
+			break;
+		case LastError.NET_ERROR_GET_VEHICLE_CFG: // (0x80000000|350) 鑾峰彇杞﹁浇閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GET_VEHICLE_CFG"); 
+			break;
+		case LastError.NET_ERROR_SET_VEHICLE_CFG: // (0x80000000|351) 璁剧疆杞﹁浇閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SET_VEHICLE_CFG"); 
+			break;
+		case LastError.NET_ERROR_GET_ATM_OVERLAY_CFG: // (0x80000000|352) 鑾峰彇atm鍙犲姞閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GET_ATM_OVERLAY_CFG"); 
+			break;
+		case LastError.NET_ERROR_SET_ATM_OVERLAY_CFG: // (0x80000000|353) 璁剧疆atm鍙犲姞閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SET_ATM_OVERLAY_CFG"); 
+			break;
+		case LastError.NET_ERROR_GET_ATM_OVERLAY_ABILITY: // (0x80000000|354) 鑾峰彇atm鍙犲姞鑳藉姏澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GET_ATM_OVERLAY_ABILITY"); 
+			break;
+		case LastError.NET_ERROR_GET_DECODER_TOUR_CFG: // (0x80000000|355) 鑾峰彇瑙g爜鍣ㄨВ鐮佽疆宸¢厤缃け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_GET_DECODER_TOUR_CFG"); 
+			break;
+		case LastError.NET_ERROR_SET_DECODER_TOUR_CFG: // (0x80000000|356) 璁剧疆瑙g爜鍣ㄨВ鐮佽疆宸¢厤缃け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_SET_DECODER_TOUR_CFG"); 
+			break;
+		case LastError.NET_ERROR_CTRL_DECODER_TOUR: // (0x80000000|357) 鎺у埗瑙g爜鍣ㄨВ鐮佽疆宸″け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_CTRL_DECODER_TOUR"); 
+			break;
+		case LastError.NET_GROUP_OVERSUPPORTNUM:  // (0x80000000|358) 瓒呭嚭璁惧鏀寔鏈�澶х敤鎴风粍鏁扮洰
+			msg = Res.string().getBundle().getString("NET_GROUP_OVERSUPPORTNUM"); 
+			break;
+		case LastError.NET_USER_OVERSUPPORTNUM: // (0x80000000|359) 瓒呭嚭璁惧鏀寔鏈�澶х敤鎴锋暟鐩�
+			msg = Res.string().getBundle().getString("NET_USER_OVERSUPPORTNUM"); 
+			break;
+		case LastError.NET_ERROR_GET_SIP_CFG:  // (0x80000000|368) 鑾峰彇SIP閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GET_SIP_CFG"); 
+			break;
+		case LastError.NET_ERROR_SET_SIP_CFG:  // (0x80000000|369) 璁剧疆SIP閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SET_SIP_CFG"); 
+			break;
+		case LastError.NET_ERROR_GET_SIP_ABILITY: // (0x80000000|370) 鑾峰彇SIP鑳藉姏澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GET_SIP_ABILITY"); 
+			break;
+		case LastError.NET_ERROR_GET_WIFI_AP_CFG: // (0x80000000|371) 鑾峰彇WIFI ap閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GET_WIFI_AP_CFG"); 
+			break;
+		case LastError.NET_ERROR_SET_WIFI_AP_CFG: // (0x80000000|372) 璁剧疆WIFI ap閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SET_WIFI_AP_CFG"); 
+			break;
+		case LastError.NET_ERROR_GET_DECODE_POLICY: // (0x80000000|373) 鑾峰彇瑙g爜绛栫暐閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GET_DECODE_POLICY"); 
+			break;
+		case LastError.NET_ERROR_SET_DECODE_POLICY: // (0x80000000|374) 璁剧疆瑙g爜绛栫暐閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SET_DECODE_POLICY"); 
+			break;
+		case LastError.NET_ERROR_TALK_REJECT: // (0x80000000|375) 鎷掔粷瀵硅
+			msg = Res.string().getBundle().getString("NET_ERROR_TALK_REJECT"); 
+			break;
+		case LastError.NET_ERROR_TALK_OPENED: // (0x80000000|376) 瀵硅琚叾浠栧鎴风鎵撳紑
+			msg = Res.string().getBundle().getString("NET_ERROR_TALK_OPENED"); 
+			break;
+		case LastError.NET_ERROR_TALK_RESOURCE_CONFLICIT: // (0x80000000|377) 璧勬簮鍐茬獊
+			msg = Res.string().getBundle().getString("NET_ERROR_TALK_RESOURCE_CONFLICIT"); 
+			break;
+		case LastError.NET_ERROR_TALK_UNSUPPORTED_ENCODE: // (0x80000000|378) 涓嶆敮鎸佺殑璇煶缂栫爜鏍煎紡
+			msg = Res.string().getBundle().getString("NET_ERROR_TALK_UNSUPPORTED_ENCODE"); 
+			break;
+		case LastError.NET_ERROR_TALK_RIGHTLESS:  // (0x80000000|379) 鏃犳潈闄�
+			msg = Res.string().getBundle().getString("NET_ERROR_TALK_RIGHTLESS"); 
+			break;
+		case LastError.NET_ERROR_TALK_FAILED:  // (0x80000000|380) 璇锋眰瀵硅澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_TALK_FAILED"); 
+			break;
+		case LastError.NET_ERROR_GET_MACHINE_CFG: // (0x80000000|381) 鑾峰彇鏈哄櫒鐩稿叧閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GET_MACHINE_CFG"); 
+			break;
+		case LastError.NET_ERROR_SET_MACHINE_CFG: // (0x80000000|382) 璁剧疆鏈哄櫒鐩稿叧閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SET_MACHINE_CFG"); 
+			break;
+		case LastError.NET_ERROR_GET_DATA_FAILED: // (0x80000000|383) 璁惧鏃犳硶鑾峰彇褰撳墠璇锋眰鏁版嵁
+			msg = Res.string().getBundle().getString("NET_ERROR_GET_DATA_FAILED"); 
+			break;
+		case LastError.NET_ERROR_MAC_VALIDATE_FAILED: // (0x80000000|384) MAC鍦板潃楠岃瘉澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_MAC_VALIDATE_FAILED"); 
+			break;
+		case LastError.NET_ERROR_GET_INSTANCE:  // (0x80000000|385) 鑾峰彇鏈嶅姟鍣ㄥ疄渚嬪け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_GET_INSTANCE"); 
+			break;
+		case LastError.NET_ERROR_JSON_REQUEST: // (0x80000000|386) 鐢熸垚鐨刯son瀛楃涓查敊璇�
+			msg = Res.string().getBundle().getString("NET_ERROR_JSON_REQUEST"); 
+			break;
+		case LastError.NET_ERROR_JSON_RESPONSE: // (0x80000000|387) 鍝嶅簲鐨刯son瀛楃涓查敊璇�
+			msg = Res.string().getBundle().getString("NET_ERROR_JSON_RESPONSE"); 
+			break;
+		case LastError.NET_ERROR_VERSION_HIGHER: // (0x80000000|388) 鍗忚鐗堟湰浣庝簬褰撳墠浣跨敤鐨勭増鏈�
+			msg = Res.string().getBundle().getString("NET_ERROR_VERSION_HIGHER"); 
+			break;
+		case LastError.NET_SPARE_NO_CAPACITY: // (0x80000000|389) 鐑鎿嶄綔澶辫触, 瀹归噺涓嶈冻
+			msg = Res.string().getBundle().getString("NET_SPARE_NO_CAPACITY"); 
+			break;
+		case LastError.NET_ERROR_SOURCE_IN_USE: // (0x80000000|390) 鏄剧ず婧愯鍏朵粬杈撳嚭鍗犵敤
+			msg = Res.string().getBundle().getString("NET_ERROR_SOURCE_IN_USE"); 
+			break;
+		case LastError.NET_ERROR_REAVE: // (0x80000000|391) 楂樼骇鐢ㄦ埛鎶㈠崰浣庣骇鐢ㄦ埛璧勬簮
+			msg = Res.string().getBundle().getString("NET_ERROR_REAVE"); 
+			break;
+		case LastError.NET_ERROR_NETFORBID: // (0x80000000|392) 绂佹鍏ョ綉
+			msg = Res.string().getBundle().getString("NET_ERROR_NETFORBID"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_MACFILTER: // (0x80000000|393) 鑾峰彇MAC杩囨护閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_MACFILTER"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_MACFILTER: // (0x80000000|394) 璁剧疆MAC杩囨护閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_MACFILTER"); 
+			break;
+		case LastError.NET_ERROR_GETCFG_IPMACFILTER: // (0x80000000|395) 鑾峰彇IP/MAC杩囨护閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_IPMACFILTER"); 
+			break;
+		case LastError.NET_ERROR_SETCFG_IPMACFILTER: // (0x80000000|396) 璁剧疆IP/MAC杩囨护閰嶇疆澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_IPMACFILTER"); 
+			break;
+		case LastError.NET_ERROR_OPERATION_OVERTIME: // (0x80000000|397) 褰撳墠鎿嶄綔瓒呮椂
+			msg = Res.string().getBundle().getString("NET_ERROR_OPERATION_OVERTIME"); 
+			break;
+		case LastError.NET_ERROR_SENIOR_VALIDATE_FAILED: // (0x80000000|398) 楂樼骇鏍¢獙澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SENIOR_VALIDATE_FAILED"); 
+			break;
+		case LastError.NET_ERROR_DEVICE_ID_NOT_EXIST: // (0x80000000|399) 璁惧ID涓嶅瓨鍦�
+			msg = Res.string().getBundle().getString("NET_ERROR_DEVICE_ID_NOT_EXIST"); 
+			break;
+		case LastError.NET_ERROR_UNSUPPORTED:  // (0x80000000|400) 涓嶆敮鎸佸綋鍓嶆搷浣�
+			msg = Res.string().getBundle().getString("NET_ERROR_UNSUPPORTED"); 
+			break;
+		case LastError.NET_ERROR_PROXY_DLLLOAD: // (0x80000000|401) 浠g悊搴撳姞杞藉け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_PROXY_DLLLOAD"); 
+			break;
+		case LastError.NET_ERROR_PROXY_ILLEGAL_PARAM: // (0x80000000|402) 浠g悊鐢ㄦ埛鍙傛暟涓嶅悎娉�
+			msg = Res.string().getBundle().getString("NET_ERROR_PROXY_ILLEGAL_PARAM"); 
+			break;
+		case LastError.NET_ERROR_PROXY_INVALID_HANDLE: // (0x80000000|403) 浠g悊鍙ユ焺鏃犳晥
+			msg = Res.string().getBundle().getString("NET_ERROR_PROXY_INVALID_HANDLE"); 
+			break;
+		case LastError.NET_ERROR_PROXY_LOGIN_DEVICE_ERROR: // (0x80000000|404) 浠g悊鐧诲叆鍓嶇璁惧澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_PROXY_LOGIN_DEVICE_ERROR"); 
+			break;
+		case LastError.NET_ERROR_PROXY_START_SERVER_ERROR: // (0x80000000|405) 鍚姩浠g悊鏈嶅姟澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_PROXY_START_SERVER_ERROR"); 
+			break;
+		case LastError.NET_ERROR_SPEAK_FAILED: // (0x80000000|406) 璇锋眰鍠婅瘽澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SPEAK_FAILED"); 
+			break;
+		case LastError.NET_ERROR_NOT_SUPPORT_F6: // (0x80000000|407) 璁惧涓嶆敮鎸佹F6鎺ュ彛璋冪敤
+			msg = Res.string().getBundle().getString("NET_ERROR_NOT_SUPPORT_F6"); 
+			break;
+		case LastError.NET_ERROR_CD_UNREADY: // (0x80000000|408) 鍏夌洏鏈氨缁�
+			msg = Res.string().getBundle().getString("NET_ERROR_CD_UNREADY"); 
+			break;
+		case LastError.NET_ERROR_DIR_NOT_EXIST: // (0x80000000|409) 鐩綍涓嶅瓨鍦�
+			msg = Res.string().getBundle().getString("NET_ERROR_DIR_NOT_EXIST"); 
+			break;
+		case LastError.NET_ERROR_UNSUPPORTED_SPLIT_MODE: // (0x80000000|410) 璁惧涓嶆敮鎸佺殑鍒嗗壊妯″紡
+			msg = Res.string().getBundle().getString("NET_ERROR_UNSUPPORTED_SPLIT_MODE"); 
+			break;
+		case LastError.NET_ERROR_OPEN_WND_PARAM: // (0x80000000|411) 寮�绐楀弬鏁颁笉鍚堟硶
+			msg = Res.string().getBundle().getString("NET_ERROR_OPEN_WND_PARAM"); 
+			break;
+		case LastError.NET_ERROR_LIMITED_WND_COUNT: // (0x80000000|412) 寮�绐楁暟閲忚秴杩囬檺鍒�
+			msg = Res.string().getBundle().getString("NET_ERROR_LIMITED_WND_COUNT"); 
+			break;
+		case LastError.NET_ERROR_UNMATCHED_REQUEST: // (0x80000000|413) 璇锋眰鍛戒护涓庡綋鍓嶆ā寮忎笉鍖归厤
+			msg = Res.string().getBundle().getString("NET_ERROR_UNMATCHED_REQUEST"); 
+			break;
+		case LastError.NET_RENDER_ENABLELARGEPICADJUSTMENT_ERROR: // (0x80000000|414) Render搴撳惎鐢ㄩ珮娓呭浘鍍忓唴閮ㄨ皟鏁寸瓥鐣ュ嚭閿�
+			msg = Res.string().getBundle().getString("NET_RENDER_ENABLELARGEPICADJUSTMENT_ERROR"); 
+			break;
+		case LastError.NET_ERROR_UPGRADE_FAILED: // (0x80000000|415) 璁惧鍗囩骇澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_UPGRADE_FAILED"); 
+			break;
+		case LastError.NET_ERROR_NO_TARGET_DEVICE: // (0x80000000|416) 鎵句笉鍒扮洰鏍囪澶�
+			msg = Res.string().getBundle().getString("NET_ERROR_NO_TARGET_DEVICE"); 
+			break;
+		case LastError.NET_ERROR_NO_VERIFY_DEVICE: // (0x80000000|417) 鎵句笉鍒伴獙璇佽澶�
+			msg = Res.string().getBundle().getString("NET_ERROR_NO_VERIFY_DEVICE"); 
+			break;
+		case LastError.NET_ERROR_CASCADE_RIGHTLESS: // (0x80000000|418) 鏃犵骇鑱旀潈闄�
+			msg = Res.string().getBundle().getString("NET_ERROR_CASCADE_RIGHTLESS"); 
+			break;
+		case LastError.NET_ERROR_LOW_PRIORITY: // (0x80000000|419) 浣庝紭鍏堢骇
+			msg = Res.string().getBundle().getString("NET_ERROR_LOW_PRIORITY"); 
+			break;
+		case LastError.NET_ERROR_REMOTE_REQUEST_TIMEOUT: // (0x80000000|420) 杩滅▼璁惧璇锋眰瓒呮椂
+			msg = Res.string().getBundle().getString("NET_ERROR_REMOTE_REQUEST_TIMEOUT"); 
+			break;
+		case LastError.NET_ERROR_LIMITED_INPUT_SOURCE: // (0x80000000|421) 杈撳叆婧愯秴鍑烘渶澶ц矾鏁伴檺鍒�
+			msg = Res.string().getBundle().getString("NET_ERROR_LIMITED_INPUT_SOURCE"); 
+			break;
+		case LastError.NET_ERROR_SET_LOG_PRINT_INFO: // (0x80000000|422) 璁剧疆鏃ュ織鎵撳嵃澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_SET_LOG_PRINT_INFO"); 
+			break;
+		case LastError.NET_ERROR_PARAM_DWSIZE_ERROR: // (0x80000000|423) 鍏ュ弬鐨刣wsize瀛楁鍑洪敊
+			msg = Res.string().getBundle().getString("NET_ERROR_PARAM_DWSIZE_ERROR"); 
+			break;
+		case LastError.NET_ERROR_LIMITED_MONITORWALL_COUNT: // (0x80000000|424) 鐢佃澧欐暟閲忚秴杩囦笂闄�
+			msg = Res.string().getBundle().getString("NET_ERROR_LIMITED_MONITORWALL_COUNT"); 
+			break;
+		case LastError.NET_ERROR_PART_PROCESS_FAILED: // (0x80000000|425) 閮ㄥ垎杩囩▼鎵ц澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_PART_PROCESS_FAILED"); 
+			break;
+		case LastError.NET_ERROR_TARGET_NOT_SUPPORT: // (0x80000000|426) 璇ュ姛鑳戒笉鏀寔杞彂
+			msg = Res.string().getBundle().getString("NET_ERROR_TARGET_NOT_SUPPORT"); 
+			break;
+		case LastError.NET_ERROR_VISITE_FILE: // (0x80000000|510) 璁块棶鏂囦欢澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_VISITE_FILE"); 
+			break;
+		case LastError.NET_ERROR_DEVICE_STATUS_BUSY: // (0x80000000|511) 璁惧蹇�
+			msg = Res.string().getBundle().getString("NET_ERROR_DEVICE_STATUS_BUSY"); 
+			break;
+		case LastError.NET_USER_PWD_NOT_AUTHORIZED: // (0x80000000|512)淇敼瀵嗙爜鏃犳潈闄�
+			msg = Res.string().getBundle().getString("NET_USER_PWD_NOT_AUTHORIZED"); 
+			break;
+		case LastError.NET_USER_PWD_NOT_STRONG: // (0x80000000|513) 瀵嗙爜寮哄害涓嶅
+			msg = Res.string().getBundle().getString("NET_USER_PWD_NOT_STRONG"); 
+			break;
+		case LastError.NET_ERROR_NO_SUCH_CONFIG: // (0x80000000|514) 娌℃湁瀵瑰簲鐨勯厤缃�
+			msg = Res.string().getBundle().getString("NET_ERROR_NO_SUCH_CONFIG"); 
+			break;
+		case LastError.NET_ERROR_AUDIO_RECORD_FAILED: // (0x80000000|515) 褰曢煶澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_AUDIO_RECORD_FAILED"); 
+			break;
+		case LastError.NET_ERROR_SEND_DATA_FAILED: // (0x80000000|516) 鏁版嵁鍙戦�佸け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_SEND_DATA_FAILED"); 
+			break;
+		case LastError.NET_ERROR_OBSOLESCENT_INTERFACE: // (0x80000000|517) 搴熷純鎺ュ彛
+			msg = Res.string().getBundle().getString("NET_ERROR_OBSOLESCENT_INTERFACE"); 
+			break;
+		case LastError.NET_ERROR_INSUFFICIENT_INTERAL_BUF: // (0x80000000|518) 鍐呴儴缂撳啿涓嶈冻
+			msg = Res.string().getBundle().getString("NET_ERROR_INSUFFICIENT_INTERAL_BUF"); 
+			break;
+		case LastError.NET_ERROR_NEED_ENCRYPTION_PASSWORD: // (0x80000000|519) 淇敼璁惧ip鏃�,闇�瑕佹牎楠屽瘑鐮�
+			msg = Res.string().getBundle().getString("NET_ERROR_NEED_ENCRYPTION_PASSWORD"); 
+			break;
+		case LastError.NET_ERROR_NOSUPPORT_RECORD: // (0x80000000|520) 璁惧涓嶆敮鎸佹璁板綍闆�
+			msg = Res.string().getBundle().getString("NET_ERROR_NOSUPPORT_RECORD"); 
+			break;
+		case LastError.NET_ERROR_SERIALIZE_ERROR: // (0x80000000|1010) 鏁版嵁搴忓垪鍖栭敊璇�
+			msg = Res.string().getBundle().getString("NET_ERROR_SERIALIZE_ERROR"); 
+			break;
+		case LastError.NET_ERROR_DESERIALIZE_ERROR: // (0x80000000|1011) 鏁版嵁鍙嶅簭鍒楀寲閿欒
+			msg = Res.string().getBundle().getString("NET_ERROR_DESERIALIZE_ERROR"); 
+			break;
+		case LastError.NET_ERROR_LOWRATEWPAN_ID_EXISTED: // (0x80000000|1012) 璇ユ棤绾縄D宸插瓨鍦�
+			msg = Res.string().getBundle().getString("NET_ERROR_LOWRATEWPAN_ID_EXISTED"); 
+			break;
+		case LastError.NET_ERROR_LOWRATEWPAN_ID_LIMIT: // (0x80000000|1013) 鏃犵嚎ID鏁伴噺宸茶秴闄�
+			msg = Res.string().getBundle().getString("NET_ERROR_LOWRATEWPAN_ID_LIMIT"); 
+			break;
+		case LastError.NET_ERROR_LOWRATEWPAN_ID_ABNORMAL: // (0x80000000|1014) 鏃犵嚎寮傚父娣诲姞
+			msg = Res.string().getBundle().getString("NET_ERROR_LOWRATEWPAN_ID_ABNORMAL"); 
+			break;
+		case LastError.NET_ERROR_ENCRYPT: // (0x80000000|1015) 鍔犲瘑鏁版嵁澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_ENCRYPT"); 
+			break;
+		case LastError.NET_ERROR_PWD_ILLEGAL: // (0x80000000|1016) 鏂板瘑鐮佷笉鍚堣鑼�
+			msg = Res.string().getBundle().getString("NET_ERROR_PWD_ILLEGAL"); 
+			break;
+		case LastError.NET_ERROR_DEVICE_ALREADY_INIT: // (0x80000000|1017) 璁惧宸茬粡鍒濆鍖�
+			msg = Res.string().getBundle().getString("NET_ERROR_DEVICE_ALREADY_INIT"); 
+			break;
+		case LastError.NET_ERROR_SECURITY_CODE: // (0x80000000|1018) 瀹夊叏鐮侀敊璇�
+			msg = Res.string().getBundle().getString("NET_ERROR_SECURITY_CODE"); 
+			break;
+		case LastError.NET_ERROR_SECURITY_CODE_TIMEOUT: // (0x80000000|1019) 瀹夊叏鐮佽秴鍑烘湁鏁堟湡
+			msg = Res.string().getBundle().getString("NET_ERROR_SECURITY_CODE_TIMEOUT"); 
+			break;
+		case LastError.NET_ERROR_GET_PWD_SPECI: // (0x80000000|1020) 鑾峰彇瀵嗙爜瑙勮寖澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_GET_PWD_SPECI"); 
+			break;
+		case LastError.NET_ERROR_NO_AUTHORITY_OF_OPERATION: // (0x80000000|1021) 鏃犳潈闄愯繘琛岃鎿嶄綔
+			msg = Res.string().getBundle().getString("NET_ERROR_NO_AUTHORITY_OF_OPERATION"); 
+			break;
+		case LastError.NET_ERROR_DECRYPT: // (0x80000000|1022) 瑙e瘑鏁版嵁澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_DECRYPT"); 
+			break;
+		case LastError.NET_ERROR_2D_CODE: // (0x80000000|1023) 2D code鏍¢獙澶辫触
+			msg = Res.string().getBundle().getString("NET_ERROR_2D_CODE"); 
+			break;
+		case LastError.NET_ERROR_INVALID_REQUEST: // (0x80000000|1024) 闈炴硶鐨凴PC璇锋眰
+			msg = Res.string().getBundle().getString("NET_ERROR_INVALID_REQUEST"); 
+			break;
+		case LastError.NET_ERROR_PWD_RESET_DISABLE: // (0x80000000|1025) 瀵嗙爜閲嶇疆鍔熻兘宸插叧闂�
+			msg = Res.string().getBundle().getString("NET_ERROR_PWD_RESET_DISABLE"); 
+			break;
+		case LastError.NET_ERROR_PLAY_PRIVATE_DATA: // (0x80000000|1026) 鏄剧ず绉佹湁鏁版嵁锛屾瘮濡傝鍒欐绛夊け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_PLAY_PRIVATE_DATA"); 
+			break;
+		case LastError.NET_ERROR_ROBOT_OPERATE_FAILED: // (0x80000000|1027) 鏈哄櫒浜烘搷浣滃け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_ROBOT_OPERATE_FAILED"); 
+			break;
+		case LastError.NET_ERROR_PHOTOSIZE_EXCEEDSLIMIT: // (0x80000000|1028) 鍥剧墖澶у皬瓒呴檺
+			msg = Res.string().getBundle().getString("NET_ERROR_PHOTOSIZE_EXCEEDSLIMIT"); 
+			break;
+		case LastError.NET_ERROR_USERID_INVALID: // (0x80000000|1029) 鐢ㄦ埛ID涓嶅瓨鍦�
+			msg = Res.string().getBundle().getString("NET_ERROR_USERID_INVALID"); 
+			break;
+		case LastError.NET_ERROR_EXTRACTFEATURE_FAILED: // (0x80000000|1030) 鐓х墖鐗瑰緛鍊兼彁鍙栧け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_EXTRACTFEATURE_FAILED"); 
+			break;
+		case LastError.NET_ERROR_PHOTO_EXIST: // (0x80000000|1031) 鐓х墖宸插瓨鍦�
+			msg = Res.string().getBundle().getString("NET_ERROR_PHOTO_EXIST"); 
+			break;
+		case LastError.NET_ERROR_PHOTO_OVERFLOW: // (0x80000000|1032) 鐓х墖鏁伴噺瓒呰繃涓婇檺
+			msg = Res.string().getBundle().getString("NET_ERROR_PHOTO_OVERFLOW"); 
+			break;
+		case LastError.NET_ERROR_CHANNEL_ALREADY_OPENED: // (0x80000000|1033) 閫氶亾宸茬粡鎵撳紑
+			msg = Res.string().getBundle().getString("NET_ERROR_CHANNEL_ALREADY_OPENED"); 
+			break;
+		case LastError.NET_ERROR_CREATE_SOCKET: // (0x80000000|1034) 鍒涘缓濂楁帴瀛楀け璐�
+			msg = Res.string().getBundle().getString("NET_ERROR_CREATE_SOCKET"); 
+			break;
+		case LastError.NET_ERROR_CHANNEL_NUM: // (0x80000000|1035) 閫氶亾鍙烽敊璇�
+			msg = Res.string().getBundle().getString("NET_ERROR_CHANNEL_NUM"); 
+			break;
+		case LastError.NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_ID_EXCEED: // (0x80000000|1051) 缁処D瓒呰繃鏈�澶у��
+			msg = Res.string().getBundle().getString("NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_ID_EXCEED"); 
+			break;
+		default:
+	    	msg = Res.string().getBundle().getString("NET_ERROR");
+			break;
+		}
+		return msg;
+	}
+				
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/EventTaskCommonQueue.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/EventTaskCommonQueue.java
new file mode 100644
index 0000000..006427c
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/EventTaskCommonQueue.java
@@ -0,0 +1,79 @@
+package com.ruoyi.device.dhsdk.common;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.LinkedBlockingDeque;
+
+public class EventTaskCommonQueue {
+
+    // 璁剧疆涓�涓槦鍒楋紝瀹归噺鐪嬫儏鍐垫敼
+    private final int MAX_TASK_COUNT = 10000;   // 闃熷垪瀹归噺
+    private final LinkedBlockingDeque<EventTaskHandler> eventTasks = new LinkedBlockingDeque<EventTaskHandler>(MAX_TASK_COUNT);
+
+    // 璧蜂竴涓嚎绋嬫睜
+    private final int MAX_THREAD_COUNT = 10;    // 绾跨▼姹犲閲�
+    private ExecutorService eventQueueService = Executors.newFixedThreadPool(MAX_THREAD_COUNT);
+
+    // 鐢ㄤ簬妫�楠屾湇鍔¤繍琛岀姸鎬�
+    private volatile boolean running = true;
+
+    // 鐢ㄤ簬鏌ョ湅褰撳墠绾跨▼鐘舵��
+    private Future<?> eventQueueThreadStatus;
+
+    // 鍒濆鍖�
+    public void init() {
+        eventQueueThreadStatus = eventQueueService.submit(new Thread(new Runnable() {
+            @Override
+            public void run() {
+                while (running) {
+                    try {
+                        EventTaskHandler task = eventTasks.take();      //寮�濮嬩竴涓换鍔�
+                        try {
+                            task.eventTaskProcess();    // 涓昏鐨勮繍琛屽嚱鏁�
+                        } catch (Exception e) {
+                            System.err.println("浠诲姟澶勭悊鍙戠敓閿欒");   // error
+                        }
+                    } catch (InterruptedException e) {
+                        System.err.println("浠诲姟宸叉剰澶栧仠姝�");   // error
+                        running = false;
+                    }
+                }
+            }
+        }, "Event call back thread init"));
+    }
+
+    // 鍚戦槦鍒楁坊鍔犳柊鐨勪换鍔�
+    public boolean addEvent(EventTaskHandler eventHandler) {
+        if (!running) {
+            System.out.println("浠诲姟宸插仠姝�");   // warning
+            return false;
+        }
+        boolean success = eventTasks.offer(eventHandler);
+        if (!success) {
+            // 闃熷垪宸叉弧锛屾棤娉曞啀娣诲姞
+            System.out.println("娣诲姞鍒颁簨浠堕槦鍒楀け璐�");
+        }
+        return success;
+    }
+
+
+    // 鎵嬪姩鍚姩鏈嶅姟
+    public void activeService() {
+        running = true;
+        if (eventQueueService.isShutdown()) {
+            eventQueueService = Executors.newFixedThreadPool(MAX_THREAD_COUNT);;
+            init();
+            System.out.println("绾跨▼姹犲凡鍏抽棴锛岄噸鏂板垵濮嬪寲绾跨▼姹犲強浠诲姟");
+        }
+        if (eventQueueThreadStatus.isDone()) {
+            init();
+            System.out.println("绾跨▼姹犱换鍔$粨鏉燂紝閲嶆柊鍒濆鍖栦换鍔�");
+        }
+    }
+
+    // 鎵嬪姩鍏抽棴鏈嶅姟
+    public void destroy() {
+        running = false;
+        eventQueueService.shutdownNow();
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/EventTaskHandler.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/EventTaskHandler.java
new file mode 100644
index 0000000..b700091
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/EventTaskHandler.java
@@ -0,0 +1,6 @@
+package com.ruoyi.device.dhsdk.common;
+
+public interface EventTaskHandler {
+
+    void eventTaskProcess();
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/ListPictureShowDialog.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/ListPictureShowDialog.java
new file mode 100644
index 0000000..deb1930
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/ListPictureShowDialog.java
@@ -0,0 +1,34 @@
+package com.ruoyi.device.dhsdk.common;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+/*
+ * 鏅鸿兘浜ら�氬垪琛ㄥ弻鍑诲睍绀哄浘鐗囨鏋�
+ */
+public class ListPictureShowDialog extends JDialog {
+	private static final long serialVersionUID = 1L;
+	public ListPictureShowDialog() {
+	    setLayout(new BorderLayout());
+	    setModal(true);   
+	    pack();
+	    setSize(800, 600);
+	    setResizable(false);
+	    setLocationRelativeTo(null);
+	    setDefaultCloseOperation(DISPOSE_ON_CLOSE);   // 閲婃斁绐椾綋
+
+	    
+	    listPanel = new PaintPanel();
+	    add(listPanel, BorderLayout.CENTER);
+	    
+	    addWindowListener(new WindowAdapter() {
+	    	public void windowClosing(WindowEvent e) {
+	    		dispose();		
+	    	}
+	    });
+	}
+	
+	public PaintPanel listPanel;
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/PaintPanel.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/PaintPanel.java
new file mode 100644
index 0000000..a74afa8
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/PaintPanel.java
@@ -0,0 +1,32 @@
+package com.ruoyi.device.dhsdk.common;
+
+import javax.swing.*;
+import java.awt.*;
+
+/*
+ * 甯﹁儗鏅殑缁樺浘闈㈡澘
+ */
+public class PaintPanel extends JPanel {
+	private static final long serialVersionUID = 1L;
+	private Image image; //鑳屾櫙鍥剧墖	
+	
+	public PaintPanel() {
+		super();
+		setOpaque(true); //闈為�忔槑
+		setLayout(null);
+		setBackground(Color.GRAY);
+		setForeground(new Color(0, 0, 0));
+	}
+	
+	//璁剧疆鍥剧墖鐨勬柟娉�
+	public void setImage(Image image) {
+		this.image = image;
+	}
+	
+	protected void paintComponent(Graphics g) {    //閲嶅啓缁樺埗缁勪欢澶栬
+		if(image != null) {
+			g.drawImage(image, 0, 0, getWidth(), getHeight(), this);//缁樺埗鍥剧墖涓庣粍浠跺ぇ灏忕浉鍚�
+		}
+		super.paintComponent(g); // 鎵ц瓒呯被鏂规硶
+	}	
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/Res.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/Res.java
new file mode 100644
index 0000000..803307e
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/Res.java
@@ -0,0 +1,2883 @@
+package com.ruoyi.device.dhsdk.common;
+
+import com.ruoyi.device.dhsdk.lib.NetSDKLib;
+import com.ruoyi.device.dhsdk.lib.NetSDKLib.SdkStructure;
+import com.ruoyi.device.dhsdk.lib.NetSDKLib.*;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+public final class Res {
+	
+	private static ResourceBundle bundle;
+	
+	private Res() {
+		switchLanguage(LanguageType.Chinese);
+	}
+
+	private static class StringBundleHolder {
+		private static Res instance = new Res();
+	}
+	
+	public static Res string() {
+		return StringBundleHolder.instance;
+	}
+	
+	public static enum LanguageType {
+		English,
+		Chinese
+	}
+	
+	public ResourceBundle getBundle() {
+		return bundle;
+	}
+	
+	/**
+	 * \if ENGLISH_LANG
+	 * Switch between Chinese and English
+	 * \else
+	 * 涓嫳鏂囧垏鎹�
+	 * \endif
+	 */
+	public void switchLanguage(LanguageType type) {
+		switch(type) {
+			case Chinese:
+				bundle = ResourceBundle.getBundle("resources", new Locale("zh", "CN"));
+				break;
+			case English:
+				bundle = ResourceBundle.getBundle("resources", new Locale("en", "US"));
+				break;
+			default:
+				break;
+		}
+	}
+	
+	public String getSwitchLanguage() {
+		return bundle.getString("SWITCH_LANGUAGE");
+	}
+	
+	public String getRealplay() {
+		return bundle.getString("REALPLAY");
+	}
+	
+	public String getMultiRealplay() {
+		return bundle.getString("MULTIREALPLAY");
+	}
+	
+	public String getDownloadRecord() {
+		return bundle.getString("DOWNLOAD_RECORD");
+	}
+	
+	public String getITSEvent() {
+		return bundle.getString("ITS_EVENT");
+	}
+	
+	public String getOnline() {
+		return bundle.getString("ONLINE");
+	}
+	
+	public String getDisConnectReconnecting() {
+		return bundle.getString("DISCONNECT_RECONNECTING");
+	}
+	
+	public String getDisConnect() {
+		return bundle.getString("DISCONNECT");
+	}
+	
+	public String getPromptMessage() {
+		return bundle.getString("PROMPT_MESSAGE");
+	}
+	
+	public String getErrorMessage() {
+		return bundle.getString("ERROR_MESSAGE");
+	}
+	
+	public String getReconnectSucceed() {
+		return bundle.getString("RECONNECT_SUCCEED");
+	}
+	
+	public String getSucceed() {
+		return bundle.getString("SUCCEED");
+	}
+	
+	public String getFailed() {
+		return bundle.getString("FAILED");
+	}
+	
+	public String getYear() {
+		return bundle.getString("YEAR");
+	}
+	
+	public String getMonth() {
+		return bundle.getString("MONTH");
+	}
+	
+	public String getDay() {
+		return bundle.getString("DAY");
+	}
+	
+	public String getHour() {
+		return bundle.getString("HOUR");
+	}
+	
+	public String getMinute() {
+		return bundle.getString("MINUTE");
+	}
+	
+	public String getSecond() {
+		return bundle.getString("SECOND");
+	}
+	
+	public String getSunday() {
+		return bundle.getString("SUNDAY");
+	}
+	
+	public String getMonday() {
+		return bundle.getString("MONDAY");
+	}
+	
+	public String getTuesday() {
+		return bundle.getString("TUESDAY");
+	}
+	
+	public String getWednesday() {
+		return bundle.getString("WEDNESDAY");
+	}
+	
+	public String getThursday() {
+		return bundle.getString("THURSDAY");
+	}
+	
+	public String getFriday() {
+		return bundle.getString("FRIDAY");
+	}
+	
+	public String getSaturday() {
+		return bundle.getString("SATURDAY");
+	}
+	
+	public String[] getWeek() {
+		String[] weekdays = {getSunday(),
+							 getMonday(),
+				    		 getTuesday(),
+				    		 getWednesday(),
+				    		 getThursday(),
+				    		 getFriday(),
+				    		 getSaturday()
+		};
+		
+		return weekdays;
+	}
+	
+	public String getConfirm() {
+		return bundle.getString("CONFIRM");
+	}
+	
+	public String getCancel() {
+		return bundle.getString("CANCEL");
+	}
+	
+	public String getDateChooser() {
+		return bundle.getString("DATE_CHOOSER");
+	}
+	
+	public String getFunctionList() {
+		return bundle.getString("FUNCTIONLIST");
+	}
+
+	public String getLogin() {
+		return bundle.getString("LOGIN");
+	}
+	
+	public String getLoginSuccess() {
+		return bundle.getString("LOGIN_SUCCEED");
+	}
+
+	public String getFillingRules() {
+		return bundle.getString("FILLING_RULES");
+	}
+	
+	public String getLogout() {
+		return bundle.getString("LOGOUT");
+	}
+	
+	public String getDeviceIp() {
+		return bundle.getString("DEVICE_IP");
+	}
+	
+	public String getIp() {
+		return bundle.getString("IP");
+	}
+	
+	public String getPort() {
+		return bundle.getString("DEVICE_PORT");
+	}
+	
+	public String getUserId() {
+		return bundle.getString("USER_ID");
+	}
+	
+	public String getTemp() {
+		return bundle.getString("TEMPERATURE");
+	}
+	
+	public String getMaskstutas() {
+		return bundle.getString("MASK_STATUS");
+	}
+	
+	public String getUserName(boolean space) {
+		return bundle.getString("USER_NAME");
+	}
+	
+	public String getCardNo() {
+		return bundle.getString("CARD_NO");
+	}
+	
+	public String getUserName() {
+		return bundle.getString("USERNAME");
+	}
+	
+	public String getPassword() {
+		return bundle.getString("PASSWORD");
+	}
+	
+	
+	public String getLoginFailed() {
+		return bundle.getString("LOGIN_FAILED");
+	}
+	
+	public String getInputDeviceIP() {
+		return bundle.getString("PLEASE_INPUT_DEVICE_IP");
+	}
+	
+	public String getInputDevicePort() {
+		return bundle.getString("PLEASE_INPUT_DEVICE_PORT");
+	}
+	
+	public String getInputUsername() {
+		return bundle.getString("PLEASE_INPUT_DEVICE_USERNAME");
+	}
+	
+	public String getInputPassword() {
+		return bundle.getString("PLEASE_INPUT_DEVICE_PASSWORD");
+	}
+	
+	public String getInputConfirmPassword() {
+		return bundle.getString("PLEASE_INPUT_CONFIRM_PASSWORD");
+	}
+	
+	public String getStartRealPlay() {
+		return bundle.getString("START_REALPLAY");
+	}
+	
+	public String getStopRealPlay() {
+		return bundle.getString("STOP_REALPLAY");
+	}
+	
+	public String getChn() {
+		return bundle.getString("CHN");
+	}
+	
+	public String getChannel() {
+		return bundle.getString("CHANNEL");
+	}
+	
+	public String getStreamType() {
+		return bundle.getString("STREAM_TYPE");
+	}
+	
+	public String getMasterAndSub() {
+		return bundle.getString("MASTER_AND_SUB_STREAM");
+	}
+	
+	public String getMasterStream() {
+		return bundle.getString("MASTER_STREAM");
+	}
+	
+	public String getSubStream() {
+		return bundle.getString("SUB_STREAM");
+	}
+	
+	public String getPTZ() {
+		return bundle.getString("PTZ");
+	}
+	
+	public String getPtzControlAndCapture() {
+		return bundle.getString("PTZCONTROL_CAPTURE");
+	}
+	
+	public String getCapturePicture() {
+		return bundle.getString("CAPTURE_PICTURE");
+	}
+	
+	public String getLocalCapture() {
+		return bundle.getString("LOCAL_CAPTURE");
+	}
+	
+	public String getRemoteCapture() {
+		return bundle.getString("REMOTE_CAPTURE");
+	}
+	
+	public String getTimerCapture() {
+		return bundle.getString("TIMER_CAPTURE");
+	}
+	
+	public String getStopCapture() {
+		return bundle.getString("STOP_CAPTURE");
+	}
+	
+	public String getInterval() {
+		return bundle.getString("INTERVAL");
+	}
+	
+	public String getTimeIntervalIllegal() {
+		return bundle.getString("TIME_INTERVAL_ILLEGAL");
+	}
+	
+	public String getNeedStartRealPlay() {
+		return bundle.getString("PLEASE_START_REALPLAY");
+	}
+	
+	public String getPTZControl() {
+		return bundle.getString("PTZ_CONTROL");
+	}
+	
+	public String getLeftUp() {
+		return bundle.getString("LEFT_UP");
+	}
+	
+	public String getUp() {
+		return bundle.getString("UP");
+	}
+	
+	public String getRightUp() {
+		return bundle.getString("RIGHT_UP");
+	}
+	
+	public String getLeft() {
+		return bundle.getString("LEFT");
+	}
+	
+	public String getRight() {
+		return bundle.getString("RIGHT");
+	}
+	
+	public String getLeftDown() {
+		return bundle.getString("LEFT_DOWN");
+	}
+	
+	public String getDown() {
+		return bundle.getString("DOWN");
+	}
+	
+	public String getRightDown() {
+		return bundle.getString("RIGHT_DOWN");
+	}
+	
+	public String getSpeed() {
+		return bundle.getString("SPEED");
+	}
+	
+	public String getZoomAdd() {
+		return bundle.getString("ZOOM_ADD");
+	}
+	
+	public String getZoomDec() {
+		return bundle.getString("ZOOM_DEC");
+	}
+	
+	public String getFocusAdd() {
+		return bundle.getString("FOCUS_ADD");
+	}
+	
+	public String getFocusDec() {
+		return bundle.getString("FOCUS_DEC");
+	}
+	
+	public String getIrisAdd() {
+		return bundle.getString("IRIS_ADD");
+	}
+	
+	public String getIrisDec() {
+		return bundle.getString("IRIS_DEC");
+	}
+	
+	public String getIndex() {
+		return bundle.getString("INDEX");
+	}
+	
+	public String getEventPicture() {
+		return bundle.getString("EVENT_PICTURE");
+	}
+	
+	public String getPlatePicture() {
+		return bundle.getString("PLATE_PICTURE");
+	}
+	
+	public String getEventName() {
+		return bundle.getString("EVENT_NAME");
+	}
+	
+	public String getLicensePlate() {
+		return bundle.getString("LICENSE_PLATE");
+	}
+	
+	public String getEventTime() {
+		return bundle.getString("EVENT_TIME");
+	}
+	
+	public String getPlateType() {
+		return bundle.getString("PLATE_TYPE");
+	}
+	
+	public String getPlateColor() {
+		return bundle.getString("PLATE_COLOR");
+	}
+	
+	public String getVehicleColor() {
+		return bundle.getString("VEHICLE_COLOR");
+	}
+	
+	public String getVehicleType() {
+		return bundle.getString("VEHICLE_TYPE");
+	}
+	
+	public String getVehicleSize() {
+		return bundle.getString("VEHICLE_SIZE");
+	}
+	
+	public String getFileCount() {
+		return bundle.getString("FILE_COUNT");
+	}
+	
+	public String getFileIndex() {
+		return bundle.getString("FILE_INDEX");
+	}
+	
+	public String getGroupId() {
+		return bundle.getString("GROUP_ID");
+	}
+	
+	public String getIllegalPlace() {
+		return bundle.getString("ILLEGAL_PLACE");
+	}
+	
+	public String getLaneNumber() {
+		return bundle.getString("LANE_NUMBER");
+	}
+	
+	public String getEventInfo() {
+		return bundle.getString("EVENT_INFO");
+	}
+	
+	public String getNoPlate() {
+		return bundle.getString("NO_PLATENUMBER");
+	}
+	
+	public String[] getTrafficTableName() {
+		String[] name = {getIndex(),
+						 getEventName(), 
+						 getLicensePlate(), 
+						 getEventTime(), 
+						 getPlateType(), 	
+						 getPlateColor(), 	
+						 getVehicleColor(), 
+						 getVehicleType(), 
+						 getVehicleSize(),
+						 getFileCount(),
+						 getFileIndex(),
+						 getGroupId(),
+						 getIllegalPlace(),
+						 getLaneNumber()};
+		return name;
+	}
+	
+	public String getOperate() {
+		return bundle.getString("OPERATE");
+	}
+	
+	public String getAttach() {
+		return bundle.getString("ATTACH");
+	}
+	
+	public String getDetach() {
+		return bundle.getString("DETACH");
+	}
+	
+	public String getOpenStrobe() {
+		return bundle.getString("OPEN_STROBE");
+	}
+	
+	public String getCloseStrobe() {
+		return bundle.getString("CLOSE_STROBE");
+	}
+	
+	public String getOpenStrobeFailed() {
+		return bundle.getString("OPEN_STROBE_FAILED");
+	}
+	
+	public String getManualCapture() {
+		return bundle.getString("MANUAL_CAPTURE");
+	}
+	
+	public String getManualCaptureSucceed() {
+		return  bundle.getString("MANUALSNAP_SUCCEED");
+	}
+	
+	public String getManualCaptureFailed() {
+		return  bundle.getString("MANUALSNAP_FAILED");
+	}
+    
+    /*
+     * 杞﹁締澶у皬瀵圭収琛�
+     */
+    public String getTrafficSize(int nVehicleSize) {
+    	String vehicleClass = "";
+    	for(int i = 0; i < 5; i++) {
+      		if( ((byte)nVehicleSize & (1 << i)) > 0 ) {
+      			switch (i) {
+				case 0:
+					vehicleClass = bundle.getString("LIGHT_DUTY");
+					break;
+				case 1:
+					vehicleClass = bundle.getString("MEDIUM");
+					break;
+				case 2:
+					vehicleClass = bundle.getString("OVER_SIZE");
+					break;
+				case 3:
+					vehicleClass = bundle.getString("MINI_SIZE");
+					break;
+				case 4:
+					vehicleClass = bundle.getString("LARGE_SIZE");
+					break;
+				}
+      		}
+      	} 
+    	
+    	return vehicleClass;
+    }
+	
+    /*
+     * 鑾峰彇浜嬩欢鍚嶇О
+     */
+    public String getEventName(int type) {
+    	String name = "";
+    	switch (type) {
+			case NetSDKLib.EVENT_IVS_TRAFFICJUNCTION:  ///< 浜ら�氳矾鍙d簨浠�
+				name = bundle.getString("EVENT_IVS_TRAFFICJUNCTION");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_RUNREDLIGHT: ///< 闂孩鐏簨浠�
+				name = bundle.getString("EVENT_IVS_TRAFFIC_RUNREDLIGHT");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_OVERLINE: ///< 鍘嬭溅閬撶嚎浜嬩欢
+				name = bundle.getString("EVENT_IVS_TRAFFIC_OVERLINE");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_RETROGRADE: ///< 閫嗚浜嬩欢
+				name = bundle.getString("EVENT_IVS_TRAFFIC_RETROGRADE");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_TURNLEFT: ///< 杩濈珷宸﹁浆
+				name = bundle.getString("EVENT_IVS_TRAFFIC_TURNLEFT");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_TURNRIGHT: ///< 杩濈珷鍙宠浆
+				name = bundle.getString("EVENT_IVS_TRAFFIC_TURNRIGHT");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_UTURN: ///< 杩濈珷鎺夊ご
+				name = bundle.getString("EVENT_IVS_TRAFFIC_UTURN");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_OVERSPEED: ///< 瓒呴��
+				name = bundle.getString("EVENT_IVS_TRAFFIC_OVERSPEED");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_UNDERSPEED: ///< 浣庨��
+				name = bundle.getString("EVENT_IVS_TRAFFIC_UNDERSPEED");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_PARKING: ///< 杩濈珷鍋滆溅
+				name = bundle.getString("EVENT_IVS_TRAFFIC_PARKING");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_WRONGROUTE: ///< 涓嶆寜杞﹂亾琛岄┒
+				name = bundle.getString("EVENT_IVS_TRAFFIC_WRONGROUTE");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_CROSSLANE: ///< 杩濈珷鍙橀亾
+				name = bundle.getString("EVENT_IVS_TRAFFIC_CROSSLANE");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_OVERYELLOWLINE: ///< 鍘嬮粍绾�
+				name = bundle.getString("EVENT_IVS_TRAFFIC_OVERYELLOWLINE");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE: ///< 榛勭墝杞﹀崰閬撲簨浠�
+				name = bundle.getString("EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY: ///< 鏂戦┈绾胯浜轰紭鍏堜簨浠�
+				name = bundle.getString("EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_MANUALSNAP: ///< 浜ら�氭墜鍔ㄦ姄鎷嶄簨浠�
+				name = bundle.getString("EVENT_IVS_TRAFFIC_MANUALSNAP");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_VEHICLEINROUTE: ///< 鏈夎溅鍗犻亾浜嬩欢
+				name = bundle.getString("EVENT_IVS_TRAFFIC_VEHICLEINROUTE");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE: ///< 鍗犵敤鍏氦杞﹂亾浜嬩欢
+				name = bundle.getString("EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_BACKING: ///< 杩濈珷鍊掕溅浜嬩欢
+				name = bundle.getString("EVENT_IVS_TRAFFIC_BACKING");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING: ///< 杞︿綅鏈夎溅浜嬩欢
+				name = bundle.getString("EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING: ///< 杞︿綅鏃犺溅浜嬩欢
+				name = bundle.getString("EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING");
+				break;
+			case NetSDKLib.EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT: ///< 浜ら�氭湭绯诲畨鍏ㄥ甫浜嬩欢
+				name = bundle.getString("EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT");
+				break;
+			default:
+				break;
+		}
+    	
+    	return name;
+    }
+	
+    public String getRecordType() {
+    	return bundle.getString("RECORD_TYPE");
+    }
+    
+    public String getStartTime() {
+    	return bundle.getString("START_TIME");
+    }
+    
+    public String getEndTime() {
+    	return bundle.getString("END_TIME");
+    }
+    
+    public String[] getDownloadTableName() {
+    	String[] name = {getIndex(), 
+						 getChannel(),
+						 getRecordType(), 
+						 getStartTime(), 
+						 getEndTime()}; 	
+    	return name;
+    }
+    
+    public String getDownloadByFile() {
+    	return bundle.getString("DOWNLOAD_RECORD_BYFILE");
+    }
+    
+    public String getQuery() {
+    	return bundle.getString("QUERY");
+    }
+    
+    public String getDownload() {
+    	return bundle.getString("DOWNLOAD");
+    }
+    
+    public String getStopDownload() {
+    	return bundle.getString("STOP_DOWNLOAD");
+    }
+    
+    public String getDownloadByTime() {
+    	return bundle.getString("DOWNLOAD_RECORD_BYTIME");
+    }
+    
+    public String getSelectTimeAgain() {
+    	return bundle.getString("PLEASE_SELECT_TIME_AGAIN");
+    }
+    
+    public String getSelectRowWithData() {
+    	return bundle.getString("PLEASE_FIRST_SELECT_ROW_WITH_DATA");
+    }
+    
+    public String getQueryRecord() {
+    	return bundle.getString("PLEASE_FIRST_QUERY_RECORD");
+    }
+    
+    public String getDownloadCompleted() {
+    	return bundle.getString("DOWNLOAD_COMPLETED");
+    }
+    
+	/**
+	 * 鑾峰彇褰曞儚绫诲瀷
+	 */
+	public String getRecordTypeStr(int nRecordFileType) {
+		String recordTypeStr = "";
+		switch(nRecordFileType) {
+			case 0:
+                recordTypeStr = bundle.getString("GENERAL_RECORD");
+                break;
+			case 1:
+			    recordTypeStr = bundle.getString("ALARM_RECORD");
+                break;
+			case 2:
+			    recordTypeStr = bundle.getString("MOTION_DETECTION");
+                break;
+			case 3:
+			    recordTypeStr = bundle.getString("CARD_NUMBER_RECORD");
+                break;
+			case 5:
+			    recordTypeStr = bundle.getString("INTELLIGENT_DETECTION");
+                break;
+			case 19:
+			    recordTypeStr = bundle.getString("POS_RECORD");
+                break;
+            default:
+            	break;
+		}
+		
+		return recordTypeStr;
+	}
+    
+	public int getRecordTypeInt(String recordFileStr) {
+		int recordType = -1;
+		if(recordFileStr.equals(bundle.getString("GENERAL_RECORD"))) {
+			recordType = 0;
+		} else if(recordFileStr.equals(bundle.getString("ALARM_RECORD"))) {
+			recordType = 1;
+		} else if(recordFileStr.equals(bundle.getString("MOTION_DETECTION"))) {
+			recordType = 2;
+		} else if(recordFileStr.equals(bundle.getString("CARD_NUMBER_RECORD"))) {
+			recordType = 3;
+		}else if(recordFileStr.equals(bundle.getString("INTELLIGENT_DETECTION"))){
+			recordType=11;
+		}else if(recordFileStr.equals(bundle.getString("POS_RECORD"))){
+			recordType=19;
+		}
+
+		
+		return recordType;
+	}  
+    
+	/**
+	 * 璇煶瀵硅
+	 */
+	public String getTalk() {
+		return bundle.getString("TALK");
+	}
+	
+	public String getTransmitType() {
+    	return bundle.getString("TRANSMIT_TYPE");
+    }
+	
+	public String getLocalTransmitType() {
+    	return bundle.getString("LOCAL_TRANSMIT_TYPE");
+    }
+	
+	public String getRemoteTransmitType() {
+    	return bundle.getString("REMOTE_TRANSMIT_TYPE");
+    }
+	
+	public String getTransmitChannel() {
+    	return bundle.getString("TRANSMIT_CHANNEL");
+    }
+	
+	public String getStartTalk() {
+    	return bundle.getString("START_TALK");
+    }
+	
+	public String getStopTalk() {
+    	return bundle.getString("STOP_TALK");
+    }
+	
+	public String getTalkFailed() {
+    	return bundle.getString("TALK_FAILED");
+    }
+    
+	public String getDeviceSearchAndInit() {
+		return bundle.getString("DEVICESEARCH_DEVICEINIT");
+	}
+	
+    public String getDeviceSearchOperate() {
+    	return bundle.getString("DEVICESEARCH_OPERATE");
+    }
+    
+    public String getDeviceSearchResult() {
+    	return bundle.getString("DEVICESEARCH_RESULT");
+    }
+    
+    public String getDeviceInit() {
+    	return bundle.getString("DEVICEINIT");
+    }
+    
+    public String getStartSearch() {
+    	return bundle.getString("START_SEARCH");
+    }
+    
+    public String getStopSearch() {
+    	return bundle.getString("STOP_SEARCH");
+    }
+    
+    public String getPleaseSelectInitializedDevice() {
+    	return bundle.getString("PLEASE_FIRST_SELECT_INITIALIZED_DEVICE");
+    }
+    
+    public String getDeviceSearch() {
+    	return bundle.getString("DEVICESEARCH");
+    }
+    
+    public String getDevicePointToPointSearch() {
+    	return bundle.getString("DEVICE_POINT_TO_POINT_SEARCH");
+    }
+    
+    public String getStartIp() {
+    	return bundle.getString("START_IP");
+    }
+    
+    public String getEndIp() {
+    	return bundle.getString("END_IP");
+    }
+    
+    public String getControlScope() {
+    	return bundle.getString("THE_IP_CONTROL_SCOPE");
+    }
+    
+    public String getDeviceType() {
+    	return bundle.getString("DEVICE_TYPE");
+    }
+    
+    public String getDeviceMac() {
+    	return bundle.getString("MAC");
+    }
+    
+    public String getDeviceSn() {
+    	return bundle.getString("SN");
+    }
+    
+    public String getDeviceInitState() {
+    	return bundle.getString("DEVICE_INIT_STATE");
+    }
+    
+    public String getInitPasswd() {
+    	return bundle.getString("INIT_PASSWD");
+    }
+    
+    public String[] getDeviceTableName() {
+    	String[] name = {getIndex(),
+    					 getDeviceInitState(),
+    					 getIpVersion(),
+    					 getDeviceIp(),
+    					 getPort(),
+    					 getSubMask(),
+    					 getGetway(),
+    				     getDeviceMac(),				 
+    					 getDeviceType(),
+    					 getDetailType(),
+    					 getHttpPort()};
+    	
+    	return name; 
+    }
+    
+    public String getIpVersion() {
+    	return bundle.getString("IP_VERSION");
+    }
+    
+    public String getSubMask() {
+    	return bundle.getString("SUB_MASK");
+    }
+    
+    public String getGetway() {
+    	return bundle.getString("GETWAY");
+    }
+    
+    public String getDetailType() {
+    	return bundle.getString("DETAIL_TYPE");
+    }
+    
+    public String getHttpPort() {
+    	return bundle.getString("HTTP_PORT");
+    }
+    
+    public String getLocalIp() {
+    	return bundle.getString("LOCAL_IP");
+    }
+    
+    public String getInitialized() {
+    	return bundle.getString("INITIALIZED");
+    }
+    
+    public String getNotInitialized() {
+    	return bundle.getString("NOT_INITIALIZED");
+    }
+    
+    public String getOldDevice() {
+    	return bundle.getString("OLD_DEVICE");
+    }
+    
+    public String getNotSupportInitialization() {
+    	return bundle.getString("DONOT_SUPPORT_INITIALIZATION");
+    }
+    
+    public String getPhone() {
+    	return bundle.getString("PHONE");
+    }
+    
+    public String getMail() {
+    	return bundle.getString("MAIL");
+    }
+    
+    public String getInputPhone() {
+    	return bundle.getString("PLEASE_INPUT_PHONE");
+    }
+    
+    public String getInputMail() {
+    	return bundle.getString("PLEASE_INPUT_MAIL");
+    }
+    
+    public String getConfirmPassword() {
+    	return bundle.getString("CONFIRM_PASSWORD");
+    }
+    
+    public String getInconsistent() {
+    	return bundle.getString("INCONSISTENT");
+    }
+    
+    public String getCheckIp() {
+    	return bundle.getString("PLEASE_CHECK_IP");
+    }
+    
+    // 0-鑰佽澶囷紝娌℃湁鍒濆鍖栧姛鑳� 1-鏈垵濮嬪寲璐﹀彿 2-宸插垵濮嬪寲璐︽埛
+    public String getInitStateInfo(int initStatus) {
+    	String initStateInfo = "";
+    	switch(initStatus) {
+    		case 0:
+    			initStateInfo = getInitialized();
+    			break;
+    		case 1:
+    			initStateInfo = getNotInitialized();
+    			break;
+    		case 2:
+    			initStateInfo = getInitialized();
+    			break;
+    	}
+    	return initStateInfo;
+    }
+    
+    public String  getAlarmListen() {
+    	return bundle.getString("ALARM_LISTEN");
+    }
+    
+    public String  getStartListen() {
+    	return bundle.getString("START_LISTEN");
+    }
+    
+    public String  getStopListen() {
+    	return bundle.getString("STOP_LISTEN");
+    }
+    public String getStopListenFailed(){
+		return bundle.getString("STOP_LISTEN_FAILED");
+	}
+    public String  getShowAlarmEvent() {
+    	return bundle.getString("SHOW_ALARM_EVENT");
+    }
+    
+    public String  getAlarmMessage() {
+    	return bundle.getString("ALARM_MESSAGE");
+    }
+    
+    public String getExternalAlarm() {
+    	return bundle.getString("EXTERNAL_ALARM");
+    }
+    
+    public String getMotionAlarm() {
+    	return bundle.getString("MOTION_ALARM");
+    }
+    
+    public String getVideoLostAlarm() {
+    	return bundle.getString("VIDEOLOST_ALARM");
+    }
+    
+    public String getShelterAlarm() {
+    	return bundle.getString("SHELTER_ALARM");
+    }
+    
+    public String getDiskFullAlarm() {
+    	return bundle.getString("DISKFULL_ALARM");
+    }
+    
+    public String getDiskErrorAlarm() {
+    	return bundle.getString("DISKERROR_ALARM");
+    }
+    
+    public String getAlarmListenFailed() {
+    	return bundle.getString("ALARM_LISTEN_FAILED");
+    }
+    
+    public String getStart() {
+    	return bundle.getString("START");
+    }
+    
+    public String getStop() {
+    	return bundle.getString("STOP");
+    }
+    
+    public String getDeviceControl() {
+    	return bundle.getString("DEVICE_CONTROL");
+    }
+    
+    public String getDeviceReboot() {
+    	return bundle.getString("DEVICE_REBOOT");
+    }
+    
+    public String getSyncTime() {
+    	return bundle.getString("SYNCHRONIZE_TIME");
+    }
+    
+    public String getCurrentTime() {
+    	return bundle.getString("CURRENT_TIME");
+    }
+    
+    public String getReboot() {
+    	return bundle.getString("REBOOT");
+    }
+    
+    public String getRebootTips() {
+    	return bundle.getString("REBOOT_TIPS");
+    }
+    
+    public String getGetTime() {
+    	return bundle.getString("GET_TIME");
+    }
+    
+    public String getSetTime() {
+    	return bundle.getString("SET_TIME");
+    }
+    
+    public String getOperateSuccess() {
+    	return bundle.getString("OPERATE_SUCCESS");
+    }
+
+    public String getFaceRecognition() {
+    	return bundle.getString("FACERECOGNITION");
+    }
+    
+    public String[] getGroupTable() {
+    	String[] faceTable = {getFaceGroupId(),
+    						  getFaceGroupName(),
+				    		  bundle.getString("PERSON_COUNT")};
+    	return faceTable;
+    }
+    
+    public String getFaceGroupId() {
+    	return bundle.getString("FACE_GROUP_ID");
+    }
+    
+    public String getFaceGroupName() {
+    	return bundle.getString("FACE_GROUP_NAME");
+    }
+    
+    public String getGroupOperate() {
+    	return bundle.getString("GROUP_OPERATE");
+    }
+    
+    public String getPersonOperate() {
+    	return bundle.getString("PERSON_OPERATE");
+    }
+    
+    public String getGlobalPicture() {
+    	return bundle.getString("GLOBAL_PICTURE");
+    }
+    
+    public String getPersonPicture() {
+    	return bundle.getString("PERSON_PICTURE");
+    }
+    
+    public String getCandidatePicture() {
+    	return bundle.getString("CANDIDATE_PICTURE");
+    }
+    
+    public String getTime() {
+    	return bundle.getString("TIME");
+    }
+    
+    public String getSex() {
+    	return bundle.getString("SEX");
+    }
+    
+    public String getAge() {
+    	return bundle.getString("AGE");
+    }
+ 
+    
+    public String getColor() {
+    	return bundle.getString("COLOR");
+    }
+    
+    public String getEye() {
+    	return bundle.getString("EYE");
+    }
+    
+    public String getMouth() {
+    	return bundle.getString("MOUTH");
+    }
+    
+    public String getMask() {
+    	return bundle.getString("MASK");
+    }
+    
+    public String getBeard() {
+    	return bundle.getString("BEARD");
+    }
+    
+    public String getName() {
+    	return bundle.getString("NAME");
+    }
+    
+    public String getBirthday() {
+    	return bundle.getString("BIRTHDAY");
+    }
+    
+    public String getIdNo() {
+    	return bundle.getString("ID_NO");
+    }
+    
+    public String getIdType() {
+    	return bundle.getString("ID_TYPE");
+    }
+    
+    public String getSimilarity() {
+    	return bundle.getString("SIMILARITY");
+    }
+    
+    public String getFaceDetectEvent() {
+    	return bundle.getString("FACE_DETECT_EVENT");
+    }
+    
+    public String getFaceRecognitionEvent() {
+    	return bundle.getString("FACE_RECOGNITION_EVENT");
+    }
+    
+    public String getUid() {
+    	return bundle.getString("UID");
+    }
+    
+    public String getGlasses() {
+    	return bundle.getString("GLASSES");
+    }
+    
+    public String getPicturePath() {
+    	return bundle.getString("PICTURE_PATH");
+    }
+    
+    public String getFaceLibraryID() {
+    	return bundle.getString("FACE_LIBRARY_ID");
+    }
+    
+    public String getFaceLibraryName() {
+    	return bundle.getString("FACE_LIBRARY_NAME");
+    }
+    
+    public String[] getPersonTable() {
+    	String[] personTable = {getUid(), getName(), getSex(), getBirthday(), getIdType(), getIdNo()};
+    	return personTable;
+    }
+    
+    public String[] getDispositionTable() {
+    	String[] dispositionTable = {getChannel(), getSimilarity()};
+    	return dispositionTable;
+    }
+    
+    public String getUnKnow() {
+    	return bundle.getString("UNKNOW");
+    }
+    
+    public String getMale() {
+    	return bundle.getString("MALE");
+    }
+    
+    public String getFemale() {
+    	return bundle.getString("FEMALE");
+    }
+    
+    public String[] getSexStringsFind() {
+    	String[] faceSexStr = {getUnLimited(), getMale(), getFemale()}; 	
+    	return faceSexStr;
+    }
+    
+    public String[] getIdStringsFind() {
+    	String[] idStr = {getUnLimited(), getIdCard(), getPassport(),};
+    	return idStr;
+    }
+    
+    public String[] getSexStrings() {
+    	String[] faceSexStr = {getUnKnow(), getMale(), getFemale()}; 	
+    	return faceSexStr;
+    }
+    
+    public String[] getIdStrings() {
+    	String[] idStr = {getUnKnow(), getIdCard(), getPassport(),};
+    	return idStr;
+    }
+    
+    public String getIdCard() {
+    	return bundle.getString("ID_CARD");
+    }
+    
+    public String getPassport() {
+    	return bundle.getString("PASSPORT");
+    }
+    
+    public String getOfficeCard() {
+    	return bundle.getString("OFFICE_CARD");
+    }
+    
+    public String getIdType(int idType) {
+    	String str = "";
+    	switch(idType) {
+	    	case 0:
+	    		str = getUnKnow();
+	    		break;
+	    	case 1:
+	    		str = getIdCard();
+	    		break;
+	    	case 2:
+	    		str =  getPassport();
+	    		break;
+	    	case 3:
+	    		str =  getOfficeCard();
+	    		break;
+			default :
+				str = getUnKnow();
+				break;
+		}
+		return str;
+    }
+    
+    public String getSex(int sex) {
+    	String str = ""; 	
+    	switch(sex) {
+	    	case 0:
+	    		str = getUnKnow();
+	    		break;
+	    	case 1:
+	    		str = getMale();
+	    		break;
+	    	case 2:
+	    		str = getFemale();
+	    		break;
+    		default :
+    			str = getUnKnow();
+    			break;
+    	}
+    	return str;
+    }
+    
+    public String getUnLimited() {
+    	return bundle.getString("UNLIMITED");
+    }
+    
+    public String getUnidentified() {
+    	return bundle.getString("UNIDENTIFIED");
+    }
+    
+    public String getHaveBeard() {
+    	return bundle.getString("HAVE_BEARD");
+    }
+    
+    public String getNoBeard() {
+    	return bundle.getString("NO_BEARD");
+    }
+    
+	public String getBeardState(int beard) {
+		String str = "";	
+		switch (beard) {
+			case 0:
+				str = getUnKnow();
+				break;
+			case 1:
+				str = getUnidentified();	
+					break;
+			case 2:
+				str = getNoBeard();	
+				break;
+			case 3:
+				str = getHaveBeard();	
+				break;
+			default:
+				str = getUnKnow();
+    			break;
+		}	
+		return str;
+	}
+	
+	public String getOpenMouth() {
+		return bundle.getString("OPEN_MOUTH");
+	}
+	
+	public String getCloseMouth() {
+		return bundle.getString("CLOSE_MOUTH");
+	}
+	
+	public String getMouthState(int mouth) {
+		String str = "";	
+		switch (mouth) {
+			case 0:
+				str = getUnKnow();
+				break;
+			case 1:
+				str = getUnidentified();
+					break;
+			case 2:
+				str = getCloseMouth();	
+				break;
+			case 3:
+				str = getOpenMouth();	
+				break;
+			default:
+				str = getUnKnow();
+				break;
+		}	
+		return str;
+	}
+	
+	public String getYellowColor() {
+		return bundle.getString("YELLOW_COLOR");
+	}
+	
+	public String getBlackColor() {
+		return bundle.getString("BLACK_COLOR");
+	}
+	
+	public String getWhiteColor() {
+		return bundle.getString("WHITE_COLOR");
+	}
+
+	public String getColor(int color) {
+		String str = "";	
+		switch (color) {
+			case 0:
+				str = getUnKnow();
+				break;
+			case 1:
+				str = getUnidentified();	
+					break;
+			case 2:
+				str = getYellowColor();
+				break;
+			case 3:
+				str = getBlackColor();
+				break;
+			case 4:
+				str = getWhiteColor();
+				break;
+			default:
+				str = getUnKnow();
+				break;
+		}	
+		return str;
+	}
+	
+	public String getOpenEye() {
+		return bundle.getString("OPEN_EYE");
+	}
+	
+	public String getCloseEye() {
+		return bundle.getString("CLOSE_EYE");
+	}
+	
+	public String getEyeState(int eye) {
+		String str = getUnidentified();	
+		switch (eye) {
+			case 0:
+				str = getUnKnow();
+				break;
+			case 1:
+				str = getUnidentified();	
+					break;
+			case 2:
+				str = getCloseEye();	
+				break;
+			case 3:
+				str = getOpenEye();	
+				break;
+			default:
+				str = getUnKnow();
+				break;
+		}	
+		return str;
+	}
+	
+	public String getSmile() {
+		return bundle.getString("SMILE");
+	}
+	
+	public String getAnger() {
+		return bundle.getString("ANGER");
+	}
+	
+	public String getSadness() {
+		return bundle.getString("SADNESS");
+	}
+	
+	public String getDisgust() {
+		return bundle.getString("DISGUST");
+	}
+	
+	public String getFear() {
+		return bundle.getString("FEAR");
+	}
+	
+	public String getSurprise() {
+		return bundle.getString("SURPRISE");
+	}
+	
+	public String getNeutral() {
+		return bundle.getString("NEUTRAL");
+	}
+	
+	public String getLaugh() {
+		return bundle.getString("LAUGH");
+	}
+	
+	public String getFaceFeature(int type) {
+		String str = "";
+		switch (type) {
+			case 0:
+				str = getUnKnow();
+				break;
+			case 1:
+				str = getWearGlasses();
+				break;
+			case 2:
+				str = getSmile();
+				break;
+			case 3:
+				str = getAnger();
+				break;
+			case 4:
+				str = getSadness();
+				break;
+			case 5:
+				str = getDisgust();
+				break;
+			case 6:
+				str = getFear();
+				break;
+			case 7:
+				str = getSurprise();
+				break;
+			case 8:
+				str = getNeutral();
+				break;
+			case 9:
+				str = getLaugh();
+				break;
+			default:
+				str = getUnKnow();
+				break;
+		}
+		return str;
+	}
+	
+	public String getWearMask() {
+		return bundle.getString("WEAR_MASK");
+	}
+	
+	public String geNoMask() {
+		return bundle.getString("NO_MASK");
+	}
+	
+	public String getMaskState(int type) {
+		String maskStateStr = "";
+		switch (type) {
+			case 0:
+				maskStateStr = getUnKnow();
+				break;
+			case 1:
+				maskStateStr = getUnidentified();
+				break;
+			case 2:
+				maskStateStr = geNoMask();
+				break;
+			case 3:
+				maskStateStr = getWearMask();
+				break;
+			default:
+				maskStateStr = getUnKnow();
+				break;
+		}
+		return maskStateStr;
+	}
+	
+	public String getWearGlasses() {
+		return bundle.getString("WEAR_GLASSES");
+	}
+	
+	public String getNoGlasses() {
+		return bundle.getString("NO_GLASSES");
+	}
+	
+	public String getGlasses(int byGlasses) {
+		String glassesStr = "";
+		switch (byGlasses) {
+			case 0:
+				glassesStr = getUnKnow();
+				break;
+			case 1:
+				glassesStr = getNoGlasses();
+				break;
+			case 2:
+				glassesStr = getWearGlasses();
+				break;
+			default:
+				break;
+		}
+		return glassesStr;
+	}
+	
+	public String getAdd() {
+		return bundle.getString("ADD");
+	}
+	
+	public String getModify() {
+		return bundle.getString("MODIFY");
+	}
+	
+	public String getSelectData() {
+		return bundle.getString("SELECT_DATA");
+	}
+	
+	public String getDelete() {
+		return bundle.getString("DELETE");
+	}
+	
+	public String getFresh() {
+		return bundle.getString("FRESH");
+	}
+	
+	public String getAddGroup() {
+		return bundle.getString("ADD_GROUP");
+	}
+	
+	public String getModifyGroup() {
+		return bundle.getString("MODIFY_GROUP");
+	}
+	
+	public String getDelGroup() {
+		return bundle.getString("DEL_GROUP");
+	}
+	
+	public String getDisposition() {
+		return bundle.getString("DISPOSITION");
+	}
+	
+	public String getDelDisposition() {
+		return bundle.getString("DEL_DISPOSITION");
+	}
+	
+	public String getSimilarityRange() {
+		return bundle.getString("SIMILARITY_RANGE");
+	}
+	
+	public String getFindCondition() {
+		return bundle.getString("FIND_CONDITION");
+	}
+	
+	public String getFindPerson() {
+		return bundle.getString("FIND_PERSON");
+	}
+	
+	public String getAddPerson() {
+		return bundle.getString("ADD_PERSON");
+	}
+	
+	public String getModifyPerson() {
+		return bundle.getString("MODIFY_PERSON");
+	}
+	
+	public String getDelPerson() {
+		return bundle.getString("DEL_PERSON");
+	}
+	
+	public String getPreviousPage() {
+		return bundle.getString("PREVIOUSPAGE");
+	}
+	
+	public String getLastPage() {
+		return bundle.getString("LASTPAGE");
+	}
+	
+	public String getSelectPicture() {
+		return bundle.getString("SELECT_PICTURE");
+	}
+	
+	public String getSearchByPic() {
+		return bundle.getString("SEARCH_BY_PIC");
+	}
+	
+	public String getDownloadQueryPicture() {
+		return bundle.getString("DOWNLOAD_QUERY_PICTURE");
+	}
+	
+	public String getFaceLibrary() {
+		return bundle.getString("FACE_LIBRARY");
+	}
+	
+	public String getChooseFacePic() {
+		return bundle.getString("CHOOSE_FACE_PIC");
+	}
+	
+	public String getHistoryLibrary() {
+		return bundle.getString("HISTORY_LIBRARY");
+	}
+	
+	public String getEventType() {
+		return bundle.getString("EVENT_TYPE");
+	}
+	
+	public String getStranger() {
+		return bundle.getString("STRANGER");
+	}
+	
+	public String getInputGroupName() {
+		return bundle.getString("PLEASE_INPUT_GROUPNAME");
+	}
+	
+	public String getSelectGroup() {
+		return bundle.getString("PLEASE_SELECT_GROUP");
+	}
+	
+	public String getSelectPerson() {
+		return bundle.getString("PLEASE_SELECT_PERSON");
+	}
+	
+	public String getAddDispositionInfo() {
+		return bundle.getString("PLEASE_ADD_DISPOSITION_INFO");
+	}
+	
+	public String getSelectDelDispositionInfo() {
+		return bundle.getString("PLEASE_SELECT_DEL_DISPOSITION_INFO");
+	}
+	
+	public String getPagesNumber() {
+		return bundle.getString("PAGES_NUMBER");
+	}
+	
+	public String getAutoRegister() {
+		return bundle.getString("AUTOREGISTER");
+	}
+	
+	public String getAutoRegisterListen() {
+		return bundle.getString("AUTOREGISTER_LISTEN");
+	}
+	
+	public String getDeviceConfig() {
+		return bundle.getString("DEVICE_CONFIG");
+	}
+	
+	public String getDeviceList() {
+		return bundle.getString("DEVICE_LIST");
+	}
+	
+	public String getDeviceManager() {
+		return bundle.getString("DEVICE_MANAGER");
+	}
+	
+	public String getAddDevice() {
+		return bundle.getString("ADD_DEVICE");
+	}
+	
+	public String getModifyDevice() {
+		return bundle.getString("MODIFY_DEVICE");
+	}
+	
+	public String getDeleteDevice() {
+		return bundle.getString("DELETE_DEVICE");
+	}
+	
+	public String getClearDevice() {
+		return bundle.getString("CLEAR_DEVICE");
+	}
+	
+	public String getImportDevice() {
+		return bundle.getString("IMPORT_DEVICE");
+	}
+	
+	public String getExportDevice() {
+		return bundle.getString("EXPORT_DEVICE");
+	}
+	
+	public String getFunctionOperate() {
+		return bundle.getString("FUNCTION") + bundle.getString("OPERATE");
+	}
+	
+	public String getDeviceID() {
+		return bundle.getString("DEVICE_ID");
+	}
+	
+	public String getEnable() {
+		return bundle.getString("ENABLE");
+	}
+	
+	public String getRegisterAddress() {
+		return bundle.getString("REGISTER_ADDRESS");
+	}
+	
+	public String getRegisterPort() {
+		return bundle.getString("REGISTER_PORT");
+	}
+	
+	public String getGet() {
+		return bundle.getString("GET");
+	}
+	
+	public String getSet() {
+		return bundle.getString("SET");
+	}
+	
+	public String getAlreadyExisted() {
+		return bundle.getString("ALREADY_EXISTED");
+	}
+	
+	public String getWhetherNoToCover() {
+		return bundle.getString("ALREADY_EXISTED_WHETHER_OR_NOT_TO_COVER");
+	}
+	
+	public String getFileOpened(){
+		return bundle.getString("FILE_OPEN_PLEASE_CLOSE_FILE");
+	}
+	
+	public String getImportCompletion() {
+		return bundle.getString("IMPORT_COMPLETION");
+	}
+	
+	public String getExportCompletion() {
+		return bundle.getString("EXPORT_COMPLETION");
+	}
+	
+	public String getFileNotExist() {
+		return bundle.getString("FILE_NOT_EXIST");
+	}
+	
+	public String getRecord() {
+		return bundle.getString("RECORD");
+	}
+	
+	public String getInput() {
+		return bundle.getString("PLEASE_INPUT");
+	}
+	
+	public String getMaximumSupport() {
+		return bundle.getString("MAX_SUPPORT_100");
+	}
+	
+	public String getDeviceLogined() {
+		return bundle.getString("DEVICE_LOGIN");
+	}
+	
+	public String getAttendance() {
+		return bundle.getString("ATTENDANCE");
+	}
+	
+	public String getFingerPrintOperate() {
+		return bundle.getString("FINGERPRINT_OPERATE");
+	}
+	
+	public String getUserOperate() {
+		return bundle.getString("USER_OPERATE");
+	}
+	
+	public String getOperateByUserId() {
+		return bundle.getString("OPERATE_BY_USER_ID");
+	}
+	
+	public String getOperateByFingerPrintId() {
+		return bundle.getString("OPERATE_BY_FINGERPRINT_ID");
+	}
+	
+	public String getSearch() {
+		return bundle.getString("SEARCH");
+	}
+	
+	public String getQueryCondition() {
+		return bundle.getString("QUERY_CONDITION");
+	}
+	
+	public String getFingerPrintId() {
+		return bundle.getString("FINGERPRINT_ID");
+	}
+	
+	public String getSearchFingerPrint() {
+		return bundle.getString("SEARCH_FINGERPRINT");
+	}
+	
+	public String getAddFingerPrint() {
+		return bundle.getString("ADD_FINGERPRINT");
+	}
+	
+	public String getDeleteFingerPrint() {
+		return bundle.getString("DELETE_FINGERPRINT");
+	}
+	
+	public String getSubscribe() {
+		return bundle.getString("SUBSCRIBE");
+	}
+	
+	public String getUnSubscribe() {
+		return bundle.getString("UNSUBSCRIBE");
+	}
+	
+	public String getUserList() {
+		return bundle.getString("USER_LIST");
+	}
+	
+	public String getNextPage() {
+		return bundle.getString("NEXT_PAGE");
+	}
+	
+	public String getUserInfo() {
+		return bundle.getString("USER_INFO");
+	}
+	
+	public String getDoorOpenMethod() {
+		return bundle.getString("DOOROPEN_METHOD");
+	}
+	
+	public String getFingerPrint() {
+		return bundle.getString("FINGERPRINT");
+	}
+	
+	public String getFingerPrintInfo() {
+		return bundle.getString("FINGERPRINT_INFO");
+	}
+	
+	public String getFingerPrintData() {
+		return bundle.getString("FINGERPRINT_DATA");
+	}
+	
+	public String getCard() {
+		return bundle.getString("CARD");
+	}
+	
+	public String getDeleteFingerPrintPrompt() {
+		return bundle.getString("DELETE_FINGERPRINT_PROMPT");
+	}
+	
+	public String getSubscribeFailed() {
+		return bundle.getString("SUBSCRIBE_FAILED");
+	}
+	
+	public String getFingerPrintIdIllegal() {
+		return bundle.getString("FINGERPRINT_ID_ILLEGAL");
+	}
+	
+	public String getcFingerPrintCollection() {
+		return bundle.getString("FINGERPRINT_COLLECTION");
+	}
+	
+	public String getStartCollection() {
+		return bundle.getString("START_COLLECTION");
+	}
+	
+	public String getStopCollection() {
+		return bundle.getString("STOP_COLLECTION");
+	}
+	
+	public String getInCollection() {
+		return bundle.getString("IN_THE_COLLECTION");
+	}
+	
+	public String getcCompleteCollection() {
+		return bundle.getString("COLLECTION_COMPLETED");
+	}
+	
+	public String getCollectionFailed() {
+		return bundle.getString("COLLECTION_FAILED");
+	}
+	
+	public String getFingerPrintIdNotExist() {
+		return bundle.getString("FINGERPRINT_ID_NOT_EXIST");
+	}
+	
+	public String getUserIdExceedLength() {
+		return bundle.getString("USER_ID_EXCEED_LENGTH");
+	}
+	
+	public String getUserNameExceedLength() {
+		return bundle.getString("USER_NAME_EXCEED_LENGTH");
+	}
+	
+	public String getCardNoExceedLength() {
+		return bundle.getString("CARD_NO_EXCEED_LENGTH");
+	}
+	
+	public String getCardNameExceedLength() {
+		return bundle.getString("CARD_NAME_EXCEED_LENGTH");
+	}
+	
+	public String getCardPasswdExceedLength() {
+		return bundle.getString("CARD_PASSWD_EXCEED_LENGTH");
+	}
+	
+	public String getGate() {
+		return bundle.getString("GATE");
+	}
+	
+	public String getCardOperate() {
+		return bundle.getString("CARD_OPERATE");
+	}
+	
+	public String getCardInfo() {
+		return bundle.getString("CARD_INFO");
+	}
+	
+	public String getCardManager() {
+		return bundle.getString("CARD_MANAGER");
+	}
+	
+	public String getClear() {
+		return bundle.getString("CLEAR");
+	}
+	
+	public String getOpenStatus() {
+		return bundle.getString("OPEN_STATUS");
+	}
+	
+	public String getOpenMethod() {
+		return bundle.getString("OPEN_METHOD");
+	}
+	
+	public String getCardName() {
+		return bundle.getString("CARD_NAME");
+	}
+	
+	public String getCardStatus() {
+		return bundle.getString("CARD_STATUS");
+	}
+	
+	public String getCardPassword() {
+		return bundle.getString("CARD_PASSWORD");
+	}
+	
+	public String getCardType() {
+		return bundle.getString("CARD_TYPE");
+	}
+	
+	public String getCardNum() {
+		return bundle.getString("CARD_NUM");
+	}
+	
+	public String getUseTimes() {
+		return bundle.getString("USE_TIMES");
+	}
+	
+	public String getIsFirstEnter() {
+		return bundle.getString("IS_FIRST_ENTER");
+	}
+	
+	public String getIsValid() {
+		return bundle.getString("IS_VALID");
+	}
+	
+	public String getValidPeriod() {
+		return bundle.getString("VALID_PERIOD");
+	}
+	
+	public String getValidStartTime() {
+		return bundle.getString("VALID_START_TIME");
+	}
+	
+	public String getValidEndTime() {
+		return bundle.getString("VALID_END_TIME");
+	}
+	
+	public String getRecordNo() {
+		return bundle.getString("RECORD_NO");
+	}
+	
+	public String getFirstEnter() {
+		return bundle.getString("FIRST_ENTER");
+	}
+	
+	public String getNoFirstEnter() {
+		return bundle.getString("NO_FIRST_ENTER");
+	}
+	
+	public String getValid() {
+		return bundle.getString("VALID");
+	}
+	
+	public String getInValid() {
+		return bundle.getString("INVALID");
+	}
+	
+	public String getSelectCard() {
+		return bundle.getString("PLEASE_SELECT_CARD");
+	}
+	
+	public String getInputCardNo() {
+		return bundle.getString("PLEASE_INPUT_CARDNO");
+	}
+	
+	public String getInputUserId() {
+		return bundle.getString("PLEASE_INPUT_USERID");
+	}
+	
+	public String getWantClearAllInfo() {
+		return bundle.getString("WANT_CLEAR_ALL_INFO");
+	}
+	
+	public String getFailedAddCard() {
+		return bundle.getString("ADD_CARD_INDO_FAILED");
+	}
+	
+	public String getSucceedAddCardAndPerson() {
+		return bundle.getString("ADD_CARD_INFO_AND_PERSON_PICTURE_SUCCEED");
+	}
+	
+	public String getSucceedAddCardButFailedAddPerson() {
+		return bundle.getString("ADD_CARD_INFO_SUCCEED_BUT_ADD_PERSON_PICTURE_FAILED");
+	}
+	
+	public String getCardExistedSucceedAddPerson() {
+		return bundle.getString("CARD_EXISTED_ADD_PERSON_PICTURE_SUCCEED");
+	}
+	
+	public String getSucceedModifyCard() {
+		return bundle.getString("MODIFY_CARD_INFO_SUCCEED");
+	}
+	
+	public String getFailedModifyCard() {
+		return bundle.getString("MODIFY_CARD_INFO_FAILED");
+	}
+	
+	public String getSucceedModifyCardAndPerson() {
+		return bundle.getString("MODIFY_CARD_INFO_AND_PERSON_PICTURE_SUCCEED");
+	}
+	
+	public String getSucceedModifyCardButFailedModifyPerson() {
+		return bundle.getString("MODIFY_CARD_INFO_SUCCEED_BUT_MODIFY_PERSON_PICTURE_FAILED");
+	}
+	
+	public String[] getCardTable() {
+		return new String[] {getIndex(),
+							 getCardNo(),
+							 getCardName(),
+							 getRecordNo(),
+							 getUserId(),			
+							 getCardPassword(), 
+							 getCardStatus(),
+							 getCardType(),
+							 getUseTimes(),
+							 getIsFirstEnter(),
+							 getIsValid(),
+							 getValidStartTime(),
+							 getValidEndTime()};
+	}
+	
+	/*
+	 * 鐢ㄤ簬鍒楄〃鏄剧ず
+	 */
+	public String getCardStatus(int status) {
+		String statusString = "";
+		switch(status) {
+			case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_UNKNOWN:   // 鏈煡
+				statusString = bundle.getString("STATE_UNKNOWN");
+				break;
+			case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_NORMAL:   // 姝e父
+				statusString = bundle.getString("STATE_NORMAL");
+				break;
+			case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_LOSE:   // 鎸傚け
+				statusString = bundle.getString("STATE_LOSE");
+				break;
+			case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_LOGOFF:   // 娉ㄩ攢
+				statusString = bundle.getString("STATE_LOGOFF");
+				break;
+			case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_FREEZE:   // 鍐荤粨
+				statusString = bundle.getString("STATE_FREEZE");
+				break;
+			case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_ARREARAGE:   // 娆犺垂
+				statusString = bundle.getString("STATE_ARREARS"); 
+				break;
+			case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_OVERDUE:  // 閫炬湡
+				statusString = bundle.getString("STATE_OVERDUE");
+				break;
+			case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_PREARREARAGE:  // 棰勬瑺璐�
+				statusString = bundle.getString("STATE_PREARREARS");
+				break;
+			default:
+				statusString = bundle.getString("STATE_UNKNOWN");
+				break;
+		}
+		
+		return statusString;					
+	}
+	
+	/*
+	 * 鏍规嵁鎺т欢鐨勭储寮曪紝鑾峰彇瀵瑰簲鐨勫崱鐘舵�佺殑Int鍊�, 鐢ㄤ簬娣诲姞 鍜� 淇敼鍗′俊鎭�
+	 */
+	public int getCardStatusInt(int index) {
+		int status = 0;
+		switch(index) {
+			case 1:   // 鏈煡
+				status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_UNKNOWN;
+				break;
+			case 0:   // 姝e父
+				status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_NORMAL;
+				break;
+			case 2:   // 鎸傚け
+				status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_LOSE;
+				break;
+			case 3:   // 娉ㄩ攢
+				status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_LOGOFF;
+				break;
+			case 4:   // 鍐荤粨
+				status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_FREEZE;
+				break;
+			case 5:   // 娆犺垂
+				status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_ARREARAGE;
+				break;
+			case 6:  // 閫炬湡
+				status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_OVERDUE;
+				break;
+			case 7:  // 棰勬瑺璐�
+				status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_PREARREARAGE;
+				break;
+			default:
+				status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_UNKNOWN;
+				break;		
+		}
+		
+		return status;					
+	}
+	
+	/*
+	 * 鏍规嵁瀛楃涓诧紝鑾峰彇鎺т欢瀵瑰簲鐨勭储寮�
+	 */
+	public int getCardStatusChomBoxIndex(String status) {
+		int index = 0;
+		
+		if(status.equals(bundle.getString("STATE_UNKNOWN"))) {
+			index = 1;
+		} else if(status.equals(bundle.getString("STATE_NORMAL"))){
+			index = 0;
+		} else if(status.equals(bundle.getString("STATE_LOSE"))) {
+			index = 2;
+		} else if(status.equals(bundle.getString("STATE_LOGOFF"))) {
+			index = 3;
+		} else if(status.equals(bundle.getString("STATE_FREEZE"))) {
+			index = 4;
+		} else if(status.equals(bundle.getString("STATE_ARREARS"))) {
+			index = 5;
+		} else if(status.equals(bundle.getString("STATE_OVERDUE"))) {
+			index = 6;
+		} else if(status.equals(bundle.getString("STATE_PREARREARS"))) {
+			index = 7;
+		} 
+		
+		return index;
+	}
+	
+	public String[] getCardStatusList() {
+		return new String[]{
+							bundle.getString("STATE_NORMAL"),
+							bundle.getString("STATE_UNKNOWN"), 
+							bundle.getString("STATE_LOSE"),
+							bundle.getString("STATE_LOGOFF"),
+							bundle.getString("STATE_FREEZE"),
+							bundle.getString("STATE_ARREARS"),
+							bundle.getString("STATE_OVERDUE"),
+							bundle.getString("STATE_PREARREARS")};
+	}
+	
+	/*
+	 * 鐢ㄤ簬鍒楄〃鏄剧ず
+	 */
+	public String getCardType(int type) {
+		String cardTypeString = "";
+		
+		switch(type) {
+			case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_UNKNOWN:  // 鏈煡
+				cardTypeString = bundle.getString("CARD_UNKNOW");
+				break;
+			case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_GENERAL:  // 涓�鑸崱
+				cardTypeString = bundle.getString("CARD_GENERAL");
+				break;
+			case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_VIP:      // 
+				cardTypeString = bundle.getString("CARD_VIP");
+				break;
+			case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_GUEST:    // 鏉ュ鍗�
+				cardTypeString = bundle.getString("CARD_GUEST");
+				break;
+			case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_PATROL:   // 宸¢�诲崱
+				cardTypeString = bundle.getString("CARD_PATROL");
+				break;
+			case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_BLACKLIST: // 绂佹鍚嶅崟鍗�
+				cardTypeString = bundle.getString("CARD_BACKLIST");
+				break;
+			case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_CORCE:     // 鑳佽揩鍗�
+				cardTypeString = bundle.getString("CARD_COERCE");
+				break;
+			case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_POLLING:   // 宸℃鍗�
+				cardTypeString = bundle.getString("CARD_POLLING");
+				break;
+			case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_MOTHERCARD: // 姣嶅崱
+				cardTypeString = bundle.getString("CARD_MOTHERCARD");
+				break;
+			default:
+				cardTypeString = bundle.getString("CARD_UNKNOW");
+				break;
+		}
+
+		return cardTypeString;
+	}
+	
+	/*
+	 * 鏍规嵁鎺т欢绱㈠紩锛岃幏鍙栧搴旂殑鍗$被鍨婭nt鍊�
+	 */
+	public int getCardTypeInt(int index) {
+		int type = 0;
+		
+		switch(index) {
+			case 1:
+				type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_UNKNOWN;
+				break;
+			case 0:
+				type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_GENERAL;
+				break;
+			case 2:
+				type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_VIP;
+				break;
+			case 3:
+				type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_GUEST;
+				break;
+			case 4:
+				type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_PATROL;
+				break;
+			case 5:
+				type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_BLACKLIST;
+				break;
+			case 6:
+				type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_CORCE;
+				break;
+			case 7:
+				type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_POLLING;
+				break;
+			case 8:
+				type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_MOTHERCARD;
+				break;
+			default:
+				type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_UNKNOWN;
+				break;
+		}
+
+		return type;
+	}
+	
+	/*
+	 * 鏍规嵁瀛楃涓诧紝鑾峰彇鎺т欢鐨勭储寮�
+	 */
+	public int getCardTypeChomBoxIndex(String type) {
+		int index = 0;
+		
+		if(type.equals(bundle.getString("CARD_UNKNOW"))) {
+			index = 1;
+		} else if(type.equals(bundle.getString("CARD_GENERAL"))){
+			index = 0;
+		} else if(type.equals(bundle.getString("CARD_VIP"))) {
+			index = 2;
+		} else if(type.equals(bundle.getString("CARD_GUEST"))) {
+			index = 3;
+		} else if(type.equals(bundle.getString("CARD_PATROL"))) {
+			index = 4;
+		} else if(type.equals(bundle.getString("CARD_BACKLIST"))) {
+			index = 5;
+		} else if(type.equals(bundle.getString("CARD_COERCE"))) {
+			index = 6;
+		} else if(type.equals(bundle.getString("CARD_POLLING"))) {
+			index = 7;
+		} else if(type.equals(bundle.getString("CARD_MOTHERCARD"))) {
+			index = 8;
+		}
+		
+		return index;
+	}
+	
+	public String[] getCardTypeList() {
+		return new String[]{
+							bundle.getString("CARD_GENERAL"),
+							bundle.getString("CARD_UNKNOW"), 
+							bundle.getString("CARD_VIP"),
+							bundle.getString("CARD_GUEST"),
+							bundle.getString("CARD_PATROL"),
+							bundle.getString("CARD_BACKLIST"),
+							bundle.getString("CARD_COERCE"),
+							bundle.getString("CARD_POLLING"),
+							bundle.getString("CARD_MOTHERCARD")};
+	}
+	
+	public String getMaskStatus(int emMaskStatus) {
+		String MaskStatus = "";
+		switch(emMaskStatus) {
+		case EM_MASK_STATE_TYPE.EM_MASK_STATE_UNKNOWN:
+			MaskStatus = bundle.getString("EM_MASK_STATE_UNKNOWN");
+			break;
+		case EM_MASK_STATE_TYPE.EM_MASK_STATE_NODISTI:
+			MaskStatus = bundle.getString("EM_MASK_STATE_NODISTI");
+			break;
+		case EM_MASK_STATE_TYPE.EM_MASK_STATE_NOMASK:
+			MaskStatus = bundle.getString("EM_MASK_STATE_NOMASK");
+			break;
+		case EM_MASK_STATE_TYPE.EM_MASK_STATE_WEAR:
+			MaskStatus = bundle.getString("EM_MASK_STATE_WEAR");
+			break;
+		}
+		return MaskStatus;
+	}
+	
+	public String getOpenMethods(int emOpenMethod) {
+		String openMethods = "";
+		switch(emOpenMethod) {
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_UNKNOWN:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_UNKNOWN");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_ONLY:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PWD_ONLY");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_FIRST:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_FIRST");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_FIRST:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PWD_FIRST");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_REMOTE:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_REMOTE");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_BUTTON:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_BUTTON");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_CARD_FINGERPRINT:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PWD_CARD_FINGERPRINT");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_FINGERPRINT:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PWD_FINGERPRINT");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_FINGERPRINT:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_FINGERPRINT");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PERSONS:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PERSONS");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_KEY:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_KEY");
+				break;			
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_COERCE_PWD:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_COERCE_PWD");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_QRCODE:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_QRCODE");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACE_RECOGNITION:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACE_RECOGNITION");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_AND_IDCARD:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_AND_IDCARD");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_BLUETOOTH:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_BLUETOOTH");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CUSTOM_PASSWORD:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CUSTOM_PASSWORD");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_USERID_AND_PWD:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_USERID_AND_PWD");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACE_AND_PWD:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACE_AND_PWD");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_PWD:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_PWD");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACE_OR_PWD:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACE_OR_PWD");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_PWD:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_PWD");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE_AND_PWD:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE_AND_PWD");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE_AND_PWD:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE_AND_PWD");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_PWD:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_PWD");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_PWD_AND_FACE:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_PWD_AND_FACE");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE_OR_PWD:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE_OR_PWD");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE_OR_PWD:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE_OR_PWD");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE");
+				break;
+			case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_OR_CARD_OR_FACE:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_OR_CARD_OR_FACE");
+				break;
+			default:
+				openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_UNKNOWN");
+				break;
+		}
+		
+		return openMethods;
+	}
+	
+	public String getShowInfo(String tag) {
+		try {
+			return bundle.getString(tag);
+		}catch(Exception e) {
+			return tag;
+		}
+	}
+	
+	public String getThermalCamera() {
+		return getShowInfo("THERMAL_CAMERA");
+	}
+	
+	public String[] getMeterTypeList() {
+		String[] meterTypes = {getShowInfo("SPOT"), getShowInfo("LINE"), getShowInfo("AREA")};
+		
+		return meterTypes;
+	}
+	
+	public String[] getTemperUnitList() {
+		return new String[]{getShowInfo("CENTIGRADE"), getShowInfo("FAHRENHEIT")};
+	}
+	
+	public String[] getPeriodList() {
+		return new String[] {getShowInfo("FIVE_MINUTES"), getShowInfo("TEN_MINUTES"), 
+				getShowInfo("FIFTEEN_MINUTES"), getShowInfo("THIRTY_MINUTES")};
+	}
+	
+	public String[] getTemperStatusList() {
+		return new String[]{getShowInfo("IDLE"), getShowInfo("ACQUIRING")};
+	}
+	
+	public String getSearchingWait() {
+		return bundle.getString("SEARCHING_WAITING");
+	}
+
+	
+
+
+    ///////////// Human Number Statistic ///////////////
+
+    public String getHumanNumberStatistic() {
+        return bundle.getString("HUMAN_NUMBER_STATISTIC_TITLE");
+    }
+
+    public String getHumanNumberStatisticAttach() {
+        return bundle.getString("HUMAN_NUMBER_STATISTIC_CONTROL");
+    }
+
+    public String getHumanNumberStatisticEventTitle() {
+        return bundle.getString("HUMAN_NUMBER_STATISTIC_EVENT_TITLE");
+    }
+
+    public String getHumanNumberStatisticEventChannel() {
+        return bundle.getString("HUMAN_NUMBER_STATISTIC_EVENT_CHANNEL");
+    }
+
+    public String getHumanNumberStatisticEventTime() {
+        return bundle.getString("HUMAN_NUMBER_STATISTIC_EVENT_TIME");
+    }
+
+    public String getHumanNumberStatisticEventHourIn() {
+        return bundle.getString("HUMAN_NUMBER_STATISTIC_EVENT_HOUR_IN");
+    }
+
+    public String getHumanNumberStatisticEventHourOut() {
+        return bundle.getString("HUMAN_NUMBER_STATISTIC_EVENT_HOUR_OUT");
+    }
+
+    public String getHumanNumberStatisticEventTodayIn() {
+        return bundle.getString("HUMAN_NUMBER_STATISTIC_EVENT_TODAY_IN");
+    }
+
+    public String getHumanNumberStatisticEventTodayOut() {
+        return bundle.getString("HUMAN_NUMBER_STATISTIC_EVENT_TODAY_OUT");
+    }
+
+    public String getHumanNumberStatisticEventTotalIn() {
+        return bundle.getString("HUMAN_NUMBER_STATISTIC_EVENT_TOTAL_IN");
+    }
+
+    public String getHumanNumberStatisticEventTotalOut() {
+        return bundle.getString("HUMAN_NUMBER_STATISTIC_EVENT_TOTAL_OUT");
+    }
+
+    public String getHumanNumberStatisticEventClearOSD() {
+        return bundle.getString("HUMAN_NUMBER_STATIC_EVENT_OSD_CLEAR");
+    }
+    public String getVTOAlarmEventRoomNo(){
+		return bundle.getString("VTO_ALARM_EVENT_ROOM_NO");
+	}
+	public String getVTOAlarmEventCardNo(){
+		return bundle.getString("VTO_ALARM_EVENT_CARD_NO");
+	}
+
+	public String getVTOAlarmEventTime(){
+		return bundle.getString("VTO_ALARM_EVENT_TIME");
+	}
+	public String getVTOAlarmEventOpenMethod(){
+		return bundle.getString("VTO_ALARM_EVENT_OPEN_METHOD");
+	}
+	public String getVTOAlarmEventStatus(){
+		return bundle.getString("VTO_ALARM_EVENT_STATUS");
+	}
+	public String getVTORealLoadRoomNO(){
+		return bundle.getString("VTO_REAL_LOAD_ROOM_NO");
+	}
+	public String getVTORealLoadCardNo(){
+		return bundle.getString("VTO_REAL_LOAD_CARD_NO");
+	}
+	public String getVTORealLoadTime(){
+		return bundle.getString("VTO_REAL_LOAD_TIME");
+	}
+	public String getVTORealLoadEventInfo(){
+		return bundle.getString("VTO_REAL_LOAD_EVENT_INFO");
+	}
+	public String getVTOOperateManagerTitle(){
+		return bundle.getString("VTO_OPERATE_MANAGER_TITLE");
+	}
+	public String getInputRoomNo(){
+		return bundle.getString("INPUT_ROOM_NO");
+	}
+	public String getRoomNoExceedLength(){
+		return bundle.getString("ROOM_NO_EXCEED_LENGTH");
+	}
+	public String getVTOOperateManagerRecNo(){
+		return bundle.getString("VTO_OPERATE_MANAGER_REC_NO");
+	}
+	public String getVTOOperateManagerRoomNo(){
+		return bundle.getString("VTO_OPERATE_MANAGER_ROOM_NO");
+	}
+	public String getVTOOperateManagerCardNo(){
+		return bundle.getString("VTO_OPERATE_MANAGER_CARD_NO");
+	}
+	public String getVTOOperateManagerFingerPrintData(){
+		return bundle.getString("VTO_OPERATE_MANAGER_FINGER_PRINT_DATA");
+	}
+	public String getVTOOperateInfoTitle(){
+		return bundle.getString("VTO_OPERATE_INFO_TITLE");
+	}
+	public String getVTOOperateCollectionFingerPrintTitle(){
+		return bundle.getString("VTO_OPERATE_COLLECTION_FINGER_PRINT_TITLE");
+	}
+	public String getDoorOpen(){
+		return bundle.getString("DOOR_OPEN");
+	}
+	public String getDoorClose(){
+		return bundle.getString("DOOR_CLOSE");
+	}
+	public String getEventOperate(){
+		return bundle.getString("EVENT_OPERATE");
+	}
+	public String getStartRealLoad(){
+		return bundle.getString("START_REAL_LOAD_PIC");
+	}
+	public String getStopRealLoad(){
+		return bundle.getString("STOP_REAL_LOAD_PIC");
+	}
+	public String getAlarmEvent(){
+		return bundle.getString("ALARM_EVENT");
+	}
+	public String getRealLoadEvent(){
+		return bundle.getString("REAL_LOAD_EVENT");
+	}
+	public String getCollectionResult(){
+		return bundle.getString("COLLECTION_RESULT");
+	}
+	public String getNeedFingerPrint(){
+		return bundle.getString("NEED_FINGER_PRINT");
+	}
+	public String getFaceInfo(){
+		return bundle.getString("FACE_INFO");
+	}
+	public String getOpen(){
+		return bundle.getString("OPEN");
+	}
+
+///////////////////////////////////鐐归樀灞忚缃�/////////////////////////////////////銆�
+	public static String getmatrixScreen() {
+		// TODO Auto-generated method stub
+		return bundle.getString("MATRIX_SCREEN");
+	}
+	public String getPassingState(){
+		return bundle.getString("PASSING_STATE");
+	}
+	public String getPassingCar(){
+		return bundle.getString("PASSING_CAR");
+	}
+	public String getNoCar(){
+		return bundle.getString("NO_CAR");
+	}
+	public String getInTime(){
+		return bundle.getString("IN_TIME");
+	}
+	public String getOutTime(){
+		return bundle.getString("OUT_TIME");
+	}
+	public String getPlateNumber(){
+		return bundle.getString("PLATE_NUMBER");
+	}
+	public String getCarOwner(){
+		return bundle.getString("CAR_OWNER");
+	}
+	public String getParkingTime(){
+		return bundle.getString("PARKING_TIME");
+	}
+	public String getUserType(){
+		return bundle.getString("USER_TYPE");
+	}
+	public String getMonthlyCardUser(){
+		return bundle.getString("MONTHLY_CARD_USER");
+	}
+	
+	public String getAnnualCardUser(){
+		return bundle.getString("ANNUAL_CARD_USER");
+	}
+	
+	public String getLongTermUser(){
+		return bundle.getString("LONG_TERM_USER");
+	}
+	
+	public String getTemporaryUser(){
+		return bundle.getString("TEMPORARY_USER");
+	}
+	  
+	public String getParkingCharge(){
+		return bundle.getString("PARKING_CHARGE");
+	}
+	
+	public String getDaysDue(){
+		return bundle.getString("DAYS_DUE");
+	}
+	
+	public String getRemainingParkingSpaces(){
+		return bundle.getString("REMAINING_PARKING_SPACES");
+	}
+
+	public String getVehiclesNotAllowedToPass(){
+		return bundle.getString("VEHICLES_NOT_ALLOWED_TO_PASS");
+	}
+	
+	public String getAllowedVehiclesToPass(){
+		return bundle.getString("ALLOWED_VEHICLES_TO_PASS");
+	}
+	
+	public String getSetUp(){
+		return bundle.getString("SET_UP");
+	}
+	
+	public String getSetUpSuccess(){
+		return bundle.getString("SUCCESSFULLY_ISSUED");
+	}
+	
+	public String getSetUpFailed(){
+		return bundle.getString("DELIVERY_FAILED");
+	}
+	
+	public String getCostomUserInfo(){
+		return bundle.getString("CUSTOM_USER_CLASS");
+	}
+	
+	public String getRemarksInfo(){
+		return bundle.getString("REMARKS_INFORMATION");
+	}
+	
+	public String getCostomInfo(){
+		return bundle.getString("CUSTOM_INFORMATION");
+	}
+	public String getVTO() {return bundle.getString("VTO");}
+	public String getSCADA() {return bundle.getString("SCADA");}
+	public String getTrafficAllowList(){return bundle.getString("TRAFFIC_ALLOW_LIST");}
+	public String getModifyCardFaceFailed(){
+		return bundle.getString("MODIFY_CARD_FACE_FAILED");
+	}
+	public String getRemoveCardFaceFailed(){
+		return bundle.getString("REMOVE_CARD_FACE_FAILED");
+	}
+	public String getDownLoadPicture(){
+		return bundle.getString("DOWNLOAD_PICTURE");
+	}
+	
+	public String getEnterPicturePath(){
+		return bundle.getString("ENTER_PICTURE_PATH");
+	}
+	
+	public String getLoading(){
+		return bundle.getString("LOADING");
+	}
+	
+	public String getEndSearch(){
+		return bundle.getString("END_SEARCH");
+	}
+	public String getRemoteOpenDoor(){return bundle.getString("REMOTE_OPEN_DOOR");}
+	public String getQueryCardExistFailed(){return bundle.getString("QUERY_CARD_EXIST_FAILED");}
+	public String getFindCardExist(){return bundle.getString("CARD_EXIST");}
+
+
+	public String getSCADADeviceList(){
+		return bundle.getString("SCADA_DEVICE_LIST");
+	}
+
+	public String getSCADAPointList(){
+		return bundle.getString("SCADA_POINT_LIST");
+	}
+
+	public String getSCADAAlarmAttachInfo(){
+		return bundle.getString("SCADA_ATTACH_ALARM");
+	}
+
+	public String getSCADAAttachInfo(){
+		return bundle.getString("SCADA_ATTACH_INFO");
+	}
+
+	public String getSCADAAttach(){
+		return bundle.getString("SCADA_ATTACH");
+	}
+
+	public String getListBtn(){
+		return bundle.getString("BTN_LIST");
+	}
+
+	public String getAllowlistOperation(){
+		return bundle.getString("ALLOWLIST_OPERATION");
+	}
+
+	public String getSingleUpload(){
+		return bundle.getString("SINGLE_UPLOAD");
+	}
+
+	public String getLicensePlateRun(){return bundle.getString("LICENSE_PLATE_RUN");  }
+
+	public String getFuzzyQuery(){return bundle.getString("FUZZY_QUERY");  }
+
+	public String getDeleteAll(){return bundle.getString("DELETE_ALL");  }
+
+	public String getAuthorization(){return bundle.getString("AUTHORIZATION");  }
+
+	public String getBatchUpload(){return bundle.getString("BATCH_UPLOAD");  }
+
+	public String getBrowse(){return bundle.getString("BROWSE");  }
+
+	public String getUpload(){return bundle.getString("UPLOAD");  }
+
+	public String getQueryInformation(){return bundle.getString("QUERY_INFORMATION");  }
+
+	public String getDialog(){return bundle.getString("DIALOG");  }
+
+	public String getLicensePlateNumber(){return bundle.getString("LICENSE_PLATE_NUMBER");  }
+
+	public String getModifyPanel(){return bundle.getString("MODIFY_PANEL");  }
+
+	public String getSerialNumber(){return bundle.getString("SERIAL_NUMBER");  }
+
+	public String getOpenModel(){return bundle.getString("OPEN_MODEL");  }
+
+	public String getLicensePlateLengthTooLong(){return bundle.getString("LICENSE_PLATE_LENGTH_TOO_LONG");  }
+
+	public String getNameTooLong(){return bundle.getString("NAME_TOO_LONG");  }
+
+	public String getDataNumber(){return bundle.getString("DATA_NUMBER");  }
+
+	public String getUnauthorization(){return bundle.getString("UNAUTHORIZATION");  }
+
+	public String getAddSuccess(){return bundle.getString("ADD_SUCCESS"); }
+
+	public String getAddFail(){return bundle.getString("ADD_FAIL"); }
+
+	public String getDeleteSuccess(){return bundle.getString("DELETE_SUCCESS"); }
+
+	public String getDeleteFail(){return bundle.getString("DELETE_FAIL"); }
+
+	public String getModifySuccess(){return bundle.getString("MODIFY_SUCCESS"); }
+
+	public String getModifyFail(){return bundle.getString("MODIFY_FAIL"); }
+
+	public String getUploadSuccess(){return bundle.getString("UPLOAD_SUCCESS"); }
+	public String getUploadFail(){return bundle.getString("UPLOAD_FAIL"); }
+	public String getUploading(){return bundle.getString("UPLOADING"); }
+	public String getSureUpload(){return bundle.getString("SURE_UPLOAD"); }
+
+
+	public String getEnterQueryData(){return bundle.getString("ENTER_QUERY_DATA"); }
+	
+	public String getScreenNumber(){return bundle.getString("SCREEN_NUMBER");}
+	public String getContain(){return bundle.getString("TEXT_CONTENT");}
+	public String getContainType(){return bundle.getString("TEXT_CONTENT_TYPE");}
+	public String getContainColor(){return bundle.getString("TEXT_CONTENT_COLOR");}
+	public String getScrollType(){return bundle.getString("SCROLL_TYPE");}
+	public String getScrollSpeed(){return bundle.getString("SCROLL_SPEED");}
+	
+	public String getGreen(){return bundle.getString("GREEN");}
+	public String getRed(){return bundle.getString("RED");}
+	public String getYellow(){return bundle.getString("YELLOW");}
+	public String getWhite(){return bundle.getString("WHITE");}
+	
+	public String getOrdinary(){return bundle.getString("ORDINARY");}
+	public String getQRCode(){return bundle.getString("QR_CODE");}
+	public String getLocalTime(){return bundle.getString("LOCAL_TIME");}
+	public String getResource(){return bundle.getString("RESOURCE");}
+	
+	public String getNoRolling(){return bundle.getString("NOT_ROLLING");}
+	public String getScrollLeftAndRight(){return bundle.getString("SCROLL_LEFT_AND_RIGHT");}
+	public String getScrollTopAndDown(){return bundle.getString("SCROLL_UP_AND_DOWN");}
+	public String getNumericString(){return bundle.getString("NUMBER_STRING");}
+	public String getVoiceText(){return bundle.getString("VOICE_TEXT");}
+	public String getIssued(){return bundle.getString("ISSUED");}
+	public String getPrompt(){return bundle.getString("PROMPT");}
+
+	public String getDeviceName(){return bundle.getString("DEVICE_NAME");}
+	public String getPointID(){return bundle.getString("POINT_ID");}
+	public String getPointName(){return bundle.getString("POINT_NAME");}
+	public String getIfValidSignalPoint(){return bundle.getString("IF_VALID_SIGNAL_POINT");}
+	public String getAlarmDescribe(){return bundle.getString("ALARM_DESCRIBE");}
+	public String getAlarmDelay(){return bundle.getString("ALARM_DELAY");}
+	public String getAlarmLevel(){return bundle.getString("ALARM_LEVEL");}
+	public String getAlarmTime(){return bundle.getString("ALARM_TIME");}
+	public String getAlarmType(){return bundle.getString("ALARM_TYPE");}
+	public String getCollectTime(){return bundle.getString("COLLECT_TIME");}
+
+	public String getJing(){return bundle.getString("JING");}
+
+	public String getJin(){return bundle.getString("JIN");}
+	public String getJi(){return bundle.getString("JI");}
+}
+
+
+
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/SavePath.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/SavePath.java
new file mode 100644
index 0000000..7618299
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/SavePath.java
@@ -0,0 +1,76 @@
+package com.ruoyi.device.dhsdk.common;
+
+import com.ruoyi.device.dhsdk.lib.ToolKits;
+
+import java.io.File;
+
+public class SavePath {
+	private SavePath() {}
+	
+	private static class SavePathHolder {
+		private static SavePath instance = new SavePath();
+	}
+	
+	public static SavePath getSavePath() {
+		return SavePathHolder.instance;
+	}
+	
+	String s_captureSavePath = "./Capture/" + ToolKits.getDay() + "/";         // 鎶撴媿鍥剧墖淇濆瓨璺緞
+	String s_imageSavePath = "./Image/" + ToolKits.getDay() + "/";    		    // 鍥剧墖淇濆瓨璺緞
+	String s_recordFileSavePath = "./RecordFile/" + ToolKits.getDay() + "/";   // 褰曞儚淇濆瓨璺緞
+	
+	/*
+	 * 璁剧疆鎶撳浘淇濆瓨璺緞
+	 */
+	public String getSaveCapturePath() {	
+		File path1 = new File("./Capture/");
+        if (!path1.exists()) {
+        	path1.mkdir();
+        }
+        
+	    File path2 = new File(s_captureSavePath);
+	    if (!path2.exists()) {
+	        path2.mkdir();
+	    }
+	    
+	    String strFileName = path2.getAbsolutePath() + "/" + ToolKits.getDate() + ".jpg";
+		
+	    return strFileName;
+	}
+	
+	/*
+	 * 璁剧疆鏅鸿兘浜ら�氬浘鐗囦繚瀛樿矾寰�
+	 */
+	public String getSaveTrafficImagePath() {
+        File path1 = new File("./Image/");
+        if (!path1.exists()) {
+            path1.mkdir();
+        }
+    	
+        File path = new File(s_imageSavePath);
+        if (!path.exists()) {
+            path.mkdir();
+        }
+        
+        return s_imageSavePath;
+	}
+	
+	
+	/*
+	 * 璁剧疆褰曞儚淇濆瓨璺緞
+	 */
+	public String getSaveRecordFilePath() {	
+        File path1 = new File("./RecordFile/");
+        if (!path1.exists()) {
+            path1.mkdir();
+        }
+        
+	    File path2 = new File(s_recordFileSavePath);
+	    if (!path2.exists()) {
+	        path2.mkdir();
+	    }
+		String SavedFileName = s_recordFileSavePath + ToolKits.getDate() + ".dav"; // 榛樿淇濆瓨璺緞
+		return SavedFileName;
+	}
+	
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/WindowCloseListener.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/WindowCloseListener.java
new file mode 100644
index 0000000..c236205
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/common/WindowCloseListener.java
@@ -0,0 +1,5 @@
+package com.ruoyi.device.dhsdk.common;
+
+public interface WindowCloseListener {
+	void windowClosing();
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/controller/DhSdkController.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/controller/DhSdkController.java
new file mode 100644
index 0000000..7b0ffdf
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/controller/DhSdkController.java
@@ -0,0 +1,78 @@
+package com.ruoyi.device.dhsdk.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.ruoyi.common.annotation.Anonymous;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.camera.domain.CameraCmd;
+import com.ruoyi.device.dhsdk.service.IDhClientService;
+import com.ruoyi.device.hiksdk.service.IHikClientService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * @Description: 澶у崕sdk鎺ュ彛
+ * @ClassName: DhSdkController
+ * @Author: 鍒樿嫃涔�
+ * @Date: 2023骞�10鏈�14鏃�10:34:58
+ **/
+@Api(tags = "澶у崕SDK鎺ュ彛")
+@Controller
+@RequestMapping("/dh")
+@Anonymous
+public class DhSdkController {
+
+    @Resource
+    private IDhClientService sdk;
+
+    /**
+     * @鎻忚堪 鍒濆鍔犺浇澶у崕搴撴枃浠�
+     * @鍙傛暟 []
+     * @杩斿洖鍊� void
+     * @鍒涘缓浜� 鍒樿嫃涔�
+     * @鍒涘缓鏃堕棿 2023/1/17 16:13
+     * @淇敼浜哄拰鍏跺畠淇℃伅 if (Platform.isLinux())
+     */
+    @PostConstruct
+    public void initDHSDK() {
+        //鍒濆鍖栧姞杞絪dk搴撴枃浠�
+        if (sdk.init())
+        {
+            //鐧诲綍鎵�鏈夌浉鏈�
+            sdk.loginAll();
+        }
+    }
+
+    @ApiOperation(value = "浜戝彴鎺у埗", notes = "Code:1-宸︿笂 2-涓� 3-鍙充笂 4-宸� 5-宸¤埅 6-鍙� 7-宸︿笅 8-涓� 9-鍙充笅 10-鐒﹁窛鍙樺ぇ 11-鐒﹁窛鍙樺皬\n" +
+            "12-鐒︾偣鍓嶈皟 13-鐒︾偣鍚庤皟 14-鍏夊湀鎵╁ぇ 15-鍏夊湀缂╁皬 ")
+    @PostMapping("/pTZControl")
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.speed", "cmd.enable", "cmd.code"})
+    @Log(title = "浜戝彴鎺у埗", businessType = BusinessType.CONTROL)
+    public @ResponseBody
+    AjaxResult pTZControl(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        return AjaxResult.success(sdk.pTZControl(cmd));
+    }
+
+    @ApiOperation("鑾峰彇PTZ")
+    @PostMapping("/getPTZ")
+    @ApiOperationSupport(includeParameters = {"cmd.cameraId"})
+    @Log(title = "鑾峰彇PTZ", businessType = BusinessType.CONTROL)
+    public @ResponseBody
+    AjaxResult getPTZ(@RequestBody CameraCmd cmd) {
+        cmd.setOperator(SecurityUtils.getUserId());
+        Map<String, Object> ptzMap = sdk.getPtz(cmd);
+        return AjaxResult.success("鑾峰彇ptz", ptzMap);
+    }
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/ConfigModule.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/ConfigModule.java
new file mode 100644
index 0000000..7678235
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/ConfigModule.java
@@ -0,0 +1,36 @@
+package com.ruoyi.device.dhsdk.module;
+
+import com.ruoyi.device.dhsdk.lib.NetSDKLib;
+import com.sun.jna.Structure;
+import com.sun.jna.ptr.IntByReference;
+
+/**
+ * @Description:
+ * @ClassName: ConfigModule
+ * @Author: 鍒樿嫃涔�
+ * @Date: 2023骞�10鏈�14鏃�14:57:01
+ **/
+public class ConfigModule {
+    public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
+
+    public static boolean GetDevConfig(NetSDKLib.LLong hLoginHandle, int nType, Structure cmdObject) {
+        boolean result = false;
+        IntByReference error = new IntByReference(0);
+        int nBufferLen = 2 * 1024 * 1024;
+        netsdk.CLIENT_QueryDevState(hLoginHandle, nType, cmdObject.getPointer(), nBufferLen, error, 3000);
+        return result;
+    }
+    /**
+     * 鏌ヨ璁惧鐘舵��
+     */
+    public static boolean queryDevState(NetSDKLib.LLong hLoginHandle, int nType, NetSDKLib.SdkStructure stuInfo) {
+
+        IntByReference intRetLen = new IntByReference();
+        stuInfo.write();
+        if (!LoginModule.netsdk.CLIENT_QueryDevState(hLoginHandle, nType, stuInfo.getPointer(), stuInfo.size(), intRetLen, 3000)) {
+            return false;
+        }
+        stuInfo.read();
+        return true;
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/LoginModule.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/LoginModule.java
new file mode 100644
index 0000000..dff3f36
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/LoginModule.java
@@ -0,0 +1,152 @@
+package com.ruoyi.device.dhsdk.module;
+
+import com.ruoyi.device.dhsdk.lib.NetSDKLib;
+import com.ruoyi.device.dhsdk.lib.NetSDKLib.LLong;
+import com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY;
+import com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY;
+import com.ruoyi.device.dhsdk.lib.ToolKits;
+import com.sun.jna.Structure;
+import com.sun.jna.ptr.IntByReference;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.File;
+
+import static com.ruoyi.device.dhsdk.lib.ToolKits.getErrorCodePrint;
+
+/**
+ * 鐧婚檰鎺ュ彛瀹炵幇
+ * 涓昏鏈� 锛氬垵濮嬪寲銆佺櫥闄嗐�佺櫥鍑哄姛鑳�
+ */
+@Slf4j(topic = "dhSdk")
+public class LoginModule {
+
+    public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
+    public static NetSDKLib configsdk = NetSDKLib.CONFIG_INSTANCE;
+
+    // 璁惧淇℃伅
+    public static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
+
+    // 鐧婚檰鍙ユ焺
+    public static LLong m_hLoginHandle = new LLong(0);//
+
+    private static boolean bInit = false;
+    private static boolean bLogopen = false;
+
+    /**
+     * \if ENGLISH_LANG
+     * Init
+     * \else
+     * 鍒濆鍖�
+     * \endif
+     */
+    public static boolean init(NetSDKLib.fDisConnect disConnect, NetSDKLib.fHaveReConnect haveReConnect) {
+        bInit = netsdk.CLIENT_Init(disConnect, null);
+        if (!bInit) {
+            log.debug("Initialize SDK failed");
+            return false;
+        }
+
+        //鎵撳紑鏃ュ織锛屽彲閫�
+        //NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO();
+        //File path = new File("./sdklog/");
+        //if (!path.exists()) {
+        //    path.mkdir();
+        //}
+        //String logPath = path.getAbsoluteFile().getParent() + "\\sdklog\\" + ToolKits.getDate() + ".log";
+        //setLog.nPrintStrategy = 0;
+        //setLog.bSetFilePath = 1;
+        //System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length);
+        //System.out.println(logPath);
+        //setLog.bSetPrintStrategy = 1;
+        //bLogopen = netsdk.CLIENT_LogOpen(setLog);
+      //  if (!bLogopen) {
+           // System.err.println("Failed to open NetSDK log");
+       // }
+
+        // 璁剧疆鏂嚎閲嶈繛鍥炶皟鎺ュ彛锛岃缃繃鏂嚎閲嶈繛鎴愬姛鍥炶皟鍑芥暟鍚庯紝褰撹澶囧嚭鐜版柇绾挎儏鍐碉紝SDK鍐呴儴浼氳嚜鍔ㄨ繘琛岄噸杩炴搷浣�
+        // 姝ゆ搷浣滀负鍙�夋搷浣滐紝浣嗗缓璁敤鎴疯繘琛岃缃�
+        netsdk.CLIENT_SetAutoReconnect(haveReConnect, null);
+
+        //璁剧疆鐧诲綍瓒呮椂鏃堕棿鍜屽皾璇曟鏁帮紝鍙��
+        int waitTime = 5000; //鐧诲綍璇锋眰鍝嶅簲瓒呮椂鏃堕棿璁剧疆涓�5S
+        int tryTimes = 1;    //鐧诲綍鏃跺皾璇曞缓绔嬮摼鎺�1娆�
+        netsdk.CLIENT_SetConnectTime(waitTime, tryTimes);
+
+
+        // 璁剧疆鏇村缃戠粶鍙傛暟锛孨ET_PARAM鐨刵Waittime锛宯ConnectTryNum鎴愬憳涓嶤LIENT_SetConnectTime
+        // 鎺ュ彛璁剧疆鐨勭櫥褰曡澶囪秴鏃舵椂闂村拰灏濊瘯娆℃暟鎰忎箟鐩稿悓,鍙��
+        NetSDKLib.NET_PARAM netParam = new NetSDKLib.NET_PARAM();
+        netParam.nConnectTime = 10000;      // 鐧诲綍鏃跺皾璇曞缓绔嬮摼鎺ョ殑瓒呮椂鏃堕棿
+        netParam.nGetConnInfoTime = 3000;   // 璁剧疆瀛愯繛鎺ョ殑瓒呮椂鏃堕棿
+        netParam.nGetDevInfoTime = 3000;//鑾峰彇璁惧淇℃伅瓒呮椂鏃堕棿锛屼负0榛樿1000ms
+        netsdk.CLIENT_SetNetworkParam(netParam);
+
+        return true;
+    }
+
+    /**
+     * \if ENGLISH_LANG
+     * CleanUp
+     * \else
+     * 娓呴櫎鐜
+     * \endif
+     */
+    public static void cleanup() {
+        if (bLogopen) {
+            netsdk.CLIENT_LogClose();
+        }
+
+        if (bInit) {
+            netsdk.CLIENT_Cleanup();
+        }
+    }
+
+    /**
+     * \if ENGLISH_LANG
+     * Login Device
+     * \else
+     * 鐧诲綍璁惧
+     * \endif
+     */
+    public static LLong login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword) {
+        IntByReference nError = new IntByReference(0);
+        //鍏ュ弬
+        NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstInParam = new NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY();
+        pstInParam.nPort = m_nPort;
+        pstInParam.szIP = m_strIp.getBytes();
+        pstInParam.szPassword = m_strPassword.getBytes();
+        pstInParam.szUserName = m_strUser.getBytes();
+        //鍑哄弬
+        NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam = new NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY();
+        pstOutParam.stuDeviceInfo = m_stDeviceInfo;
+        LLong m_hLoginHandle = netsdk.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser, m_strPassword, 0, null, m_stDeviceInfo, nError);
+        //m_hLoginHandle=netsdk.CLIENT_LoginWithHighLevelSecurity(pstInParam, pstOutParam);
+        if (m_hLoginHandle.longValue() == 0) {
+            log.debug("Login Device[%s] Port[%d]Failed. %s\n", m_strIp, m_nPort, getErrorCodePrint());
+        } else {
+            log.debug("Login Success [ " + m_strIp + " ]");
+        }
+        return m_hLoginHandle;
+        //return m_hLoginHandle.longValue() == 0? false:true;
+    }
+
+    /**
+     * \if ENGLISH_LANG
+     * Logout Device
+     * \else
+     * 鐧诲嚭璁惧
+     * \endif
+     */
+    public static boolean logout(LLong loginId) {
+        if (loginId.longValue() == 0) {
+            return false;
+        }
+        boolean bRet = netsdk.CLIENT_Logout(loginId);
+        if (bRet) {
+            loginId.setValue(0);
+        }
+        return bRet;
+    }
+
+
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/PtzControlModule.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/PtzControlModule.java
new file mode 100644
index 0000000..5885eee
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/module/PtzControlModule.java
@@ -0,0 +1,206 @@
+package com.ruoyi.device.dhsdk.module;
+
+import com.ruoyi.device.dhsdk.lib.NetSDKLib;
+
+/**
+ * 浜戝彴鎺у埗鎺ュ彛瀹炵幇
+ * 涓昏鏈� 锛氬叓涓柟鍚戞帶鍒躲�佸彉鍊嶃�佸彉鐒︺�佸厜鍦堝姛鑳�
+ */
+public class PtzControlModule {
+
+	/**
+	 * 鍚戜笂
+	 */
+	public static boolean ptzControlUpStart(NetSDKLib.LLong lLoginID,int nChannelID, int lParam1, int lParam2) {
+		return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+									NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL, 
+									lParam1, lParam2, 0, 0);
+	}
+	public static boolean ptzControlUpEnd(int nChannelID) {
+		return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+									 NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL, 
+									 0, 0, 0, 1);
+	}
+	
+	/**
+	 * 鍚戜笅
+	 */
+	public static boolean ptzControlDownStart(int nChannelID, int lParam1, int lParam2) {
+		return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+											NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL, 
+											lParam1, lParam2, 0, 0);
+	}
+	public static boolean ptzControlDownEnd(int nChannelID) {
+		return 	LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+											 NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL, 
+											 0, 0, 0, 1);
+	}
+	
+	/**
+	 * 鍚戝乏
+	 */
+	public static boolean ptzControlLeftStart(int nChannelID, int lParam1, int lParam2) {
+		return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+											NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL, 
+											lParam1, lParam2, 0, 0);	
+	}
+	public static boolean ptzControlLeftEnd(int nChannelID) {
+		return	LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+											 NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL, 
+											 0, 0, 0, 1);	
+	}
+	
+	/**
+	 * 鍚戝彸
+	 */
+	public static boolean ptzControlRightStart(int nChannelID, int lParam1,int lParam2) {
+		return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+											NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL, 
+											lParam1, lParam2, 0, 0);
+	}
+	public static boolean ptzControlRightEnd(int nChannelID) {
+		return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+											 NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL, 
+											 0, 0, 0, 1);		
+	}
+	
+	/**
+	 * 鍚戝乏涓�
+	 */
+	public static boolean ptzControlLeftUpStart(int nChannelID, int lParam1, int lParam2) {
+		return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+											NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP, 
+											lParam1, lParam2, 0, 0);
+	}
+	public static boolean ptzControlLeftUpEnd(int nChannelID) {
+		return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+											 NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP, 
+											 0, 0, 0, 1);	
+	}
+	
+	/**
+	 * 鍚戝彸涓�
+	 */
+	public static boolean ptzControlRightUpStart(int nChannelID, int lParam1, int lParam2) {
+		return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+											NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP, 
+											lParam1, lParam2, 0, 0);
+	}
+	public static boolean ptzControlRightUpEnd(int nChannelID) {
+		return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+											 NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP, 
+											 0, 0, 0, 1);	
+	}
+
+	/**
+	 * 鍚戝乏涓�
+	 */
+	public static boolean ptzControlLeftDownStart(int nChannelID, int lParam1, int lParam2) {
+		return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+													NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN, 
+													lParam1, lParam2, 0, 0);
+	}
+	public static boolean ptzControlLeftDownEnd(int nChannelID) {
+		return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+										 NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN, 
+										 0, 0, 0, 1);
+	}
+	
+	/**
+	 * 鍚戝彸涓�
+	 */
+	public static boolean ptzControlRightDownStart(int nChannelID, int lParam1, int lParam2) {
+		return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+													NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN, 
+													lParam1, lParam2, 0, 0);
+	}
+	public static boolean ptzControlRightDownEnd(int nChannelID) {
+		return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+										 NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN, 
+										 0, 0, 0, 1);
+	}
+	
+    /**
+     * 鍙樺��+
+     */
+    public static boolean ptzControlZoomAddStart(int nChannelID, int lParam2) {
+        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+							        	   NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL, 
+							        	   0, lParam2, 0, 0);
+    }
+    public static boolean ptzControlZoomAddEnd(int nChannelID) {
+        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+					            		    NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL, 
+					            		    0, 0, 0, 1);
+    }
+
+    /**
+     * 鍙樺��-
+     */
+    public static boolean ptzControlZoomDecStart(int nChannelID, int lParam2) {
+       return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+							        	    NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL, 
+							        	    0, lParam2, 0, 0);
+    }
+    public static boolean ptzControlZoomDecEnd(int nChannelID) {
+        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+					            		     NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL, 
+					            		     0, 0, 0, 1);
+    }
+
+    /**
+     * 鍙樼劍+
+     */
+    public static boolean ptzControlFocusAddStart(int nChannelID, int lParam2) {
+    	return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+									        	    NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL, 
+									        	    0, lParam2, 0, 0);
+    }
+    public static boolean ptzControlFocusAddEnd(int nChannelID) {
+    	return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+				            		     NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL, 
+				            		     0, 0, 0, 1);
+    }
+
+    /**
+     * 鍙樼劍-
+     */
+    public static boolean ptzControlFocusDecStart(int nChannelID, int lParam2) {
+        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+							        	    NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL, 
+							        	    0, lParam2, 0, 0);
+    }
+    public static boolean ptzControlFocusDecEnd(int nChannelID) {
+        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+					            		     NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL, 
+					            		     0, 0, 0, 1);
+    }
+
+    /**
+     * 鍏夊湀+
+     */
+    public static boolean ptzControlIrisAddStart(int nChannelID, int lParam2) {
+        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+							        	    NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL, 
+							        	    0, lParam2, 0, 0);
+    }
+    public static boolean ptzControlIrisAddEnd(int nChannelID) {
+        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+					            		     NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL, 
+					            		     0, 0, 0, 1);
+    }
+
+    /**
+     * 鍏夊湀-
+     */
+    public static boolean ptzControlIrisDecStart(int nChannelID, int lParam2) {
+        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+									        	    NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL, 
+									        	    0, lParam2, 0, 0);
+    }
+    public static boolean ptzControlIrisDecEnd(int nChannelID) {
+        return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID, 
+					            		     NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL, 
+					            		     0, 0, 0, 1);
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/IDhClientService.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/IDhClientService.java
new file mode 100644
index 0000000..d64f623
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/IDhClientService.java
@@ -0,0 +1,35 @@
+package com.ruoyi.device.dhsdk.service;
+
+import com.ruoyi.device.camera.domain.ArdCameras;
+import com.ruoyi.device.camera.domain.CameraCmd;
+import com.ruoyi.device.channel.domain.ArdChannel;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName IDhSdkServer
+ * @Description:
+ * @Author 鍒樿嫃涔�
+ * @Date 2023/10/13 21:18
+ * @Version 1.0
+ */
+public interface IDhClientService {
+
+    //sdk鍒濆鍖�
+    Boolean init();
+    //鐧诲綍
+    Boolean login(ArdCameras ardCamera);
+    //鐧诲綍鎵�鏈夌浉鏈�
+    void loginAll();
+    //娉ㄩ攢
+    Boolean logout(String cameraId);
+
+    //鍦ㄧ嚎鐘舵��
+    boolean isOnLine(CameraCmd cmd);
+
+    //浜戝彴鎺у埗
+    boolean pTZControl(CameraCmd cmd);
+    //ptz 涓夊潗鏍�
+    Map<String, Object> getPtz(CameraCmd cmd);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java
new file mode 100644
index 0000000..d2e4ae3
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/dhsdk/service/impl/DhClientServiceImpl.java
@@ -0,0 +1,255 @@
+package com.ruoyi.device.dhsdk.service.impl;
+
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.device.camera.domain.ArdCameras;
+import com.ruoyi.device.camera.domain.CameraCmd;
+import com.ruoyi.device.camera.service.IArdCamerasService;
+import com.ruoyi.device.channel.domain.ArdChannel;
+import com.ruoyi.device.channel.service.IArdChannelService;
+import com.ruoyi.device.dhsdk.common.Res;
+import com.ruoyi.device.dhsdk.lib.NetSDKLib;
+import com.ruoyi.device.dhsdk.lib.NetSDKLib.LLong;
+import com.ruoyi.device.dhsdk.lib.ToolKits;
+import com.ruoyi.device.dhsdk.lib.enumeration.EM_NEW_QUERY_SYSTEM_INFO;
+import com.ruoyi.device.dhsdk.module.ConfigModule;
+import com.ruoyi.device.dhsdk.module.LoginModule;
+import com.ruoyi.device.dhsdk.module.PtzControlModule;
+import com.ruoyi.device.dhsdk.service.IDhClientService;
+import com.ruoyi.device.hiksdk.common.GlobalVariable;
+import com.ruoyi.device.hiksdk.sdk.HCNetSDK;
+import com.sun.jna.Pointer;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.text.DecimalFormat;
+import java.util.*;
+
+import static com.ruoyi.device.dhsdk.lib.NetSDKLib.NET_DEVSTATE_PTZ_LOCATION;
+import static com.ruoyi.device.dhsdk.lib.ToolKits.getErrorCodePrint;
+import static com.ruoyi.device.hiksdk.sdk.HCNetSDK.NET_DVR_CHECK_USER_STATUS;
+
+/**
+ * @ClassName DhSdkServiceImpl
+ * @Description:
+ * @Author 鍒樿嫃涔�
+ * @Date 2023/10/13 21:19
+ * @Version 1.0
+ */
+@Service
+@Slf4j(topic = "dhSdk")
+public class DhClientServiceImpl implements IDhClientService {
+    @Resource
+    private IArdCamerasService ardCamerasService;
+    @Resource
+    private IArdChannelService ardChannelService;
+
+    private Vector<String> chnlist = new Vector<String>();
+    // 璁惧鏂嚎閫氱煡鍥炶皟
+    private static DisConnect disConnect = new DisConnect();
+    // 缃戠粶杩炴帴鎭㈠
+    private static HaveReConnect haveReConnect = new HaveReConnect();
+
+
+    @Override
+    public void loginAll() {
+        try {
+            ArdCameras ardCamera = new ArdCameras();
+            ardCamera.setFactory("2");//鑾峰彇澶у崕鐩告満
+            List<ArdCameras> ardCameras = ardCamerasService.selectArdCamerasListNoDataScope(ardCamera);
+            for (ArdCameras camera : ardCameras) {
+                Thread.sleep(500);
+                //寮傛鐧诲綍
+                login(camera);
+            }
+        } catch (Exception ex) {
+            log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage());
+        }
+    }
+
+    @Override
+    public Boolean init() {
+        return LoginModule.init(disConnect, haveReConnect);   // 鎵撳紑宸ョ▼锛屽垵濮嬪寲
+    }
+
+    @Override
+    @Async
+    public Boolean login(ArdCameras camera) {
+        LLong loginId = LoginModule.login(camera.getIp(), camera.getPort(), camera.getUsername(), camera.getPassword());
+        if (loginId.longValue() > 0) {
+            //log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍鎴愬姛");
+            if (GlobalVariable.loginMap.containsKey(camera.getId())) {
+                GlobalVariable.loginMap.remove(camera.getId());
+            }
+            //鍒犻櫎绠$悊閫氶亾
+            ardChannelService.deleteArdChannelByDeviceId(camera.getId());
+            camera.setState("1");
+            camera.setChanNum(LoginModule.m_stDeviceInfo.byChanNum);
+            camera.setStartDChan(1);
+            camera.setLoginId((int) loginId.longValue());
+            ardCamerasService.updateArdCameras(camera);
+            GlobalVariable.loginMap.put(camera.getId(), loginId);
+            //鑾峰彇鏈�鏂伴�氶亾
+            for (int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) {
+                chnlist.add(Res.string().getChannel() + " " + String.valueOf(i));
+                ArdChannel channel = new ArdChannel();
+                channel.setDeviceId(camera.getId());
+                channel.setName("閫氶亾" + i);
+                channel.setId(IdUtils.simpleUUID());
+                channel.setChanNo(i);
+                ardChannelService.insertArdChannel(channel);
+            }
+        } else {
+            //log.debug(camera.getIp() + ":" + camera.getPort() + "鐧诲綍澶辫触");
+            camera.setChanNum(0);
+            camera.setLoginId(-1);
+            camera.setState("0");
+            ardCamerasService.updateArdCameras(camera);
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public Boolean logout(String cameraId) {
+        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+            return false;
+        }
+        LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
+        return LoginModule.logout(loginId);
+    }
+
+    @Override
+    public boolean isOnLine(CameraCmd cmd) {
+        try {
+            String cameraId = cmd.getCameraId();
+            if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+                return false;
+            }
+            LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
+
+
+        } catch (Exception ex) {
+            log.error("妫�娴嬪湪绾垮紓甯革細" + ex.getMessage());
+            return false;
+        }
+
+        return false;
+    }
+
+    @Override
+    public boolean pTZControl(CameraCmd cmd) {
+        String cameraId = cmd.getCameraId();
+        boolean enable = cmd.isEnable();
+        Integer chanNo = cmd.getChanNo();
+        Integer speed = cmd.getSpeed();
+        Integer code = cmd.getCode();
+        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+            return false;
+        }
+        LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
+        int dwStop;
+        if (enable) {
+            dwStop = 0;//寮�鍚�
+        } else {
+            dwStop = 1;//鍏抽棴
+        }
+        int dwPTZCommand = -1;
+        switch (code) {
+            /*鏂瑰悜*/
+            case 1:
+                dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP;
+                break;
+            case 2:
+                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL;
+                break;
+            case 3:
+                dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP;
+                break;
+            case 4:
+                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL;
+                break;
+            case 5:
+                dwPTZCommand = HCNetSDK.RUN_SEQ;
+                break;
+            case 6:
+                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL;
+                break;
+            case 7:
+                dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN;
+                break;
+            case 8:
+                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL;
+                break;
+            case 9:
+                dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN;
+                break;
+            /*鐒﹁窛*/
+            case 10:
+                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL;
+                break;
+            case 11:
+                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL;
+                break;
+            /*鐒︾偣*/
+            case 12:
+                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL;
+                break;
+            case 13:
+                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL;
+                break;
+            /*鍏夊湀*/
+            case 14:
+                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL;
+                break;
+            case 15:
+                dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL;
+                break;
+        }
+        boolean bool = LoginModule.netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, dwPTZCommand, speed, speed, 0, dwStop);
+        if (!bool) {
+            log.error("鎺у埗澶辫触,璇风◢鍚庨噸璇�" + getErrorCodePrint());
+        }
+        return bool;
+    }
+
+    @Override
+    public Map<String, Object> getPtz(CameraCmd cmd) {
+        Map<String, Object> ptzMap = new HashMap<>();
+        String cameraId = cmd.getCameraId();
+        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+            return null;
+        }
+        LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId);
+        NetSDKLib.NET_PTZ_LOCATION_INFO dh_ptz_location_info = new NetSDKLib.NET_PTZ_LOCATION_INFO();
+        boolean b = ConfigModule.queryDevState(loginId, NET_DEVSTATE_PTZ_LOCATION, dh_ptz_location_info);
+        if (b) {
+            DecimalFormat df = new DecimalFormat("0.0");//璁剧疆淇濈暀浣嶆暟
+            String nPTZPan = df.format((float)dh_ptz_location_info.nPTZPan / 10);
+            String nPTZTilt = df.format((float)dh_ptz_location_info.nPTZTilt/10);
+            String nPTZZoom = df.format((float)dh_ptz_location_info.nPTZZoom);
+            ptzMap.put("p", nPTZPan);
+            ptzMap.put("t", nPTZTilt);
+            ptzMap.put("z", nPTZZoom);
+        }
+        return ptzMap;
+    }
+
+    // 璁惧鏂嚎鍥炶皟: 閫氳繃 CLIENT_Init 璁剧疆璇ュ洖璋冨嚱鏁帮紝褰撹澶囧嚭鐜版柇绾挎椂锛孲DK浼氳皟鐢ㄨ鍑芥暟
+    private static class DisConnect implements NetSDKLib.fDisConnect {
+        public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+            System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+        }
+    }
+
+    // 缃戠粶杩炴帴鎭㈠锛岃澶囬噸杩炴垚鍔熷洖璋�
+    // 閫氳繃 CLIENT_SetAutoReconnect 璁剧疆璇ュ洖璋冨嚱鏁帮紝褰撳凡鏂嚎鐨勮澶囬噸杩炴垚鍔熸椂锛孲DK浼氳皟鐢ㄨ鍑芥暟
+    private static class HaveReConnect implements NetSDKLib.fHaveReConnect {
+        @Override
+        public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+            System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+        }
+    }
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/common/GlobalVariable.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/common/GlobalVariable.java
index a672b60..928dafb 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/common/GlobalVariable.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/common/GlobalVariable.java
@@ -14,7 +14,7 @@
 @Data
 public class GlobalVariable {
     //淇濆瓨鐩告満鐧诲綍淇℃伅
-    public static Map<String, Integer> loginMap = new HashMap<>();
+    public static Map<String, Object> loginMap = new HashMap<>();
     //鐩告満棰勮瀛楀吀
     public static Map<String, Integer> previewMap = new HashMap<>();
     //绾跨▼瀛楀吀
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/SdkController.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/SdkController.java
index 640fc76..604ef13 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/SdkController.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/SdkController.java
@@ -8,6 +8,7 @@
 import com.ruoyi.device.camera.domain.ArdCameras;
 import com.ruoyi.device.camera.domain.CameraCmd;
 import com.ruoyi.device.camera.service.IArdCamerasService;
+import com.ruoyi.device.dhsdk.service.IDhClientService;
 import com.ruoyi.device.hiksdk.service.IHikClientService;
 import com.ruoyi.common.annotation.Anonymous;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -37,6 +38,8 @@
     @Resource
     private IHikClientService sdk;
     @Resource
+    private IDhClientService ClientService;
+    @Resource
     private IArdCamerasService ardCamerasService;
 
     /**
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java
index 3b8c8d9..a385d70 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java
@@ -39,7 +39,6 @@
 
     @Override
     public int invoke(int lUserID, int dwResult, HCNetSDK.NET_DVR_DEVICEINFO_V30 lpDeviceinfo, Pointer pUser) {
-        MediaClient mediaClient=SpringUtils.getBean(MediaClient.class);
         IVtduService vtduService = SpringUtils.getBean(IVtduService.class);
         IArdChannelService ardChannelService = SpringUtils.getBean(IArdChannelService.class);
         IHikClientService hikClientService = SpringUtils.getBean(IHikClientService.class);
@@ -103,4 +102,4 @@
         ardCamerasService.updateArdCameras(camera);
         return 1;
     }
-}
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
index 586c9f6..b71b6f6 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
@@ -27,7 +27,7 @@
     void loginAll();
 
     //娉ㄩ攢
-    boolean loginOut(String cameraId);
+    boolean logout(String cameraId);
 
     //鍦ㄧ嚎鐘舵��
     boolean isOnLine(CameraCmd cmd);
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
index e803ca0..5a3e96a 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -65,7 +65,7 @@
         try {
             log.debug("寮�濮嬪姞杞絪dk搴撴枃浠惰矾寰�");
             if (Platform.isWindows()) {
-                String WIN_PATH = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "HCNetSDK.dll";
+                String WIN_PATH = System.getProperty("user.dir") + File.separator + "lib\\hikDll\\HCNetSDK.dll";
                 log.debug("褰撳墠Windows骞冲彴鐨剆dk搴撹矾寰勶細" + WIN_PATH);
                 hCNetSDK = (HCNetSDK) Native.loadLibrary(WIN_PATH, HCNetSDK.class);
             } else {
@@ -277,7 +277,9 @@
     public void loginAll() {
         try {
             log.debug("鍔犺浇lib瀹屾垚锛�");
-            List<ArdCameras> ardCameras = ardCamerasService.selectArdCamerasListNoDataScope(new ArdCameras());
+            ArdCameras ardCamera = new ArdCameras();
+            ardCamera.setFactory("1");
+            List<ArdCameras> ardCameras = ardCamerasService.selectArdCamerasListNoDataScope(ardCamera);
             for (ArdCameras camera : ardCameras) {
                 Thread.sleep(500);
                 //寮傛鐧诲綍
@@ -297,11 +299,11 @@
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
     @Override
-    public boolean loginOut(String cameraId) {
+    public boolean logout(String cameraId) {
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         boolean b = hCNetSDK.NET_DVR_Logout(userId);
         if (b) {
             GlobalVariable.loginMap.remove(cameraId);
@@ -321,7 +323,7 @@
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                 return false;
             }
-            Integer userId = GlobalVariable.loginMap.get(cameraId);
+            Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
             return hCNetSDK.NET_DVR_RemoteControl(userId, NET_DVR_CHECK_USER_STATUS, null, 0);
         } catch (Exception ex) {
             log.error("妫�娴嬪湪绾垮紓甯革細" + ex.getMessage());
@@ -350,7 +352,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         int dwStop;
         if (enable) {
             dwStop = 0;//寮�鍚�
@@ -436,7 +438,7 @@
             return false;
         }
         // 鑾峰彇鍙傛暟
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG();
         HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO();
         struGisInfo.struPtzPosEx.dwFocus = dwFocusPos;
@@ -470,7 +472,7 @@
             return new HashMap<>();
         }
         // 鑾峰彇鍙傛暟
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG();
         HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO();
         struStdCfg.read();
@@ -507,7 +509,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, SET_PRESET, PresetIndex);
         if (!bool) {
             int code = hCNetSDK.NET_DVR_GetLastError();
@@ -530,7 +532,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         boolean bool = hCNetSDK.NET_DVR_PTZPreset_Other(userId, channelNum, GOTO_PRESET, PresetIndex);
         if (!bool) {
             int code = hCNetSDK.NET_DVR_GetLastError();
@@ -554,7 +556,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return null;
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
 
         Map<String, String> map = new HashMap<>();
         NET_DVR_COMPRESSIONCFG_V30 compressioncfg = new NET_DVR_COMPRESSIONCFG_V30();
@@ -794,7 +796,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return null;
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
 
         NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
         Pointer pioint = m_ptzPosCurrent.getPointer();
@@ -846,7 +848,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
         m_ptzPosCurrent.wAction = 1;
         try {
@@ -878,7 +880,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
         m_ptzPosCurrent.wAction = 1;
         try {
@@ -965,7 +967,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return -1;
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         NET_DVR_PTZ_LOCKCFG netDvrPtzLockcfg = new NET_DVR_PTZ_LOCKCFG();
         Pointer point = netDvrPtzLockcfg.getPointer();
         IntByReference ibrBytesReturned = new IntByReference(0);
@@ -997,7 +999,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         NET_DVR_INITIALPOSITIONCTRL initialpositionctrl = new NET_DVR_INITIALPOSITIONCTRL();
 
         initialpositionctrl.dwSize = initialpositionctrl.size();
@@ -1029,7 +1031,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return new HashMap<>();
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         NET_DVR_PTZSCOPE m_ptzPosCurrent = new NET_DVR_PTZSCOPE();
         Pointer point = m_ptzPosCurrent.getPointer();
         IntByReference ibrBytesReturned = new IntByReference(0);
@@ -1078,7 +1080,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         NET_DVR_CAMERAPARAMCFG_EX struCameraParam = new NET_DVR_CAMERAPARAMCFG_EX();
         Pointer point = struCameraParam.getPointer();
         IntByReference ibrBytesReturned = new IntByReference(0);
@@ -1124,7 +1126,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         NET_DVR_CAMERAPARAMCFG_EX struDayNigh = new NET_DVR_CAMERAPARAMCFG_EX();
         Pointer point = struDayNigh.getPointer();
         IntByReference ibrBytesReturned = new IntByReference(0);
@@ -1172,7 +1174,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         NET_DVR_FOCUSMODE_CFG struFocusMode = new NET_DVR_FOCUSMODE_CFG();
         Pointer point = struFocusMode.getPointer();
         IntByReference ibrBytesReturned = new IntByReference(0);
@@ -1215,7 +1217,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return "";
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         NET_DVR_FOCUSMODE_CFG struFocusMode = new NET_DVR_FOCUSMODE_CFG();
         Pointer point = struFocusMode.getPointer();
         IntByReference ibrBytesReturned = new IntByReference(0);
@@ -1245,7 +1247,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         int dwStop;
         if (enable) {
             dwStop = 0;//寮�鍚�
@@ -1278,7 +1280,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return false;
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         NET_DVR_DEVSERVER_CFG struDeicing = new NET_DVR_DEVSERVER_CFG();
         Pointer point = struDeicing.getPointer();
         IntByReference ibrBytesReturned = new IntByReference(0);
@@ -1315,7 +1317,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return "";
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         NET_DVR_WORKSTATE_V30 devwork = new NET_DVR_WORKSTATE_V30();
         if (!hCNetSDK.NET_DVR_GetDVRWorkState_V30(userId, devwork)) {
             // 杩斿洖Boolean鍊硷紝鍒ゆ柇鏄惁鑾峰彇璁惧鑳藉姏
@@ -1358,7 +1360,7 @@
         if (!GlobalVariable.loginMap.containsKey(cameraId)) {
             return "";
         }
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         //鍥剧墖淇℃伅
         NET_DVR_JPEGPARA jpeg = new NET_DVR_JPEGPARA();
         //璁剧疆鍥剧墖鍒嗚鲸鐜�
@@ -1422,7 +1424,7 @@
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                 return "";
             }
-            Integer userId = GlobalVariable.loginMap.get(cameraId);
+            Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
             //寮哄埗I甯х粨鏋勪綋瀵硅薄
             HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME();   //鏂板缓缁撴瀯浣撳璞�
             netDvrIFrame.read();
@@ -1483,7 +1485,7 @@
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                 return;
             }
-            Integer userId = GlobalVariable.loginMap.get(cameraId);
+            Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
             //寮哄埗I甯х粨鏋勪綋瀵硅薄
             HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME();   //鏂板缓缁撴瀯浣撳璞�
             netDvrIFrame.read();
@@ -1538,7 +1540,7 @@
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                 return "";
             }
-            Integer userId = GlobalVariable.loginMap.get(cameraId);
+            Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
             //region 寮哄埗I甯�
             HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME();   //鏂板缓缁撴瀯浣撳璞�
             netDvrIFrame.read();
@@ -1591,7 +1593,7 @@
             if (!GlobalVariable.loginMap.containsKey(cameraId)) {
                 return;
             }
-            Integer userId = GlobalVariable.loginMap.get(cameraId);
+            Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
             //寮哄埗I甯х粨鏋勪綋瀵硅薄
             HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME();   //鏂板缓缁撴瀯浣撳璞�
             netDvrIFrame.read();
@@ -1676,7 +1678,7 @@
             return new HashMap<>();
         }
         // 鑾峰彇鍙傛暟
-        Integer userId = GlobalVariable.loginMap.get(cameraId);
+        Integer userId = (Integer)GlobalVariable.loginMap.get(cameraId);
         HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG();
         HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO();
         struStdCfg.read();
diff --git a/ard-work/src/main/resources/dynamic-lib-load.xml b/ard-work/src/main/resources/dynamic-lib-load.xml
new file mode 100644
index 0000000..e5f10b3
--- /dev/null
+++ b/ard-work/src/main/resources/dynamic-lib-load.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<dynamic-lib>
+    <win64>
+        <lib>avnetsdk</lib>
+        <lib>dhconfigsdk</lib>
+        <lib>dhnetsdk</lib>
+        <lib>dhplay</lib>
+        <lib>RenderEngine</lib>
+        <lib>ImageAlg</lib>
+        <lib>Infra</lib>
+        <lib>IvsDrawer</lib>
+        <lib>StreamConvertor</lib>
+    </win64>
+    <win32>
+        <lib>avnetsdk</lib>
+        <lib>dhconfigsdk</lib>
+        <lib>dhnetsdk</lib>
+        <lib>dhplay</lib>
+        <lib>RenderEngine</lib>
+        <lib>Infra</lib>
+        <lib>ImageAlg</lib>
+        <lib>StreamConvertor</lib>
+    </win32>
+    <linux64>
+        <lib>avnetsdk</lib>
+        <lib>dhnetsdk</lib>
+        <lib>dhconfigsdk</lib>
+        <lib>StreamConvertor</lib>
+    </linux64>
+    <linux32>
+        <lib>avnetsdk</lib>
+        <lib>dhconfigsdk</lib>
+        <lib>dhnetsdk</lib>
+    </linux32>
+    <mac64>
+        <lib>avnetsdk</lib>
+        <lib>dhnetsdk</lib>
+        <lib>dhconfigsdk</lib>
+        <lib>StreamConvertor</lib>
+    </mac64>
+</dynamic-lib>
\ No newline at end of file
diff --git a/ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml b/ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml
index c8fa4e0..3a13832 100644
--- a/ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml
+++ b/ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml
@@ -13,6 +13,7 @@
         <result property="username" column="username"/>
         <result property="password" column="password"/>
         <result property="gdtype" column="gdtype"/>
+        <result property="factory" column="factory"/>
         <result property="chanNum" column="channel"/>
         <result property="longitude" column="longitude"/>
         <result property="latitude" column="latitude"/>
@@ -44,6 +45,7 @@
                c.username,
                c.password,
                c.gdtype,
+               c.factory,
                c.channel,
                c.longitude,
                c.latitude,
@@ -80,6 +82,7 @@
             <if test="username != null  and username != ''">and c.username like '%'||#{username}||'%'</if>
             <if test="password != null  and password != ''">and c.password = #{password}</if>
             <if test="gdtype != null  and gdtype != ''">and c.gdtype = #{gdtype}</if>
+            <if test="factory != null  and factory != ''">and c.factory = #{factory}</if>
             <if test="chanNum != null ">and c.channel = #{chanNum}</if>
             <if test="longitude != null ">and c.longitude = #{longitude}</if>
             <if test="latitude != null ">and c.latitude = #{latitude}</if>
@@ -113,6 +116,7 @@
             <if test="username != null  and username != ''">and c.username like '%'||#{username}||'%'</if>
             <if test="password != null  and password != ''">and c.password = #{password}</if>
             <if test="gdtype != null  and gdtype != ''">and c.gdtype = #{gdtype}</if>
+            <if test="factory != null  and factory != ''">and c.factory = #{factory}</if>
             <if test="chanNum != null ">and c.channel = #{chanNum}</if>
             <if test="longitude != null ">and c.longitude = #{longitude}</if>
             <if test="latitude != null ">and c.latitude = #{latitude}</if>
@@ -150,6 +154,7 @@
             <if test="username != null">username,</if>
             <if test="password != null">password,</if>
             <if test="gdtype != null">gdtype,</if>
+            <if test="factory != null">factory,</if>
             <if test="chanNum != null">channel,</if>
             <if test="longitude != null">longitude,</if>
             <if test="latitude != null">latitude,</if>
@@ -181,6 +186,7 @@
             <if test="username != null">#{username},</if>
             <if test="password != null">#{password},</if>
             <if test="gdtype != null">#{gdtype},</if>
+            <if test="factory != null">#{factory},</if>
             <if test="chanNum != null">#{chanNum},</if>
             <if test="longitude != null">#{longitude},</if>
             <if test="latitude != null">#{latitude},</if>
@@ -215,6 +221,7 @@
             <if test="username != null">username = #{username},</if>
             <if test="password != null">password = #{password},</if>
             <if test="gdtype != null">gdtype = #{gdtype},</if>
+            <if test="factory != null">factory = #{factory},</if>
             <if test="chanNum != null">channel = #{chanNum},</if>
             <if test="longitude != null">longitude = #{longitude},</if>
             <if test="latitude != null">latitude = #{latitude},</if>
diff --git a/ard-work/src/main/resources/resources_en_US.properties b/ard-work/src/main/resources/resources_en_US.properties
new file mode 100644
index 0000000..79be990
--- /dev/null
+++ b/ard-work/src/main/resources/resources_en_US.properties
@@ -0,0 +1,1071 @@
+# FunctionList
+FUNCTIONLIST=FunctionList
+REALPLAY=RealPlay
+CAPTURE_PICTURE=Capture Picture
+MULTIREALPLAY=MultiRealPlay
+DOWNLOAD_RECORD=Download Record
+ITS_EVENT=TrafficEvent
+TALK=Talk
+DEVICESEARCH_DEVICEINIT=DeviceSearchAndInit
+PTZ=PTZ Control
+FACERECOGNITION=FaceRecognition
+ALARM_LISTEN=Alarm Listen
+DEVICE_CONTROL=Device Control
+AUTOREGISTER=AutoRegister
+REMOTE_OPEN_DOOR=Remote Open Door
+
+ONLINE=Online
+
+# Login Info
+DEVICE_IP=Device IP
+DEVICE_PORT=Port
+USERNAME=UserName
+PASSWORD=Password
+IP=IP
+
+LOGIN=Login
+LOGOUT=Logout
+
+LOGIN_SUCCEED=Login Succeed
+LOGIN_FAILED=Login Failed
+DISCONNECT=Device disconnect
+DISCONNECT_RECONNECTING=Device disconnect, reconnecting
+PROMPT_MESSAGE=Prompt Message
+ERROR_MESSAGE=Error Message
+
+SUCCEED=Succeed
+FAILED=Failed
+
+PLEASE_INPUT_DEVICE_IP=Please input device IP
+PLEASE_INPUT_DEVICE_PORT=Please input device port
+PLEASE_INPUT_DEVICE_USERNAME=Please input userName
+PLEASE_INPUT_DEVICE_PASSWORD=Please input password
+PLEASE_INPUT_CONFIRM_PASSWORD=Please input confirm password
+
+# Error Info
+NET_NOERROR=No error 
+NET_ERROR=Unknown error
+NET_SYSTEM_ERROR=System error
+NET_NETWORK_ERROR=Protocol error it may result from network timeout
+NET_DEV_VER_NOMATCH=Device protocol does not match 
+NET_INVALID_HANDLE=Handle is invalid
+NET_OPEN_CHANNEL_ERROR=Failed to open channel 
+NET_CLOSE_CHANNEL_ERROR=Failed to close channel 
+NET_ILLEGAL_PARAM=User parameter is illegal 
+NET_SDK_INIT_ERROR=SDK initialization error 
+NET_SDK_UNINIT_ERROR=SDK clear error 
+NET_RENDER_OPEN_ERROR=Error occurs when apply for render resources
+NET_DEC_OPEN_ERROR=Error occurs when opening the decoder library 
+NET_DEC_CLOSE_ERROR=Error occurs when closing the decoder library 
+NET_MULTIPLAY_NOCHANNEL=The detected channel number is 0 in multiple-channel preview 
+NET_TALK_INIT_ERROR=Failed to initialize record library 
+NET_TALK_NOT_INIT=The record library has not been initialized
+NET_TALK_SENDDATA_ERROR=Error occurs when sending out audio data 
+NET_REAL_ALREADY_SAVING=The real-time has been protected
+NET_NOT_SAVING=The real-time data has not been save
+NET_OPEN_FILE_ERROR=Error occurs when opening the file
+NET_PTZ_SET_TIMER_ERROR=Failed to enable PTZ to control timer
+NET_RETURN_DATA_ERROR=Error occurs when verify returned data
+NET_INSUFFICIENT_BUFFER=There is no sufficient buffer
+NET_NOT_SUPPORTED=The current SDK does not support this funcntion
+NET_NO_RECORD_FOUND=There is no searched result
+NET_NOT_AUTHORIZED=You have no operation right
+NET_NOT_NOW=Can not operate right now 
+NET_NO_TALK_CHANNEL=There is no audio talk channel
+NET_NO_AUDIO=There is no audio
+NET_NO_INIT=The network SDK has not been initialized
+NET_DOWNLOAD_END=The download completed
+NET_EMPTY_LIST=There is no searched result
+NET_ERROR_GETCFG_SYSATTR=Failed to get system property setup
+NET_ERROR_GETCFG_SERIAL=Failed to get SN
+NET_ERROR_GETCFG_GENERAL=Failed to get general property
+NET_ERROR_GETCFG_DSPCAP=Failed to get DSP capacity description
+NET_ERROR_GETCFG_NETCFG=Failed to get network channel setup
+NET_ERROR_GETCFG_CHANNAME=Failed to get channel name
+NET_ERROR_GETCFG_VIDEO=Failed to get video property
+NET_ERROR_GETCFG_RECORD=Failed to get record setup
+NET_ERROR_GETCFG_PRONAME=Failed to get decoder protocol name 
+NET_ERROR_GETCFG_FUNCNAME=Failed to get 232 COM function name
+NET_ERROR_GETCFG_485DECODER=Failed to get decoder property
+NET_ERROR_GETCFG_232COM=Failed to get 232 COM setup
+NET_ERROR_GETCFG_ALARMIN=Failed to get external alarm input setup
+NET_ERROR_GETCFG_ALARMDET=Failed to get motion detection alarm
+NET_ERROR_GETCFG_SYSTIME=Failed to get device time
+NET_ERROR_GETCFG_PREVIEW=Failed to get preview parameter
+NET_ERROR_GETCFG_AUTOMT=Failed to get audio maintenance setup
+NET_ERROR_GETCFG_VIDEOMTRX=Failed to get video matrix setup
+NET_ERROR_GETCFG_COVER=Failed to get privacy mask zone setup
+NET_ERROR_GETCFG_WATERMAKE=Failed to get video watermark setup
+NET_ERROR_GETCFG_MULTICAST=Failed to get config, omulticast port by channel
+NET_ERROR_SETCFG_GENERAL=Failed to modify general property
+NET_ERROR_SETCFG_NETCFG=Failed to modify channel setup
+NET_ERROR_SETCFG_CHANNAME=Failed to modify channel name
+NET_ERROR_SETCFG_VIDEO=Failed to modify video channel 
+NET_ERROR_SETCFG_RECORD=Failed to modify record setup 
+NET_ERROR_SETCFG_485DECODER=Failed to modify decoder property 
+NET_ERROR_SETCFG_232COM=Failed to modify 232 COM setup 
+NET_ERROR_SETCFG_ALARMIN=Failed to modify external input alarm setup
+NET_ERROR_SETCFG_ALARMDET=Failed to modify motion detection alarm setup 
+NET_ERROR_SETCFG_SYSTIME=Failed to modify device time 
+NET_ERROR_SETCFG_PREVIEW=Failed to modify preview parameter
+NET_ERROR_SETCFG_AUTOMT=Failed to modify auto maintenance setup 
+NET_ERROR_SETCFG_VIDEOMTRX=Failed to modify video matrix setup 
+NET_ERROR_SETCFG_COVER=Failed to modify privacy mask zone
+NET_ERROR_SETCFG_WATERMAKE=Failed to modify video watermark setup 
+NET_ERROR_SETCFG_WLAN=Failed to modify wireless network information 
+NET_ERROR_SETCFG_WLANDEV=Failed to select wireless network device
+NET_ERROR_SETCFG_REGISTER=Failed to modify the actively registration parameter setup
+NET_ERROR_SETCFG_CAMERA=Failed to modify camera property
+NET_ERROR_SETCFG_INFRARED=Failed to modify IR alarm setup
+NET_ERROR_SETCFG_SOUNDALARM=Failed to modify audio alarm setup
+NET_ERROR_SETCFG_STORAGE=Failed to modify storage position setup
+NET_AUDIOENCODE_NOTINIT=The audio encode port has not been successfully initialized 
+NET_DATA_TOOLONGH=The data are too long
+NET_UNSUPPORTED=The device does not support current operation 
+NET_DEVICE_BUSY=Device resources is not sufficient
+NET_SERVER_STARTED=The server has boot up 
+NET_SERVER_STOPPED=The server has not fully boot up 
+NET_LISTER_INCORRECT_SERIAL=Input serial number is not correct
+NET_QUERY_DISKINFO_FAILED=Failed to get HDD information
+NET_ERROR_GETCFG_SESSION=Failed to get connect session information
+NET_USER_FLASEPWD_TRYTIME=The password you typed is incorrect You have exceeded the maximum number of retries
+NET_LOGIN_ERROR_PASSWORD=Password is not correct
+NET_LOGIN_ERROR_USER=The account does not exist
+NET_LOGIN_ERROR_TIMEOUT=Time out for log in returned value
+NET_LOGIN_ERROR_RELOGGIN=The account has logged in 
+NET_LOGIN_ERROR_LOCKED=The account has been locked
+NET_LOGIN_ERROR_BLACKLIST=The account has been in the block list
+NET_LOGIN_ERROR_BUSY=Resources are not sufficient System is busy now
+NET_LOGIN_ERROR_CONNECT=Time out Please check network and try again
+NET_LOGIN_ERROR_NETWORK=Network connection failed
+NET_LOGIN_ERROR_SUBCONNECT=Successfully logged in the device but can not create video channel Please check network connection
+NET_LOGIN_ERROR_MAXCONNECT=Exceed the max connect number
+NET_LOGIN_ERROR_PROTOCOL3_ONLY=Only support 3 protocol
+NET_LOGIN_ERROR_UKEY_LOST=There is no USB or USB info error
+NET_LOGIN_ERROR_NO_AUTHORIZED=Client-end IP address has no right to login
+NET_LOGIN_ERROR_USER_OR_PASSOWRD=user or password error 
+NET_LOGIN_ERROR_DEVICE_NOT_INIT=cannot login because the device has not been init,please init the device and then login
+NET_RENDER_SOUND_ON_ERROR=Error occurs when Render library open audio
+NET_RENDER_SOUND_OFF_ERROR=Error occurs when Render library close audio 
+NET_RENDER_SET_VOLUME_ERROR=Error occurs when Render library control volume
+NET_RENDER_ADJUST_ERROR=Error occurs when Render library set video parameter
+NET_RENDER_PAUSE_ERROR=Error occurs when Render library pause play
+NET_RENDER_SNAP_ERROR=Render library snapshot error
+NET_RENDER_STEP_ERROR=Render library stepper error
+NET_RENDER_FRAMERATE_ERROR=Error occurs when Render library set frame rate
+NET_RENDER_DISPLAYREGION_ERROR=Error occurs when Render lib setting show region
+NET_RENDER_GETOSDTIME_ERROR=An error occurred when Render library getting current play time
+NET_GROUP_EXIST=Group name has been existed
+NET_GROUP_NOEXIST=The group name does not exist 
+NET_GROUP_RIGHTOVER=The group right exceeds the right list!
+NET_GROUP_HAVEUSER=The group can not be removed since there is user in it!
+NET_GROUP_RIGHTUSE=The user has used one of the group right It can not be removed 
+NET_GROUP_SAMENAME=New group name has been existed
+NET_USER_EXIST=The user name has been existed
+NET_USER_NOEXIST=The account does not exist
+NET_USER_RIGHTOVER=User right exceeds the group right 
+NET_USER_PWD=Reserved account It does not allow to be modified
+NET_USER_FLASEPWD=password is not correct
+NET_USER_NOMATCHING=Password is invalid
+NET_USER_INUSE=account in use
+NET_ERROR_GETCFG_ETHERNET=Failed to get network card setup
+NET_ERROR_GETCFG_WLAN=Failed to get wireless network information
+NET_ERROR_GETCFG_WLANDEV=Failed to get wireless network device
+NET_ERROR_GETCFG_REGISTER=Failed to get actively registration parameter
+NET_ERROR_GETCFG_CAMERA=Failed to get camera property 
+NET_ERROR_GETCFG_INFRARED=Failed to get IR alarm setup
+NET_ERROR_GETCFG_SOUNDALARM=Failed to get audio alarm setup
+NET_ERROR_GETCFG_STORAGE=Failed to get storage position 
+NET_ERROR_GETCFG_MAIL=Failed to get mail setup
+NET_CONFIG_DEVBUSY=Can not set right now 
+NET_CONFIG_DATAILLEGAL=The configuration setup data are illegal
+NET_ERROR_GETCFG_DST=Failed to get DST setup
+NET_ERROR_SETCFG_DST=Failed to set DST 
+NET_ERROR_GETCFG_VIDEO_OSD=Failed to get video OSD setup
+NET_ERROR_SETCFG_VIDEO_OSD=Failed to set video OSD 
+NET_ERROR_GETCFG_GPRSCDMA=Failed to get CDMA\GPRS configuration
+NET_ERROR_SETCFG_GPRSCDMA=Failed to set CDMA\GPRS configuration
+NET_ERROR_GETCFG_IPFILTER= Failed to get IP Filter configuration
+NET_ERROR_SETCFG_IPFILTER=Failed to set IP Filter configuration
+NET_ERROR_GETCFG_TALKENCODE=Failed to get Talk Encode configuration
+NET_ERROR_SETCFG_TALKENCODE=Failed to set Talk Encode configuration
+NET_ERROR_GETCFG_RECORDLEN=Failed to get The length of the video package configuration
+NET_ERROR_SETCFG_RECORDLEN=Failed to set The length of the video package configuration
+NET_DONT_SUPPORT_SUBAREA=Not support Network hard disk partition
+NET_ERROR_GET_AUTOREGSERVER=Failed to get the register server information
+NET_ERROR_CONTROL_AUTOREGISTER=Failed to control actively registration
+NET_ERROR_DISCONNECT_AUTOREGISTER=Failed to disconnect actively registration
+NET_ERROR_GETCFG_MMS=Failed to get mms configuration
+NET_ERROR_SETCFG_MMS=Failed to set mms configuration
+NET_ERROR_GETCFG_SMSACTIVATION=Failed to get SMS configuration
+NET_ERROR_SETCFG_SMSACTIVATION=Failed to set SMS configuration
+NET_ERROR_GETCFG_DIALINACTIVATION=Failed to get activation of a wireless connection
+NET_ERROR_SETCFG_DIALINACTIVATION=Failed to set activation of a wireless connection
+NET_ERROR_GETCFG_VIDEOOUT=Failed to get the parameter of video output
+NET_ERROR_SETCFG_VIDEOOUT=Failed to set the configuration of video output
+NET_ERROR_GETCFG_OSDENABLE=Failed to get osd overlay enabling
+NET_ERROR_SETCFG_OSDENABLE=Failed to set OSD overlay enabling
+NET_ERROR_SETCFG_ENCODERINFO=Failed to set digital input configuration of front encoders
+NET_ERROR_GETCFG_TVADJUST=Failed to get TV adjust configuration
+NET_ERROR_SETCFG_TVADJUST=Failed to set TV adjust configuration
+NET_ERROR_CONNECT_FAILED=Failed to request to establish a connection
+NET_ERROR_SETCFG_BURNFILE=Failed to request to upload burn files
+NET_ERROR_SNIFFER_GETCFG=Failed to get capture configuration information
+NET_ERROR_SNIFFER_SETCFG=Failed to set capture configuration information
+NET_ERROR_DOWNLOADRATE_GETCFG=Failed to get download restrictions information
+NET_ERROR_DOWNLOADRATE_SETCFG=Failed to set download restrictions information
+NET_ERROR_SEARCH_TRANSCOM=Failed to query serial port parameters
+NET_ERROR_GETCFG_POINT=Failed to get the preset info
+NET_ERROR_SETCFG_POINT=Failed to set the preset info
+NET_SDK_LOGOUT_ERROR=SDK log out the device abnormally
+NET_ERROR_GET_VEHICLE_CFG=Failed to get vehicle configuration
+NET_ERROR_SET_VEHICLE_CFG=Failed to set vehicle configuration
+NET_ERROR_GET_ATM_OVERLAY_CFG=Failed to get ATM overlay configuration
+NET_ERROR_SET_ATM_OVERLAY_CFG=Failed to set ATM overlay configuration
+NET_ERROR_GET_ATM_OVERLAY_ABILITY=Failed to get ATM overlay ability
+NET_ERROR_GET_DECODER_TOUR_CFG=Failed to get decoder tour configuration
+NET_ERROR_SET_DECODER_TOUR_CFG=Failed to set decoder tour configuration
+NET_ERROR_CTRL_DECODER_TOUR=Failed to control decoder tour
+NET_GROUP_OVERSUPPORTNUM=Beyond the device supports for the largest number of user groups
+NET_USER_OVERSUPPORTNUM=Beyond the device supports for the largest number of users 
+NET_ERROR_GET_SIP_CFG=Failed to get SIP configuration
+NET_ERROR_SET_SIP_CFG=Failed to set SIP configuration
+NET_ERROR_GET_SIP_ABILITY=Failed to get SIP capability
+NET_ERROR_GET_WIFI_AP_CFG=Failed to get "WIFI ap' configuration 
+NET_ERROR_SET_WIFI_AP_CFG=Failed to set "WIFI ap" configuration  
+NET_ERROR_GET_DECODE_POLICY=Failed to get decode policy 
+NET_ERROR_SET_DECODE_POLICY=Failed to set decode policy 
+NET_ERROR_TALK_REJECT=refuse talk
+NET_ERROR_TALK_OPENED=talk has opened by other client
+NET_ERROR_TALK_RESOURCE_CONFLICIT=resource conflict
+NET_ERROR_TALK_UNSUPPORTED_ENCODE=unsupported encode type
+NET_ERROR_TALK_RIGHTLESS=no right
+NET_ERROR_TALK_FAILED=request failed
+NET_ERROR_GET_MACHINE_CFG=Failed to get device relative config
+NET_ERROR_SET_MACHINE_CFG=Failed to set device relative config
+NET_ERROR_GET_DATA_FAILED=get data failed
+NET_ERROR_MAC_VALIDATE_FAILED=MAC validate failed
+NET_ERROR_GET_INSTANCE=Failed to get server instance 
+NET_ERROR_JSON_REQUEST=Generated json string is error
+NET_ERROR_JSON_RESPONSE=The responding json string is error
+NET_ERROR_VERSION_HIGHER=The protocol version is lower than current version
+NET_SPARE_NO_CAPACITY=Hotspare disk operation failed The capacity is low
+NET_ERROR_SOURCE_IN_USE=Display source is used by other output
+NET_ERROR_REAVE=advanced users grab low-level user resource
+NET_ERROR_NETFORBID=net forbid
+NET_ERROR_GETCFG_MACFILTER=get MAC filter configuration error
+NET_ERROR_SETCFG_MACFILTER=set MAC filter configuration error
+NET_ERROR_GETCFG_IPMACFILTER=get IP/MAC filter configuration error
+NET_ERROR_SETCFG_IPMACFILTER=set IP/MAC filter configuration error
+NET_ERROR_OPERATION_OVERTIME=operation over time 
+NET_ERROR_SENIOR_VALIDATE_FAILED=senior validation failure
+NET_ERROR_DEVICE_ID_NOT_EXIST=device ID is not exist
+NET_ERROR_UNSUPPORTED=unsupport operation
+NET_ERROR_PROXY_DLLLOAD=proxy dll load error
+NET_ERROR_PROXY_ILLEGAL_PARAM= proxy user parameter is not legal
+NET_ERROR_PROXY_INVALID_HANDLE=handle invalid
+NET_ERROR_PROXY_LOGIN_DEVICE_ERROR=login device error
+NET_ERROR_PROXY_START_SERVER_ERROR=start proxy server error
+NET_ERROR_SPEAK_FAILED=request speak failed
+NET_ERROR_NOT_SUPPORT_F6=unsupport F6
+NET_ERROR_CD_UNREADY=CD is not ready
+NET_ERROR_DIR_NOT_EXIST=Directory does not exist
+NET_ERROR_UNSUPPORTED_SPLIT_MODE=The device does not support the segmentation model
+NET_ERROR_OPEN_WND_PARAM=Open the window parameter is illegal
+NET_ERROR_LIMITED_WND_COUNT=Open the window more than limit
+NET_ERROR_UNMATCHED_REQUEST=Request command with the current pattern don't match
+NET_RENDER_ENABLELARGEPICADJUSTMENT_ERROR=Render Library to enable high-definition image internal adjustment strategy error
+NET_ERROR_UPGRADE_FAILED=Upgrade equipment failure
+NET_ERROR_NO_TARGET_DEVICE=Can't find the target device
+NET_ERROR_NO_VERIFY_DEVICE=Can't find the verify device 
+NET_ERROR_CASCADE_RIGHTLESS=No cascade permissions
+NET_ERROR_LOW_PRIORITY=low priority
+NET_ERROR_REMOTE_REQUEST_TIMEOUT=The remote device request timeout
+NET_ERROR_LIMITED_INPUT_SOURCE=Input source beyond maximum route restrictions
+NET_ERROR_SET_LOG_PRINT_INFO=Failed to set log print
+NET_ERROR_PARAM_DWSIZE_ERROR="dwSize" is not initialized in input param
+NET_ERROR_LIMITED_MONITORWALL_COUNT=TV wall exceed limit
+NET_ERROR_PART_PROCESS_FAILED=Fail to execute part of the process
+NET_ERROR_TARGET_NOT_SUPPORT=Fail to transmit due to not supported by target
+NET_ERROR_VISITE_FILE=Access to the file failed
+NET_ERROR_DEVICE_STATUS_BUSY=Device busy
+NET_USER_PWD_NOT_AUTHORIZED=Fail to change the password
+NET_USER_PWD_NOT_STRONG=Password strength is not enough
+NET_ERROR_NO_SUCH_CONFIG=No corresponding setup
+NET_ERROR_AUDIO_RECORD_FAILED=Failed to record audio
+NET_ERROR_SEND_DATA_FAILED=Failed to send out data 
+NET_ERROR_OBSOLESCENT_INTERFACE=Abandoned port 
+NET_ERROR_INSUFFICIENT_INTERAL_BUF=Internal buffer is not sufficient 
+NET_ERROR_NEED_ENCRYPTION_PASSWORD=verify password when changing device IP
+NET_ERROR_NOSUPPORT_RECORD =device not support the record
+NET_ERROR_SERIALIZE_ERROR=Failed to serialize data
+NET_ERROR_DESERIALIZE_ERROR=Failed to deserialize data
+NET_ERROR_LOWRATEWPAN_ID_EXISTED=the wireless id is already existed
+NET_ERROR_LOWRATEWPAN_ID_LIMIT=the wireless id limited
+NET_ERROR_LOWRATEWPAN_ID_ABNORMAL=add the wireless id abnormaly
+NET_ERROR_ENCRYPT=encrypt data fail
+NET_ERROR_PWD_ILLEGAL=new password illegal
+NET_ERROR_DEVICE_ALREADY_INIT=device is already initiation
+NET_ERROR_SECURITY_CODE=security code check out fail
+NET_ERROR_SECURITY_CODE_TIMEOUT=security code out of time
+NET_ERROR_GET_PWD_SPECI=get password specification fail
+NET_ERROR_NO_AUTHORITY_OF_OPERATION=no authority of operation 
+NET_ERROR_DECRYPT=decrypt data fail
+NET_ERROR_2D_CODE=2D code check out fail
+NET_ERROR_INVALID_REQUEST=Invalid request
+NET_ERROR_PWD_RESET_DISABLE=password reset unable
+NET_ERROR_PLAY_PRIVATE_DATA=Failed to display private data,such as rule box
+NET_ERROR_ROBOT_OPERATE_FAILED=robot operate failed
+NET_ERROR_PHOTOSIZE_EXCEEDSLIMIT=photo size exceeds limit
+NET_ERROR_USERID_INVALID=Invalid userId 
+NET_ERROR_EXTRACTFEATURE_FAILED=photo extract feature failed
+NET_ERROR_PHOTO_EXIST=photo exist
+NET_ERROR_PHOTO_OVERFLOW=photo over flow
+NET_ERROR_CHANNEL_ALREADY_OPENED=channel has already been opened
+NET_ERROR_CREATE_SOCKET=create socket error
+NET_ERROR_CHANNEL_NUM=Invalid channel number
+NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_ID_EXCEED=target recognition server group id exceed
+
+# RealPlay Info
+START_REALPLAY=Start RealPlay
+STOP_REALPLAY=Stop RealPlay
+ATTACH=Attach
+DETACH=Detach
+REALPLAY_SUCCEED=Success to start realPlay
+REALPLAY_FAILED=Failed to start realPlay
+
+CHN=Chn
+CHANNEL=Channel
+STREAM_TYPE=Stream
+MASTER_AND_SUB_STREAM=Main/Sub stream
+MASTER_STREAM=Main Stream
+SUB_STREAM=Sub Stream
+
+# Capture Picture
+LOCAL_CAPTURE=Local Capture
+REMOTE_CAPTURE=Remote Capture
+TIMER_CAPTURE=Timer Capture
+STOP_CAPTURE=Stop Capture
+INTERVAL=Interval
+
+TIME_INTERVAL_ILLEGAL=Time Interval Illegal 
+PLEASE_START_REALPLAY=Please Start Real Play
+
+# PTZ Info 
+PTZ_CONTROL=PTZControl
+LEFT_UP=LeftUp
+UP=Up
+RIGHT_UP=RightUp
+LEFT=Left
+RIGHT=Right
+LEFT_DOWN=LeftDown
+DOWN=Down
+RIGHT_DOWN=RightDown
+
+ZOOM_ADD=Zoom+
+ZOOM_DEC=Zoom-
+FOCUS_ADD=Focus+
+FOCUS_DEC=Focus-
+IRIS_ADD=Iris+
+IRIS_DEC=Iris-
+
+SPEED=Speed
+
+#ITS
+EVENT_INFO=Event Information
+EVENT_NAME=Event Name
+EVENT_TIME=Event Time
+EVENT_PICTURE=Event and Picture
+PLATE_PICTURE=Plate Picture
+LICENSE_PLATE=License Plate
+PLATE_TYPE=Plate Type
+PLATE_COLOR=Plate Color
+VEHICLE_TYPE=Vehicle Type
+VEHICLE_SIZE=Vehicle Size
+VEHICLE_COLOR=Vehicle Color
+FILE_COUNT=File Count
+FILE_INDEX=File Index
+GROUP_ID=Group ID
+ILLEGAL_PLACE=Illegal Place
+LANE_NUMBER=Lane Number
+MANUAL_CAPTURE=Manual Capture
+OPEN_STROBE=Open Strobe
+CLOSE_STROBE=Close Strobe
+INDEX=Index
+
+OPERATE=Operate
+FUNCTION=Function
+
+UNDEFINED_COLOR=Undefined Color
+BLACK=Black
+WHITE=White
+RED=Red
+BLUE=Blue
+GREEN=Green
+YELLOW=Yellow
+GRAY=Gray
+ORANGE=Orange
+
+LIGHT_DUTY=Light Duty
+MEDIUM=Medium
+OVER_SIZE=Over Size
+MINI_SIZE=Miniature Size
+LARGE_SIZE=Large Size
+
+NO_PLATENUMBER=No PlateNumber
+MANUALSNAP_SUCCEED=Manual snap succeed
+MANUALSNAP_FAILED=Manual snap failed
+
+OPEN_STROBE_SUCCEED=Open strobe succeed
+OPEN_STROBE_FAILED=Open strobe failed
+CLOSE_STROBE_SUCCEED=Close strobe succeed
+CLOSE_STROBE_FAILED=Close strobe failed
+
+EVENT_IVS_TRAFFICJUNCTION=Junction
+EVENT_IVS_TRAFFIC_RUNREDLIGHT=RunRedLight
+EVENT_IVS_TRAFFIC_OVERLINE=OverLine
+EVENT_IVS_TRAFFIC_RETROGRADE=ReTrograde
+EVENT_IVS_TRAFFIC_TURNLEFT=TurnLeft
+EVENT_IVS_TRAFFIC_TURNRIGHT=TurnRight
+EVENT_IVS_TRAFFIC_UTURN=UTurn
+EVENT_IVS_TRAFFIC_OVERSPEED=OverSpeed
+EVENT_IVS_TRAFFIC_UNDERSPEED=UnderSpeed
+EVENT_IVS_TRAFFIC_PARKING=Parking
+EVENT_IVS_TRAFFIC_WRONGROUTE=WrongRoute
+EVENT_IVS_TRAFFIC_CROSSLANE=CrossLane
+EVENT_IVS_TRAFFIC_OVERYELLOWLINE=OverYellowLine
+EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE=YellowPlateInLane
+EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY=PedestrainPriority
+EVENT_IVS_TRAFFIC_MANUALSNAP=ManualSnap
+EVENT_IVS_TRAFFIC_VEHICLEINROUTE=VehicleInRoute
+EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE=VehicleInBusRoute
+EVENT_IVS_TRAFFIC_BACKING=Backing
+EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING=ParkingSpaceParking
+EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING=ParkingSpaceNoParking
+EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT=WithoutSafeBelt
+
+# DownLoad Info
+DOWNLOAD_RECORD_BYTIME=DownloadRecordByTime
+DOWNLOAD_RECORD_BYFILE=DownloadRecordByFile
+QUERY=Query 
+DOWNLOAD=DownLoad
+STOP_DOWNLOAD=StopDownLoad
+START_TIME=Start Time
+END_TIME=End Time
+RECORD_TYPE=Record Type
+
+GENERAL_RECORD=General Record
+ALARM_RECORD=Alarm Record
+MOTION_DETECTION=Motion Detection Record
+CARD_NUMBER_RECORD=Card Number Record
+INTELLIGENT_DETECTION=intelligent Record
+POS_RECORD=pos Record
+
+
+QUERY_RECORD_IS_NOT_EXIST=Query record is not exist
+PLEASE_CHECK_RECORD_TIME=Please check record time
+PLEASE_SELECT_TIME_AGAIN=Please select time again,max time different is 6 hour
+DOWNLOAD_COMPLETED=Download completed
+
+PLEASE_FIRST_QUERY_RECORD=Please first query record
+PLEASE_FIRST_SELECT_ROW_WITH_DATA=Please first select row with data
+
+# Time Set
+YEAR=Year
+MONTH=Month
+DAY=Day
+HOUR=Hour
+MINUTE=Minute
+SECOND=Second
+CONFIRM=Confirm
+CANCEL=Cancel
+DATE_CHOOSER=Date Chooser
+
+MONDAY=Mon
+TUESDAY=Tue
+WEDNESDAY=Wed
+THURSDAY=Thur
+FRIDAY=Fri
+SATURDAY=Sat
+SUNDAY=Sun
+
+# Talk
+TRANSMIT_TYPE=Transmit Type
+LOCAL_TRANSMIT_TYPE=Local(not transmit)
+REMOTE_TRANSMIT_TYPE=Remote(transmit)
+TRANSMIT_CHANNEL=Speaker Channel
+START_TALK=Start Talk
+STOP_TALK=Stop Talk
+TALK_FAILED=Talk Failed
+
+# DeviceSearchAndInt
+DEVICESEARCH_OPERATE=DeviceSearch Operate
+DEVICESEARCH_RESULT=DeviceSearch Result
+DEVICEINIT=DeviceInit
+
+DEVICESEARCH=DeviceSearch
+DEVICE_POINT_TO_POINT_SEARCH=Device IP Point To Point Search
+
+START_SEARCH=Start Search
+STOP_SEARCH=Stop Search
+
+START_IP=Start IP
+END_IP=End IP
+
+DEVICE_TYPE=Device Type
+MAC=MAC
+SN=SN
+DEVICE_INIT_STATE=Initialized State
+INIT_PASSWD=Initialization Password
+PHONE=Phone
+MAIL=Mail
+IP_VERSION=IP Version
+SUB_MASK=Sub Mask
+GETWAY=GetWay
+DETAIL_TYPE=Detail Type
+HTTP_PORT=HTTP Port
+LOCAL_IP=local ip
+CONFIRM_PASSWORD=Confirm Password
+
+OLD_DEVICE=Old Device
+DONOT_SUPPORT_INITIALIZATION=Do not support initialization
+NOT_INITIALIZED=Uninitialized
+INITIALIZED=Initialized
+
+THE_IP_CONTROL_SCOPE=The scope is too large, please control it between the 1000
+PLEASE_FIRST_SELECT_INITIALIZED_DEVICE=Please first select initialized device
+PLEASE_INPUT_PHONE=Please input phone
+PLEASE_INPUT_MAIL=Please input mail
+INCONSISTENT=The password and the confirm password are inconsistent
+PLEASE_CHECK_IP=Please check IP
+
+SEARCHING_WAITING=Searching, please waiting
+
+START_LISTEN=Start Listen
+STOP_LISTEN=Stop Listen
+SHOW_ALARM_EVENT=Show Alarm Event Info
+ALARM_LISTEN_FAILED=Alarm Listen Failed
+ALARM_MESSAGE=Alarm Message
+
+EXTERNAL_ALARM=External alarm 
+MOTION_ALARM=Motion detection alarm 
+VIDEOLOST_ALARM=Video loss alarm 
+SHELTER_ALARM=Camera masking alarm 
+DISKFULL_ALARM=HDD full alarm 
+DISKERROR_ALARM=HDD error alarm 
+START=start
+STOP=stop
+
+CURRENT_TIME=Current Time
+DEVICE_REBOOT=Device Reboot
+SYNCHRONIZE_TIME=Synchronize Time
+REBOOT=Reboot
+SET_TIME=Set Time
+GET_TIME=Get Time
+REBOOT_TIPS=Are you sure you want to reboot it?
+OPERATE_SUCCESS=Operate Success
+
+#FaceRecognition
+FACE_GROUP_ID=Group Id
+FACE_GROUP_NAME=Group Name
+PERSON_COUNT=Person Count
+
+GROUP_OPERATE=Group Operate
+PERSON_OPERATE=Person Operate
+
+FACE_RECOGNITION_EVENT=FaceRecognition Event
+FACE_DETECT_EVENT=FaceDetect Event
+
+GLOBAL_PICTURE=Global Picture
+PERSON_PICTURE=Person Picture
+CANDIDATE_PICTURE=Candidate Picture
+
+TIME=Time
+SEX=Sex
+AGE=Age
+COLOR=Color
+EYE=Eye
+MOUTH=Mouth
+MASK=Mask
+BEARD=Beard
+MALE=Male
+FEMALE=Female
+ID_CARD=Id Card
+OFFICE_CARD=office card
+PASSPORT=Passport
+UNIDENTIFIED=Unidentified
+HAVE_BEARD=Have Beard
+NO_BEARD=No Beard
+OPEN_MOUTH=Open Mouth
+CLOSE_MOUTH=Close Mouth
+YELLOW_COLOR=Yellow
+BLACK_COLOR=Black
+WHITE_COLOR=White
+OPEN_EYE=Open Eye
+CLOSE_EYE=Close Eye
+SMILE=Smile
+ANGER=Anger
+SADNESS=Sadness
+DISGUST=Disgust
+FEAR=Fear
+SURPRISE=Surprise
+NEUTRAL=Neutral
+LAUGH=Laugh
+WEAR_MASK=Wear Mask
+NO_MASK=No Mask
+WEAR_GLASSES=Wear Glasses
+NO_GLASSES=No Glasses
+UNKNOW=UnKnow
+UNLIMITED=Unlimited
+
+NAME=Name
+BIRTHDAY=Birthday
+ID_NO=Id No
+ID_TYPE=ID Type
+SIMILARITY=Similarity
+UID=UID
+STRANGER=Stranger
+GLASSES=glasses
+PICTURE_PATH=picture path
+FACE_LIBRARY_ID=face library id
+FACE_LIBRARY_NAME=face library name
+
+
+ADD=Add
+MODIFY=Modify
+FRESH=Fresh
+ADD_GROUP=Add Group
+MODIFY_GROUP=Modify Group
+DEL_GROUP=Delete Group
+DISPOSITION=Disposition
+DEL_DISPOSITION=Delete Disposition
+
+FIND_CONDITION=Find Condition
+FIND_PERSON=Find Person
+ADD_PERSON=Add Person
+MODIFY_PERSON=Modify Person
+DEL_PERSON=Delete Person
+
+PREVIOUSPAGE=Previous Page
+LASTPAGE=Last Page
+SELECT_PICTURE=Select Picture
+SEARCH_BY_PIC=Search by Picture
+DOWNLOAD_QUERY_PICTURE=Download the query Picture
+FACE_LIBRARY=face library
+HISTORY_LIBRARY=history library
+CHOOSE_FACE_PIC=Please select a face picture
+EVENT_TYPE=Event Type
+PAGES_NUMBER=Pages Number
+
+SIMILARITY_RANGE=Similarity range[0, 100]
+PLEASE_INPUT_GROUPNAME=Please input groupName
+PLEASE_SELECT_GROUP=Please select group
+
+PLEASE_SELECT_PERSON=Please select person
+PLEASE_ADD_DISPOSITION_INFO=Please add disposition info
+PLEASE_SELECT_DEL_DISPOSITION_INFO=Please select delDisposition info
+
+#AutoRegister
+AUTOREGISTER_LISTEN=AutoRegister Listen
+DEVICE_CONFIG=Device Configure
+DEVICE_LIST=Device List
+DEVICE_MANAGER=Device Manager
+ADD_DEVICE=Add Device
+MODIFY_DEVICE=Modify Device
+DELETE_DEVICE=Delete Device
+CLEAR_DEVICE=Clear Device
+IMPORT_DEVICE=Import Device
+EXPORT_DEVICE=Export Device
+DEVICE_ID=Device ID
+ENABLE=Enable
+REGISTER_ADDRESS=Register Address
+REGISTER_PORT=Register Port
+GET=Get
+SET=Set
+RECORD=Record
+DEVICE_LOGIN=Device has logged in
+
+ALREADY_EXISTED=Already existed
+ALREADY_EXISTED_WHETHER_OR_NOT_TO_COVER=Already existed, whether or not to cover(no, not export)
+FILE_OPEN_PLEASE_CLOSE_FILE=The file is opened, please first close the file
+IMPORT_COMPLETION=Import completed
+EXPORT_COMPLETION=Export completed
+FILE_NOT_EXIST=File is not existed
+
+PLEASE_INPUT=Please input 
+MAX_SUPPORT_100=Maximum support is 100
+
+#Attendance
+ATTENDANCE=Attendance
+USER_ID=User ID
+USER_NAME=User Name
+CARD_NO=Card No
+QUERY_CONDITION=Query Condition
+USER_OPERATE=User Operate
+FINGERPRINT_OPERATE=FingerPrint Operate
+OPERATE_BY_USER_ID=Operate FingerPrint By User ID
+OPERATE_BY_FINGERPRINT_ID=Operate FingerPrint By FingerPrint ID
+FINGERPRINT_ID=FingerPrint ID
+DELETE=Delete
+SEARCH=Search
+SEARCH_FINGERPRINT=Search FingerPrint
+ADD_FINGERPRINT=Add FingerPrint
+DELETE_FINGERPRINT=Delete FingerPrint
+SUBSCRIBE=Subscribe
+UNSUBSCRIBE=UnSubscribe
+USER_LIST=User List
+NEXT_PAGE=Next Page
+USER_INFO=User Info
+DOOROPEN_METHOD=Open Door Method
+FINGERPRINT=FingerPrint
+FINGERPRINT_INFO=FingerPrint Info
+FINGERPRINT_DATA=FingerPrint Data
+CARD=Card
+DELETE_FINGERPRINT_PROMPT=It will delete all fingerprint of this user
+SUBSCRIBE_FAILED=Subscribe failed
+FINGERPRINT_ID_ILLEGAL=FingerPrint id illegal
+FINGERPRINT_COLLECTION=FingerPrint Collection
+START_COLLECTION=Start Collection
+STOP_COLLECTION=Stop Collection
+IN_THE_COLLECTION=In collection...
+COLLECTION_COMPLETED=Collection completed
+COLLECTION_FAILED=Collection failed
+FINGERPRINT_ID_NOT_EXIST=FingerPrint Id not exist
+USER_ID_EXCEED_LENGTH=User id exceed max length
+USER_NAME_EXCEED_LENGTH=User name exceed max length
+CARD_NO_EXCEED_LENGTH=Card no exceed max length
+CARD_NAME_EXCEED_LENGTH=Card name exceed max length
+CARD_PASSWD_EXCEED_LENGTH=Card password exceed max length
+
+#Gate
+GATE=FaceOpenDoor
+
+CARD_OPERATE=Card Operate
+CARD_INFO=Card Information
+CARD_MANAGER=Card Manager
+
+CLEAR=Clear
+
+OPEN_STATUS=Open Status
+OPEN_METHOD=Open Method
+
+TEMPERATURE=temperture
+MASK_STATUS=mask status
+
+CARD_UNKNOW=UnKnown Card
+CARD_GENERAL=General Card
+CARD_VIP=VIP Card
+CARD_GUEST=Guest Card
+CARD_PATROL=Patrol Card
+CARD_BACKLIST=BackList Card
+CARD_COERCE=Coerce Card
+CARD_POLLING=Polling Card
+CARD_MOTHERCARD=Mother Card
+
+STATE_UNKNOWN=UnKnown
+STATE_NORMAL=Normal
+STATE_LOSE=Lose
+STATE_LOGOFF=LogOff
+STATE_FREEZE=Freeze
+STATE_ARREARS=Arrears
+STATE_OVERDUE=OverDue
+STATE_PREARREARS=PreArrears
+
+RECORD_NO=Record No
+CARD_NAME=Card Name
+CARD_STATUS=Card Status
+CARD_PASSWORD=Card Password
+CARD_TYPE=Card Type
+CARD_NUM=Card Number
+USE_TIMES=Use Times
+IS_FIRST_ENTER=IsFirstEnter
+IS_VALID=IsValid
+VALID_PERIOD=Valid Period
+VALID_START_TIME=Valid Start Time
+VALID_END_TIME=Valid End Time
+FIRST_ENTER=FirstEnter
+NO_FIRST_ENTER=No FirstEnter
+VALID=Valid
+INVALID=Invalid
+
+PLEASE_SELECT_CARD=Please select card
+PLEASE_INPUT_CARDNO=Please input cardNo
+PLEASE_INPUT_USERID=Please input userId
+WANT_CLEAR_ALL_INFO=Do you want to clear all information ?
+
+ADD_CARD_INDO_FAILED=Failed to add card information 
+ADD_CARD_INFO_AND_PERSON_PICTURE_SUCCEED=Succeed to add card information and person picture
+ADD_CARD_INFO_SUCCEED_BUT_ADD_PERSON_PICTURE_FAILED=Succeed to add card information, but failed to add person picture
+CARD_EXISTED_ADD_PERSON_PICTURE_SUCCEED=Card information is existed, succeed to add person picture
+
+MODIFY_CARD_INFO_SUCCEED=Succeed to modify card information
+MODIFY_CARD_INFO_FAILED=Failed to modify card information
+MODIFY_CARD_INFO_AND_PERSON_PICTURE_SUCCEED=Succeed to modify card information and person picture
+MODIFY_CARD_INFO_SUCCEED_BUT_MODIFY_PERSON_PICTURE_FAILED=Succeed to modify card information, but failed to modify person picture
+
+NET_ACCESS_DOOROPEN_METHOD_UNKNOWN=UnKnow
+NET_ACCESS_DOOROPEN_METHOD_PWD_ONLY=Password
+NET_ACCESS_DOOROPEN_METHOD_CARD=Card
+NET_ACCESS_DOOROPEN_METHOD_CARD_FIRST=First Card Then Password
+NET_ACCESS_DOOROPEN_METHOD_PWD_FIRST=First Password Then Card 
+NET_ACCESS_DOOROPEN_METHOD_REMOTE=Remote Open
+NET_ACCESS_DOOROPEN_METHOD_BUTTON=Open Door Button
+NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT=fingerprint lock
+NET_ACCESS_DOOROPEN_METHOD_PWD_CARD_FINGERPRINT=password+swipe card+fingerprint combination unlock
+NET_ACCESS_DOOROPEN_METHOD_PWD_FINGERPRINT=password+fingerprint combination unlock
+NET_ACCESS_DOOROPEN_METHOD_CARD_FINGERPRINT=swipe card+fingerprint combination unlock
+NET_ACCESS_DOOROPEN_METHOD_PERSONS=multi-people unlock
+NET_ACCESS_DOOROPEN_METHOD_KEY=Key
+NET_ACCESS_DOOROPEN_METHOD_COERCE_PWD=Use force password to open the door   
+NET_ACCESS_DOOROPEN_METHOD_QRCODE=Use QR Code  
+NET_ACCESS_DOOROPEN_METHOD_FACE_RECOGNITION=face recogniton to open the door
+NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD=comparsion of face and ID card
+NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_AND_IDCARD=ID card  and compasion of face and ID card
+NET_ACCESS_DOOROPEN_METHOD_BLUETOOTH=Bluetooth
+NET_ACCESS_DOOROPEN_METHOD_CUSTOM_PASSWORD=Custom password
+NET_ACCESS_DOOROPEN_METHOD_USERID_AND_PWD=UserID and password
+NET_ACCESS_DOOROPEN_METHOD_FACE_AND_PWD=Face and password
+NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_PWD=Fingerprint and password
+NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE= FingerPrint and face
+NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE=Card and face
+NET_ACCESS_DOOROPEN_METHOD_FACE_OR_PWD=Face or password
+NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_PWD=Fingerprint or password
+NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE=Fingerprint or face
+NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE=Card or face
+NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT=Card or fingerprint
+NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE_AND_PWD=Fingerprint and face and password
+NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE_AND_PWD=Card and face and password
+NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_PWD=Card and fingerprint and password
+NET_ACCESS_DOOROPEN_METHOD_CARD_AND_PWD_AND_FACE=Card and password and face
+NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE_OR_PWD=Fingerprint or face or password
+NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE_OR_PWD=Card or face or password
+NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE=Card or fingerprint or face
+NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD=Card and fingerprint and face and password 
+NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD=Card or fingerprint or face or password
+NET_ACCESS_DOOROPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE=ID card  and compasion of face and ID card or card or face
+NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_OR_CARD_OR_FACE=ID card  and compasion of face or card or face
+
+#ThermalCamera
+THERMAL_CAMERA=Thermal Camera
+THERMAL_OPERATE=Operate
+POINT_QUERY=Query Point
+ITEM_QUERY=Query Item
+TEMPER_QUERY=Query Temperature 
+HEATMAP=HeatMap
+POINT_TEMPER=Point Temperature
+ITEM_TEMPER=Item Temperature
+X=X
+Y=Y
+COORDINATE_ILLEGAL=Coordinate Illegal
+QUERY_RESULT=Query Result
+METER_TYPE=Meter Type
+TEMPER_UNIT=Temperature Unit
+TEMPER=Temperature
+UNKNOWN=Unknown
+SPOT=Spot
+LINE=Line
+AREA=Area
+CENTIGRADE=Celsius
+FAHRENHEIT=Fahrenheit
+PRESET_ID=Preset Id
+RULE_ID=Rule Id
+TEMPER_AVER=Average Temperature
+TEMPER_MAX=Maximum Temperature
+TEMPER_MIN=Minimum Temperature
+TEMPER_MID=Middle Temperature
+TEMPER_STD=Standard Deviation
+INPUT_ILLEGAL=Input Illegal
+TEMPER_INFO=Temperature Info
+FIVE_MINUTES=Five Minutes
+TEN_MINUTES=Ten Minutes
+FIFTEEN_MINUTES=Fifteen Minutes
+THIRTY_MINUTES=Thirty Minutes
+SAVE_PERIOD=Save Period
+QUERY_LIST=Query List
+RECORD_TIME=Record Time
+ITEM_NAME=Name
+COORDINATE=Coordinate
+NO_RECORD=No Record
+HEATMAP_OPERATE=Operate
+IDLE=Idle
+ACQUIRING=Acquiring
+RADIOMETRY_ATTACH=Attach
+RADIOMETRY_DETACH=Detach
+RADIOMETRY_FETCH=Fetch
+SAVE_HEATMAP=Save HeatMap
+HEATMAP_METADATA_INFO=HeatMap MetaData
+HEIGHT=Height
+WIDTH=Width
+LENGTH=Size
+SENSOR_TYPE=Sensor Type
+HEATMAP_SAVE_SUCCESS=HeatMap Save Success
+
+#matrix screen
+MATRIX_SCREEN=Lattice Screen
+PASSING_STATE=Passing state
+PASSING_CAR=pass car
+NO_CAR=no car
+IN_TIME=Entry time
+OUT_TIME=departure time
+PLATE_NUMBER=plate number
+CAR_OWNER=car owner
+PARKING_TIME=parking time
+USER_TYPE=user type
+MONTHLY_CARD_USER=monthly card user
+ANNUAL_CARD_USER=annual card user
+LONG_TERM_USER=long term user/VIP
+TEMPORARY_USER=temporary user/Visitor
+PARKING_CHARGE=parking charge
+DAYS_DUE=days due
+REMAINING_PARKING_SPACES=Remaining parking spaces
+VEHICLES_NOT_ALLOWED_TO_PASS=vehicles not allowed to pass
+ALLOWED_VEHICLES_TO_PASS=allowed vehicles to pass
+SET_UP=set up
+SUCCESSFULLY_ISSUED=Successfully issued
+DELIVERY FAILED=Delivery failed
+CUSTOM_USER_CLASS=Custom user class
+REMARKS_INFORMATION=Remarks information
+CUSTOM_INFORMATION=Custom information
+
+# human number statistic
+HUMAN_NUMBER_STATISTIC_TITLE=Human Number Statistic
+HUMAN_NUMBER_STATISTIC_CONTROL=Human Number Statistic Control
+
+HUMAN_NUMBER_STATISTIC_EVENT_TITLE=Human Number Statistic Event List
+
+HUMAN_NUMBER_STATISTIC_EVENT_CHANNEL=Channel
+HUMAN_NUMBER_STATISTIC_EVENT_TIME=EventTime
+HUMAN_NUMBER_STATISTIC_EVENT_HOUR_IN=HourIn
+HUMAN_NUMBER_STATISTIC_EVENT_HOUR_OUT=HourOut
+HUMAN_NUMBER_STATISTIC_EVENT_TODAY_IN=TodayIn
+HUMAN_NUMBER_STATISTIC_EVENT_TODAY_OUT=TodayOut
+HUMAN_NUMBER_STATISTIC_EVENT_TOTAL_IN=TotalIn
+HUMAN_NUMBER_STATISTIC_EVENT_TOTAL_OUT=TotalOut
+
+HUMAN_NUMBER_STATIC_EVENT_OSD_CLEAR=OSD Clear
+
+VTO_ALARM_EVENT_ROOM_NO=RoomNo.
+VTO_ALARM_EVENT_CARD_NO=CardNo.
+VTO_ALARM_EVENT_TIME=Time
+VTO_ALARM_EVENT_OPEN_METHOD=OpenMethod
+VTO_ALARM_EVENT_STATUS=Status
+
+VTO_REAL_LOAD_ROOM_NO=RoomNo.
+VTO_REAL_LOAD_CARD_NO=CardNO.
+VTO_REAL_LOAD_TIME=Time
+VTO_REAL_LOAD_EVENT_INFO=EventInfo
+
+VTO_OPERATE_MANAGER_TITLE=Card&Fingerprint&FaceManager
+VTO_OPERATE_MANAGER_REC_NO=RecNo.
+VTO_OPERATE_MANAGER_ROOM_NO=RoomNo.
+VTO_OPERATE_MANAGER_CARD_NO=CardNo.
+VTO_OPERATE_MANAGER_FINGER_PRINT_DATA=FingerprintData
+VTO_OPERATE_INFO_TITLE=Add
+
+VTO_OPERATE_COLLECTION_FINGER_PRINT_TITLE=CollectionFingerPrint
+
+DOOR_OPEN=Open Door
+DOOR_CLOSE=Close Door
+EVENT_OPERATE=Event Operate
+START_REAL_LOAD_PIC=StartRealLoad
+STOP_REAL_LOAD_PIC=StopRealLoad
+ALARM_EVENT=AlarmEvent
+REAL_LOAD_EVENT=RealLoadEvent
+COLLECTION_RESULT=CollectionResult
+NEED_FINGER_PRINT=Need FingerPrint
+FACE_INFO=FaceInfo
+OPEN=open
+VTO=VTO
+SCADA=SCADA
+TRAFFIC_ALLOW_LIST=Traffic Allow List
+MODIFY_CARD_FACE_FAILED=failed to modify face info.
+EM_MASK_STATE_UNKNOWN=unknown
+EM_MASK_STATE_NODISTI=unrecognized
+EM_MASK_STATE_NOMASK=Not wearing mask
+EM_MASK_STATE_WEAR=wearing mask
+END_SEARCH=End of query
+DOWNLOAD_PICTURE=download picture
+ENTER_PICTURE_PATH=Please enter the picture path
+LOADING=The equipment is being processed
+QUERY_CARD_EXIST_FAILED=Check if the cardNo exists failed
+CARD_EXIST=The cardNo already exists
+INPUT_ROOM_NO=please input room number
+ROOM_NO_EXCEED_LENGTH=room number exceed max length
+REMOVE_CARD_FACE_FAILED=remove card face failed
+STOP_LISTEN_FAILED=stop listen failed
+
+SCREEN_NUMBER=screen number
+TEXT_CONTENT=text content
+TEXT_CONTENT_TYPE=text content type
+TEXT_CONTENT_COLOR=text content color
+SCROLL_TYPE=scroll type
+SCROLL_SPEED=scroll speed
+
+ORDINARY=ordinary
+QR_CODE=QR code
+LOCAL_TIME=local time
+RESOURCE=resource
+
+NOT_ROLLING=not rolling 
+SCROLL_LEFT_AND_RIGHT=scroll left and right
+SCROLL_UP_AND_DOWN=scroll up and right
+
+NUMBER_STRING=number string
+VOICE_TEXT=vioce text
+ISSUED=issued
+PROMPT=Please add corresponding parameters
+
+
+SCADA_DEVICE_LIST=device list
+
+DEVICE_NAME=device name
+POINT_ID=point id
+IF_VALID_SIGNAL_POINT=valid signal point
+POINT_NAME=point name
+ALARM_DESCRIBE=alarm describe
+ALARM_LEVEL=alarm level
+ALARM_DELAY=alarm delay
+ALARM_TYPE=alarm type
+ALARM_TIME=alarm time
+COLLECT_TIME=collect time
+
+SCADA_POINT_LIST=point list
+SCADA_ATTACH_ALARM=attach alarm
+SCADA_ATTACH_INFO=attach info
+SCADA_ATTACH=start listen
+BTN_LIST = get
+
+ALLOWLIST_OPERATION=allowlist operation
+
+SINGLE_UPLOAD=single upload
+
+LICENSE_PLATE_RUN=The license plate to run
+FUZZY_QUERY=fuzzy query
+DELETE_ALL=delete all
+AUTHORIZATION=authorization
+UNAUTHORIZATION=unauthorized
+BATCH_UPLOAD=batch upload
+BROWSE=browse
+UPLOAD=upload
+QUERY_INFORMATION=query information
+DIALOG=dialog
+LICENSE_PLATE_NUMBER=license plate number
+MODIFY_PANEL=modify panel
+SERIAL_NUMBER=serial number
+OPEN_MODEL=open model
+LICENSE_PLATE_LENGTH_TOO_LONG=License plate length is too long
+NAME_TOO_LONG=The name is too long
+ADD_SUCCESS= add a success
+ADD_FAIL=add a fail
+DELETE_SUCCESS=delete a success
+DELETE_FAIL=delete a fail
+MODIFY_SUCCESS=modify the success
+MODIFY_FAIL=modify the fail
+UPLOAD_SUCCESS=Uploaded successfully
+ENTER_QUERY_DATA=Please enter the data to query
+FILLING_RULES=fill in legal characters
+UPLOAD_FAIL=upload fail
+UPLOADING=uploading
+SURE_UPLOAD=Are you sure to upload?
+DATA_NUMBER=pieces of data
+SELECT_DATA=Please select data
diff --git a/ard-work/src/main/resources/resources_zh_CN.properties b/ard-work/src/main/resources/resources_zh_CN.properties
new file mode 100644
index 0000000..fc6ce09
--- /dev/null
+++ b/ard-work/src/main/resources/resources_zh_CN.properties
@@ -0,0 +1 @@
+# FunctionList
FUNCTIONLIST=\u529F\u80FD\u5217\u8868
REALPLAY=\u5B9E\u65F6\u9884\u89C8
CAPTURE_PICTURE=\u6293\u62CD\u56FE\u7247
MULTIREALPLAY=\u53CC\u901A\u9053\u5B9E\u65F6\u9884\u89C8
DOWNLOAD_RECORD=\u4E0B\u8F7D\u5F55\u50CF
ITS_EVENT=\u667A\u80FD\u4EA4\u901A
TALK=\u8BED\u97F3\u5BF9\u8BB2
DEVICESEARCH_DEVICEINIT=\u8BBE\u5907\u641C\u7D22\u548C\u8BBE\u5907\u521D\u59CB\u5316
PTZ=\u4E91\u53F0\u63A7\u5236
FACERECOGNITION=\u76EE\u6807\u8BC6\u522B
ALARM_LISTEN=\u62A5\u8B66\u76D1\u542C
DEVICE_CONTROL=\u8BBE\u5907\u63A7\u5236
AUTOREGISTER=\u4E3B\u52A8\u6CE8\u518C

ONLINE=\u5728\u7EBF

# Login Info
DEVICE_IP=\u8BBE\u5907\u5730\u5740
DEVICE_PORT=\u7AEF\u53E3\u53F7
USERNAME=\u7528\u6237\u540D
PASSWORD=\u5BC6\u7801
IP=\u5730\u5740

LOGIN=\u767B\u5F55
LOGOUT=\u767B\u51FA

LOGIN_SUCCEED=\u767B\u5F55\u6210\u529F
LOGIN_FAILED=\u767B\u5F55\u5931\u8D25
DISCONNECT=\u8BBE\u5907\u65AD\u7EBF
DISCONNECT_RECONNECTING=\u8BBE\u5907\u65AD\u7EBF\uFF0C\u6B63\u5728\u91CD\u8FDE\u4E2D
PROMPT_MESSAGE=\u63D0\u793A\u4FE1\u606F
ERROR_MESSAGE=\u9519\u8BEF\u4FE1\u606F

SUCCEED=\u6210\u529F
FAILED=\u5931\u8D25

PLEASE_INPUT_DEVICE_IP=\u8BF7\u8F93\u5165\u8BBE\u5907\u5730\u5740
PLEASE_INPUT_DEVICE_PORT=\u8BF7\u8F93\u5165\u8BBE\u5907\u7AEF\u53E3\u53F7
PLEASE_INPUT_DEVICE_USERNAME=\u8BF7\u8F93\u5165\u7528\u6237\u540D
PLEASE_INPUT_DEVICE_PASSWORD=\u8BF7\u8F93\u5165\u5BC6\u7801
PLEASE_INPUT_CONFIRM_PASSWORD=\u8BF7\u8F93\u5165\u786E\u8BA4\u5BC6\u7801

# Error Info
NET_NOERROR=\u6CA1\u6709\u9519\u8BEF
NET_ERROR=\u672A\u77E5\u9519\u8BEF
NET_SYSTEM_ERROR=Windows\u7CFB\u7EDF\u51FA\u9519
NET_NETWORK_ERROR=\u7F51\u7EDC\u9519\u8BEF\uFF0C\u53EF\u80FD\u662F\u56E0\u4E3A\u7F51\u7EDC\u8D85\u65F6
NET_DEV_VER_NOMATCH=\u8BBE\u5907\u534F\u8BAE\u4E0D\u5339\u914D
NET_INVALID_HANDLE=\u53E5\u67C4\u65E0\u6548
NET_OPEN_CHANNEL_ERROR=\u6253\u5F00\u901A\u9053\u5931\u8D25
NET_CLOSE_CHANNEL_ERROR=\u5173\u95ED\u901A\u9053\u5931\u8D25
NET_ILLEGAL_PARAM=\u7528\u6237\u53C2\u6570\u4E0D\u5408\u6CD5
NET_SDK_INIT_ERROR=SDK\u521D\u59CB\u5316\u51FA\u9519
NET_SDK_UNINIT_ERROR=SDK\u6E05\u7406\u51FA\u9519
NET_RENDER_OPEN_ERROR=\u7533\u8BF7render\u8D44\u6E90\u51FA\u9519
NET_DEC_OPEN_ERROR=\u6253\u5F00\u89E3\u7801\u5E93\u51FA\u9519
NET_DEC_CLOSE_ERROR=\u5173\u95ED\u89E3\u7801\u5E93\u51FA\u9519
NET_MULTIPLAY_NOCHANNEL=\u591A\u753B\u9762\u9884\u89C8\u4E2D\u68C0\u6D4B\u5230\u901A\u9053\u6570\u4E3A0
NET_TALK_INIT_ERROR=\u5F55\u97F3\u5E93\u521D\u59CB\u5316\u5931\u8D25
NET_TALK_NOT_INIT=\u5F55\u97F3\u5E93\u672A\u7ECF\u521D\u59CB\u5316
NET_TALK_SENDDATA_ERROR=\u53D1\u9001\u97F3\u9891\u6570\u636E\u51FA\u9519
NET_REAL_ALREADY_SAVING=\u5B9E\u65F6\u6570\u636E\u5DF2\u7ECF\u5904\u4E8E\u4FDD\u5B58\u72B6\u6001
NET_NOT_SAVING=\u672A\u4FDD\u5B58\u5B9E\u65F6\u6570\u636E
NET_OPEN_FILE_ERROR=\u6253\u5F00\u6587\u4EF6\u51FA\u9519
NET_PTZ_SET_TIMER_ERROR=\u542F\u52A8\u4E91\u53F0\u63A7\u5236\u5B9A\u65F6\u5668\u5931\u8D25
NET_RETURN_DATA_ERROR=\u5BF9\u8FD4\u56DE\u6570\u636E\u7684\u6821\u9A8C\u51FA\u9519
NET_INSUFFICIENT_BUFFER=\u6CA1\u6709\u8DB3\u591F\u7684\u7F13\u5B58
NET_NOT_SUPPORTED=\u5F53\u524DSDK\u672A\u652F\u6301\u8BE5\u529F\u80FD
NET_NO_RECORD_FOUND=\u67E5\u8BE2\u4E0D\u5230\u5F55\u50CF
NET_NOT_AUTHORIZED=\u65E0\u64CD\u4F5C\u6743\u9650
NET_NOT_NOW=\u6682\u65F6\u65E0\u6CD5\u6267\u884C
NET_NO_TALK_CHANNEL=\u672A\u53D1\u73B0\u5BF9\u8BB2\u901A\u9053
NET_NO_AUDIO=\u672A\u53D1\u73B0\u97F3\u9891
NET_NO_INIT=\u7F51\u7EDCSDK\u672A\u7ECF\u521D\u59CB\u5316
NET_DOWNLOAD_END=\u4E0B\u8F7D\u5DF2\u7ED3\u675F
NET_EMPTY_LIST=\u67E5\u8BE2\u7ED3\u679C\u4E3A\u7A7A
NET_ERROR_GETCFG_SYSATTR=\u83B7\u53D6\u7CFB\u7EDF\u5C5E\u6027\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_SERIAL=\u83B7\u53D6\u5E8F\u5217\u53F7\u5931\u8D25
NET_ERROR_GETCFG_GENERAL=\u83B7\u53D6\u5E38\u89C4\u5C5E\u6027\u5931\u8D25
NET_ERROR_GETCFG_DSPCAP=\u83B7\u53D6DSP\u80FD\u529B\u63CF\u8FF0\u5931\u8D25
NET_ERROR_GETCFG_NETCFG=\u83B7\u53D6\u7F51\u7EDC\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_CHANNAME=\u83B7\u53D6\u901A\u9053\u540D\u79F0\u5931\u8D25
NET_ERROR_GETCFG_VIDEO=\u83B7\u53D6\u89C6\u9891\u5C5E\u6027\u5931\u8D25
NET_ERROR_GETCFG_RECORD=\u83B7\u53D6\u5F55\u8C61\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_PRONAME=\u83B7\u53D6\u89E3\u7801\u5668\u534F\u8BAE\u540D\u79F0\u5931\u8D25
NET_ERROR_GETCFG_FUNCNAME=\u83B7\u53D6232\u4E32\u53E3\u529F\u80FD\u540D\u79F0\u5931\u8D25
NET_ERROR_GETCFG_485DECODER=\u83B7\u53D6\u89E3\u7801\u5668\u5C5E\u6027\u5931\u8D25
NET_ERROR_GETCFG_232COM=\u83B7\u53D6232\u4E32\u53E3\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_ALARMIN=\u83B7\u53D6\u5916\u90E8\u62A5\u8B66\u8F93\u5165\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_ALARMDET=\u83B7\u53D6\u52A8\u6001\u68C0\u6D4B\u62A5\u8B66\u5931\u8D25
NET_ERROR_GETCFG_SYSTIME=\u83B7\u53D6\u8BBE\u5907\u65F6\u95F4\u5931\u8D25
NET_ERROR_GETCFG_PREVIEW=\u83B7\u53D6\u9884\u89C8\u53C2\u6570\u5931\u8D25
NET_ERROR_GETCFG_AUTOMT=\u83B7\u53D6\u81EA\u52A8\u7EF4\u62A4\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_VIDEOMTRX=\u83B7\u53D6\u89C6\u9891\u77E9\u9635\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_COVER=\u83B7\u53D6\u533A\u57DF\u906E\u6321\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_WATERMAKE=\u83B7\u53D6\u56FE\u8C61\u6C34\u5370\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_MULTICAST=\u83B7\u53D6\u914D\u7F6E\u5931\u8D25\u4F4D\u7F6E\uFF1A\u7EC4\u64AD\u7AEF\u53E3\u6309\u901A\u9053\u914D\u7F6E
NET_ERROR_SETCFG_GENERAL=\u4FEE\u6539\u5E38\u89C4\u5C5E\u6027\u5931\u8D25
NET_ERROR_SETCFG_NETCFG=\u4FEE\u6539\u7F51\u7EDC\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_CHANNAME=\u4FEE\u6539\u901A\u9053\u540D\u79F0\u5931\u8D25
NET_ERROR_SETCFG_VIDEO=\u4FEE\u6539\u89C6\u9891\u5C5E\u6027\u5931\u8D25
NET_ERROR_SETCFG_RECORD=\u4FEE\u6539\u5F55\u8C61\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_485DECODER=\u4FEE\u6539\u89E3\u7801\u5668\u5C5E\u6027\u5931\u8D25
NET_ERROR_SETCFG_232COM=\u4FEE\u6539232\u4E32\u53E3\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_ALARMIN=\u4FEE\u6539\u5916\u90E8\u8F93\u5165\u62A5\u8B66\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_ALARMDET=\u4FEE\u6539\u52A8\u6001\u68C0\u6D4B\u62A5\u8B66\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_SYSTIME=\u4FEE\u6539\u8BBE\u5907\u65F6\u95F4\u5931\u8D25
NET_ERROR_SETCFG_PREVIEW=\u4FEE\u6539\u9884\u89C8\u53C2\u6570\u5931\u8D25
NET_ERROR_SETCFG_AUTOMT=\u4FEE\u6539\u81EA\u52A8\u7EF4\u62A4\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_VIDEOMTRX=\u4FEE\u6539\u89C6\u9891\u77E9\u9635\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_COVER=\u4FEE\u6539\u533A\u57DF\u906E\u6321\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_WATERMAKE=\u4FEE\u6539\u56FE\u8C61\u6C34\u5370\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_WLAN=\u4FEE\u6539\u65E0\u7EBF\u7F51\u7EDC\u4FE1\u606F\u5931\u8D25
NET_ERROR_SETCFG_WLANDEV=\u9009\u62E9\u65E0\u7EBF\u7F51\u7EDC\u8BBE\u5907\u5931\u8D25
NET_ERROR_SETCFG_REGISTER=\u4FEE\u6539\u4E3B\u52A8\u6CE8\u518C\u53C2\u6570\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_CAMERA=\u4FEE\u6539\u6444\u50CF\u5934\u5C5E\u6027\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_INFRARED=\u4FEE\u6539\u7EA2\u5916\u62A5\u8B66\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_SOUNDALARM=\u4FEE\u6539\u97F3\u9891\u62A5\u8B66\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_STORAGE=\u4FEE\u6539\u5B58\u50A8\u4F4D\u7F6E\u914D\u7F6E\u5931\u8D25
NET_AUDIOENCODE_NOTINIT=\u97F3\u9891\u7F16\u7801\u63A5\u53E3\u6CA1\u6709\u6210\u529F\u521D\u59CB\u5316
NET_DATA_TOOLONGH=\u6570\u636E\u8FC7\u957F
NET_UNSUPPORTED=\u8BBE\u5907\u4E0D\u652F\u6301\u8BE5\u64CD\u4F5C
NET_DEVICE_BUSY=\u8BBE\u5907\u8D44\u6E90\u4E0D\u8DB3
NET_SERVER_STARTED=\u670D\u52A1\u5668\u5DF2\u7ECF\u542F\u52A8
NET_SERVER_STOPPED=\u670D\u52A1\u5668\u5C1A\u672A\u6210\u529F\u542F\u52A8
NET_LISTER_INCORRECT_SERIAL=\u8F93\u5165\u5E8F\u5217\u53F7\u6709\u8BEF
NET_QUERY_DISKINFO_FAILED=\u83B7\u53D6\u786C\u76D8\u4FE1\u606F\u5931\u8D25
NET_ERROR_GETCFG_SESSION=\u83B7\u53D6\u8FDE\u63A5Session\u4FE1\u606F
NET_USER_FLASEPWD_TRYTIME=\u8F93\u5165\u5BC6\u7801\u9519\u8BEF\u8D85\u8FC7\u9650\u5236\u6B21\u6570
NET_LOGIN_ERROR_PASSWORD=\u5BC6\u7801\u4E0D\u6B63\u786E
NET_LOGIN_ERROR_USER=\u5E10\u6237\u4E0D\u5B58\u5728
NET_LOGIN_ERROR_TIMEOUT=\u7B49\u5F85\u767B\u5F55\u8FD4\u56DE\u8D85\u65F6
NET_LOGIN_ERROR_RELOGGIN=\u5E10\u53F7\u5DF2\u767B\u5F55
NET_LOGIN_ERROR_LOCKED=\u5E10\u53F7\u5DF2\u88AB\u9501\u5B9A
NET_LOGIN_ERROR_BLACKLIST=\u5E10\u53F7\u5DF2\u88AB\u5217\u4E3A\u7981\u6B62\u540D\u5355
NET_LOGIN_ERROR_BUSY=\u8D44\u6E90\u4E0D\u8DB3\uFF0C\u7CFB\u7EDF\u5FD9
NET_LOGIN_ERROR_CONNECT=\u767B\u5F55\u8BBE\u5907\u8D85\u65F6\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u5E76\u91CD\u8BD5
NET_LOGIN_ERROR_NETWORK=\u7F51\u7EDC\u8FDE\u63A5\u5931\u8D25
NET_LOGIN_ERROR_SUBCONNECT=\u767B\u5F55\u8BBE\u5907\u6210\u529F\uFF0C\u4F46\u65E0\u6CD5\u521B\u5EFA\u89C6\u9891\u901A\u9053\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u72B6\u51B5
NET_LOGIN_ERROR_MAXCONNECT=\u8D85\u8FC7\u6700\u5927\u8FDE\u63A5\u6570
NET_LOGIN_ERROR_PROTOCOL3_ONLY=\u53EA\u652F\u63013\u4EE3\u534F\u8BAE
NET_LOGIN_ERROR_UKEY_LOST=\u672A\u63D2\u5165U\u76FE\u6216U\u76FE\u4FE1\u606F\u9519\u8BEF
NET_LOGIN_ERROR_NO_AUTHORIZED=\u5BA2\u6237\u7AEFIP\u5730\u5740\u6CA1\u6709\u767B\u5F55\u6743\u9650
NET_LOGIN_ERROR_USER_OR_PASSOWRD=\u8D26\u53F7\u6216\u5BC6\u7801\u9519\u8BEF
NET_LOGIN_ERROR_DEVICE_NOT_INIT=\u8BBE\u5907\u5C1A\u672A\u521D\u59CB\u5316\uFF0C\u4E0D\u80FD\u767B\u5F55\uFF0C\u8BF7\u5148\u521D\u59CB\u5316\u8BBE\u5907
NET_RENDER_SOUND_ON_ERROR=Render\u5E93\u6253\u5F00\u97F3\u9891\u51FA\u9519
NET_RENDER_SOUND_OFF_ERROR=Render\u5E93\u5173\u95ED\u97F3\u9891\u51FA\u9519
NET_RENDER_SET_VOLUME_ERROR=Render\u5E93\u63A7\u5236\u97F3\u91CF\u51FA\u9519
NET_RENDER_ADJUST_ERROR=Render\u5E93\u8BBE\u7F6E\u753B\u9762\u53C2\u6570\u51FA\u9519
NET_RENDER_PAUSE_ERROR=Render\u5E93\u6682\u505C\u64AD\u653E\u51FA\u9519
NET_RENDER_SNAP_ERROR=Render\u5E93\u6293\u56FE\u51FA\u9519
NET_RENDER_STEP_ERROR=Render\u5E93\u6B65\u8FDB\u51FA\u9519
NET_RENDER_FRAMERATE_ERROR=Render\u5E93\u8BBE\u7F6E\u5E27\u7387\u51FA\u9519
NET_RENDER_DISPLAYREGION_ERROR=Render\u5E93\u8BBE\u7F6E\u663E\u793A\u533A\u57DF\u51FA\u9519
NET_RENDER_GETOSDTIME_ERROR=Render\u5E93\u83B7\u53D6\u5F53\u524D\u64AD\u653E\u65F6\u95F4\u51FA\u9519
NET_GROUP_EXIST=\u7EC4\u540D\u5DF2\u5B58\u5728
NET_GROUP_NOEXIST=\u7EC4\u540D\u4E0D\u5B58\u5728
NET_GROUP_RIGHTOVER=\u7EC4\u7684\u6743\u9650\u8D85\u51FA\u6743\u9650\u5217\u8868\u8303\u56F4
NET_GROUP_HAVEUSER=\u7EC4\u4E0B\u6709\u7528\u6237\uFF0C\u4E0D\u80FD\u5220\u9664
NET_GROUP_RIGHTUSE=\u7EC4\u7684\u67D0\u4E2A\u6743\u9650\u88AB\u7528\u6237\u4F7F\u7528\uFF0C\u4E0D\u80FD\u5220\u9664
NET_GROUP_SAMENAME=\u65B0\u7EC4\u540D\u540C\u5DF2\u6709\u7EC4\u540D\u91CD\u590D
NET_USER_EXIST=\u7528\u6237\u5DF2\u5B58\u5728
NET_USER_NOEXIST=\u7528\u6237\u4E0D\u5B58\u5728
NET_USER_RIGHTOVER=\u7528\u6237\u6743\u9650\u8D85\u51FA\u7EC4\u6743\u9650
NET_USER_PWD=\u4FDD\u7559\u5E10\u53F7\uFF0C\u4E0D\u5BB9\u8BB8\u4FEE\u6539\u5BC6\u7801
NET_USER_FLASEPWD=\u5BC6\u7801\u4E0D\u6B63\u786E
NET_USER_NOMATCHING=\u5BC6\u7801\u4E0D\u5339\u914D
NET_USER_INUSE=\u8D26\u53F7\u6B63\u5728\u4F7F\u7528\u4E2D
NET_ERROR_GETCFG_ETHERNET=\u83B7\u53D6\u7F51\u5361\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_WLAN=\u83B7\u53D6\u65E0\u7EBF\u7F51\u7EDC\u4FE1\u606F\u5931\u8D25
NET_ERROR_GETCFG_WLANDEV=\u83B7\u53D6\u65E0\u7EBF\u7F51\u7EDC\u8BBE\u5907\u5931\u8D25
NET_ERROR_GETCFG_REGISTER=\u83B7\u53D6\u4E3B\u52A8\u6CE8\u518C\u53C2\u6570\u5931\u8D25
NET_ERROR_GETCFG_CAMERA=\u83B7\u53D6\u6444\u50CF\u5934\u5C5E\u6027\u5931\u8D25
NET_ERROR_GETCFG_INFRARED=\u83B7\u53D6\u7EA2\u5916\u62A5\u8B66\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_SOUNDALARM=\u83B7\u53D6\u97F3\u9891\u62A5\u8B66\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_STORAGE=\u83B7\u53D6\u5B58\u50A8\u4F4D\u7F6E\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_MAIL=\u83B7\u53D6\u90AE\u4EF6\u914D\u7F6E\u5931\u8D25
NET_CONFIG_DEVBUSY=\u6682\u65F6\u65E0\u6CD5\u8BBE\u7F6E
NET_CONFIG_DATAILLEGAL=\u914D\u7F6E\u6570\u636E\u4E0D\u5408\u6CD5
NET_ERROR_GETCFG_DST=\u83B7\u53D6\u590F\u4EE4\u65F6\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_DST=\u8BBE\u7F6E\u590F\u4EE4\u65F6\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_VIDEO_OSD=\u83B7\u53D6\u89C6\u9891OSD\u53E0\u52A0\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_VIDEO_OSD=\u8BBE\u7F6E\u89C6\u9891OSD\u53E0\u52A0\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_GPRSCDMA=\u83B7\u53D6CDMA\GPRS\u7F51\u7EDC\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_GPRSCDMA=\u8BBE\u7F6ECDMA\GPRS\u7F51\u7EDC\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_IPFILTER=\u83B7\u53D6IP\u8FC7\u6EE4\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_IPFILTER=\u8BBE\u7F6EIP\u8FC7\u6EE4\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_TALKENCODE=\u83B7\u53D6\u8BED\u97F3\u5BF9\u8BB2\u7F16\u7801\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_TALKENCODE=\u8BBE\u7F6E\u8BED\u97F3\u5BF9\u8BB2\u7F16\u7801\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_RECORDLEN=\u83B7\u53D6\u5F55\u50CF\u6253\u5305\u957F\u5EA6\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_RECORDLEN=\u8BBE\u7F6E\u5F55\u50CF\u6253\u5305\u957F\u5EA6\u914D\u7F6E\u5931\u8D25
NET_DONT_SUPPORT_SUBAREA=\u4E0D\u652F\u6301\u7F51\u7EDC\u786C\u76D8\u5206\u533A
NET_ERROR_GET_AUTOREGSERVER=\u83B7\u53D6\u8BBE\u5907\u4E0A\u4E3B\u52A8\u6CE8\u518C\u670D\u52A1\u5668\u4FE1\u606F\u5931\u8D25
NET_ERROR_CONTROL_AUTOREGISTER=\u4E3B\u52A8\u6CE8\u518C\u91CD\u5B9A\u5411\u6CE8\u518C\u9519\u8BEF
NET_ERROR_DISCONNECT_AUTOREGISTER=\u65AD\u5F00\u4E3B\u52A8\u6CE8\u518C\u670D\u52A1\u5668\u9519\u8BEF
NET_ERROR_GETCFG_MMS=\u83B7\u53D6mms\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_MMS=\u8BBE\u7F6Emms\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_SMSACTIVATION=\u83B7\u53D6\u77ED\u4FE1\u6FC0\u6D3B\u65E0\u7EBF\u8FDE\u63A5\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_SMSACTIVATION=\u8BBE\u7F6E\u77ED\u4FE1\u6FC0\u6D3B\u65E0\u7EBF\u8FDE\u63A5\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_DIALINACTIVATION=\u83B7\u53D6\u62E8\u53F7\u6FC0\u6D3B\u65E0\u7EBF\u8FDE\u63A5\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_DIALINACTIVATION=\u8BBE\u7F6E\u62E8\u53F7\u6FC0\u6D3B\u65E0\u7EBF\u8FDE\u63A5\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_VIDEOOUT=\u67E5\u8BE2\u89C6\u9891\u8F93\u51FA\u53C2\u6570\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_VIDEOOUT=\u8BBE\u7F6E\u89C6\u9891\u8F93\u51FA\u53C2\u6570\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_OSDENABLE=\u83B7\u53D6osd\u53E0\u52A0\u4F7F\u80FD\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_OSDENABLE=\u8BBE\u7F6Eosd\u53E0\u52A0\u4F7F\u80FD\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_ENCODERINFO=\u8BBE\u7F6E\u6570\u5B57\u901A\u9053\u524D\u7AEF\u7F16\u7801\u63A5\u5165\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_TVADJUST=\u83B7\u53D6TV\u8C03\u8282\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_TVADJUST=\u8BBE\u7F6ETV\u8C03\u8282\u914D\u7F6E\u5931\u8D25
NET_ERROR_CONNECT_FAILED=\u8BF7\u6C42\u5EFA\u7ACB\u8FDE\u63A5\u5931\u8D25
NET_ERROR_SETCFG_BURNFILE=\u8BF7\u6C42\u523B\u5F55\u6587\u4EF6\u4E0A\u4F20\u5931\u8D25
NET_ERROR_SNIFFER_GETCFG=\u83B7\u53D6\u6293\u5305\u914D\u7F6E\u4FE1\u606F\u5931\u8D25
NET_ERROR_SNIFFER_SETCFG=\u8BBE\u7F6E\u6293\u5305\u914D\u7F6E\u4FE1\u606F\u5931\u8D25
NET_ERROR_DOWNLOADRATE_GETCFG=\u67E5\u8BE2\u4E0B\u8F7D\u9650\u5236\u4FE1\u606F\u5931\u8D25
NET_ERROR_DOWNLOADRATE_SETCFG=\u8BBE\u7F6E\u4E0B\u8F7D\u9650\u5236\u4FE1\u606F\u5931\u8D25
NET_ERROR_SEARCH_TRANSCOM=\u67E5\u8BE2\u4E32\u53E3\u53C2\u6570\u5931\u8D25
NET_ERROR_GETCFG_POINT=\u83B7\u53D6\u9884\u5236\u70B9\u4FE1\u606F\u9519\u8BEF
NET_ERROR_SETCFG_POINT=\u8BBE\u7F6E\u9884\u5236\u70B9\u4FE1\u606F\u9519\u8BEF
NET_SDK_LOGOUT_ERROR=SDK\u6CA1\u6709\u6B63\u5E38\u767B\u51FA\u8BBE\u5907
NET_ERROR_GET_VEHICLE_CFG=\u83B7\u53D6\u8F66\u8F7D\u914D\u7F6E\u5931\u8D25
NET_ERROR_SET_VEHICLE_CFG=\u8BBE\u7F6E\u8F66\u8F7D\u914D\u7F6E\u5931\u8D25
NET_ERROR_GET_ATM_OVERLAY_CFG=\u83B7\u53D6atm\u53E0\u52A0\u914D\u7F6E\u5931\u8D25
NET_ERROR_SET_ATM_OVERLAY_CFG=\u8BBE\u7F6Eatm\u53E0\u52A0\u914D\u7F6E\u5931\u8D25
NET_ERROR_GET_ATM_OVERLAY_ABILITY=\u83B7\u53D6atm\u53E0\u52A0\u80FD\u529B\u5931\u8D25
NET_ERROR_GET_DECODER_TOUR_CFG=\u83B7\u53D6\u89E3\u7801\u5668\u89E3\u7801\u8F6E\u5DE1\u914D\u7F6E\u5931\u8D25
NET_ERROR_SET_DECODER_TOUR_CFG=\u8BBE\u7F6E\u89E3\u7801\u5668\u89E3\u7801\u8F6E\u5DE1\u914D\u7F6E\u5931\u8D25
NET_ERROR_CTRL_DECODER_TOUR=\u63A7\u5236\u89E3\u7801\u5668\u89E3\u7801\u8F6E\u5DE1\u5931\u8D25
NET_GROUP_OVERSUPPORTNUM=\u8D85\u51FA\u8BBE\u5907\u652F\u6301\u6700\u5927\u7528\u6237\u7EC4\u6570\u76EE
NET_USER_OVERSUPPORTNUM=\u8D85\u51FA\u8BBE\u5907\u652F\u6301\u6700\u5927\u7528\u6237\u6570\u76EE
NET_ERROR_GET_SIP_CFG=\u83B7\u53D6SIP\u914D\u7F6E\u5931\u8D25
NET_ERROR_SET_SIP_CFG=\u8BBE\u7F6ESIP\u914D\u7F6E\u5931\u8D25
NET_ERROR_GET_SIP_ABILITY=\u83B7\u53D6SIP\u80FD\u529B\u5931\u8D25
NET_ERROR_GET_WIFI_AP_CFG=\u83B7\u53D6WIFIap\u914D\u7F6E\u5931\u8D25
NET_ERROR_SET_WIFI_AP_CFG=\u8BBE\u7F6EWIFIap\u914D\u7F6E\u5931\u8D25
NET_ERROR_GET_DECODE_POLICY=\u83B7\u53D6\u89E3\u7801\u7B56\u7565\u914D\u7F6E\u5931\u8D25
NET_ERROR_SET_DECODE_POLICY=\u8BBE\u7F6E\u89E3\u7801\u7B56\u7565\u914D\u7F6E\u5931\u8D25
NET_ERROR_TALK_REJECT=\u62D2\u7EDD\u5BF9\u8BB2
NET_ERROR_TALK_OPENED=\u5BF9\u8BB2\u88AB\u5176\u4ED6\u5BA2\u6237\u7AEF\u6253\u5F00
NET_ERROR_TALK_RESOURCE_CONFLICIT=\u8D44\u6E90\u51B2\u7A81
NET_ERROR_TALK_UNSUPPORTED_ENCODE=\u4E0D\u652F\u6301\u7684\u8BED\u97F3\u7F16\u7801\u683C\u5F0F
NET_ERROR_TALK_RIGHTLESS=\u65E0\u6743\u9650
NET_ERROR_TALK_FAILED=\u8BF7\u6C42\u5BF9\u8BB2\u5931\u8D25
NET_ERROR_GET_MACHINE_CFG=\u83B7\u53D6\u673A\u5668\u76F8\u5173\u914D\u7F6E\u5931\u8D25
NET_ERROR_SET_MACHINE_CFG=\u8BBE\u7F6E\u673A\u5668\u76F8\u5173\u914D\u7F6E\u5931\u8D25
NET_ERROR_GET_DATA_FAILED=\u8BBE\u5907\u65E0\u6CD5\u83B7\u53D6\u5F53\u524D\u8BF7\u6C42\u6570\u636E
NET_ERROR_MAC_VALIDATE_FAILED=MAC\u5730\u5740\u9A8C\u8BC1\u5931\u8D25
NET_ERROR_GET_INSTANCE=\u83B7\u53D6\u670D\u52A1\u5668\u5B9E\u4F8B\u5931\u8D25
NET_ERROR_JSON_REQUEST=\u751F\u6210\u7684json\u5B57\u7B26\u4E32\u9519\u8BEF
NET_ERROR_JSON_RESPONSE=\u54CD\u5E94\u7684json\u5B57\u7B26\u4E32\u9519\u8BEF
NET_ERROR_VERSION_HIGHER=\u534F\u8BAE\u7248\u672C\u4F4E\u4E8E\u5F53\u524D\u4F7F\u7528\u7684\u7248\u672C
NET_SPARE_NO_CAPACITY=\u8BBE\u5907\u64CD\u4F5C\u5931\u8D25,\u5BB9\u91CF\u4E0D\u8DB3
NET_ERROR_SOURCE_IN_USE=\u663E\u793A\u6E90\u88AB\u5176\u4ED6\u8F93\u51FA\u5360\u7528
NET_ERROR_REAVE=\u9AD8\u7EA7\u7528\u6237\u62A2\u5360\u4F4E\u7EA7\u7528\u6237\u8D44\u6E90
NET_ERROR_NETFORBID=\u7981\u6B62\u5165\u7F51
NET_ERROR_GETCFG_MACFILTER=\u83B7\u53D6MAC\u8FC7\u6EE4\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_MACFILTER=\u8BBE\u7F6EMAC\u8FC7\u6EE4\u914D\u7F6E\u5931\u8D25
NET_ERROR_GETCFG_IPMACFILTER=\u83B7\u53D6IP/MAC\u8FC7\u6EE4\u914D\u7F6E\u5931\u8D25
NET_ERROR_SETCFG_IPMACFILTER=\u8BBE\u7F6EIP/MAC\u8FC7\u6EE4\u914D\u7F6E\u5931\u8D25
NET_ERROR_OPERATION_OVERTIME=\u5F53\u524D\u64CD\u4F5C\u8D85\u65F6
NET_ERROR_SENIOR_VALIDATE_FAILED=\u9AD8\u7EA7\u6821\u9A8C\u5931\u8D25
NET_ERROR_DEVICE_ID_NOT_EXIST=\u8BBE\u5907ID\u4E0D\u5B58\u5728
NET_ERROR_UNSUPPORTED=\u4E0D\u652F\u6301\u5F53\u524D\u64CD\u4F5C
NET_ERROR_PROXY_DLLLOAD=\u4EE3\u7406\u5E93\u52A0\u8F7D\u5931\u8D25
NET_ERROR_PROXY_ILLEGAL_PARAM=\u4EE3\u7406\u7528\u6237\u53C2\u6570\u4E0D\u5408\u6CD5
NET_ERROR_PROXY_INVALID_HANDLE=\u4EE3\u7406\u53E5\u67C4\u65E0\u6548
NET_ERROR_PROXY_LOGIN_DEVICE_ERROR=\u4EE3\u7406\u767B\u5165\u524D\u7AEF\u8BBE\u5907\u5931\u8D25
NET_ERROR_PROXY_START_SERVER_ERROR=\u542F\u52A8\u4EE3\u7406\u670D\u52A1\u5931\u8D25
NET_ERROR_SPEAK_FAILED=\u8BF7\u6C42\u558A\u8BDD\u5931\u8D25
NET_ERROR_NOT_SUPPORT_F6=\u8BBE\u5907\u4E0D\u652F\u6301\u6B64F6\u63A5\u53E3\u8C03\u7528
NET_ERROR_CD_UNREADY=\u5149\u76D8\u672A\u5C31\u7EEA
NET_ERROR_DIR_NOT_EXIST=\u76EE\u5F55\u4E0D\u5B58\u5728
NET_ERROR_UNSUPPORTED_SPLIT_MODE=\u8BBE\u5907\u4E0D\u652F\u6301\u7684\u5206\u5272\u6A21\u5F0F
NET_ERROR_OPEN_WND_PARAM=\u5F00\u7A97\u53C2\u6570\u4E0D\u5408\u6CD5
NET_ERROR_LIMITED_WND_COUNT=\u5F00\u7A97\u6570\u91CF\u8D85\u8FC7\u9650\u5236
NET_ERROR_UNMATCHED_REQUEST=\u8BF7\u6C42\u547D\u4EE4\u4E0E\u5F53\u524D\u6A21\u5F0F\u4E0D\u5339\u914D
NET_RENDER_ENABLELARGEPICADJUSTMENT_ERROR=Render\u5E93\u542F\u7528\u9AD8\u6E05\u56FE\u50CF\u5185\u90E8\u8C03\u6574\u7B56\u7565\u51FA\u9519
NET_ERROR_UPGRADE_FAILED=\u8BBE\u5907\u5347\u7EA7\u5931\u8D25
NET_ERROR_NO_TARGET_DEVICE=\u627E\u4E0D\u5230\u76EE\u6807\u8BBE\u5907
NET_ERROR_NO_VERIFY_DEVICE=\u627E\u4E0D\u5230\u9A8C\u8BC1\u8BBE\u5907
NET_ERROR_CASCADE_RIGHTLESS=\u65E0\u7EA7\u8054\u6743\u9650
NET_ERROR_LOW_PRIORITY=\u4F4E\u4F18\u5148\u7EA7
NET_ERROR_REMOTE_REQUEST_TIMEOUT=\u8FDC\u7A0B\u8BBE\u5907\u8BF7\u6C42\u8D85\u65F6
NET_ERROR_LIMITED_INPUT_SOURCE=\u8F93\u5165\u6E90\u8D85\u51FA\u6700\u5927\u8DEF\u6570\u9650\u5236
NET_ERROR_SET_LOG_PRINT_INFO=\u8BBE\u7F6E\u65E5\u5FD7\u6253\u5370\u5931\u8D25
NET_ERROR_PARAM_DWSIZE_ERROR=\u5165\u53C2\u7684dwsize\u5B57\u6BB5\u51FA\u9519
NET_ERROR_LIMITED_MONITORWALL_COUNT=\u7535\u89C6\u5899\u6570\u91CF\u8D85\u8FC7\u4E0A\u9650
NET_ERROR_PART_PROCESS_FAILED=\u90E8\u5206\u8FC7\u7A0B\u6267\u884C\u5931\u8D25
NET_ERROR_TARGET_NOT_SUPPORT=\u8BE5\u529F\u80FD\u4E0D\u652F\u6301\u8F6C\u53D1
NET_ERROR_VISITE_FILE=\u8BBF\u95EE\u6587\u4EF6\u5931\u8D25
NET_ERROR_DEVICE_STATUS_BUSY=\u8BBE\u5907\u5FD9
NET_USER_PWD_NOT_AUTHORIZED=\u4FEE\u6539\u5BC6\u7801\u65E0\u6743\u9650
NET_USER_PWD_NOT_STRONG=\u5BC6\u7801\u5F3A\u5EA6\u4E0D\u591F
NET_ERROR_NO_SUCH_CONFIG=\u6CA1\u6709\u5BF9\u5E94\u7684\u914D\u7F6E
NET_ERROR_AUDIO_RECORD_FAILED=\u5F55\u97F3\u5931\u8D25
NET_ERROR_SEND_DATA_FAILED=\u6570\u636E\u53D1\u9001\u5931\u8D25
NET_ERROR_OBSOLESCENT_INTERFACE=\u5E9F\u5F03\u63A5\u53E3
NET_ERROR_INSUFFICIENT_INTERAL_BUF=\u5185\u90E8\u7F13\u51B2\u4E0D\u8DB3
NET_ERROR_NEED_ENCRYPTION_PASSWORD=\u4FEE\u6539\u8BBE\u5907ip\u65F6,\u9700\u8981\u6821\u9A8C\u5BC6\u7801
NET_ERROR_NOSUPPORT_RECORD=\u8BBE\u5907\u4E0D\u652F\u6301\u6B64\u8BB0\u5F55\u96C6
NET_ERROR_SERIALIZE_ERROR=\u6570\u636E\u5E8F\u5217\u5316\u9519\u8BEF
NET_ERROR_DESERIALIZE_ERROR=\u6570\u636E\u53CD\u5E8F\u5217\u5316\u9519\u8BEF
NET_ERROR_LOWRATEWPAN_ID_EXISTED=\u8BE5\u65E0\u7EBFID\u5DF2\u5B58\u5728
NET_ERROR_LOWRATEWPAN_ID_LIMIT=\u65E0\u7EBFID\u6570\u91CF\u5DF2\u8D85\u9650
NET_ERROR_LOWRATEWPAN_ID_ABNORMAL=\u65E0\u7EBF\u5F02\u5E38\u6DFB\u52A0
NET_ERROR_ENCRYPT=\u52A0\u5BC6\u6570\u636E\u5931\u8D25
NET_ERROR_PWD_ILLEGAL=\u65B0\u5BC6\u7801\u4E0D\u5408\u89C4\u8303
NET_ERROR_DEVICE_ALREADY_INIT=\u8BBE\u5907\u5DF2\u7ECF\u521D\u59CB\u5316
NET_ERROR_SECURITY_CODE=\u5B89\u5168\u7801\u9519\u8BEF
NET_ERROR_SECURITY_CODE_TIMEOUT=\u5B89\u5168\u7801\u8D85\u51FA\u6709\u6548\u671F
NET_ERROR_GET_PWD_SPECI=\u83B7\u53D6\u5BC6\u7801\u89C4\u8303\u5931\u8D25
NET_ERROR_NO_AUTHORITY_OF_OPERATION=\u65E0\u6743\u9650\u8FDB\u884C\u8BE5\u64CD\u4F5C
NET_ERROR_DECRYPT=\u89E3\u5BC6\u6570\u636E\u5931\u8D25
NET_ERROR_2D_CODE=2Dcode\u6821\u9A8C\u5931\u8D25
NET_ERROR_INVALID_REQUEST=\u975E\u6CD5\u7684RPC\u8BF7\u6C42
NET_ERROR_PWD_RESET_DISABLE=\u5BC6\u7801\u91CD\u7F6E\u529F\u80FD\u5DF2\u5173\u95ED
NET_ERROR_PLAY_PRIVATE_DATA=\u663E\u793A\u79C1\u6709\u6570\u636E\uFF0C\u6BD4\u5982\u89C4\u5219\u6846\u7B49\u5931\u8D25
NET_ERROR_ROBOT_OPERATE_FAILED=\u673A\u5668\u4EBA\u64CD\u4F5C\u5931\u8D25
NET_ERROR_PHOTOSIZE_EXCEEDSLIMIT=\u56FE\u7247\u5927\u5C0F\u8D85\u9650
NET_ERROR_USERID_INVALID=\u7528\u6237ID\u4E0D\u5B58\u5728
NET_ERROR_EXTRACTFEATURE_FAILED=\u7167\u7247\u7279\u5F81\u503C\u63D0\u53D6\u5931\u8D25
NET_ERROR_PHOTO_EXIST=\u7167\u7247\u5DF2\u5B58\u5728
NET_ERROR_PHOTO_OVERFLOW=\u7167\u7247\u6570\u91CF\u8D85\u8FC7\u4E0A\u9650
NET_ERROR_CHANNEL_ALREADY_OPENED=\u901A\u9053\u5DF2\u7ECF\u6253\u5F00
NET_ERROR_CREATE_SOCKET=\u521B\u5EFA\u5957\u63A5\u5B57\u5931\u8D25
NET_ERROR_CHANNEL_NUM=\u901A\u9053\u53F7\u9519\u8BEF
NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_ID_EXCEED=\u7EC4ID\u8D85\u8FC7\u6700\u5927\u503C

# RealPlay Info
START_REALPLAY=\u5F00\u59CB\u9884\u89C8
STOP_REALPLAY=\u505C\u6B62\u9884\u89C8
ATTACH=\u667A\u80FD\u8BA2\u9605
DETACH=\u53D6\u6D88\u8BA2\u9605
REALPLAY_SUCCEED=\u5B9E\u65F6\u9884\u89C8\u6210\u529F
REALPLAY_FAILED=\u5B9E\u65F6\u9884\u89C8\u5931\u8D25

CHN=\u901A\u9053
CHANNEL=\u901A\u9053
STREAM_TYPE=\u7801\u6D41
MASTER_AND_SUB_STREAM=\u4E3B\u8F85\u7801\u6D41
MASTER_STREAM=\u4E3B\u7801\u6D41
SUB_STREAM=\u8F85\u7801\u6D41

# Capture Picture
LOCAL_CAPTURE=\u672C\u5730\u6293\u56FE
REMOTE_CAPTURE=\u8FDC\u7A0B\u6293\u56FE
TIMER_CAPTURE=\u5B9A\u65F6\u6293\u56FE
STOP_CAPTURE=\u505C\u6B62\u6293\u56FE
INTERVAL=\u95F4\u9694

TIME_INTERVAL_ILLEGAL=\u65F6\u95F4\u95F4\u9694\u8F93\u5165\u975E\u6CD5 
PLEASE_START_REALPLAY=\u8BF7\u5148\u6253\u5F00\u5B9E\u65F6\u9884\u89C8

# PTZ Info 
PTZ_CONTROL=\u4E91\u53F0\u63A7\u5236
LEFT_UP=\u5DE6\u4E0A
UP=\u4E0A
RIGHT_UP=\u53F3\u4E0A
LEFT=\u5DE6
RIGHT=\u53F3
LEFT_DOWN=\u5DE6\u4E0B
DOWN=\u4E0B
RIGHT_DOWN=\u53F3\u4E0B

ZOOM_ADD=\u53D8\u500D+
ZOOM_DEC=\u53D8\u500D-
FOCUS_ADD=\u8C03\u7126+
FOCUS_DEC=\u8C03\u7126-
IRIS_ADD=\u5149\u5708+
IRIS_DEC=\u5149\u5708-

SPEED=\u901F\u7387

#ITS
EVENT_INFO=\u4E8B\u4EF6\u4FE1\u606F
EVENT_NAME=\u4E8B\u4EF6\u540D\u79F0
EVENT_TIME=\u4E8B\u4EF6\u65F6\u95F4
EVENT_PICTURE=\u4E8B\u4EF6\u4EE5\u53CA\u56FE\u7247
PLATE_PICTURE=\u8F66\u724C\u56FE
LICENSE_PLATE=\u8F66\u724C\u53F7
PLATE_TYPE=\u8F66\u724C\u7C7B\u578B
PLATE_COLOR=\u8F66\u724C\u989C\u8272
VEHICLE_TYPE=\u8F66\u8F86\u7C7B\u578B
VEHICLE_SIZE=\u8F66\u8F86\u5927\u5C0F
VEHICLE_COLOR=\u8F66\u8F86\u989C\u8272
FILE_COUNT=\u6587\u4EF6\u603B\u6570
FILE_INDEX=\u6587\u4EF6\u7F16\u53F7
GROUP_ID=\u7EC4ID
ILLEGAL_PLACE=\u8FDD\u6CD5\u5730\u70B9
LANE_NUMBER=\u8F66\u9053\u53F7
MANUAL_CAPTURE=\u624B\u52A8\u6293\u62CD
OPEN_STROBE=\u51FA\u5165\u53E3\u5F00\u95F8
CLOSE_STROBE=\u51FA\u5165\u53E3\u5173\u95F8
INDEX=\u5E8F\u53F7

OPERATE=\u64CD\u4F5C
FUNCTION=\u57FA\u672C

UNDEFINED_COLOR=\u672A\u5B9A\u4E49\u989C\u8272
BLACK=\u9ED1\u8272
WHITE=\u767D\u8272
RED=\u7EA2\u8272
BLUE=\u84DD\u8272
GREEN=\u7EFF\u8272
YELLOW=\u9EC4\u8272
GRAY=\u7070\u8272
ORANGE=\u6A59\u8272

LIGHT_DUTY=\u5C0F\u578B\u8F66
MEDIUM=\u4E2D\u578B\u8F66
OVER_SIZE=\u5927\u578B\u8F66
MINI_SIZE=\u5FAE\u578B\u8F66
LARGE_SIZE=\u957F\u8F66

NO_PLATENUMBER=\u65E0\u8F66\u724C
MANUALSNAP_SUCCEED=\u624B\u52A8\u6293\u62CD\u6210\u529F
MANUALSNAP_FAILED=\u624B\u52A8\u6293\u62CD\u5931\u8D25

OPEN_STROBE_SUCCEED=\u5F00\u95F8\u6210\u529F
OPEN_STROBE_FAILED=\u5F00\u95F8\u5931\u8D25
CLOSE_STROBE_SUCCEED=\u5173\u95F8\u6210\u529F
CLOSE_STROBE_FAILED=\u5173\u95F8\u5931\u8D25

EVENT_IVS_TRAFFICJUNCTION=\u4EA4\u901A\u5361\u53E3
EVENT_IVS_TRAFFIC_RUNREDLIGHT=\u95EF\u7EA2\u706F
EVENT_IVS_TRAFFIC_OVERLINE=\u538B\u8F66\u9053\u7EBF
EVENT_IVS_TRAFFIC_RETROGRADE=\u9006\u884C
EVENT_IVS_TRAFFIC_TURNLEFT=\u8FDD\u7AE0\u5DE6\u8F6C
EVENT_IVS_TRAFFIC_TURNRIGHT=\u8FDD\u7AE0\u53F3\u8F6C
EVENT_IVS_TRAFFIC_UTURN=\u8FDD\u7AE0\u6389\u5934
EVENT_IVS_TRAFFIC_OVERSPEED=\u8D85\u901F
EVENT_IVS_TRAFFIC_UNDERSPEED=\u4F4E\u901F
EVENT_IVS_TRAFFIC_PARKING=\u8FDD\u7AE0\u505C\u8F66
EVENT_IVS_TRAFFIC_WRONGROUTE=\u4E0D\u6309\u8F66\u9053\u884C\u9A76
EVENT_IVS_TRAFFIC_CROSSLANE=\u8FDD\u7AE0\u53D8\u9053
EVENT_IVS_TRAFFIC_OVERYELLOWLINE=\u538B\u9EC4\u7EBF
EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE=\u9EC4\u724C\u8F66\u5360\u9053
EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY=\u6591\u9A6C\u7EBF\u884C\u4EBA\u4F18\u5148
EVENT_IVS_TRAFFIC_MANUALSNAP=\u4EA4\u901A\u624B\u52A8\u6293\u62CD
EVENT_IVS_TRAFFIC_VEHICLEINROUTE=\u6709\u8F66\u5360\u9053
EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE=\u5360\u7528\u516C\u4EA4\u8F66\u9053
EVENT_IVS_TRAFFIC_BACKING=\u8FDD\u7AE0\u5012\u8F66
EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING=\u8F66\u4F4D\u6709\u8F66
EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING=\u8F66\u4F4D\u65E0\u8F66
EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT=\u4EA4\u901A\u672A\u7CFB\u5B89\u5168\u5E26

# DownLoad Info
DOWNLOAD_RECORD_BYTIME=\u6309\u65F6\u95F4\u4E0B\u8F7D
DOWNLOAD_RECORD_BYFILE=\u6309\u6587\u4EF6\u4E0B\u8F7D
QUERY=\u67E5\u8BE2 
DOWNLOAD=\u4E0B\u8F7D
STOP_DOWNLOAD=\u505C\u6B62\u4E0B\u8F7D
START_TIME=\u5F00\u59CB\u65F6\u95F4
END_TIME=\u7ED3\u675F\u65F6\u95F4
RECORD_TYPE=\u5F55\u50CF\u7C7B\u578B

GENERAL_RECORD=\u666E\u901A\u5F55\u50CF
ALARM_RECORD=\u62A5\u8B66\u5F55\u50CF
MOTION_DETECTION=\u79FB\u52A8\u68C0\u6D4B\u5F55\u50CF
CARD_NUMBER_RECORD=\u5361\u53F7\u5F55\u50CF
INTELLIGENT_DETECTION=\u667A\u80FD\u5F55\u50CF
POS_RECORD=POS\u5F55\u50CF

QUERY_RECORD_IS_NOT_EXIST=\u67E5\u8BE2\u5F55\u50CF\u4E0D\u5B58\u5728
PLEASE_CHECK_RECORD_TIME=\u8BF7\u68C0\u67E5\u5F55\u50CF\u65F6\u95F4
PLEASE_SELECT_TIME_AGAIN=\u8BF7\u91CD\u65B0\u9009\u62E9\u65F6\u95F4\uFF0C\u6700\u5927\u65F6\u95F4\u5DEE6\u5C0F\u65F6
DOWNLOAD_COMPLETED=\u4E0B\u8F7D\u7ED3\u675F

PLEASE_FIRST_QUERY_RECORD=\u8BF7\u5148\u67E5\u8BE2\u5F55\u50CF
PLEASE_FIRST_SELECT_ROW_WITH_DATA=\u8BF7\u5148\u9009\u62E9\u6709\u5F55\u50CF\u7684\u4E00\u884C

# Time Set
YEAR=\u5E74
MONTH=\u6708
DAY=\u65E5
HOUR=\u65F6
MINUTE=\u5206
SECOND=\u79D2
CONFIRM=\u786E\u5B9A
CANCEL=\u53D6\u6D88
DATE_CHOOSER=\u65F6\u95F4\u9009\u62E9

MONDAY=\u661F\u671F\u4E00
TUESDAY=\u661F\u671F\u4E8C
WEDNESDAY=\u661F\u671F\u4E09
THURSDAY=\u661F\u671F\u56DB
FRIDAY=\u661F\u671F\u4E94
SATURDAY=\u661F\u671F\u516D
SUNDAY=\u661F\u671F\u65E5

# Talk
TRANSMIT_TYPE=\u8F6C\u53D1\u7C7B\u578B
LOCAL_TRANSMIT_TYPE=\u672C\u5730\uFF08\u4E0D\u8F6C\u53D1\uFF09
REMOTE_TRANSMIT_TYPE=\u8FDC\u7A0B\uFF08\u8F6C\u53D1\uFF09
TRANSMIT_CHANNEL=\u8F6C\u53D1\u901A\u9053
START_TALK=\u5F00\u59CB\u901A\u8BDD
STOP_TALK=\u7ED3\u675F\u901A\u8BDD
TALK_FAILED=\u901A\u8BDD\u5931\u8D25

# DeviceSearchAndInt
DEVICESEARCH_OPERATE=\u8BBE\u5907\u641C\u7D22\u64CD\u4F5C
DEVICESEARCH_RESULT=\u8BBE\u5907\u641C\u7D22\u7ED3\u679C
DEVICEINIT=\u8BBE\u5907\u521D\u59CB\u5316

DEVICESEARCH=\u8BBE\u5907\u641C\u7D22
DEVICE_POINT_TO_POINT_SEARCH=\u8BBE\u5907IP\u70B9\u5BF9\u70B9\u641C\u7D22

START_SEARCH=\u5F00\u59CB\u641C\u7D22
STOP_SEARCH=\u505C\u6B62\u641C\u7D22

START_IP=\u8D77\u59CBIP
END_IP=\u7ED3\u675FIP

DEVICE_TYPE=\u8BBE\u5907\u7C7B\u578B
MAC=MAC
SN=\u5E8F\u5217\u53F7
DEVICE_INIT_STATE=\u521D\u59CB\u5316\u72B6\u6001
INIT_PASSWD=\u521D\u59CB\u5316\u5BC6\u7801
PHONE=\u624B\u673A\u53F7
MAIL=\u90AE\u7BB1
IP_VERSION=IP\u7248\u672C
SUB_MASK=\u5B50\u7F51\u63A9\u7801
GETWAY=\u7F51\u5173
DETAIL_TYPE=\u8BE6\u7EC6\u7C7B\u578B
HTTP_PORT=HTTP\u7AEF\u53E3\u53F7
LOCAL_IP=\u672C\u5730ip
CONFIRM_PASSWORD=\u786E\u8BA4\u5BC6\u7801

OLD_DEVICE=\u8001\u8BBE\u5907
DONOT_SUPPORT_INITIALIZATION=\u4E0D\u652F\u6301\u521D\u59CB\u5316
NOT_INITIALIZED=\u672A\u521D\u59CB\u5316
INITIALIZED=\u5DF2\u521D\u59CB\u5316

THE_IP_CONTROL_SCOPE=\u8303\u56F4\u592A\u5927\uFF0C\u8BF7\u63A7\u5236\u57281000\u4E2A\u4E4B\u95F4
PLEASE_FIRST_SELECT_INITIALIZED_DEVICE=\u8BF7\u5148\u9009\u62E9\u9700\u8981\u521D\u59CB\u5316\u7684\u8BBE\u5907
PLEASE_INPUT_PHONE=\u8BF7\u8F93\u5165\u624B\u673A\u53F7
PLEASE_INPUT_MAIL=\u8BF7\u8F93\u5165\u90AE\u7BB1
INCONSISTENT=\u5BC6\u7801\u548C\u786E\u8BA4\u5BC6\u7801\u4E0D\u4E00\u81F4
PLEASE_CHECK_IP=\u8BF7\u68C0\u67E5IP

SEARCHING_WAITING=\u6B63\u5728\u641C\u7D22\uFF0C\u8BF7\u7B49\u5F85\u641C\u7D22\u7ED3\u675F

START_LISTEN=\u5F00\u59CB\u76D1\u542C
STOP_LISTEN=\u505C\u6B62\u76D1\u542C
SHOW_ALARM_EVENT=\u62A5\u8B66\u4E8B\u4EF6\u7ED3\u679C\u4FE1\u606F
ALARM_LISTEN_FAILED=\u62A5\u8B66\u76D1\u542C\u5931\u8D25
ALARM_MESSAGE=\u62A5\u8B66\u4FE1\u606F

EXTERNAL_ALARM=\u5916\u90E8\u62A5\u8B66
MOTION_ALARM=\u52A8\u6001\u68C0\u6D4B\u62A5\u8B66
VIDEOLOST_ALARM=\u89C6\u9891\u4E22\u5931\u62A5\u8B66
SHELTER_ALARM=\u89C6\u9891\u906E\u6321\u62A5\u8B66
DISKFULL_ALARM=\u786C\u76D8\u6EE1\u62A5\u8B66
DISKERROR_ALARM=\u574F\u786C\u76D8\u62A5\u8B66
START=\u5F00\u59CB
STOP=\u7ED3\u675F

CURRENT_TIME=\u5F53\u524D\u65F6\u95F4
DEVICE_REBOOT=\u8BBE\u5907\u91CD\u542F
SYNCHRONIZE_TIME=\u65F6\u95F4\u540C\u6B65
REBOOT=\u91CD\u542F
SET_TIME=\u8BBE\u7F6E\u65F6\u95F4
GET_TIME=\u83B7\u53D6\u65F6\u95F4
REBOOT_TIPS=\u60A8\u786E\u5B9A\u8981\u91CD\u542F\u5417\uFF1F
OPERATE_SUCCESS=\u64CD\u4F5C\u6210\u529F

#FaceRecognition
FACE_GROUP_ID=\u4EBA\u8138\u5E93ID
FACE_GROUP_NAME=\u4EBA\u8138\u5E93\u540D\u79F0
PERSON_COUNT=\u4EBA\u5458\u4E2A\u6570

GROUP_OPERATE=\u4EBA\u8138\u5E93\u64CD\u4F5C
PERSON_OPERATE=\u4EBA\u5458\u64CD\u4F5C

FACE_RECOGNITION_EVENT=\u76EE\u6807\u8BC6\u522B\u4E8B\u4EF6
FACE_DETECT_EVENT=\u4EBA\u8138\u68C0\u6D4B\u4E8B\u4EF6

GLOBAL_PICTURE=\u5168\u666F\u56FE
PERSON_PICTURE=\u4EBA\u8138\u56FE
CANDIDATE_PICTURE=\u5019\u9009\u4EBA\u56FE

TIME=\u65F6\u95F4
SEX=\u6027\u522B
AGE=\u5E74\u9F84
COLOR=
EYE=\u773C\u775B
MOUTH=\u5634\u5DF4
MASK=\u53E3\u7F69
BEARD=\u80E1\u5B50
MALE=\u7537
FEMALE=\u5973
ID_CARD=\u8EAB\u4EFD\u8BC1
OFFICE_CARD=\u519B\u5B98\u8BC1
PASSPORT=\u62A4\u7167
UNIDENTIFIED=\u672A\u8BC6\u522B
HAVE_BEARD=\u6709\u80E1\u5B50
NO_BEARD=\u6CA1\u80E1\u5B50
OPEN_MOUTH=\u5F20\u5634
CLOSE_MOUTH=\u95ED\u5634
YELLOW_COLOR=
BLACK_COLOR=
WHITE_COLOR=
OPEN_EYE=\u7741\u773C
CLOSE_EYE=\u95ED\u773C
SMILE=\u5FAE\u7B11
ANGER=\u6124\u6012
SADNESS=\u60B2\u4F24
DISGUST=\u538C\u6076
FEAR=\u5BB3\u6015
SURPRISE=\u60CA\u8BB6
NEUTRAL=\u6B63\u5E38
LAUGH=\u5927\u7B11
WEAR_MASK=\u6234\u53E3\u7F69
NO_MASK=\u6CA1\u6234\u53E3\u7F69
WEAR_GLASSES=\u6234\u773C\u955C
NO_GLASSES=\u4E0D\u6234\u773C\u955C
UNKNOW=\u672A\u77E5
UNLIMITED=\u4E0D\u9650

NAME=\u59D3\u540D
BIRTHDAY=\u751F\u65E5
ID_NO=\u8BC1\u4EF6\u53F7
ID_TYPE=\u8BC1\u4EF6\u7C7B\u578B
SIMILARITY=\u76F8\u4F3C\u5EA6
UID=\u4EBA\u5458\u6807\u8BC6\u7B26
STRANGER=\u964C\u751F\u4EBA
GLASSES=\u773C\u955C
PICTURE_PATH=\u56FE\u7247\u8DEF\u5F84
FACE_LIBRARY_ID=\u4EBA\u8138\u5E93ID
FACE_LIBRARY_NAME=\u4EBA\u8138\u5E93\u540D\u79F0


ADD=\u6DFB\u52A0
MODIFY=\u4FEE\u6539
DELETE=\u5220\u9664
FRESH=\u5237\u65B0
ADD_GROUP=\u6DFB\u52A0\u4EBA\u8138\u5E93
MODIFY_GROUP=\u4FEE\u6539\u4EBA\u8138\u5E93
DEL_GROUP=\u5220\u9664\u4EBA\u8138\u5E93
DISPOSITION=\u5E03\u63A7
DEL_DISPOSITION=\u64A4\u63A7

FIND_CONDITION=\u67E5\u627E\u6761\u4EF6
FIND_PERSON=\u67E5\u627E\u4EBA\u5458
ADD_PERSON=\u6DFB\u52A0\u4EBA\u5458
MODIFY_PERSON=\u4FEE\u6539\u4EBA\u5458
DEL_PERSON=\u5220\u9664\u4EBA\u5458

PREVIOUSPAGE=\u4E0A\u4E00\u9875
LASTPAGE=\u4E0B\u4E00\u9875
SELECT_PICTURE=\u9009\u62E9\u56FE\u7247
SEARCH_BY_PIC=\u4EE5\u56FE\u641C\u56FE
DOWNLOAD_QUERY_PICTURE=\u4E0B\u8F7D\u67E5\u8BE2\u5230\u7684\u56FE\u7247
FACE_LIBRARY=\u4EBA\u8138\u5E93
HISTORY_LIBRARY=\u5386\u53F2\u5E93
CHOOSE_FACE_PIC=\u8BF7\u9009\u62E9\u4EBA\u8138\u56FE\u7247
EVENT_TYPE=\u4E8B\u4EF6\u7C7B\u578B
PAGES_NUMBER=\u9875\u6570

SIMILARITY_RANGE=\u76F8\u4F3C\u5EA6\u8303\u56F4[0, 100]
PLEASE_INPUT_GROUPNAME=\u8BF7\u8F93\u5165\u4EBA\u8138\u5E93\u540D\u79F0
PLEASE_SELECT_GROUP=\u8BF7\u9009\u62E9\u4EBA\u8138\u5E93

PLEASE_SELECT_PERSON=\u8BF7\u9009\u62E9\u4EBA\u5458
PLEASE_ADD_DISPOSITION_INFO=\u8BF7\u6DFB\u52A0\u5E03\u63A7\u4FE1\u606F
PLEASE_SELECT_DEL_DISPOSITION_INFO=\u8BF7\u9009\u62E9\u64A4\u63A7\u4FE1\u606F

#AutoRegister
AUTOREGISTER_LISTEN=\u4E3B\u52A8\u6CE8\u518C\u76D1\u542C
DEVICE_CONFIG=\u8BBE\u5907\u914D\u7F6E
DEVICE_LIST=\u8BBE\u5907\u5217\u8868
DEVICE_MANAGER=\u8BBE\u5907\u7BA1\u7406
ADD_DEVICE=\u6DFB\u52A0\u8BBE\u5907
MODIFY_DEVICE=\u4FEE\u6539\u8BBE\u5907
DELETE_DEVICE=\u5220\u9664\u8BBE\u5907
CLEAR_DEVICE=\u6E05\u7A7A\u8BBE\u5907
IMPORT_DEVICE=\u5BFC\u5165\u8BBE\u5907
EXPORT_DEVICE=\u5BFC\u51FA\u8BBE\u5907
DEVICE_ID=\u8BBE\u5907ID
ENABLE=\u542F\u7528
REGISTER_ADDRESS=\u6CE8\u518C\u5730\u5740
REGISTER_PORT=\u6CE8\u518C\u7AEF\u53E3\u53F7
GET=\u83B7\u53D6
SET=\u8BBE\u7F6E
RECORD=\u5F55\u97F3
DEVICE_LOGIN=\u8BBE\u5907\u5DF2\u767B\u5F55

ALREADY_EXISTED=\u5DF2\u5B58\u5728
ALREADY_EXISTED_WHETHER_OR_NOT_TO_COVER=\u5DF2\u5B58\u5728\uFF0C\u662F\u5426\u8986\u76D6(\u5426\uFF0C\u4E0D\u4F1A\u5BFC\u51FA)
FILE_OPEN_PLEASE_CLOSE_FILE=\u6587\u4EF6\u88AB\u6253\u5F00\uFF0C\u8BF7\u5148\u5173\u95ED\u6587\u4EF6
IMPORT_COMPLETION=\u5BFC\u5165\u5B8C\u6210
EXPORT_COMPLETION=\u5BFC\u51FA\u5B8C\u6210
FILE_NOT_EXIST=\u6587\u4EF6\u4E0D\u5B58\u5728

PLEASE_INPUT=\u8BF7\u8F93\u5165
MAX_SUPPORT_100=\u6700\u5927\u652F\u6301100\u4E2A

#Attendance
ATTENDANCE=\u8003\u52E4\u673A
USER_ID=\u7528\u6237ID
USER_NAME=\u7528\u6237\u540D
CARD_NO=\u5361\u53F7
QUERY_CONDITION=\u67E5\u8BE2\u6761\u4EF6
USER_OPERATE=\u7528\u6237\u64CD\u4F5C
FINGERPRINT_OPERATE=\u6307\u7EB9\u64CD\u4F5C
OPERATE_BY_USER_ID=\u901A\u8FC7\u7528\u6237ID\u64CD\u4F5C\u6307\u7EB9
OPERATE_BY_FINGERPRINT_ID=\u901A\u8FC7\u6307\u7EB9ID\u64CD\u4F5C\u6307\u7EB9
FINGERPRINT_ID=\u6307\u7EB9ID
SEARCH=\u67E5\u627E
SEARCH_FINGERPRINT=\u67E5\u627E\u6307\u7EB9
ADD_FINGERPRINT=\u6DFB\u52A0\u6307\u7EB9
DELETE_FINGERPRINT=\u5220\u9664\u6307\u7EB9
SUBSCRIBE=\u8BA2\u9605
UNSUBSCRIBE=\u53D6\u6D88\u8BA2\u9605
USER_LIST=\u7528\u6237\u5217\u8868
NEXT_PAGE=\u4E0B\u4E00\u9875
USER_INFO=\u7528\u6237\u4FE1\u606F
DOOROPEN_METHOD=\u5F00\u95E8\u65B9\u5F0F
FINGERPRINT=\u6307\u7EB9
FINGERPRINT_INFO=\u6307\u7EB9\u4FE1\u606F
FINGERPRINT_DATA=\u6307\u7EB9\u6570\u636E
CARD=\u5361
DELETE_FINGERPRINT_PROMPT=\u5C06\u4F1A\u5220\u9664\u8BE5\u7528\u6237\u4E0B\u6240\u6709\u6307\u7EB9\u6570\u636E
SUBSCRIBE_FAILED=\u8BA2\u9605\u5931\u8D25
FINGERPRINT_ID_ILLEGAL=\u6307\u7EB9ID\u975E\u6CD5
FINGERPRINT_COLLECTION=\u6307\u7EB9\u91C7\u96C6
START_COLLECTION=\u5F00\u59CB\u91C7\u96C6
STOP_COLLECTION=\u505C\u6B62\u91C7\u96C6
IN_THE_COLLECTION=\u91C7\u96C6\u4E2D...
COLLECTION_COMPLETED=\u91C7\u96C6\u5B8C\u6210
COLLECTION_FAILED=\u91C7\u96C6\u5931\u8D25
FINGERPRINT_ID_NOT_EXIST=\u6307\u7EB9ID\u4E0D\u5B58\u5728
USER_ID_EXCEED_LENGTH=\u7528\u6237ID\u8D85\u8FC7\u6700\u5927\u957F\u5EA6
USER_NAME_EXCEED_LENGTH=\u7528\u6237\u540D\u8D85\u8FC7\u6700\u5927\u957F\u5EA6
CARD_NO_EXCEED_LENGTH=\u5361\u53F7\u8D85\u8FC7\u6700\u5927\u957F\u5EA6
CARD_NAME_EXCEED_LENGTH=\u5361\u540D\u8D85\u8FC7\u6700\u5927\u9650\u5236
CARD_PASSWD_EXCEED_LENGTH=\u5361\u5BC6\u7801\u8D85\u8FC7\u6700\u5927\u9650\u5236

#Gate

GATE=\u4EBA\u8138\u5F00\u95E8
CARD_OPERATE=\u5361\u64CD\u4F5C
CARD_INFO=\u5361\u4FE1\u606F
CARD_MANAGER=\u5361\u7BA1\u7406

CLEAR=\u6E05\u7A7A

OPEN_STATUS=\u5F00\u95E8\u72B6\u6001
OPEN_METHOD=\u5F00\u95E8\u65B9\u5F0F

TEMPERATURE=\u6E29\u5EA6
MASK_STATUS=\u53E3\u7F69\u72B6\u6001

CARD_UNKNOW=\u672A\u77E5\u5361
CARD_GENERAL=\u4E00\u822C\u5361
CARD_VIP=VIP\u5361
CARD_GUEST=\u6765\u5BBE\u5361
CARD_PATROL=\u5DE1\u903B\u5361
CARD_BACKLIST=\u7981\u6B62\u540D\u5355\u5361
CARD_COERCE=\u80C1\u8FEB\u5361
CARD_POLLING=\u5DE1\u68C0\u5361
CARD_MOTHERCARD=\u6BCD\u5361

STATE_UNKNOWN=\u672A\u77E5
STATE_NORMAL=\u6B63\u5E38
STATE_LOSE=\u4E22\u5931
STATE_LOGOFF=\u6CE8\u9500
STATE_FREEZE=\u51BB\u7ED3
STATE_ARREARS=\u6B20\u8D39
STATE_OVERDUE=\u903E\u671F
STATE_PREARREARS=\u9884\u6B20\u8D39

RECORD_NO=\u8BB0\u5F55\u96C6\u7F16\u53F7
CARD_NAME=\u5361\u540D
CARD_STATUS=\u5361\u72B6\u6001
CARD_PASSWORD=\u5361\u5BC6\u7801
CARD_TYPE=\u5361\u7C7B\u578B
CARD_NUM=\u8BC1\u4EF6\u53F7
USE_TIMES=\u4F7F\u7528\u6B21\u6570
IS_FIRST_ENTER=\u662F\u5426\u9996\u5361
IS_VALID=\u662F\u5426\u6709\u6548
VALID_PERIOD=\u6709\u6548\u671F
VALID_START_TIME=\u6709\u6548\u5F00\u59CB\u65F6\u95F4
VALID_END_TIME=\u6709\u6548\u7ED3\u675F\u65F6\u95F4
FIRST_ENTER=\u9996\u5361
NO_FIRST_ENTER=\u975E\u9996\u5361
VALID=\u6709\u6548
INVALID=\u65E0\u6548

PLEASE_SELECT_CARD=\u8BF7\u9009\u62E9\u5361
PLEASE_INPUT_CARDNO=\u8BF7\u8F93\u5165\u5361\u53F7
PLEASE_INPUT_USERID=\u8BF7\u8F93\u5165\u7528\u6237ID
WANT_CLEAR_ALL_INFO=\u4F60\u662F\u5426\u60F3\u8981\u6E05\u7A7A\u6240\u6709\u4FE1\u606F?

ADD_CARD_INDO_FAILED=\u6DFB\u52A0\u5361\u4FE1\u606F\u5931\u8D25 
ADD_CARD_INFO_AND_PERSON_PICTURE_SUCCEED=\u6DFB\u52A0\u5361\u4FE1\u606F\u548C\u4EBA\u8138\u6210\u529F
ADD_CARD_INFO_SUCCEED_BUT_ADD_PERSON_PICTURE_FAILED=\u6DFB\u52A0\u5361\u4FE1\u606F\u6210\u529F\uFF0C\u4F46\u6DFB\u52A0\u4EBA\u8138\u5931\u8D25
CARD_EXISTED_ADD_PERSON_PICTURE_SUCCEED=\u5361\u4FE1\u606F\u5DF2\u5B58\u5728\uFF0C\u6DFB\u52A0\u4EBA\u8138\u6210\u529F

MODIFY_CARD_INFO_SUCCEED=\u4FEE\u6539\u5361\u4FE1\u606F\u6210\u529F
MODIFY_CARD_INFO_FAILED=\u4FEE\u6539\u5361\u4FE1\u606F\u5931\u8D25
MODIFY_CARD_INFO_AND_PERSON_PICTURE_SUCCEED=\u4FEE\u6539\u5361\u4FE1\u606F\u548C\u4EBA\u8138\u6210\u529F
MODIFY_CARD_INFO_SUCCEED_BUT_MODIFY_PERSON_PICTURE_FAILED=\u4FEE\u6539\u5361\u4FE1\u606F\u6210\u529F\uFF0C\u4F46\u4FEE\u6539\u4EBA\u8138\u5931\u8D25

NET_ACCESS_DOOROPEN_METHOD_UNKNOWN=\u672A\u77E5
NET_ACCESS_DOOROPEN_METHOD_PWD_ONLY=\u5BC6\u7801\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_CARD=\u5237\u5361\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_CARD_FIRST=\u5148\u5237\u5361\u540E\u5BC6\u7801\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_PWD_FIRST=\u5148\u5BC6\u7801\u540E\u5237\u5361\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_REMOTE=\u8FDC\u7A0B\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_BUTTON=\u5F00\u9501\u6309\u94AE\u8FDB\u884C\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT=\u6307\u7EB9\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_PWD_CARD_FINGERPRINT=\u5BC6\u7801+\u5237\u5361+\u6307\u7EB9\u7EC4\u5408\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_PWD_FINGERPRINT=\u5BC6\u7801+\u6307\u7EB9\u7EC4\u5408\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_CARD_FINGERPRINT=\u5237\u5361+\u6307\u7EB9\u7EC4\u5408\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_PERSONS=\u591A\u4EBA\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_KEY=\u94A5\u5319\u5F00\u95E8
NET_ACCESS_DOOROPEN_METHOD_COERCE_PWD=\u80C1\u8FEB\u5BC6\u7801\u5F00\u95E8
NET_ACCESS_DOOROPEN_METHOD_QRCODE=\u4E8C\u7EF4\u7801\u5F00\u95E8
NET_ACCESS_DOOROPEN_METHOD_FACE_RECOGNITION=\u76EE\u6807\u8BC6\u522B\u5F00\u95E8
NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD=\u4EBA\u8BC1\u5BF9\u6BD4
NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_AND_IDCARD=\u8EAB\u4EFD\u8BC1+ \u4EBA\u8BC1\u6BD4\u5BF9
NET_ACCESS_DOOROPEN_METHOD_BLUETOOTH=\u84DD\u7259\u5F00\u95E8
NET_ACCESS_DOOROPEN_METHOD_CUSTOM_PASSWORD=\u4E2A\u6027\u5316\u5BC6\u7801\u5F00\u95E8
NET_ACCESS_DOOROPEN_METHOD_USERID_AND_PWD=UserID+\u5BC6\u7801
NET_ACCESS_DOOROPEN_METHOD_FACE_AND_PWD=\u4EBA\u8138+\u5BC6\u7801\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_PWD=\u6307\u7EB9+\u5BC6\u7801\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE=\u6307\u7EB9+\u4EBA\u8138\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE=\u5237\u5361+\u4EBA\u8138\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_FACE_OR_PWD=\u4EBA\u8138\u6216\u5BC6\u7801\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_PWD=\u6307\u7EB9\u6216\u5BC6\u7801\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE=\u6307\u7EB9\u6216\u4EBA\u8138\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE=\u5237\u5361\u6216\u4EBA\u8138\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT=\u5237\u5361\u6216\u6307\u7EB9\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE_AND_PWD=\u6307\u7EB9+\u4EBA\u8138+\u5BC6\u7801\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE_AND_PWD=\u5237\u5361+\u4EBA\u8138+\u5BC6\u7801\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_PWD=\u5237\u5361+\u6307\u7EB9+\u5BC6\u7801\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_CARD_AND_PWD_AND_FACE=\u5361+\u6307\u7EB9+\u4EBA\u8138\u7EC4\u5408\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE_OR_PWD=\u6307\u7EB9\u6216\u4EBA\u8138\u6216\u5BC6\u7801
NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE_OR_PWD =\u5361\u6216\u4EBA\u8138\u6216\u5BC6\u7801\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE=\u5361\u6216\u6307\u7EB9\u6216\u4EBA\u8138\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD=\u5361+\u6307\u7EB9+\u4EBA\u8138+\u5BC6\u7801\u7EC4\u5408\u5F00\u9501 
NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD=\u5361\u6216\u6307\u7EB9\u6216\u4EBA\u8138\u6216\u5BC6\u7801\u5F00\u9501
NET_ACCESS_DOOROPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE=(\u8EAB\u4EFD\u8BC1+\u4EBA\u8BC1\u6BD4\u5BF9)\u6216 \u5237\u5361 \u6216 \u4EBA\u8138
NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_OR_CARD_OR_FACE=\u4EBA\u8BC1\u6BD4\u5BF9 \u6216 \u5237\u5361(\u4E8C\u7EF4\u7801) \u6216 \u4EBA\u8138

#ThemalCamera
THERMAL_CAMERA=\u70ED\u6210\u50CF
THERMAL_OPERATE=\u64CD\u4F5C
POINT_QUERY=\u67E5\u8BE2\u6D4B\u6E29\u70B9
ITEM_QUERY=\u67E5\u8BE2\u6D4B\u6E29\u9879
TEMPER_QUERY=\u67E5\u8BE2\u6E29\u5EA6
HEATMAP=\u70ED\u56FE\u4FE1\u606F
POINT_TEMPER=\u6D4B\u6E29\u70B9
ITEM_TEMPER=\u6D4B\u6E29\u9879
X=X
Y=Y
COORDINATE_ILLEGAL=\u5750\u6807\u975E\u6CD5
QUERY_RESULT=\u67E5\u8BE2\u7ED3\u679C
METER_TYPE=\u6D4B\u6E29\u9879\u7C7B\u522B
TEMPER_UNIT=\u6E29\u5EA6\u5355\u4F4D
TEMPER=\u6E29\u5EA6
UNKNOWN=\u672A\u77E5
SPOT=\u70B9
LINE=\u7EBF
AREA=\u533A\u57DF
CENTIGRADE=\u6444\u6C0F\u5EA6
FAHRENHEIT=\u534E\u6C0F\u5EA6
PRESET_ID=\u9884\u7F6E\u70B9\u7F16\u53F7
RULE_ID=\u89C4\u5219\u7F16\u53F7
TEMPER_AVER=\u5E73\u5747\u6E29\u5EA6
TEMPER_MAX=\u6700\u9AD8\u6E29\u5EA6
TEMPER_MIN=\u6700\u4F4E\u6E29\u5EA6
TEMPER_MID=\u4E2D\u95F4\u6E29\u5EA6
TEMPER_STD=\u6807\u51C6\u65B9\u5DEE
INPUT_ILLEGAL=\u8F93\u5165\u975E\u6CD5
TEMPER_INFO=\u6D4B\u6E29\u4FE1\u606F
FIVE_MINUTES=\u4E94\u5206\u949F
TEN_MINUTES=\u5341\u5206\u949F
FIFTEEN_MINUTES=\u5341\u4E94\u5206\u949F
THIRTY_MINUTES=\u4E09\u5341\u5206\u949F
SAVE_PERIOD=\u4FDD\u5B58\u5468\u671F
QUERY_LIST=\u67E5\u8BE2\u5217\u8868
RECORD_TIME=\u8BB0\u5F55\u65F6\u95F4
ITEM_NAME=\u540D\u79F0
COORDINATE=\u5750\u6807
NO_RECORD=\u65E0\u8BB0\u5F55
HEATMAP_OPERATE=\u64CD\u4F5C
IDLE=\u7A7A\u95F2
ACQUIRING=\u83B7\u53D6\u4E2D
RADIOMETRY_ATTACH=\u8BA2\u9605\u70ED\u56FE\u6570\u636E
RADIOMETRY_DETACH=\u505C\u6B62\u8BA2\u9605
RADIOMETRY_FETCH=\u83B7\u53D6\u70ED\u56FE
SAVE_HEATMAP=\u4FDD\u5B58\u70ED\u56FE
HEATMAP_METADATA_INFO=\u70ED\u56FE\u5143\u6570\u636E
HEIGHT=\u9AD8
WIDTH=\u5BBD
LENGTH=\u6570\u636E\u5927\u5C0F
SENSOR_TYPE=\u673A\u82AF\u7C7B\u578B
HEATMAP_SAVE_SUCCESS=\u70ED\u56FE\u4FDD\u5B58\u6210\u529F

# matrix screen
MATRIX_SCREEN=\u70B9\u9635\u5C4F\u4E0B\u53D1
PASSING_STATE=\u8FC7\u8F66\u72B6\u6001
PASSING_CAR=\u8FC7\u8F66
NO_CAR=\u65E0\u8F66
IN_TIME=\u5165\u573A\u65F6\u95F4
OUT_TIME=\u51FA\u573A\u65F6\u95F4
PLATE_NUMBER=\u8F66\u724C\u53F7\u7801
CAR_OWNER=\u8F66\u4E3B
PARKING_TIME=\u505C\u8F66\u65F6\u957F
USER_TYPE=\u7528\u6237\u7C7B\u578B
MONTHLY_CARD_USER=\u6708\u5361\u7528\u6237
ANNUAL_CARD_USER=\u5E74\u5361\u7528\u6237
LONG_TERM_USER=\u957F\u671F\u7528\u6237/VIP
TEMPORARY_USER=\u4E34\u65F6\u7528\u6237/Visitor
PARKING_CHARGE=\u505C\u8F66\u8D39
DAYS_DUE=\u5230\u671F\u5929\u6570
REMAINING_PARKING_SPACES=\u5269\u4F59\u8F66\u4F4D
VEHICLES_NOT_ALLOWED_TO_PASS=\u4E0D\u5141\u8BB8\u8F66\u8F86\u901A\u8FC7
ALLOWED_VEHICLES_TO_PASS=\u5141\u8BB8\u8F66\u8F86\u901A\u8FC7
SET_UP=\u8BBE\u7F6E
SUCCESSFULLY_ISSUED=\u4E0B\u53D1\u6210\u529F
DELIVERY_FAILED=\u4E0B\u53D1\u5931\u8D25
CUSTOM_USER_CLASS=\u81EA\u5B9A\u4E49\u7528\u6237\u7C7B
REMARKS_INFORMATION=\u5907\u6CE8\u4FE1\u606F
CUSTOM_INFORMATION=\u81EA\u5B9A\u4E49\u4FE1\u606F

# \uFFFD\uFFFD\uFFFD\uFFFD\u0373\uFFFD\uFFFD
HUMAN_NUMBER_STATISTIC_TITLE=\u4EBA\u6570\u7EDF\u8BA1
HUMAN_NUMBER_STATISTIC_CONTROL=\u4EBA\u6570\u7EDF\u8BA1\u63A7\u5236

HUMAN_NUMBER_STATISTIC_EVENT_TITLE=\u4EBA\u6570\u7EDF\u8BA1\u4E8B\u4EF6\u5217\u8868

HUMAN_NUMBER_STATISTIC_EVENT_CHANNEL=\u901A\u9053
HUMAN_NUMBER_STATISTIC_EVENT_TIME=\u4E8B\u4EF6\u65F6\u523B
HUMAN_NUMBER_STATISTIC_EVENT_HOUR_IN=\u672C\u5C0F\u65F6\u8FDB
HUMAN_NUMBER_STATISTIC_EVENT_HOUR_OUT=\u672C\u5C0F\u65F6\u51FA
HUMAN_NUMBER_STATISTIC_EVENT_TODAY_IN=\u4ECA\u65E5\u8FDB
HUMAN_NUMBER_STATISTIC_EVENT_TODAY_OUT=\u4ECA\u65E5\u51FA
HUMAN_NUMBER_STATISTIC_EVENT_TOTAL_IN=\u603B\u5171\u8FDB
HUMAN_NUMBER_STATISTIC_EVENT_TOTAL_OUT=\u603B\u5171\u51FA

HUMAN_NUMBER_STATIC_EVENT_OSD_CLEAR=OSD\u6E05\u9664

VTO_ALARM_EVENT_ROOM_NO=\u623F\u95F4\u53F7
VTO_ALARM_EVENT_CARD_NO=\u5361\u53F7
VTO_ALARM_EVENT_TIME=\u65F6\u95F4
VTO_ALARM_EVENT_OPEN_METHOD=\u5F00\u95E8\u65B9\u5F0F
VTO_ALARM_EVENT_STATUS=\u72B6\u6001

VTO_REAL_LOAD_ROOM_NO=\u623F\u95F4\u53F7
VTO_REAL_LOAD_CARD_NO=\u5361\u53F7
VTO_REAL_LOAD_TIME=\u65F6\u95F4
VTO_REAL_LOAD_EVENT_INFO=\u4E8B\u4EF6\u4FE1\u606F

VTO_OPERATE_MANAGER_TITLE=\u5361\u4E0E\u6307\u7EB9\u4E0E\u4EBA\u8138\u7BA1\u7406
VTO_OPERATE_MANAGER_REC_NO=\u7F16\u53F7
VTO_OPERATE_MANAGER_ROOM_NO=\u623F\u95F4\u53F7
VTO_OPERATE_MANAGER_CARD_NO=\u5361\u53F7
VTO_OPERATE_MANAGER_FINGER_PRINT_DATA=\u6307\u7EB9\u6570\u636E

VTO_OPERATE_INFO_TITLE=\u589E\u52A0

VTO_OPERATE_COLLECTION_FINGER_PRINT_TITLE=\u91C7\u96C6\u6307\u7EB9
DOOR_OPEN=\u5F00\u95E8
DOOR_CLOSE=\u5173\u95E8
EVENT_OPERATE=\u4E8B\u4EF6\u64CD\u4F5C
START_REAL_LOAD_PIC=\u5F00\u59CB\u667A\u80FD\u76D1\u542C
STOP_REAL_LOAD_PIC=\u505C\u6B62\u667A\u80FD\u76D1\u542C
ALARM_EVENT=\u62A5\u8B66\u4E8B\u4EF6
REAL_LOAD_EVENT=\u667A\u80FD\u4E8B\u4EF6
COLLECTION_RESULT=\u91C7\u96C6\u7ED3\u679C
NEED_FINGER_PRINT=\u9700\u8981\u6307\u7EB9
FACE_INFO=\u4EBA\u8138\u4FE1\u606F
OPEN=\u6253\u5F00
VTO=\u53EF\u89C6\u5BF9\u8BB2\u95E8\u53E3\u673A
TRAFFIC_ALLOW_LIST=\u667A\u80FD\u4EA4\u901A\u5141\u8BB8\u540D\u5355
MODIFY_CARD_FACE_FAILED=\u4FEE\u6539\u4EBA\u8138\u5931\u8D25
EM_MASK_STATE_UNKNOWN=\u672A\u77E5
EM_MASK_STATE_NODISTI=\u672A\u8BC6\u522B
EM_MASK_STATE_NOMASK=\u6CA1\u6234\u53E3\u7F69
EM_MASK_STATE_WEAR=\u6234\u53E3\u7F69

END_SEARCH=\u67E5\u8BE2\u7ED3\u675F
DOWNLOAD_PICTURE=\u4E0B\u8F7D\u56FE\u7247
ENTER_PICTURE_PATH=\u8BF7\u8F93\u5165\u56FE\u7247\u8DEF\u5F84
LOADING=\u8BBE\u5907\u6B63\u5728\u5904\u7406\u4E2D
REMOTE_OPEN_DOOR=\u8FDC\u7A0B\u5F00\u95E8
QUERY_CARD_EXIST_FAILED=\u68C0\u67E5\u5361\u53F7\u662F\u5426\u5B58\u5728\u5931\u8D25
CARD_EXIST=\u5361\u53F7\u5DF2\u5B58\u5728
INPUT_ROOM_NO=\u8BF7\u8F93\u5165\u623F\u95F4\u53F7
ROOM_NO_EXCEED_LENGTH=\u623F\u95F4\u53F7\u8D85\u8FC7\u6700\u5927\u957F\u5EA6
REMOVE_CARD_FACE_FAILED=\u5220\u9664\u4EBA\u8138\u5931\u8D25


#SCADA
SCADA=\u52A8\u73AF\u4E3B\u673A
SCADA_DEVICE_LIST=\u8BBE\u5907\u8868
SCADA_POINT_LIST=\u70B9\u4F4D\u8868
SCADA_ATTACH_ALARM=\u8BA2\u9605\u62A5\u8B66
SCADA_ATTACH_INFO=\u8BA2\u9605\u4FE1\u606F
SCADA_ATTACH=\u8BA2\u9605
BTN_LIST = \u83B7\u53D6
BTN_ATTACH = \u8BA2\u9605

STOP_LISTEN_FAILED=\u505C\u6B62\u76D1\u542C\u5931\u8D25

SCREEN_NUMBER=\u5C4F\u5E55\u7F16\u53F7
TEXT_CONTENT=\u6587\u672C\u5185\u5BB9
TEXT_CONTENT_TYPE=\u6587\u672C\u7C7B\u578B
TEXT_CONTENT_COLOR=\u6587\u672C\u989C\u8272
SCROLL_TYPE=\u6EDA\u52A8\u7C7B\u578B
SCROLL_SPEED=\u6EDA\u52A8\u901F\u5EA6

ORDINARY=\u666E\u901A
QR_CODE=\u4E8C\u7EF4\u7801
LOCAL_TIME=\u672C\u5730\u65F6\u95F4
RESOURCE=\u8D44\u6E90\u6587\u4EF6

NOT_ROLLING=\u4E0D\u6EDA\u52A8
SCROLL_LEFT_AND_RIGHT=\u5DE6\u53F3\u6EDA\u52A8
SCROLL_UP_AND_DOWN=\u4E0A\u4E0B\u7FFB\u9875\u6EDA\u52A8

NUMBER_STRING=\u6570\u5B57\u5B57\u7B26\u4E32
VOICE_TEXT=\u8BED\u97F3\u6587\u672C
ISSUED=\u4E0B\u53D1
PROMPT=\u8BF7\u6DFB\u52A0\u5BF9\u5E94\u53C2\u6570

DEVICE_NAME=\u8BBE\u5907\u540D\u79F0
POINT_ID=\u70B9\u4F4DID
IF_VALID_SIGNAL_POINT=\u662F\u5426\u6709\u6548\u4FE1\u53F7\u70B9
POINT_NAME=\u70B9\u4F4D\u540D\u79F0
ALARM_DESCRIBE=\u62A5\u8B66\u63CF\u8FF0
ALARM_LEVEL=\u62A5\u8B66\u7EA7\u522B
ALARM_DELAY=\u62A5\u8B66\u65F6\u5EF6
ALARM_TYPE=\u62A5\u8B66\u7C7B\u578B
ALARM_TIME=\u62A5\u8B66\u65F6\u95F4
COLLECT_TIME=\u91C7\u96C6\u65F6\u95F4


ALLOWLIST_OPERATION=\u5141\u8BB8\u540D\u5355\u64CD\u4F5C
SINGLE_UPLOAD =\u5355\u4E2A\u4E0A\u4F20
LICENSE_PLATE_RUN=\u8F93\u5165\u8981\u67E5\u7684\u8F66\u724C\u53F7
FUZZY_QUERY=\u6A21\u7CCA\u67E5\u8BE2
DELETE_ALL=\u5168\u90E8\u5220\u9664
AUTHORIZATION=\u6388\u6743
UNAUTHORIZATION=\u672A\u6388\u6743
BATCH_UPLOAD=\u6279\u91CF\u4E0A\u4F20
BROWSE=\u6D4F\u89C8
UPLOAD=\u4E0A\u4F20
QUERY_INFORMATION=\u67E5\u8BE2\u4FE1\u606F
DIALOG=\u5BF9\u8BDD\u6846
LICENSE_PLATE_NUMBER=\u8F66\u724C\u53F7
MODIFY_PANEL=\u4FEE\u6539\u9762\u677F
SERIAL_NUMBER=\u5E8F\u53F7
OPEN_MODEL=\u5F00\u95F8\u6A21\u5F0F
LICENSE_PLATE_LENGTH_TOO_LONG=\u8F66\u724C\u957F\u5EA6\u8FC7\u957F
NAME_TOO_LONG=\u540D\u5B57\u957F\u5EA6\u8FC7\u957F
ADD_SUCCESS=\u6DFB\u52A0\u6210\u529F
ADD_FAIL=\u6DFB\u52A0\u5931\u8D25
DELETE_SUCCESS=\u5220\u9664\u6210\u529F
DELETE_FAIL=\u5220\u9664\u5931\u8D25
MODIFY_SUCCESS=\u4FEE\u6539\u6210\u529F
MODIFY_FAIL=\u4FEE\u6539\u5931\u8D25
UPLOAD_SUCCESS=\u4E0A\u4F20\u6210\u529F
ENTER_QUERY_DATA=\u8BF7\u8F93\u5165\u8981\u67E5\u8BE2\u7684\u6570\u636E
FILLING_RULES=\u586B\u5199\u5408\u6CD5\u5B57\u7B26
UPLOAD_FAIL=\u4E0A\u4F20\u5931\u8D25
UPLOADING=\u6B63\u5728\u4E0A\u4F20
SURE_UPLOAD=\u786E\u5B9A\u4E0A\u4F20?
DATA_NUMBER=\u6761\u6570\u636E
SELECT_DATA=\u8BF7\u9009\u62E9\u6570\u636E


\ No newline at end of file
diff --git a/lib/dhDll/ImageAlg.dll b/lib/dhDll/ImageAlg.dll
new file mode 100644
index 0000000..06c5c75
--- /dev/null
+++ b/lib/dhDll/ImageAlg.dll
Binary files differ
diff --git a/lib/dhDll/Infra.dll b/lib/dhDll/Infra.dll
new file mode 100644
index 0000000..19524ec
--- /dev/null
+++ b/lib/dhDll/Infra.dll
Binary files differ
diff --git a/lib/dhDll/IvsDrawer.dll b/lib/dhDll/IvsDrawer.dll
new file mode 100644
index 0000000..b339dc9
--- /dev/null
+++ b/lib/dhDll/IvsDrawer.dll
Binary files differ
diff --git a/lib/dhDll/RenderEngine.dll b/lib/dhDll/RenderEngine.dll
new file mode 100644
index 0000000..0f4742f
--- /dev/null
+++ b/lib/dhDll/RenderEngine.dll
Binary files differ
diff --git a/lib/dhDll/StreamConvertor.dll b/lib/dhDll/StreamConvertor.dll
new file mode 100644
index 0000000..ad69638
--- /dev/null
+++ b/lib/dhDll/StreamConvertor.dll
Binary files differ
diff --git a/lib/dhDll/avnetsdk.dll b/lib/dhDll/avnetsdk.dll
new file mode 100644
index 0000000..76e9d95
--- /dev/null
+++ b/lib/dhDll/avnetsdk.dll
Binary files differ
diff --git a/lib/dhDll/dhconfigsdk.dll b/lib/dhDll/dhconfigsdk.dll
new file mode 100644
index 0000000..6a554ce
--- /dev/null
+++ b/lib/dhDll/dhconfigsdk.dll
Binary files differ
diff --git a/lib/dhDll/dhnetsdk.dll b/lib/dhDll/dhnetsdk.dll
new file mode 100644
index 0000000..b4e44d7
--- /dev/null
+++ b/lib/dhDll/dhnetsdk.dll
Binary files differ
diff --git a/lib/dhDll/dhplay.dll b/lib/dhDll/dhplay.dll
new file mode 100644
index 0000000..921564e
--- /dev/null
+++ b/lib/dhDll/dhplay.dll
Binary files differ
diff --git a/lib/AudioRender.dll b/lib/hikDll/AudioRender.dll
similarity index 100%
rename from lib/AudioRender.dll
rename to lib/hikDll/AudioRender.dll
Binary files differ
diff --git a/lib/ClientDemoDll/calib.dll b/lib/hikDll/ClientDemoDll/calib.dll
similarity index 100%
rename from lib/ClientDemoDll/calib.dll
rename to lib/hikDll/ClientDemoDll/calib.dll
Binary files differ
diff --git a/lib/ClientDemoDll/iconv.dll b/lib/hikDll/ClientDemoDll/iconv.dll
similarity index 100%
rename from lib/ClientDemoDll/iconv.dll
rename to lib/hikDll/ClientDemoDll/iconv.dll
Binary files differ
diff --git a/lib/ClientDemoDll/libcrypto-1_1-x64.dll b/lib/hikDll/ClientDemoDll/libcrypto-1_1-x64.dll
similarity index 100%
rename from lib/ClientDemoDll/libcrypto-1_1-x64.dll
rename to lib/hikDll/ClientDemoDll/libcrypto-1_1-x64.dll
Binary files differ
diff --git a/lib/ClientDemoDll/libssl-1_1-x64.dll b/lib/hikDll/ClientDemoDll/libssl-1_1-x64.dll
similarity index 100%
rename from lib/ClientDemoDll/libssl-1_1-x64.dll
rename to lib/hikDll/ClientDemoDll/libssl-1_1-x64.dll
Binary files differ
diff --git a/lib/ClientDemoDll/libxml2.dll b/lib/hikDll/ClientDemoDll/libxml2.dll
similarity index 100%
rename from lib/ClientDemoDll/libxml2.dll
rename to lib/hikDll/ClientDemoDll/libxml2.dll
Binary files differ
diff --git a/lib/ClientDemoDll/zlib1.dll b/lib/hikDll/ClientDemoDll/zlib1.dll
similarity index 100%
rename from lib/ClientDemoDll/zlib1.dll
rename to lib/hikDll/ClientDemoDll/zlib1.dll
Binary files differ
diff --git a/lib/GdiPlus.dll b/lib/hikDll/GdiPlus.dll
similarity index 100%
rename from lib/GdiPlus.dll
rename to lib/hikDll/GdiPlus.dll
Binary files differ
diff --git a/lib/HCCore.dll b/lib/hikDll/HCCore.dll
similarity index 100%
rename from lib/HCCore.dll
rename to lib/hikDll/HCCore.dll
Binary files differ
diff --git a/lib/HCNetSDK.dll b/lib/hikDll/HCNetSDK.dll
similarity index 100%
rename from lib/HCNetSDK.dll
rename to lib/hikDll/HCNetSDK.dll
Binary files differ
diff --git a/lib/HCNetSDKCom/AudioIntercom.dll b/lib/hikDll/HCNetSDKCom/AudioIntercom.dll
similarity index 100%
rename from lib/HCNetSDKCom/AudioIntercom.dll
rename to lib/hikDll/HCNetSDKCom/AudioIntercom.dll
Binary files differ
diff --git a/lib/HCNetSDKCom/AudioRender.dll b/lib/hikDll/HCNetSDKCom/AudioRender.dll
similarity index 100%
rename from lib/HCNetSDKCom/AudioRender.dll
rename to lib/hikDll/HCNetSDKCom/AudioRender.dll
Binary files differ
diff --git a/lib/HCNetSDKCom/HCAlarm.dll b/lib/hikDll/HCNetSDKCom/HCAlarm.dll
similarity index 100%
rename from lib/HCNetSDKCom/HCAlarm.dll
rename to lib/hikDll/HCNetSDKCom/HCAlarm.dll
Binary files differ
diff --git a/lib/HCNetSDKCom/HCAlarm.lib b/lib/hikDll/HCNetSDKCom/HCAlarm.lib
similarity index 100%
rename from lib/HCNetSDKCom/HCAlarm.lib
rename to lib/hikDll/HCNetSDKCom/HCAlarm.lib
Binary files differ
diff --git a/lib/HCNetSDKCom/HCCoreDevCfg.dll b/lib/hikDll/HCNetSDKCom/HCCoreDevCfg.dll
similarity index 100%
rename from lib/HCNetSDKCom/HCCoreDevCfg.dll
rename to lib/hikDll/HCNetSDKCom/HCCoreDevCfg.dll
Binary files differ
diff --git a/lib/HCNetSDKCom/HCDisplay.dll b/lib/hikDll/HCNetSDKCom/HCDisplay.dll
similarity index 100%
rename from lib/HCNetSDKCom/HCDisplay.dll
rename to lib/hikDll/HCNetSDKCom/HCDisplay.dll
Binary files differ
diff --git a/lib/HCNetSDKCom/HCGeneralCfgMgr.dll b/lib/hikDll/HCNetSDKCom/HCGeneralCfgMgr.dll
similarity index 100%
rename from lib/HCNetSDKCom/HCGeneralCfgMgr.dll
rename to lib/hikDll/HCNetSDKCom/HCGeneralCfgMgr.dll
Binary files differ
diff --git a/lib/HCNetSDKCom/HCGeneralCfgMgr.lib b/lib/hikDll/HCNetSDKCom/HCGeneralCfgMgr.lib
similarity index 100%
rename from lib/HCNetSDKCom/HCGeneralCfgMgr.lib
rename to lib/hikDll/HCNetSDKCom/HCGeneralCfgMgr.lib
Binary files differ
diff --git a/lib/HCNetSDKCom/HCIndustry.dll b/lib/hikDll/HCNetSDKCom/HCIndustry.dll
similarity index 100%
rename from lib/HCNetSDKCom/HCIndustry.dll
rename to lib/hikDll/HCNetSDKCom/HCIndustry.dll
Binary files differ
diff --git a/lib/HCNetSDKCom/HCPlayBack.dll b/lib/hikDll/HCNetSDKCom/HCPlayBack.dll
similarity index 100%
rename from lib/HCNetSDKCom/HCPlayBack.dll
rename to lib/hikDll/HCNetSDKCom/HCPlayBack.dll
Binary files differ
diff --git a/lib/HCNetSDKCom/HCPreview.dll b/lib/hikDll/HCNetSDKCom/HCPreview.dll
similarity index 100%
rename from lib/HCNetSDKCom/HCPreview.dll
rename to lib/hikDll/HCNetSDKCom/HCPreview.dll
Binary files differ
diff --git a/lib/HCNetSDKCom/HCPreview.lib b/lib/hikDll/HCNetSDKCom/HCPreview.lib
similarity index 100%
rename from lib/HCNetSDKCom/HCPreview.lib
rename to lib/hikDll/HCNetSDKCom/HCPreview.lib
Binary files differ
diff --git a/lib/HCNetSDKCom/HCVoiceTalk.dll b/lib/hikDll/HCNetSDKCom/HCVoiceTalk.dll
similarity index 100%
rename from lib/HCNetSDKCom/HCVoiceTalk.dll
rename to lib/hikDll/HCNetSDKCom/HCVoiceTalk.dll
Binary files differ
diff --git a/lib/HCNetSDKCom/OpenAL32.dll b/lib/hikDll/HCNetSDKCom/OpenAL32.dll
similarity index 100%
rename from lib/HCNetSDKCom/OpenAL32.dll
rename to lib/hikDll/HCNetSDKCom/OpenAL32.dll
Binary files differ
diff --git a/lib/HCNetSDKCom/StreamTransClient.dll b/lib/hikDll/HCNetSDKCom/StreamTransClient.dll
similarity index 100%
rename from lib/HCNetSDKCom/StreamTransClient.dll
rename to lib/hikDll/HCNetSDKCom/StreamTransClient.dll
Binary files differ
diff --git a/lib/HCNetSDKCom/SystemTransform.dll b/lib/hikDll/HCNetSDKCom/SystemTransform.dll
similarity index 100%
rename from lib/HCNetSDKCom/SystemTransform.dll
rename to lib/hikDll/HCNetSDKCom/SystemTransform.dll
Binary files differ
diff --git a/lib/HCNetSDKCom/libiconv2.dll b/lib/hikDll/HCNetSDKCom/libiconv2.dll
similarity index 100%
rename from lib/HCNetSDKCom/libiconv2.dll
rename to lib/hikDll/HCNetSDKCom/libiconv2.dll
Binary files differ
diff --git a/lib/HXVA.dll b/lib/hikDll/HXVA.dll
similarity index 100%
rename from lib/HXVA.dll
rename to lib/hikDll/HXVA.dll
Binary files differ
diff --git a/lib/HmMerge.dll b/lib/hikDll/HmMerge.dll
similarity index 100%
rename from lib/HmMerge.dll
rename to lib/hikDll/HmMerge.dll
Binary files differ
diff --git a/lib/MP_Render.dll b/lib/hikDll/MP_Render.dll
similarity index 100%
rename from lib/MP_Render.dll
rename to lib/hikDll/MP_Render.dll
Binary files differ
diff --git a/lib/NPQos.dll b/lib/hikDll/NPQos.dll
similarity index 100%
rename from lib/NPQos.dll
rename to lib/hikDll/NPQos.dll
Binary files differ
diff --git a/lib/OpenAL32.dll b/lib/hikDll/OpenAL32.dll
similarity index 100%
rename from lib/OpenAL32.dll
rename to lib/hikDll/OpenAL32.dll
Binary files differ
diff --git a/lib/PlayCtrl.dll b/lib/hikDll/PlayCtrl.dll
similarity index 100%
rename from lib/PlayCtrl.dll
rename to lib/hikDll/PlayCtrl.dll
Binary files differ
diff --git a/lib/SuperRender.dll b/lib/hikDll/SuperRender.dll
similarity index 100%
rename from lib/SuperRender.dll
rename to lib/hikDll/SuperRender.dll
Binary files differ
diff --git a/lib/YUVProcess.dll b/lib/hikDll/YUVProcess.dll
similarity index 100%
rename from lib/YUVProcess.dll
rename to lib/hikDll/YUVProcess.dll
Binary files differ
diff --git a/lib/hlog.dll b/lib/hikDll/hlog.dll
similarity index 100%
rename from lib/hlog.dll
rename to lib/hikDll/hlog.dll
Binary files differ
diff --git a/lib/hpr.dll b/lib/hikDll/hpr.dll
similarity index 100%
rename from lib/hpr.dll
rename to lib/hikDll/hpr.dll
Binary files differ
diff --git a/lib/libcrypto-1_1-x64.dll b/lib/hikDll/libcrypto-1_1-x64.dll
similarity index 100%
rename from lib/libcrypto-1_1-x64.dll
rename to lib/hikDll/libcrypto-1_1-x64.dll
Binary files differ
diff --git a/lib/libmmd.dll b/lib/hikDll/libmmd.dll
similarity index 100%
rename from lib/libmmd.dll
rename to lib/hikDll/libmmd.dll
Binary files differ
diff --git a/lib/libssl-1_1-x64.dll b/lib/hikDll/libssl-1_1-x64.dll
similarity index 100%
rename from lib/libssl-1_1-x64.dll
rename to lib/hikDll/libssl-1_1-x64.dll
Binary files differ
diff --git a/lib/zlib1.dll b/lib/hikDll/zlib1.dll
similarity index 100%
rename from lib/zlib1.dll
rename to lib/hikDll/zlib1.dll
Binary files differ
diff --git a/ruoyi-admin/src/main/resources/logback.xml b/ruoyi-admin/src/main/resources/logback.xml
index 6d1add5..4fa36cf 100644
--- a/ruoyi-admin/src/main/resources/logback.xml
+++ b/ruoyi-admin/src/main/resources/logback.xml
@@ -94,6 +94,19 @@
             <pattern>${log.pattern}</pattern>
         </encoder>
     </appender>
+    <!--dhSdk鏃ュ織杈撳嚭-->
+    <appender name="dhSdk" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/dhSdk.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!--鎸夊ぉ鍥炴粴daily-->
+            <fileNamePattern>${log.path}/dhSdk.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!--鏃ュ織鏈�澶х殑鍘嗗彶60澶�-->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
     <!--minio鏃ュ織杈撳嚭-->
     <appender name="minio" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>${log.path}/minio.log</file>
@@ -245,6 +258,10 @@
     <logger name="hikSdk" level="INFO">
         <appender-ref ref="hikSdk"/>
     </logger>
+    <!--dhSdk鏃ュ織-->
+    <logger name="dhSdk" level="INFO">
+        <appender-ref ref="dhSdk"/>
+    </logger>
     <!--mqtt鏃ュ織-->
     <logger name="mqtt" level="INFO">
         <appender-ref ref="mqtt"/>
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java
index 2ce32ca..c2fee6a 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java
@@ -50,7 +50,9 @@
      */
     public void cameraState() {
         try {
-            List<ArdCameras> ardCameras = iArdCamerasService.selectArdCamerasListNoDataScope(new ArdCameras());
+            ArdCameras ardCamera = new ArdCameras();
+            ardCamera.setFactory("1");
+            List<ArdCameras> ardCameras = iArdCamerasService.selectArdCamerasListNoDataScope(ardCamera);
             for (ArdCameras camera : ardCameras) {
                 CameraCmd cmd = new CameraCmd();
                 cmd.setCameraId(camera.getId());
@@ -109,7 +111,7 @@
         List<Vtdu> vtdus = vtduService.selectVtduList(new Vtdu());
         for (Vtdu vtdu : vtdus) {
             if (!nameList.contains(vtdu.getName())) {
-                mediaService.addPath(vtdu.getName(),vtdu.getRtspSource(),vtdu.getMode(),vtdu.getIsCode());
+                mediaService.addPath(vtdu.getName(), vtdu.getRtspSource(), vtdu.getMode(), vtdu.getIsCode());
             }
         }
     }

--
Gitblit v1.9.3