From defe580b123e1b7c892b88619c05774157dc09b5 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Mon, 03 Nov 2025 15:39:32 +0800
Subject: [PATCH] 增加校验机场是否已关联相机

---
 ard-device/src/main/java/com/ard/device/camera/service/IArdCameraService.java         |    7 +++++++
 ard-device/src/main/resources/mapper/ArdCameraMapper.xml                              |    3 +++
 ard-device/src/main/java/com/ard/device/camera/mapper/ArdCameraMapper.java            |    2 +-
 ard-admin/src/main/java/com/ard/web/controller/device/ArdCameraController.java        |    9 +++++++++
 ard-device/src/main/java/com/ard/device/camera/service/impl/ArdCameraServiceImpl.java |   17 +++++++++++++++++
 5 files changed, 37 insertions(+), 1 deletions(-)

diff --git a/ard-admin/src/main/java/com/ard/web/controller/device/ArdCameraController.java b/ard-admin/src/main/java/com/ard/web/controller/device/ArdCameraController.java
index c24b65e..cbbfddf 100644
--- a/ard-admin/src/main/java/com/ard/web/controller/device/ArdCameraController.java
+++ b/ard-admin/src/main/java/com/ard/web/controller/device/ArdCameraController.java
@@ -14,6 +14,7 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.jdbc.Null;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -83,6 +84,10 @@
         if (DeviceConstants.NOT_UNIQUE.equals(ardCameraService.checkCameraIpAndPortUnique(camera))) {
             return error("新增相机'" + camera.getIp() + ":" + camera.getPort() + "'失败,相机已存在");
         }
+        ArdCamera existingCamera = ardCameraService.checkAirportHasCamera(camera);
+        if (existingCamera != null) {
+            return error("该机场已被相机【" + existingCamera.getName() + "】(" + existingCamera.getIp() + ") 关联");
+        }
         return success(ardCameraService.insertArdCamera(camera));
     }
 
@@ -97,6 +102,10 @@
         if (DeviceConstants.NOT_UNIQUE.equals(ardCameraService.checkCameraIpAndPortUnique(camera))) {
             return error("修改相机'" + camera.getIp() + ":" + camera.getPort() + "'失败,相机已存在");
         }
+        ArdCamera existingCamera = ardCameraService.checkAirportHasCamera(camera);
+        if (existingCamera != null) {
+            return error("该机场已被相机【" + existingCamera.getName() + "】(" + existingCamera.getIp() + ") 关联");
+        }
         return success(ardCameraService.updateArdCamera(camera));
     }
 
diff --git a/ard-device/src/main/java/com/ard/device/camera/mapper/ArdCameraMapper.java b/ard-device/src/main/java/com/ard/device/camera/mapper/ArdCameraMapper.java
index 047bd8f..095dd31 100644
--- a/ard-device/src/main/java/com/ard/device/camera/mapper/ArdCameraMapper.java
+++ b/ard-device/src/main/java/com/ard/device/camera/mapper/ArdCameraMapper.java
@@ -84,6 +84,6 @@
      */
     public int resetCameraLoginId(ArdCamera camera);
 
-
+    ArdCamera checkAirportHasCamera(ArdCamera camera);
 
 }
diff --git a/ard-device/src/main/java/com/ard/device/camera/service/IArdCameraService.java b/ard-device/src/main/java/com/ard/device/camera/service/IArdCameraService.java
index e54247f..9d30421 100644
--- a/ard-device/src/main/java/com/ard/device/camera/service/IArdCameraService.java
+++ b/ard-device/src/main/java/com/ard/device/camera/service/IArdCameraService.java
@@ -102,6 +102,13 @@
     public String checkCameraIpAndPortUnique(ArdCamera camera);
 
     /**
+     * 校验机场是否已关联相机
+     *
+     * @param camera 相机
+     * @return 结果
+     */
+    public ArdCamera checkAirportHasCamera(ArdCamera camera);
+    /**
      * 同步通道
      *
      * @param oldArrayList 旧通道列表(库中)
diff --git a/ard-device/src/main/java/com/ard/device/camera/service/impl/ArdCameraServiceImpl.java b/ard-device/src/main/java/com/ard/device/camera/service/impl/ArdCameraServiceImpl.java
index 39de4b9..b8f40d8 100644
--- a/ard-device/src/main/java/com/ard/device/camera/service/impl/ArdCameraServiceImpl.java
+++ b/ard-device/src/main/java/com/ard/device/camera/service/impl/ArdCameraServiceImpl.java
@@ -29,6 +29,7 @@
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
+
 import javax.annotation.Resource;
 import javax.validation.Validator;
 import java.util.*;
@@ -295,6 +296,20 @@
         return DeviceConstants.UNIQUE;
     }
 
+    /**
+     * 校验机场是否已关联相机
+     *
+     * @param camera 相机
+     * @return 结果
+     */
+    @Override
+    public ArdCamera checkAirportHasCamera(ArdCamera camera) {
+        ArdCamera info = ardCameraMapper.checkAirportHasCamera(camera);
+        if (StringUtils.isNotNull(info)&& !info.getId().equals(camera.getId())) {
+            return info;
+        }
+        return null;
+    }
 
     /**
      * 同步通道
@@ -357,6 +372,7 @@
         // SDK 登录成功后写入 Redis
         redisService.setCacheObject(getCacheKey(camera.getId()), camera);
     }
+
     /**
      * 同步设备通道与本地通道库信息
      *
@@ -385,6 +401,7 @@
             log.error("定时执行同步通道任务异常:{}", ex.getMessage());
         }
     }
+
     /**
      * 定时执行登录失败相机重新登录
      *
diff --git a/ard-device/src/main/resources/mapper/ArdCameraMapper.xml b/ard-device/src/main/resources/mapper/ArdCameraMapper.xml
index 01354f1..bd3fb07 100644
--- a/ard-device/src/main/resources/mapper/ArdCameraMapper.xml
+++ b/ard-device/src/main/resources/mapper/ArdCameraMapper.xml
@@ -234,6 +234,9 @@
         where ip = #{ip}
           and port = #{port} limit 1
     </select>
+    <select id="checkAirportHasCamera" resultMap="ArdCameraResult">
+        select * from ard_camera where dock_id = #{dockId} limit 1
+    </select>
     <update id="resetCameraLoginId" parameterType="ArdCamera">
         update ard_camera set login_id = -1 where id = #{id}
     </update>

--
Gitblit v1.9.3