From acdb4a206f64cc7b39cee05d77bbc4e98258c27b Mon Sep 17 00:00:00 2001
From: liusuyi <13324259@qq.com>
Date: 星期二, 24 十月 2023 21:50:48 +0800
Subject: [PATCH] 相机校验是否唯一

---
 ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java    |   13 ++++--
 ard-work/src/main/java/com/ruoyi/device/camera/service/IArdCamerasService.java         |   10 ++++
 ard-work/src/main/java/com/ruoyi/media/service/impl/MediaServiceImpl.java              |    9 ++--
 ard-work/src/main/java/com/ruoyi/device/camera/mapper/ArdCamerasMapper.java            |   14 +++++-
 ard-work/src/main/java/com/ruoyi/media/controller/VtduController.java                  |   11 +++--
 ruoyi-common/src/main/java/com/ruoyi/common/constant/CameraConstants.java              |   15 +++++++
 ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java |   24 +++++++++--
 ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml                         |    3 +
 8 files changed, 78 insertions(+), 21 deletions(-)

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 afbee07..2ecbd0d 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
@@ -4,21 +4,18 @@
 import javax.servlet.http.HttpServletResponse;
 
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.ruoyi.common.constant.CameraConstants;
 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.camera.service.ICameraSdkService;
-import com.ruoyi.device.camera.service.impl.CameraSdkServiceImpl;
 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;
 import com.ruoyi.inspect.service.IArdVideoInspectTaskService;
-import com.ruoyi.media.service.IVtduService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -101,6 +98,10 @@
     @Log(title = "鐩告満璁惧", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody ArdCameras camera) {
+        if (CameraConstants.NOT_UNIQUE.equals(ardCamerasService.checkCameraIpAndPortUnique(camera)))
+        {
+            return error("鏂板鐩告満'" + camera.getIp()+":"+camera.getPort() + "'澶辫触锛岀浉鏈哄凡瀛樺湪");
+        }
         int i = ardCamerasService.insertArdCameras(camera);
         if (i > 0) {
             cameraSdkService.logout(camera.getId());
@@ -117,6 +118,10 @@
     @Log(title = "鐩告満璁惧", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody ArdCameras camera) {
+        if (CameraConstants.NOT_UNIQUE.equals(ardCamerasService.checkCameraIpAndPortUnique(camera)))
+        {
+            return error("淇敼鐩告満'" + camera.getIp()+":"+camera.getPort() + "'澶辫触锛岀浉鏈哄凡瀛樺湪");
+        }
         int i = ardCamerasService.updateArdCameras(camera);
         if (i > 0) {
             cameraSdkService.logout(camera.getId());
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/mapper/ArdCamerasMapper.java b/ard-work/src/main/java/com/ruoyi/device/camera/mapper/ArdCamerasMapper.java
index 4f931ff..81e6a6d 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/mapper/ArdCamerasMapper.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/mapper/ArdCamerasMapper.java
@@ -1,11 +1,10 @@
 package com.ruoyi.device.camera.mapper;
 
 import java.util.List;
-
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.ruoyi.common.annotation.DataScope;
-import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.device.camera.domain.ArdCameras;
+import org.apache.ibatis.annotations.Param;
+
 
 /**
  * 鐩告満璁惧Mapper鎺ュ彛
@@ -77,4 +76,13 @@
      * @return 閮ㄩ棬鍒楄〃
      */
     public List<ArdCameras> selectArdCamerasByDeptId(Long deptId);
+
+    /**
+     * 鏍¢獙鐩告満鏄惁鍞竴
+     *
+     * @param ip 鐩告満ip
+     * @param port 鐩告満绔彛
+     * @return 鐩告満淇℃伅
+     */
+    public ArdCameras checkCameraIpAndPortUnique(@Param("ip") String ip, @Param("port")Integer port);
 }
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/IArdCamerasService.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/IArdCamerasService.java
index c51ff05..b36ac59 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/service/IArdCamerasService.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/service/IArdCamerasService.java
@@ -1,6 +1,6 @@
 package com.ruoyi.device.camera.service;
 
-import java.util.HashMap;
+
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
@@ -97,4 +97,12 @@
      * 2023/8/17 13:56:36
      */
     public List<ArdCameras> getNearCamerasWithPolygon(SchedulingParam param);
+
+    /**
+     * 鏍¢獙鐩告満鏄惁鍞竴
+     *
+     * @param camera 鐩告満
+     * @return 缁撴灉
+     */
+    public String checkCameraIpAndPortUnique(ArdCameras camera);
 }
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
index 99c36f5..1ef2e1a 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
@@ -4,17 +4,16 @@
 import java.util.stream.Collectors;
 
 import com.ruoyi.common.constant.CacheConstants;
+import com.ruoyi.common.constant.CameraConstants;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.device.camera.domain.CameraCmd;
 import com.ruoyi.device.channel.domain.ArdChannel;
 import com.ruoyi.device.channel.mapper.ArdChannelMapper;
-import com.ruoyi.device.hiksdk.service.IHikClientService;
-import com.ruoyi.media.domain.Vtdu;
-import com.ruoyi.media.service.IMediaService;
 import com.ruoyi.media.service.IVtduService;
 import com.ruoyi.scheduling.domian.SchedulingParam;
 import com.ruoyi.utils.gis.GisUtil;
@@ -51,8 +50,6 @@
     private ArdChannelMapper ardChannelMapper;
     @Resource
     private IVtduService vtduService;
-    @Resource
-    private IMediaService mediaService;
 
 
     @PostConstruct
@@ -425,4 +422,21 @@
         return null;
     }
 
+    /**
+     * 鏍¢獙鐩告満鏄惁鍞竴
+     *
+     * @param camera 鐩告満
+     * @return 缁撴灉
+     */
+    @Override
+    public String checkCameraIpAndPortUnique(ArdCameras camera) {
+        String id = camera.getId();
+        String ip = camera.getIp();
+        Integer port = camera.getPort();
+        ArdCameras info = ardCamerasMapper.checkCameraIpAndPortUnique(ip, port);
+        if (StringUtils.isNotNull(info) && !info.getId().equals(id)) {
+            return CameraConstants.NOT_UNIQUE;
+        }
+        return CameraConstants.UNIQUE;
+    }
 }
