From c6571460dae303d327fdce394cc329ba83d87b05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LAPTOP-S9HJSOEB=5C=E6=98=8A=E5=A4=A9?= Date: Fri, 14 Jun 2024 10:55:19 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=B8=E6=9C=BA=E9=87=8D=E8=BF=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zhehekeji/web/lib/CameraConnMap.java | 1 + .../lib/hik/HikCameraControlModuleImpl.java | 22 ++++++++++++++-- .../web/lib/hik/HikExceptionCallBack.java | 14 ++++++++--- .../web/lib/hik/HikLoginModuleImpl.java | 25 +++++++++++-------- .../zhehekeji/web/service/InitService.java | 2 +- .../com/zhehekeji/web/service/PlcService.java | 8 +++--- 6 files changed, 51 insertions(+), 21 deletions(-) diff --git a/web/src/main/java/com/zhehekeji/web/lib/CameraConnMap.java b/web/src/main/java/com/zhehekeji/web/lib/CameraConnMap.java index bdd5a3b..c98e2ba 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/CameraConnMap.java +++ b/web/src/main/java/com/zhehekeji/web/lib/CameraConnMap.java @@ -16,6 +16,7 @@ public class CameraConnMap { * value: loginId */ public static Map cameraMap = new HashMap<>(); + public static Map.Entry cameraMapEntry = new HashMap.SimpleEntry<>(0,null); /** * key :cameraId * value: loginId 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 060aa20..f024028 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 @@ -9,8 +9,11 @@ import com.zhehekeji.web.lib.CameraConnMap; import com.zhehekeji.web.lib.CameraControlModule; import com.zhehekeji.web.lib.joyware.NetSDKLib; import com.zhehekeji.web.pojo.CameraPtzPojo; +import com.zhehekeji.web.service.CameraService; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.io.*; import java.nio.charset.StandardCharsets; import java.time.Duration; @@ -30,6 +33,12 @@ import static com.zhehekeji.web.lib.hik.HCNetSDK.NET_DVR_SET_TIMECFG; @Slf4j public class HikCameraControlModuleImpl implements CameraControlModule { + public HikCameraControlModuleImpl(CameraService cameraService){ + this.cameraService = cameraService; + } + + CameraService cameraService; + public boolean connectStatus(Integer cameraId){ NetSDKLib.LLong userId = CameraConnMap.getConnId(cameraId); @@ -300,7 +309,11 @@ public class HikCameraControlModuleImpl implements CameraControlModule { HCNetSDK.NET_DVR_JPEGPARA jpegpara = new HCNetSDK.NET_DVR_JPEGPARA(wPicSize, wPicQuality); boolean picResult = HikLoginModuleImpl.hcNetsdk.NET_DVR_CaptureJPEGPicture(lUserId, 1, jpegpara, path); if (!picResult) { - log.error("pic error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId); + int error = HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(); + log.error("pic error:{},cameraId:{}",error ,cameraId); + if(error == 102){ + cameraService.cameraConnect(cameraId); + } } return picResult; @@ -434,7 +447,12 @@ public class HikCameraControlModuleImpl implements CameraControlModule { int dwzCommand = HCNetSDK.SET_PRESET; Boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZPreset_Other(CameraConnMap.getConnId(cameraId).intValue(), 1, dwzCommand, ptzId.intValue()); if(!ok){ - log.error("ptz error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId); + + int error = HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(); + log.error("ptz error:{},cameraId:{}",error,cameraId); + if(error == 102){ + cameraService.cameraConnect(cameraId); + } } Assert.isTrue(ok, "设置失败"); } 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 11232ae..e7f1eb8 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 @@ -19,15 +19,21 @@ public class HikExceptionCallBack implements HCNetSDK.FExceptionCallBack { 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 == 32791){ + }else if(dwType == 0x8017){ - log.info("hik reconnect,cameraId:{}", CameraConnMap.getCameraIdByLoginId(new NetSDKLib.LLong(lUserID))); + log.info("hik reconnect,cameraId:{}", cameraId); + + 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 3e86698..58d3f74 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 @@ -4,7 +4,11 @@ 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 com.zhehekeji.web.service.CameraService; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; /** * 海康 登陆接口实现 @@ -71,6 +75,17 @@ public class HikLoginModuleImpl implements CameraControlLoginModule { * \endif */ 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();//设备信息 @@ -89,17 +104,7 @@ public class HikLoginModuleImpl implements CameraControlLoginModule { m_strLoginInfo.bUseAsynLogin = true; //是否异步登录:0- 否,1- 是 m_strLoginInfo.write(); HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo30 = new HCNetSDK.NET_DVR_DEVICEINFO_V30();//设备信息 - ////先注销,在登录 - if (CameraConnMap.getConnId(cameraId) !=null ) { - if(hcNetsdk.NET_DVR_Logout_V30(CameraConnMap.getConnId(cameraId).intValue())) { - - log.error("hik cameraId:{}注销",cameraId); - } - - } - - CameraConnMap.disConn(cameraId); int m_lUserID = hcNetsdk.NET_DVR_Login_V40(m_strLoginInfo,m_strDeviceInfo); int lChannel = 2; diff --git a/web/src/main/java/com/zhehekeji/web/service/InitService.java b/web/src/main/java/com/zhehekeji/web/service/InitService.java index 487aca2..6a5d3b4 100644 --- a/web/src/main/java/com/zhehekeji/web/service/InitService.java +++ b/web/src/main/java/com/zhehekeji/web/service/InitService.java @@ -71,7 +71,7 @@ public class InitService implements ApplicationRunner { if(configProperties.getCameraConfig().getCameraType() == ConfigProperties.JOYWARE_CAMERA){ cameraControlModule = new JoywareCameraControlModuleImpl(); }else { - cameraControlModule = new HikCameraControlModuleImpl(); + cameraControlModule = new HikCameraControlModuleImpl(cameraService); } plcService.setCameraControlModule(cameraControlModule); cameraService.setCameraControlModule(cameraControlModule); diff --git a/web/src/main/java/com/zhehekeji/web/service/PlcService.java b/web/src/main/java/com/zhehekeji/web/service/PlcService.java index 9f52a1c..0cbf9b7 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -659,8 +659,8 @@ public class PlcService { gyrateCameraByCode(cameraIdTop, c); } else { String c = cmdCode + "-" + plcCmdInfo.getLeftRightStr(1); - log.info("camera ptz" + cmdCode); - gyrateCameraByCode(cameraIdTop, cmdCode); + log.info("camera ptz" + c); + gyrateCameraByCode(cameraIdTop, c); try { Thread.sleep(configProperties.getCameraConfig().getDelayCaptureTime()); } catch (InterruptedException e) { @@ -682,14 +682,14 @@ public class PlcService { //成都蜜雪冰城 只拍照人工核对 String e2 = "E2-" + plcCmdInfo.getLeftRightStr(1) + "-TOP"; log.info("camera ptz" + e2); - gyrateCameraByCode(cameraId, e2); + gyrateCameraByCode(cameraIdTop, e2); try { Thread.sleep(configProperties.getCameraConfig().getEDelayCaptureTime()); } catch (InterruptedException e) { e.printStackTrace(); } - cameraCapture(cameraId, false, null, path + ".jpg"); + cameraCapture(cameraIdTop, false, null, path + ".jpg"); try { Thread.sleep(configProperties.getCameraConfig().getEDelayCaptureTime());