From ad6d970676fdf65c87979ad46c590a224b7ebd6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LAPTOP-S9HJSOEB=5C=E6=98=8A=E5=A4=A9?= Date: Tue, 9 Jul 2024 15:40:02 +0800 Subject: [PATCH] =?UTF-8?q?=E7=90=83=E6=9C=BA=E5=9C=A8=E7=BA=BF=EF=BC=88?= =?UTF-8?q?=E5=BE=85=E6=B5=8B=E8=AF=95=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CameraControlController.java | 22 ++++++++++++++++-- .../web/lib/CameraControlLoginModule.java | 2 +- .../web/lib/CameraControlModule.java | 1 + .../lib/hik/HikCameraControlModuleImpl.java | 12 +++++++++- .../web/lib/hik/HikExceptionCallBack.java | 23 +++++++++++++++---- .../web/lib/hik/HikLoginModuleImpl.java | 16 ++++++++++++- .../JoywareCameraControlModuleImpl.java | 12 ++++++++++ .../lib/joyware/JoywareLoginModuleImpl.java | 2 +- .../zhehekeji/web/service/CameraService.java | 21 ++++++++++++++++- 9 files changed, 99 insertions(+), 12 deletions(-) diff --git a/web/src/main/java/com/zhehekeji/web/controller/CameraControlController.java b/web/src/main/java/com/zhehekeji/web/controller/CameraControlController.java index 766b3f2..d072fa7 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/CameraControlController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/CameraControlController.java @@ -7,6 +7,8 @@ import com.zhehekeji.web.config.ConfigProperties; import com.zhehekeji.web.entity.Camera; import com.zhehekeji.web.lib.*; import com.zhehekeji.web.lib.hik.HCNetSDK; +import com.zhehekeji.web.lib.hik.HikLoginModuleImpl; +import com.zhehekeji.web.lib.joyware.JoywareLoginModuleImpl; import com.zhehekeji.web.lib.joyware.NetSDKLib; import com.zhehekeji.web.mapper.CameraMapper; import com.zhehekeji.web.service.CameraService; @@ -45,7 +47,7 @@ public class CameraControlController { log.info("相机登录 cameraId:{}",cameraId); Camera camera = cameraMapper.selectById(cameraId); Assert.notNull(camera,"球机不存在"); - NetSDKLib.LLong lLong = loginControlModule.login(camera.getIp(),camera.getPort(),camera.getUser(),camera.getPassword()); + NetSDKLib.LLong lLong = loginControlModule.login(cameraId,camera.getIp(),camera.getPort(),camera.getUser(),camera.getPassword()); return lLong; } @@ -332,7 +334,23 @@ public class CameraControlController { private CameraService cameraService; private void checkLogin(Integer cameraId){ - if(CameraConnMap.getConnId(cameraId) == null){ + if (CameraConnMap.getConnId(cameraId) != null) { + + Camera camera = cameraMapper.selectById(cameraId); + + Boolean ok = false; + if (configProperties.getCameraConfig().getCameraType() == ConfigProperties.HIK_CAMERA) { + ok = HikLoginModuleImpl.connectStatus(CameraConnMap.getConnId(cameraId).intValue()); + } else { + ok = JoywareLoginModuleImpl.connectStatus(CameraConnMap.getConnId(cameraId)); + } + if (!ok) { + { + CameraConnMap.disConn(cameraId); + cameraService.cameraLogin(camera); + } + } + }else { Camera camera = cameraMapper.selectById(cameraId); cameraService.cameraLogin(camera); } diff --git a/web/src/main/java/com/zhehekeji/web/lib/CameraControlLoginModule.java b/web/src/main/java/com/zhehekeji/web/lib/CameraControlLoginModule.java index 49d198e..ba97678 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/CameraControlLoginModule.java +++ b/web/src/main/java/com/zhehekeji/web/lib/CameraControlLoginModule.java @@ -4,6 +4,6 @@ import com.zhehekeji.web.lib.joyware.NetSDKLib; public interface CameraControlLoginModule { - NetSDKLib.LLong login(String ip, int port, String user, String password); + NetSDKLib.LLong login(Integer cameraId,String ip, int port, String user, String password); } diff --git a/web/src/main/java/com/zhehekeji/web/lib/CameraControlModule.java b/web/src/main/java/com/zhehekeji/web/lib/CameraControlModule.java index 7c124a3..335c056 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/CameraControlModule.java +++ b/web/src/main/java/com/zhehekeji/web/lib/CameraControlModule.java @@ -34,6 +34,7 @@ public interface CameraControlModule { boolean ptzControlRightEnd(Integer cameraId, int nChannelID); + public boolean setCameraTime(Integer cameraId); /** * 向左上 */ diff --git a/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java b/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java index 68cafc2..ca95c0d 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java +++ b/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java @@ -20,6 +20,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Timer; +import static com.zhehekeji.web.lib.hik.HCNetSDK.NET_DVR_SET_TIMECFG; + /** * 云台控制接口实现 * 主要有 :八个方向控制、变倍、变焦、光圈功能 @@ -86,7 +88,15 @@ public class HikCameraControlModuleImpl implements CameraControlModule { int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.PAN_RIGHT, 0); } - + public boolean setCameraTime(Integer cameraId) + { + int lUserId = CameraConnMap.getConnId(cameraId).intValue(); + HCNetSDK.NET_DVR_TIME time = new HCNetSDK.NET_DVR_TIME(); + LocalDateTime localDateTime = LocalDateTime.now(); + time.setTime(localDateTime.getYear(),localDateTime.getMonthValue(),localDateTime.getDayOfMonth(),localDateTime.getHour(),localDateTime.getMinute(),localDateTime.getSecond()); + time.write(); + return HikLoginModuleImpl.hcNetsdk.NET_DVR_SetDVRConfig(lUserId, NET_DVR_SET_TIMECFG, 0,time.getPointer(), time.size()); + } public boolean ptzControlRightEnd(Integer cameraId, int nChannelID) { int lUserId = CameraConnMap.getConnId(cameraId).intValue(); diff --git a/web/src/main/java/com/zhehekeji/web/lib/hik/HikExceptionCallBack.java b/web/src/main/java/com/zhehekeji/web/lib/hik/HikExceptionCallBack.java index aec408c..0e09b6b 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/hik/HikExceptionCallBack.java +++ b/web/src/main/java/com/zhehekeji/web/lib/hik/HikExceptionCallBack.java @@ -3,20 +3,33 @@ package com.zhehekeji.web.lib.hik; import com.sun.jna.Pointer; import com.zhehekeji.web.lib.CameraConnMap; import com.zhehekeji.web.lib.joyware.NetSDKLib; +import com.zhehekeji.web.service.CameraService; import lombok.extern.slf4j.Slf4j; +import javax.annotation.Resource; + @Slf4j public class HikExceptionCallBack implements HCNetSDK.FExceptionCallBack { + @Resource + CameraService cameraService; @Override public void invoke(int dwType, int lUserID, int lHandle, Pointer pUser) { - Integer cameraId =CameraConnMap.getCameraIdByLoginId(new NetSDKLib.LLong(lUserID)); - if(dwType == 32768){ + NetSDKLib.LLong lLong = new NetSDKLib.LLong(lUserID); + Integer cameraId =CameraConnMap.getCameraIdByLoginId(lLong); + if(dwType == 0x8000){ + if(cameraId != null) { + log.error("hik disconnect,cameraId:{}", cameraId); + + } + }else if(dwType == 0x8017){ - log.error("hik disconnect,cameraId:{}", cameraId); - }else if(dwType == 32791){ + log.info("hik reconnect,cameraId:{}", cameraId); - log.info("hik reconnect,cameraId:{}", CameraConnMap.getCameraIdByLoginId(new NetSDKLib.LLong(lUserID))); + if(!lLong.equals(CameraConnMap.getConnId(cameraId))) { + log.error("hik reconnect,cameraId:{},lUserId:{}", cameraId,lLong); + CameraConnMap.cameraMap.put(cameraId, new NetSDKLib.LLong(lUserID)); + } } } diff --git a/web/src/main/java/com/zhehekeji/web/lib/hik/HikLoginModuleImpl.java b/web/src/main/java/com/zhehekeji/web/lib/hik/HikLoginModuleImpl.java index 37f09a0..3558340 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/hik/HikLoginModuleImpl.java +++ b/web/src/main/java/com/zhehekeji/web/lib/hik/HikLoginModuleImpl.java @@ -1,6 +1,7 @@ package com.zhehekeji.web.lib.hik; import com.sun.jna.Pointer; +import com.zhehekeji.web.lib.CameraConnMap; import com.zhehekeji.web.lib.CameraControlLoginModule; import com.zhehekeji.web.lib.joyware.NetSDKLib; import lombok.extern.slf4j.Slf4j; @@ -68,7 +69,18 @@ public class HikLoginModuleImpl implements CameraControlLoginModule { * 登录设备 * \endif */ - public NetSDKLib.LLong login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword) { + public NetSDKLib.LLong login(Integer cameraId,String m_strIp, int m_nPort, String m_strUser, String m_strPassword) { + ////先注销,在登录 + if (CameraConnMap.getConnId(cameraId) !=null ) { + + if(hcNetsdk.NET_DVR_Logout_V30(CameraConnMap.getConnId(cameraId).intValue())) { + + log.error("hik cameraId:{}注销",cameraId); + } + + } + CameraConnMap.disConn(cameraId); + init(); HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();//设备登录信息 HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息 @@ -88,11 +100,13 @@ public class HikLoginModuleImpl implements CameraControlLoginModule { m_strLoginInfo.write(); HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo30 = new HCNetSDK.NET_DVR_DEVICEINFO_V30();//设备信息 + int m_lUserID = hcNetsdk.NET_DVR_Login_V40(m_strLoginInfo,m_strDeviceInfo); int lChannel = 2; //byStartDChan为IP通道起始通道号, 预览回放NVR的IP通道时需要根据起始通道号进行取值 + int tryTimes = 0; while(m_lUserID < 0 && tryTimes < MAX_RECONNET_TIME){ log.error("hik login error,ip:{},port:{},errorCode:{}",m_strIp,m_nPort,hcNetsdk.NET_DVR_GetLastError()); diff --git a/web/src/main/java/com/zhehekeji/web/lib/joyware/JoywareCameraControlModuleImpl.java b/web/src/main/java/com/zhehekeji/web/lib/joyware/JoywareCameraControlModuleImpl.java index 76c36c9..238823f 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/joyware/JoywareCameraControlModuleImpl.java +++ b/web/src/main/java/com/zhehekeji/web/lib/joyware/JoywareCameraControlModuleImpl.java @@ -5,10 +5,13 @@ import com.zhehekeji.common.util.PathUtil; import com.zhehekeji.core.util.Assert; import com.zhehekeji.web.lib.CameraConnMap; import com.zhehekeji.web.lib.CameraControlModule; +import com.zhehekeji.web.lib.hik.HCNetSDK; +import com.zhehekeji.web.lib.hik.HikLoginModuleImpl; import lombok.extern.slf4j.Slf4j; import java.time.LocalDateTime; +import static com.zhehekeji.web.lib.hik.HCNetSDK.NET_DVR_SET_TIMECFG; import static com.zhehekeji.web.lib.joyware.JoywareLoginModuleImpl.mp4ReceiveCB; /** @@ -93,6 +96,15 @@ public class JoywareCameraControlModuleImpl implements CameraControlModule { 0, 0, 0, 1); } + public boolean setCameraTime(Integer cameraId) + { + int lUserId = CameraConnMap.getConnId(cameraId).intValue(); + HCNetSDK.NET_DVR_TIME time = new HCNetSDK.NET_DVR_TIME(); + LocalDateTime localDateTime = LocalDateTime.now(); + time.setTime(localDateTime.getYear(),localDateTime.getMonthValue(),localDateTime.getDayOfMonth(),localDateTime.getHour(),localDateTime.getMinute(),localDateTime.getSecond()); + time.write(); + return HikLoginModuleImpl.hcNetsdk.NET_DVR_SetDVRConfig(lUserId, NET_DVR_SET_TIMECFG, 0,time.getPointer(), time.size()); + } /** * 向左上 */ diff --git a/web/src/main/java/com/zhehekeji/web/lib/joyware/JoywareLoginModuleImpl.java b/web/src/main/java/com/zhehekeji/web/lib/joyware/JoywareLoginModuleImpl.java index 1a201db..612a36c 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/joyware/JoywareLoginModuleImpl.java +++ b/web/src/main/java/com/zhehekeji/web/lib/joyware/JoywareLoginModuleImpl.java @@ -117,7 +117,7 @@ public class JoywareLoginModuleImpl implements CameraControlLoginModule { * 登录设备 * \endif */ - public LLong login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword) { + public LLong login(Integer cameraId,String m_strIp, int m_nPort, String m_strUser, String m_strPassword) { //IntByReference nError = new IntByReference(0); //入参 init(disConnectCallBack,haveReConnect); diff --git a/web/src/main/java/com/zhehekeji/web/service/CameraService.java b/web/src/main/java/com/zhehekeji/web/service/CameraService.java index 1b9b78d..4e8ea78 100644 --- a/web/src/main/java/com/zhehekeji/web/service/CameraService.java +++ b/web/src/main/java/com/zhehekeji/web/service/CameraService.java @@ -27,6 +27,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.dao.DuplicateKeyException; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import org.springframework.web.multipart.MultipartFile; @@ -332,12 +333,30 @@ public class CameraService { } public void cameraLogin(Camera camera){ - NetSDKLib.LLong lLong = cameraControlLoginModule.login(camera.getIp(),camera.getPort(),camera.getUser(),camera.getPassword()); + NetSDKLib.LLong lLong = cameraControlLoginModule.login(camera.getId(),camera.getIp(),camera.getPort(),camera.getUser(),camera.getPassword()); if(lLong != null){ log.info("camera login success,cameraId:{},ip:{}",camera.getId(),camera.getIp()); CameraConnMap.conn(camera.getId(),lLong); } } + @Scheduled(cron = "0 0 0/1 * * ? ") + public void cameraTimeUpdate() { + log.info(" cameraTimeUpdate"); + long timeStamp = System.currentTimeMillis(); + List cameras = cameraMapper.selectList(new QueryWrapper<>()); + for (Camera camera : cameras){ + Boolean ok = false; + if(configProperties.getCameraConfig().getCameraType() == ConfigProperties.HIK_CAMERA ){ + ok = HikLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId()).intValue()); + }else { + ok = JoywareLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId())); + } + + if(ok){ + cameraControlModule.setCameraTime(camera.getId()); + } + } + } }