diff --git a/ard-work/src/main/java/com/ruoyi/media/controller/VtduController.java b/ard-work/src/main/java/com/ruoyi/media/controller/VtduController.java
index 34c87bd..1f8dd23 100644
--- a/ard-work/src/main/java/com/ruoyi/media/controller/VtduController.java
+++ b/ard-work/src/main/java/com/ruoyi/media/controller/VtduController.java
@@ -9,6 +9,7 @@
 import com.ruoyi.device.camera.domain.CameraCmd;
 import com.ruoyi.device.camera.service.ICameraSdkService;
 import com.ruoyi.media.service.IMediaService;
+import com.ruoyi.media.service.impl.MediaServiceImpl;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -80,10 +81,12 @@
             CameraCmd cmd = new CameraCmd(cameraId, chanNo);
             Map<String, Object> videoCompressionCfg = cameraSdkService.getVideoCompressionCfg(cmd);
             String videoEncType = (String) videoCompressionCfg.get("videoEncType");
-            if (!videoEncType.equals("鏍囧噯h264")) {
-                vtdu.setIsCode("1");
-            } else {
-                vtdu.setIsCode("0");
+            if (videoEncType != null) {
+                if (!videoEncType.equals("鏍囧噯h264")) {
+                    vtdu.setIsCode("1");
+                } else {
+                    vtdu.setIsCode("0");
+                }
             }
             //娴佸獟浣撲笉瀛樺湪鏂板锛屽瓨鍦ㄦ洿鏂�
             if (!mediaService.checkNameExist(name)) {
diff --git a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaServiceImpl.java b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaServiceImpl.java
index b7242fd..694b3a5 100644
--- a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaServiceImpl.java
@@ -35,7 +35,7 @@
 @Slf4j(topic = "vtdu")
 @Order(2)
 public class MediaServiceImpl implements IMediaService, ApplicationRunner {
-    private static List<String> mediaNameList = new ArrayList<>();
+    public static List<String> mediaNameList = new ArrayList<>();
     @Resource
     MediaClient mediaClient;
 
@@ -90,6 +90,7 @@
 
             if (!checkNameExist(name)) {
                  mediaClient.addPath(name, conf);
+                 mediaNameList.add(name);
             }
 
             map.put("rtspUrl", rtspUrl);
@@ -184,6 +185,7 @@
         try {
             if (checkNameExist(name)) {
                 mediaClient.removePath(name);
+                mediaNameList.remove(name);
             }
         } catch (ForestRuntimeException ex) {
             log.error("绉婚櫎娴佸獟浣撳紓甯革細" + ex.getMessage());
@@ -473,20 +475,19 @@
      */
     @Override
     public List<String> getNameList() {
-        List<String> nameList = new ArrayList<>();
         try {
             String paths = mediaClient.paths();
             JsonsRoot jsonsRoot = JSONObject.parseObject(paths, JsonsRoot.class);
             List<Items> items = jsonsRoot.getItems();
             for (Items item : items) {
-                nameList.add(item.getName());
+                mediaNameList.add(item.getName());
             }
         } catch (ForestNetworkException ex) {
             log.error("鑾峰彇娴佸獟浣搉ame鍒楄〃寮傚父锛�" + ex.getMessage());
         } catch (ForestRuntimeException ex) {
             log.error("鑾峰彇娴佸獟浣搉ame鍒楄〃寮傚父锛�" + ex.getMessage());
         }
-        return nameList;
+        return mediaNameList;
     }
 
     /**
diff --git a/ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml b/ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml
index 3a13832..421252d 100644
--- a/ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml
+++ b/ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml
@@ -275,4 +275,7 @@
         from ard_cameras
         where dept_id = #{deptId}
     </select>
+    <select id="checkCameraIpAndPortUnique"  resultMap="ArdCamerasResult">
+        select * from ard_cameras where ip=#{ip} and port=#{port} limit 1
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CameraConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CameraConstants.java
new file mode 100644
index 0000000..e4ec245
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CameraConstants.java
@@ -0,0 +1,15 @@
+package com.ruoyi.common.constant;
+
+/**
+ * 鐩告満甯搁噺淇℃伅
+ * 
+ * @author ruoyi
+ */
+public class CameraConstants
+{
+
+    /** 鏍¢獙杩斿洖缁撴灉鐮� */
+    public final static String UNIQUE = "0";
+    public final static String NOT_UNIQUE = "1";
+
+}

--
Gitblit v1.9.3