ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java
@@ -2,6 +2,8 @@ import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; import org.springframework.scheduling.annotation.Async; import java.util.Map; public interface ICameraSdkService { ard-work/src/main/java/com/ruoyi/device/camera/service/impl/AsyncLogin.java
File was deleted ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java
@@ -7,8 +7,8 @@ import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.service.IArdCamerasService; import com.ruoyi.device.camera.service.ICameraSdkService; import com.ruoyi.utils.sdk.dhsdk.service.IDhClientService; import com.ruoyi.utils.sdk.hiksdk.service.IHikClientService; import com.ruoyi.device.camera.strategy.SdkStrategy; import com.ruoyi.device.camera.strategy.SdkStrategyFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; @@ -32,27 +32,30 @@ @Resource private IArdCamerasService ardCamerasService; @Resource IHikClientService hikClientService; private RedisCache redisCache; @Resource IDhClientService dhClientService; @Resource RedisCache redisCache; private SdkStrategyFactory sdkStrategyFactory; /** * 启动线程方法,用于执行初始化登录相机的逻辑 * * @param args 命令行参数 */ @Override public void run(ApplicationArguments args) throws Exception { public void run(ApplicationArguments args) { try { // 从ardCamerasService中获取ArdCameras列表 List<ArdCameras> ardCameras = ardCamerasService.selectArdCamerasListNoDataScope(new ArdCameras()); for (ArdCameras camera : ardCameras) { if ("1".equals(camera.getFactory())) { hikClientService.login(camera); } else if ("2".equals(camera.getFactory())) { dhClientService.login(camera); } login(camera); } } catch (Exception ex) { // 初始化登录相机异常,记录错误日志 log.error("初始化登录相机异常:" + ex.getMessage()); } } //登录 @Override @@ -61,13 +64,10 @@ try { if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { hikClientService.login(ardCamera); SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); //sdkStrategy.login(ardCamera);//同步登录 sdkStrategy.asyncLogin(ardCamera);//异步登录 result = true; } else if (factory.equals("2")) { dhClientService.login(ardCamera); result = true; } } } catch (Exception ex) { log.error("登录异常:" + ex.getMessage()); @@ -84,11 +84,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { result = hikClientService.logout(cameraId); } else if (factory.equals("2")) { result = dhClientService.logout(cameraId); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); result = sdkStrategy.logout(cameraId); } } catch (Exception ex) { log.error("注销异常:" + ex.getMessage()); @@ -106,11 +103,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { onLine = hikClientService.isOnLine(cmd); } else if (factory.equals("2")) { onLine = dhClientService.isOnLine(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); onLine = sdkStrategy.isOnLine(cmd); } return onLine; } catch (Exception ex) { @@ -129,11 +123,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { result = hikClientService.pTZControlWithSpeed(cmd); } else if (factory.equals("2")) { result = dhClientService.pTZControl(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); result = sdkStrategy.pTZControl(cmd); } return result; } catch (Exception ex) { @@ -151,11 +142,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { result = hikClientService.setFocusPos(cmd); } else if (factory.equals("2")) { result = dhClientService.setFocusPos(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); result = sdkStrategy.setFocusPos(cmd); } } catch (Exception ex) { log.error("设置聚焦值异常:" + ex.getMessage()); @@ -173,11 +161,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { result = hikClientService.getFocusPos(cmd); } else if (factory.equals("2")) { result = dhClientService.getFocusPos(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); result = sdkStrategy.getFocusPos(cmd); } } catch (Exception ex) { log.error("获取聚焦值异常:" + ex.getMessage()); @@ -187,6 +172,7 @@ //设置预置位 @Override @SdkOperate public boolean setPreset(CameraCmd cmd) { boolean result = false; try { @@ -194,11 +180,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { result = hikClientService.setPreset(cmd); } else if (factory.equals("2")) { result = dhClientService.setPreset(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); result = sdkStrategy.setPreset(cmd); } } catch (Exception ex) { log.error("设置预置位异常:" + ex.getMessage()); @@ -208,6 +191,7 @@ //调用预置位 @Override @SdkOperate public boolean gotoPreset(CameraCmd cmd) { boolean result = false; try { @@ -215,11 +199,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { result = hikClientService.gotoPreset(cmd); } else if (factory.equals("2")) { result = dhClientService.gotoPreset(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); result = sdkStrategy.gotoPreset(cmd); } } catch (Exception ex) { log.error("调用预置位异常:" + ex.getMessage()); @@ -236,11 +217,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { map = hikClientService.getVideoCompressionCfg(cmd); } else if (factory.equals("2")) { map = dhClientService.getVideoCompressionCfg(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); map = sdkStrategy.getVideoCompressionCfg(cmd); } } catch (Exception ex) { log.error("获取码流压缩参数异常:" + ex.getMessage()); @@ -257,11 +235,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { result = hikClientService.controlDefogcfg(cmd); } else if (factory.equals("2")) { //不支持 } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); result = sdkStrategy.controlDefogcfg(cmd); } } catch (Exception ex) { log.error("操控透雾异常:" + ex.getMessage()); @@ -278,11 +253,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { result = hikClientService.controlInfrarecfg(cmd); } else if (factory.equals("2")) { result = dhClientService.controlInfrarecfg(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); result = sdkStrategy.controlInfrarecfg(cmd); } } catch (Exception ex) { log.error("操控红外异常:" + ex.getMessage()); @@ -299,11 +271,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { result = hikClientService.controlFocusMode(cmd); } else if (factory.equals("2")) { result = dhClientService.controlFocusMode(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); result = sdkStrategy.controlFocusMode(cmd); } } catch (Exception ex) { log.error("操控聚焦模式异常:" + ex.getMessage()); @@ -320,11 +289,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { result = hikClientService.getFocusMode(cmd); } else if (factory.equals("2")) { result = dhClientService.getFocusMode(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); result = sdkStrategy.getFocusMode(cmd); } } catch (Exception ex) { log.error("获取聚焦模式异常:" + ex.getMessage()); @@ -341,11 +307,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { result = hikClientService.controlPTHeateRpwron(cmd); } else if (factory.equals("2")) { //不支持 } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); result = sdkStrategy.controlPTHeateRpwron(cmd); } } catch (Exception ex) { log.error("操控云台加热异常:" + ex.getMessage()); @@ -362,11 +325,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { result = hikClientService.controlCameraDeicing(cmd); } else if (factory.equals("2")) { //不支持 } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); result = sdkStrategy.controlCameraDeicing(cmd); } } catch (Exception ex) { log.error("操控云台加热异常:" + ex.getMessage()); @@ -383,11 +343,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { result = hikClientService.getPTZLockInfo(cmd); } else if (factory.equals("2")) { } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); result = sdkStrategy.getPTZLockInfo(cmd); } } catch (Exception ex) { log.error("获取云台锁定信息异常:" + ex.getMessage()); @@ -413,13 +370,8 @@ if (ardCamera != null) { //获取摄像头工厂 String factory = ardCamera.getFactory(); if (factory.equals("1")) { //调用hikClientService的picCutCate方法 url = hikClientService.picCutCate(cmd); } else if (factory.equals("2")) { //调用dhClientService的picCutCate方法 url = dhClientService.picCutCate(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); url = sdkStrategy.picCutCate(cmd); } } catch (Exception ex) { log.error("抓图异常:" + ex.getMessage()); @@ -436,11 +388,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { map = hikClientService.getPtz(cmd); } else if (factory.equals("2")) { map = dhClientService.getPtz(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); map = sdkStrategy.getPtz(cmd); } } catch (Exception ex) { log.error("获取ptz异常:" + ex.getMessage()); @@ -457,11 +406,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { map = hikClientService.getPtzScope(cmd); } else if (factory.equals("2")) { } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); map = sdkStrategy.getPtzScope(cmd); } } catch (Exception ex) { log.error("获取ptz范围异常:" + ex.getMessage()); @@ -479,11 +425,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { result = hikClientService.setPtz(cmd); } else if (factory.equals("2")) { result = dhClientService.setPtz(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); result = sdkStrategy.setPtz(cmd); } } catch (Exception ex) { log.error("设置ptz异常:" + ex.getMessage()); @@ -501,11 +444,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { result = hikClientService.setZeroPtz(cmd); } else if (factory.equals("2")) { result = dhClientService.setZeroPtz(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); result = sdkStrategy.setZeroPtz(cmd); } } catch (Exception ex) { log.error("设置零方位角异常:" + ex.getMessage()); @@ -523,11 +463,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { result = hikClientService.guideTargetPosition(cmd); } else if (factory.equals("2")) { result = dhClientService.guideTargetPosition(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); result = sdkStrategy.guideTargetPosition(cmd); } } catch (Exception ex) { log.error("引导指向目标异常:" + ex.getMessage()); @@ -590,11 +527,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { url = hikClientService.record(cmd); } else if (factory.equals("2")) { url = dhClientService.record(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); url = sdkStrategy.record(cmd); } } catch (Exception ex) { log.error("录像异常:" + ex.getMessage()); @@ -611,11 +545,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { result = hikClientService.recordStart(cmd); } else if (factory.equals("2")) { result = dhClientService.recordStart(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); result = sdkStrategy.recordStart(cmd); } } catch (Exception ex) { log.error("开始录像异常:" + ex.getMessage()); @@ -632,11 +563,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { url = hikClientService.recordStopToMinio(cmd); } else if (factory.equals("2")) { url = dhClientService.recordStopToMinio(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); url = sdkStrategy.recordStopToMinio(cmd); } } catch (Exception ex) { log.error("停止录像异常:" + ex.getMessage()); @@ -653,11 +581,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { result = hikClientService.recordStopNotToMinio(cmd); } else if (factory.equals("2")) { result = dhClientService.recordStopNotToMinio(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); result = sdkStrategy.recordStopNotToMinio(cmd); } } catch (Exception ex) { log.error("停止录像异常:" + ex.getMessage()); @@ -674,11 +599,8 @@ ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); if (factory.equals("1")) { map = hikClientService.getGisInfo(cmd); } else if (factory.equals("2")) { map = dhClientService.getGisInfo(cmd); } SdkStrategy sdkStrategy = sdkStrategyFactory.getSdkStrategy(factory); map = sdkStrategy.getGisInfo(cmd); } } catch (Exception ex) { log.error("获取相机架设参数异常:" + ex.getMessage()); ard-work/src/main/java/com/ruoyi/device/camera/strategy/SdkStrategy.java
File was renamed from ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/IHikClientService.java @@ -1,23 +1,20 @@ package com.ruoyi.utils.sdk.hiksdk.service; package com.ruoyi.device.camera.strategy; 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: IHikClientService * @Description: 海康操作客户端接口类 * @Author: Administrator * @Date: 2023年01月17日 15:59 * @Version: 1.0 **/ public interface IHikClientService { * 相机SDK策略接口 * 刘苏义 * 2023/11/7 10:48:52 */ public interface SdkStrategy { //同步登录 void login(ArdCameras cameras); boolean login(ArdCameras cameras); //异步登录 void asyncLogin(ArdCameras cameras); @@ -29,7 +26,7 @@ boolean isOnLine(CameraCmd cmd); //云台控制 boolean pTZControlWithSpeed(CameraCmd cmd); boolean pTZControl(CameraCmd cmd); //设置聚焦值 boolean setFocusPos(CameraCmd cmd); ard-work/src/main/java/com/ruoyi/device/camera/strategy/SdkStrategyFactory.java
New file @@ -0,0 +1,43 @@ package com.ruoyi.device.camera.strategy; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.utils.sdk.dhsdk.service.impl.DhSdkStrategy; import com.ruoyi.utils.sdk.hiksdk.service.impl.HikSdkStrategy; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** * @Description: SDK策略工厂类 * @ClassName: SdkStrategyFactory * @Author: 刘苏义 * @Date: 2023年11月07日10:53:00 **/ @Component public class SdkStrategyFactory { @Resource private HikSdkStrategy hikSdkStrategy; @Resource private DhSdkStrategy dhSdkStrategy; /** * 根据传入的工厂参数获取对应的Sdk策略 * * @param factory 工厂参数 * @return 对应的Sdk策略 * @throws IllegalArgumentException 如果不支持该工厂参数 */ public SdkStrategy getSdkStrategy(String factory) { if (factory.equals("1")) { return hikSdkStrategy; } else if (factory.equals("2")) { return dhSdkStrategy; } else { throw new IllegalArgumentException("Unsupported device: " + factory); } } } ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
@@ -9,7 +9,6 @@ import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.mapper.ArdCamerasMapper; import com.ruoyi.device.camera.service.ICameraSdkService; import com.ruoyi.utils.sdk.hiksdk.service.IHikClientService; import com.ruoyi.inspect.domain.ArdVideoInspectRecord; import com.ruoyi.inspect.mapper.ArdVideoInspectRecordMapper; import com.ruoyi.inspect.mapper.ArdVideoInspectTaskStepMapper; ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java
@@ -1,10 +1,12 @@ package com.ruoyi.inspect.service.impl; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.service.ICameraSdkService; import com.ruoyi.device.camera.service.impl.CameraSdkServiceImpl; import com.ruoyi.utils.sdk.common.GlobalVariable; import com.ruoyi.utils.sdk.hiksdk.service.IHikClientService; import com.ruoyi.inspect.domain.ArdVideoInspectTask; import com.ruoyi.inspect.mapper.ArdVideoInspectTaskMapper; import com.ruoyi.utils.sdk.hiksdk.service.impl.HikSdkStrategy; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -28,7 +30,7 @@ @Resource ArdVideoInspectTaskMapper ardVideoInspectTaskMapper; @Resource private IHikClientService hikClientService; private ICameraSdkService cameraSdkService; public static Map<String, InspectionTask> taskMap;//已启动任务map @@ -77,7 +79,7 @@ CameraCmd cmd = new CameraCmd(); cmd.setCameraId(ardVideoInspectTask.getCameraId()); cmd.setChanNo(ardVideoInspectTask.getChannel()); hikClientService.recordStopNotToMinio(cmd); cameraSdkService.recordStopNotToMinio(cmd); GlobalVariable.previewMap.remove(cameraId); } /*停止任务*/ ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/controller/DhSdkController.java
@@ -8,7 +8,7 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.utils.sdk.dhsdk.service.IDhClientService; import com.ruoyi.utils.sdk.dhsdk.service.impl.DhSdkStrategy; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.stereotype.Controller; @@ -36,7 +36,7 @@ public class DhSdkController extends BaseController { @Resource private IDhClientService sdk; private DhSdkStrategy sdk; @ApiOperation(value = "云台控制", notes = "Code:1-左上 2-上 3-右上 4-左 5-巡航 6-右 7-左下 8-下 9-右下 10-焦距变大 11-焦距变小\n" + ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/IDhClientService.java
File was deleted ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DhSdkStrategy.java
File was renamed from ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DhClientServiceImpl.java @@ -6,52 +6,56 @@ import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.common.utils.file.MimeTypeUtils; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.device.camera.strategy.SdkStrategy; 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.media.domain.Vtdu; import com.ruoyi.media.service.IVtduService; import com.ruoyi.utils.gis.GisUtil; import com.ruoyi.utils.minio.MinioUtil; import com.ruoyi.utils.sdk.common.GlobalVariable; import com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib; import com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.LLong; import com.ruoyi.utils.sdk.dhsdk.lib.enumeration.EM_NEW_CONFIG; import com.ruoyi.utils.sdk.dhsdk.lib.enumeration.NET_EM_CFG_OPERATE_TYPE; import com.ruoyi.utils.sdk.dhsdk.lib.structure.CFG_VIDEO_IN_FOCUS; import com.ruoyi.utils.sdk.dhsdk.lib.structure.DH_OUT_PTZ_VIEW_RANGE_STATUS; import com.ruoyi.utils.sdk.dhsdk.module.*; import com.ruoyi.utils.sdk.dhsdk.service.IDhClientService; import com.ruoyi.utils.sdk.common.GlobalVariable; import com.ruoyi.media.domain.Vtdu; import com.ruoyi.media.service.IVtduService; import com.ruoyi.utils.gis.GisUtil; import com.ruoyi.utils.minio.MinioUtil; import com.sun.jna.Pointer; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.*; import java.text.DecimalFormat; import java.util.*; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.PriorityBlockingQueue; import static com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.*; import static com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.NET_DEVSTATE_PTZ_VIEW_RANGE; import static com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_MOVE_CONTROL; import static com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_SET_CONTROL; import static com.ruoyi.utils.sdk.dhsdk.lib.ToolKits.getErrorCodePrint; import static com.ruoyi.utils.sdk.dhsdk.module.LoginModule.netsdk; /** * @ClassName DhSdkServiceImpl * @Description: * @Author 刘苏义 * @Date 2023/10/13 21:19 * @Version 1.0 */ @Service * @Description: 大华sdk策略 * @ClassName: DhSdkStrategy * @Author: 刘苏义 * @Date: 2023年11月07日10:51:09 **/ @Slf4j(topic = "dhSdk") public class DhClientServiceImpl implements IDhClientService { @Service public class DhSdkStrategy implements SdkStrategy { @Resource private IArdCamerasService ardCamerasService; @Resource @@ -60,7 +64,7 @@ private IVtduService vtduService; @Value("${minio.endpoint}") private String minioEndPoint; private final Object lock = new Object(); // 设备断线通知回调 private static DisConnect disConnect = new DisConnect(); @@ -72,17 +76,21 @@ * 登录 * 刘苏义 * 2023/10/17 8:28:13 * @return */ @Override public Boolean login(ArdCameras camera) { public boolean login(ArdCameras camera) { LoginModule.init(disConnect, haveReConnect); NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); LLong loginId = LoginModule.login(camera.getIp(), camera.getPort(), camera.getUsername(), camera.getPassword(), m_stDeviceInfo); NetSDKLib.LLong loginId = LoginModule.login(camera.getIp(), camera.getPort(), camera.getUsername(), camera.getPassword(), m_stDeviceInfo); if (loginId.longValue() <= 0) { camera.setChanNum(0); camera.setLoginId(-1); camera.setState("0"); ardCamerasService.updateArdCameras(camera); //删除管理通道 ardChannelService.deleteArdChannelByDeviceId(camera.getId()); return false; } if (GlobalVariable.loginMap.containsKey(camera.getId())) { @@ -100,7 +108,7 @@ //获取最新通道 for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; i++) { ArdChannel channel = new ArdChannel(); AV_CFG_ChannelName av_cfg_channelName = new AV_CFG_ChannelName(); NetSDKLib.AV_CFG_ChannelName av_cfg_channelName = new NetSDKLib.AV_CFG_ChannelName(); boolean b = ConfigModule.GetNewDevConfig(loginId, i - 1, CFG_CMD_CHANNELTITLE, av_cfg_channelName); if (b) { String chanName = null; @@ -154,17 +162,101 @@ return true; } @Override @Async("loginExecutor") public void asyncLogin(ArdCameras camera){ LoginModule.init(disConnect, haveReConnect); NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); NetSDKLib.LLong loginId = LoginModule.login(camera.getIp(), camera.getPort(), camera.getUsername(), camera.getPassword(), m_stDeviceInfo); if (loginId.longValue() <= 0) { camera.setChanNum(0); camera.setLoginId(-1); camera.setState("0"); ardCamerasService.updateArdCameras(camera); //删除管理通道 ardChannelService.deleteArdChannelByDeviceId(camera.getId()); return; } if (GlobalVariable.loginMap.containsKey(camera.getId())) { GlobalVariable.loginMap.remove(camera.getId()); } //删除管理通道 ardChannelService.deleteArdChannelByDeviceId(camera.getId()); camera.setState("1"); camera.setChanNum(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 < m_stDeviceInfo.byChanNum + 1; i++) { ArdChannel channel = new ArdChannel(); NetSDKLib.AV_CFG_ChannelName av_cfg_channelName = new NetSDKLib.AV_CFG_ChannelName(); boolean b = ConfigModule.GetNewDevConfig(loginId, i - 1, CFG_CMD_CHANNELTITLE, av_cfg_channelName); if (b) { String chanName = null; try { chanName = new String(av_cfg_channelName.szName, "GBK").trim(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } channel.setName(chanName); } else { channel.setName("通道" + i); } channel.setDeviceId(camera.getId()); channel.setChanNo(i); ardChannelService.insertArdChannel(channel); } //配置到流媒体 for (int i = 1; i < m_stDeviceInfo.byChanNum + 1; i++) { String name = camera.getId() + "_" + i; String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/cam/realmonitor?channel=" + i + "&subtype=0"; Vtdu vtdu = vtduService.selectVtduByName(name); if (vtdu != null) { vtduService.deleteVtduByName(name); } //添加到流媒体 CameraCmd cmd = new CameraCmd(camera.getId(), i); Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd); vtdu = new Vtdu(); if (videoCompressionCfg.get("videoEncType") != null) { if (videoCompressionCfg.get("videoEncType").equals("标准h264")) { vtdu.setIsCode("0");//默认不转码 } else { vtdu.setIsCode("1");//默认转码 } } else { vtdu.setIsCode("0");//默认不转码 } vtdu.setRtspSource(rtspSource); vtdu.setName(camera.getId() + "_" + i); vtdu.setMode("1");//默认CPU软解码 vtdu.setCameraId(camera.getId()); vtduService.insertVtdu(vtdu); } //创建引导队列 if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); } } /** * 注销 * 刘苏义 * 2023/10/17 8:28:13 * @return */ @Override public Boolean logout(String cameraId) { public boolean logout(String cameraId) { if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); NetSDKLib.LLong loginId = (NetSDKLib.LLong) GlobalVariable.loginMap.get(cameraId); return LoginModule.logout(loginId); } @@ -180,7 +272,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); NetSDKLib.LLong loginId = (NetSDKLib.LLong) GlobalVariable.loginMap.get(cameraId); NetSDKLib.NET_WORKSTATE dh_ptz_location_info = new NetSDKLib.NET_WORKSTATE(); boolean b = ConfigModule.queryDevState(loginId, NET_DEVSTATE_ONLINE, dh_ptz_location_info); if (!b) { @@ -193,13 +285,13 @@ return true; } /** * 云台控制 * 刘苏义 * 2023/10/17 8:28:13 */ @Override @SdkOperate public boolean pTZControl(CameraCmd cmd) { String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); @@ -209,7 +301,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; } LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); NetSDKLib.LLong loginId = (NetSDKLib.LLong) GlobalVariable.loginMap.get(cameraId); int dwStop; if (enable) { dwStop = 0;//开启 @@ -220,55 +312,55 @@ switch (code) { /*方向*/ case 1: dwPTZCommand = NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP; dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP; break; case 2: dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_UP_CONTROL; dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL; break; case 3: dwPTZCommand = NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP; dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP; break; case 4: dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL; dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL; break; case 5: dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_POINT_LOOP_CONTROL; dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_POINT_LOOP_CONTROL; break; case 6: dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL; dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL; break; case 7: dwPTZCommand = NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN; dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN; break; case 8: dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL; dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL; break; case 9: dwPTZCommand = NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN; dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN; break; /*焦距*/ case 10: dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL; dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL; break; case 11: dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL; dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL; break; /*焦点*/ case 12: dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL; dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL; break; case 13: dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL; dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL; break; /*光圈*/ case 14: dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL; dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL; break; case 15: dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL; dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL; break; case 16: dwPTZCommand = NET_PTZ_ControlType.NET_PTZ_LAMP_CONTROL; dwPTZCommand = NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LAMP_CONTROL; break; } boolean bool = PtzControlModule.ptzControl(loginId, chanNo - 1, dwPTZCommand, speed, speed, 0, dwStop); @@ -290,7 +382,7 @@ if (!GlobalVariable.loginMap.containsKey(cameraId)) { return null; } LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); NetSDKLib.LLong loginId = (NetSDKLib.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) { @@ -306,6 +398,11 @@ return ptzMap; } @Override public Map<String, Object> getPtzScope(CameraCmd cmd) { return null; } /** * @描述 设置ptz信息 * @参数 [userId, channelNum] @@ -315,7 +412,6 @@ * @修改人和其它信息 注意俯仰角度负值需要加上360得到的正值进行设置 */ @Override @SdkOperate public boolean setPtz(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer chanNo = cmd.getChanNo(); @@ -532,6 +628,11 @@ return result; } @Override public List<ArdChannel> getCameraChannelList(ArdCameras camera) { return null; } /** * 引导目标位置 * 刘苏义 @@ -691,6 +792,26 @@ } return mode; } @Override public boolean controlPTHeateRpwron(CameraCmd cmd) { return false; } @Override public boolean controlCameraDeicing(CameraCmd cmd) { return false; } @Override public int getPTZLockInfo(CameraCmd cmd) { return 0; } @Override public String captureJPEGPicture(CameraCmd cmd) { return null; } //透雾 @@ -938,4 +1059,5 @@ } } } } ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/controller/HikSdkController.java
@@ -8,9 +8,9 @@ import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.service.IArdCamerasService; import com.ruoyi.utils.sdk.hiksdk.service.IHikClientService; import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.utils.sdk.hiksdk.service.impl.HikSdkStrategy; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.stereotype.Controller; @@ -35,7 +35,7 @@ public class HikSdkController extends BaseController { @Resource private IHikClientService sdk; private HikSdkStrategy sdk; @Resource private IArdCamerasService ardCamerasService; @@ -85,7 +85,7 @@ public @ResponseBody AjaxResult PTZControlWithSpeed(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return toAjax(sdk.pTZControlWithSpeed(cmd)); return toAjax(sdk.pTZControl(cmd)); } @ApiOperation("调用预置点") ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/lib/LoginResultCallBack.java
@@ -9,12 +9,11 @@ import com.ruoyi.device.channel.domain.ArdChannel; import com.ruoyi.device.channel.service.IArdChannelService; import com.ruoyi.utils.sdk.common.GlobalVariable; import com.ruoyi.utils.sdk.hiksdk.service.IHikClientService; import com.ruoyi.media.domain.Vtdu; import com.ruoyi.media.service.IVtduService; import com.ruoyi.utils.sdk.hiksdk.service.impl.HikSdkStrategy; import com.sun.jna.Pointer; import lombok.extern.slf4j.Slf4j; import java.util.Comparator; import java.util.List; import java.util.concurrent.PriorityBlockingQueue; @@ -39,7 +38,7 @@ public int invoke(int lUserID, int dwResult, HCNetSDK.NET_DVR_DEVICEINFO_V30 lpDeviceinfo, Pointer pUser) { IVtduService vtduService = SpringUtils.getBean(IVtduService.class); IArdChannelService ardChannelService = SpringUtils.getBean(IArdChannelService.class); IHikClientService hikClientService = SpringUtils.getBean(IHikClientService.class); HikSdkStrategy hikClientService = SpringUtils.getBean(HikSdkStrategy.class); IArdCamerasService ardCamerasService = SpringUtils.getBean(IArdCamerasService.class); if (GlobalVariable.loginMap.containsKey(camera.getId())) { GlobalVariable.loginMap.remove(camera.getId()); ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikSdkStrategy.java
File was renamed from ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikClientServiceImpl.java @@ -6,28 +6,27 @@ import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.common.utils.file.MimeTypeUtils; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.service.IArdCamerasService; import com.ruoyi.device.camera.strategy.SdkStrategy; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.channel.domain.ArdChannel; import com.ruoyi.device.channel.service.IArdChannelService; import com.ruoyi.utils.sdk.common.GlobalVariable; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.utils.sdk.hiksdk.lib.ExceptionCallBack; import com.ruoyi.media.domain.Vtdu; import com.ruoyi.media.service.IVtduService; import com.ruoyi.utils.gis.GisUtil; import com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK; import com.ruoyi.utils.sdk.hiksdk.service.IHikClientService; import com.ruoyi.utils.sdk.hiksdk.lib.LoginResultCallBack; import com.ruoyi.utils.minio.MinioUtil; import com.ruoyi.utils.sdk.common.GlobalVariable; import com.ruoyi.utils.sdk.hiksdk.lib.ExceptionCallBack; import com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK; import com.sun.jna.NativeLong; import com.sun.jna.Platform; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.util.Base64; import javax.annotation.Resource; import java.io.*; import java.math.BigDecimal; @@ -37,28 +36,26 @@ import java.util.concurrent.PriorityBlockingQueue; import static com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK.*; import static com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK.NET_DVR_GET_GISINFO; /** * @ClassName: hikClientServiceImpl * @Description: 海康操作客户端实现类 * @Author: Administrator * @Date: 2023年01月17日 11:25 * @Version: 1.2 * @Description: 海康sdk策略 * @ClassName: DhSdkStrategy * @Author: 刘苏义 * @Date: 2023年11月07日10:51:09 **/ @Slf4j(topic = "hikSdk") @Service public class HikClientServiceImpl implements IHikClientService { @Slf4j(topic = "hikSdk") public class HikSdkStrategy implements SdkStrategy { @Resource private IArdCamerasService ardCamerasService; @Resource private IArdChannelService ardChannelService; @Resource private IVtduService vtduService; private final Object lock = new Object(); public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK; private static FExceptionCallBack fExceptionCallBack;//异常回调 public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK; private static HCNetSDK.FExceptionCallBack fExceptionCallBack;//异常回调 /** * @描述 注册登录 只支持同步登陆,且官方不建议直接在此接口下写耗时操作 @@ -69,7 +66,7 @@ * @修改人和其它信息 */ @Override public void login(ArdCameras camera) { public boolean login(ArdCameras camera) { try { // 初始化 if (!hCNetSDK.NET_DVR_Init()) { @@ -113,6 +110,139 @@ camera.setChanNum(0); camera.setLoginId(-1); camera.setState("0"); //删除管理通道 ardChannelService.deleteArdChannelByDeviceId(camera.getId()); ardCamerasService.updateArdCameras(camera); return false; } log.debug("Login Success [ " + camera.getIp() + ":" + camera.getPort() + " ]"); if (fExceptionCallBack == null) { fExceptionCallBack = new ExceptionCallBack();//异常回调 //设置异常回调函数(可在回调函数中获取设备上下线状态等) if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) { log.debug("Set fExceptionCallBack function fail"); return false; } else { log.debug("Set fExceptionCallBack function successfully!"); } } if (GlobalVariable.loginMap.containsKey(camera.getId())) { GlobalVariable.loginMap.remove(camera.getId()); } //删除管理通道 ardChannelService.deleteArdChannelByDeviceId(camera.getId()); GlobalVariable.loginMap.put(camera.getId(), lUserID); GlobalVariable.loginCameraMap.put(lUserID, camera); camera.setLoginId(lUserID); camera.setState("1"); camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum); camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan); ardCamerasService.updateArdCameras(camera); //获取最新通道 List<ArdChannel> cameraChannelList = getCameraChannelList(camera); if (cameraChannelList.size() > 0) { for (ArdChannel channel : cameraChannelList) { channel.setId(IdUtils.simpleUUID()); ardChannelService.insertArdChannel(channel); } //添加到流媒体 for (ArdChannel channel : cameraChannelList) { String name = camera.getId() + "_" + channel.getChanNo(); String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream"; Vtdu vtdu = vtduService.selectVtduByName(name); if (vtdu != null) { vtduService.deleteVtduByName(name); } //添加到流媒体 vtdu = new Vtdu(); vtdu.setRtspSource(rtspSource); vtdu.setName(camera.getId() + "_" + channel.getChanNo()); CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo()); Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd); if (videoCompressionCfg.get("videoEncType").equals("标准h264")) { vtdu.setIsCode("0");//默认不转码 } else { vtdu.setIsCode("1");//默认转码 } vtdu.setMode("1");//默认CPU软解码 vtdu.setCameraId(camera.getId()); vtduService.insertVtdu(vtdu); } } //创建引导队列 if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); } } catch (Exception ex) { log.error("注册设备异常", ex); } return true; } /** * @描述 注册登录 集成于NET_DVR_Login_V30,支持同步和异步登录 * @参数 [dvrLogin] * @返回值 java.lang.Integer * @创建人 刘苏义 * @创建时间 2023/1/17 16:12 * @修改人和其它信息 */ @Override @Async("loginExecutor") public void asyncLogin(ArdCameras camera) { try { // 初始化 if (!hCNetSDK.NET_DVR_Init()) { log.error("SDK初始化失败"); } //打印海康sdk日志 if (Platform.isWindows()) { String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); } else { hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); } String m_sDeviceIP = camera.getIp(); String m_sUsername = camera.getUsername(); String m_sPassword = camera.getPassword(); short m_sPort = camera.getPort().shortValue(); //设置连接时间与重连时间 hCNetSDK.NET_DVR_SetConnectTime(2000, 1); hCNetSDK.NET_DVR_SetReconnect(5000, true); //设备信息, 输出参数 HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40(); HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO(); // 注册设备-登录参数,包括设备地址、登录用户、密码等 m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN]; System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length()); m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN]; System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length()); m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN]; System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length()); m_strLoginInfo.wPort = m_sPort; m_strLoginInfo.byVerifyMode = 0; m_strLoginInfo.byLoginMode = 0; //是否异步登录:0- 否,1- 是 windowsSDK里是true和false m_strLoginInfo.bUseAsynLogin = false; m_strLoginInfo.write(); //同步登录 int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); if (lUserID < 0) { log.debug("Login Failed [ " + camera.getIp() + ":" + camera.getPort() + " ],错误码:" + hCNetSDK.NET_DVR_GetLastError()); camera.setChanNum(0); camera.setLoginId(-1); camera.setState("0"); //删除管理通道 ardChannelService.deleteArdChannelByDeviceId(camera.getId()); ardCamerasService.updateArdCameras(camera); return; } @@ -186,62 +316,6 @@ } /** * @描述 注册登录 集成于NET_DVR_Login_V30,支持同步和异步登录 * @参数 [dvrLogin] * @返回值 java.lang.Integer * @创建人 刘苏义 * @创建时间 2023/1/17 16:12 * @修改人和其它信息 */ @Override public void asyncLogin(ArdCameras camera) { // 初始化 if (!hCNetSDK.NET_DVR_Init()) { log.error("SDK初始化失败"); } //打印海康sdk日志 if (Platform.isWindows()) { String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); } else { hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); } String m_sDeviceIP = camera.getIp(); String m_sUsername = camera.getUsername(); String m_sPassword = camera.getPassword(); short m_sPort = camera.getPort().shortValue(); //设置连接时间与重连时间 hCNetSDK.NET_DVR_SetConnectTime(2000, 1); hCNetSDK.NET_DVR_SetReconnect(100000, true); //设备信息, 输出参数 HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40(); HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO(); // 注册设备-登录参数,包括设备地址、登录用户、密码等 m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN]; System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length()); m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN]; System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length()); m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN]; System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length()); m_strLoginInfo.wPort = m_sPort; m_strLoginInfo.byVerifyMode = 0; m_strLoginInfo.byLoginMode = 0; //是否异步登录:0- 否,1- 是 windowsSDK里是true和false m_strLoginInfo.bUseAsynLogin = true; //异步登录回调 m_strLoginInfo.cbLoginResult = new LoginResultCallBack(camera); m_strLoginInfo.write(); int i = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); if (i < 0) { int errorCode = hCNetSDK.NET_DVR_GetLastError(); log.error("登录异常:" + errorCode); } } /** * @描述 注销登录 * @参数 [dvrLogin] * @返回值 java.lang.Integer @@ -293,8 +367,7 @@ * @修改人和其它信息 */ @Override @SdkOperate public boolean pTZControlWithSpeed(CameraCmd cmd) { public boolean pTZControl(CameraCmd cmd) { String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); Integer channelNum = cmd.getChanNo(); @@ -934,7 +1007,6 @@ * @创建时间 2023/1/17 16:36 * @修改人和其它信息 0-解锁 1-锁定 */ @Override public int getPTZLockInfo(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); @@ -966,7 +1038,6 @@ * @修改人和其它信息 注意俯仰角度负值需要加上360得到的正值进行设置 */ @Override @SdkOperate public boolean setZeroPtz(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); ruoyi-common/src/main/java/com/ruoyi/common/filter/MyI18nInterceptor.java
@@ -17,7 +17,7 @@ final String key = "language"; String language = "en_US";//request.getHeader(key); // 前端传递的language必须是zh-CN格式的,中间的-必须要完整,不能只传递zh或en log.info("当前语言={}",language); log.debug("当前语言={}",language); Locale locale = new Locale(language.split("_")[0],language.split("_")[1]); // 这样赋值以后,MessageUtils.message方法就不用修改了 LocaleContextHolder.setLocale(locale); ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/SyncTask.java
@@ -1,25 +1,20 @@ package com.ruoyi.quartz.task; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.common.core.domain.entity.SysUser; 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.utils.sdk.dhsdk.service.IDhClientService; import com.ruoyi.utils.sdk.hiksdk.service.IHikClientService; import com.ruoyi.media.domain.Items; import com.ruoyi.media.domain.JsonsRoot; import com.ruoyi.media.domain.Vtdu; import com.ruoyi.media.service.IMediaService; import com.ruoyi.media.service.IVtduService; import com.ruoyi.rongcloud.service.RongCloudService; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.utils.sdk.dhsdk.service.impl.DhSdkStrategy; import com.ruoyi.utils.sdk.hiksdk.service.impl.HikSdkStrategy; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; /** @@ -38,9 +33,9 @@ @Resource IArdCamerasService iArdCamerasService; @Resource IHikClientService hikClientService; HikSdkStrategy hikClientService; @Resource IDhClientService dhClientService; DhSdkStrategy dhClientService; @Resource IVtduService vtduService; @Resource