From 88755383b28e9b3d6968014705688b8467f27a85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LAPTOP-S9HJSOEB=5C=E6=98=8A=E5=A4=A9?= Date: Thu, 22 Oct 2026 14:13:57 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=91=E5=8F=B0=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=20=E6=8B=8D=E7=85=A7=E8=BF=94=E5=9B=9E=20=E7=9B=B8?= =?UTF-8?q?=E6=9C=BA=E6=8E=89=E7=BA=BF=E9=87=8D=E8=BF=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/common/pom.xml | 31 ++++ modules/filter/pom.xml | 8 + pom.xml | 38 ++++ .../lib/hik/HikCameraControlModuleImpl.java | 175 +++++++++++------- .../web/lib/hik/HikLoginModuleImpl.java | 84 ++++++++- .../com/zhehekeji/web/service/PlcService.java | 23 ++- 6 files changed, 284 insertions(+), 75 deletions(-) diff --git a/modules/common/pom.xml b/modules/common/pom.xml index 2340aa1..58a98f6 100644 --- a/modules/common/pom.xml +++ b/modules/common/pom.xml @@ -9,6 +9,7 @@ 1.8 + 1.18.40 2.1.9.RELEASE 1.2.47 2.1 @@ -34,6 +35,13 @@ pom import + + + org.projectlombok + lombok + ${lombok.version} + true + @@ -166,6 +174,29 @@ 1.8 1.8 + + + + org.projectlombok + lombok + ${lombok.version} + + + + true + + -J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED + diff --git a/modules/filter/pom.xml b/modules/filter/pom.xml index 068c85d..0946f42 100644 --- a/modules/filter/pom.xml +++ b/modules/filter/pom.xml @@ -15,6 +15,7 @@ 1.8 + 1.18.40 2.1.9.RELEASE 0.7.0 @@ -28,6 +29,13 @@ pom import + + + org.projectlombok + lombok + ${lombok.version} + true + diff --git a/pom.xml b/pom.xml index 19d96e6..6740187 100644 --- a/pom.xml +++ b/pom.xml @@ -23,8 +23,23 @@ 1.8 + + 1.18.40 + + + + + org.projectlombok + lombok + ${lombok.version} + true + + + + org.springframework.boot @@ -118,6 +133,29 @@ 1.8 1.8 + + + + org.projectlombok + lombok + ${lombok.version} + + + + true + + -J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED + 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 f991a80..bd22f46 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 @@ -32,9 +32,53 @@ public class HikCameraControlModuleImpl implements CameraControlModule { public boolean connectStatus(Integer cameraId){ NetSDKLib.LLong userId = CameraConnMap.getConnId(cameraId); + if(userId == null){ + log.error("connectStatus error,camera is not login,cameraId:{}",cameraId); + return false; + } + boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_RemoteControl(userId.intValue(),20005,null,0); + if(!ok){ + log.error("connectStatus error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId); + } + return ok; + } - return HikLoginModuleImpl.hcNetsdk.NET_DVR_RemoteControl(userId.intValue(),20005,null,0); + /** + * 控制前校验:获取登录句柄,未连接则自动重连 + * + * @param cameraId 球机ID + * @return 登录句柄,null 表示球机未连接 + */ + private NetSDKLib.LLong getLoginId(Integer cameraId){ + if(!HikLoginModuleImpl.checkAndReLogin(cameraId)){ + log.error("camera is not connected,cameraId:{}",cameraId); + return null; + } + NetSDKLib.LLong loginId = CameraConnMap.getConnId(cameraId); + if(loginId == null){ + log.error("camera login handler is not exists,cameraId:{}",cameraId); + } + return loginId; + } + /** + * 云台控制统一入口 + * + * @param cameraId 球机ID + * @param command 控制指令 + * @param stop 0-开始 1-停止 + * @param action 操作名称,用于失败日志 + */ + private boolean ptzControl(Integer cameraId,int command,int stop,String action){ + NetSDKLib.LLong loginId = getLoginId(cameraId); + if(loginId == null){ + return false; + } + boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(loginId.intValue(), 1, command, stop); + if(!ok){ + log.error("{} error:{},cameraId:{}",action, HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId); + } + return ok; } /** @@ -42,14 +86,12 @@ public class HikCameraControlModuleImpl implements CameraControlModule { */ public boolean ptzControlUpStart(Integer cameraId, int nChannelID, int dwPTZCommand,int dwStop) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.TILT_UP, 0); + return ptzControl(cameraId, HCNetSDK.TILT_UP, 0, "ptzControlUpStart"); } public boolean ptzControlUpEnd(Integer cameraId, int nChannelID) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.TILT_UP, 1); + return ptzControl(cameraId, HCNetSDK.TILT_UP, 1, "ptzControlUpEnd"); } /** @@ -57,14 +99,12 @@ public class HikCameraControlModuleImpl implements CameraControlModule { */ public boolean ptzControlDownStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.TILT_DOWN, 0); + return ptzControl(cameraId, HCNetSDK.TILT_DOWN, 0, "ptzControlDownStart"); } public boolean ptzControlDownEnd(Integer cameraId, int nChannelID) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.TILT_DOWN, 1); + return ptzControl(cameraId, HCNetSDK.TILT_DOWN, 1, "ptzControlDownEnd"); } /** @@ -72,27 +112,29 @@ public class HikCameraControlModuleImpl implements CameraControlModule { */ public boolean ptzControlLeftStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.PAN_LEFT, 0); + return ptzControl(cameraId, HCNetSDK.PAN_LEFT, 0, "ptzControlLeftStart"); } public boolean ptzControlLeftEnd(Integer cameraId, int nChannelID) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.PAN_LEFT, 1); + return ptzControl(cameraId, HCNetSDK.PAN_LEFT, 1, "ptzControlLeftEnd"); } @Override public CameraPtzPojo ptzGetDVRConfig(Integer lUserID) { CameraPtzPojo cameraPtzPojo = new CameraPtzPojo(); - int lUserId = CameraConnMap.getConnId(lUserID).intValue(); + NetSDKLib.LLong loginId = getLoginId(lUserID); + if(loginId == null){ + cameraPtzPojo.setGetSuccess(false); + return cameraPtzPojo; + } HCNetSDK.NET_DVR_PTZPOS netDvrPtzpos = new HCNetSDK.NET_DVR_PTZPOS(); Pointer pointer = netDvrPtzpos.getPointer(); IntByReference intByReference = new IntByReference(1); - boolean b_GetPTZ = HikLoginModuleImpl.hcNetsdk.NET_DVR_GetDVRConfig(lUserId, NET_DVR_GET_PTZPOS,1,pointer,netDvrPtzpos.size(),intByReference); + boolean b_GetPTZ = HikLoginModuleImpl.hcNetsdk.NET_DVR_GetDVRConfig(loginId.intValue(), NET_DVR_GET_PTZPOS,1,pointer,netDvrPtzpos.size(),intByReference); if (b_GetPTZ == false) { - System.out.println("获取PTZ坐标信息失败,错误码:" +HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError()); + log.error("ptzGetDVRConfig error:{},cameraId:{}",HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),lUserID); cameraPtzPojo.setGetSuccess(false); }else { @@ -120,28 +162,24 @@ public class HikCameraControlModuleImpl implements CameraControlModule { */ public boolean ptzControlRightStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.PAN_RIGHT, 0); + return ptzControl(cameraId, HCNetSDK.PAN_RIGHT, 0, "ptzControlRightStart"); } public boolean ptzControlRightEnd(Integer cameraId, int nChannelID) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.PAN_RIGHT, 1); + return ptzControl(cameraId, HCNetSDK.PAN_RIGHT, 1, "ptzControlRightEnd"); } /** * 向左上 */ public boolean ptzControlLeftUpStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.UP_LEFT, 0); + return ptzControl(cameraId, HCNetSDK.UP_LEFT, 0, "ptzControlLeftUpStart"); } public boolean ptzControlLeftUpEnd(Integer cameraId, int nChannelID) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.UP_LEFT, 1); + return ptzControl(cameraId, HCNetSDK.UP_LEFT, 1, "ptzControlLeftUpEnd"); } /** @@ -149,46 +187,36 @@ public class HikCameraControlModuleImpl implements CameraControlModule { */ public boolean ptzControlRightUpStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.UP_RIGHT, 0); + return ptzControl(cameraId, HCNetSDK.UP_RIGHT, 0, "ptzControlRightUpStart"); } public boolean ptzControlRightUpEnd(Integer cameraId, int nChannelID) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.UP_RIGHT, 1); + return ptzControl(cameraId, HCNetSDK.UP_RIGHT, 1, "ptzControlRightUpEnd"); } /** * 向左下 */ public boolean ptzControlLeftDownStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - Boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.DOWN_LEFT, 0); - if(!ok){ - log.error("error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId); - } - return ok; + return ptzControl(cameraId, HCNetSDK.DOWN_LEFT, 0, "ptzControlLeftDownStart"); } public boolean ptzControlLeftDownEnd(Integer cameraId, int nChannelID) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.DOWN_LEFT, 1); + return ptzControl(cameraId, HCNetSDK.DOWN_LEFT, 1, "ptzControlLeftDownEnd"); } /** * 向右下 */ public boolean ptzControlRightDownStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.DOWN_RIGHT, 0); + return ptzControl(cameraId, HCNetSDK.DOWN_RIGHT, 0, "ptzControlRightDownStart"); } public boolean ptzControlRightDownEnd(Integer cameraId, int nChannelID) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.DOWN_RIGHT, 1); + return ptzControl(cameraId, HCNetSDK.DOWN_RIGHT, 1, "ptzControlRightDownEnd"); } /** @@ -196,14 +224,12 @@ public class HikCameraControlModuleImpl implements CameraControlModule { */ public boolean ptzControlZoomAddStart(Integer cameraId, int nChannelID, int dwPTZCommand) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.ZOOM_IN, 0); + return ptzControl(cameraId, HCNetSDK.ZOOM_IN, 0, "ptzControlZoomAddStart"); } public boolean ptzControlZoomAddEnd(Integer cameraId, int nChannelID) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.ZOOM_IN, 1); + return ptzControl(cameraId, HCNetSDK.ZOOM_IN, 1, "ptzControlZoomAddEnd"); } /** @@ -211,42 +237,36 @@ public class HikCameraControlModuleImpl implements CameraControlModule { */ public boolean ptzControlZoomDecStart(Integer cameraId, int nChannelID, int dwPTZCommand) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.ZOOM_OUT, 0); + return ptzControl(cameraId, HCNetSDK.ZOOM_OUT, 0, "ptzControlZoomDecStart"); } public boolean ptzControlZoomDecEnd(Integer cameraId, int nChannelID) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.ZOOM_OUT, 1); + return ptzControl(cameraId, HCNetSDK.ZOOM_OUT, 1, "ptzControlZoomDecEnd"); } /** * 变焦+ */ public boolean ptzControlFocusAddStart(Integer cameraId, int nChannelID, int dwPTZCommand) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.FOCUS_NEAR, 0); + return ptzControl(cameraId, HCNetSDK.FOCUS_NEAR, 0, "ptzControlFocusAddStart"); } public boolean ptzControlFocusAddEnd(Integer cameraId, int nChannelID) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.FOCUS_NEAR, 1); + return ptzControl(cameraId, HCNetSDK.FOCUS_NEAR, 1, "ptzControlFocusAddEnd"); } /** * 变焦- */ public boolean ptzControlFocusDecStart(Integer cameraId, int nChannelID, int dwPTZCommand) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.FOCUS_FAR, 0); + return ptzControl(cameraId, HCNetSDK.FOCUS_FAR, 0, "ptzControlFocusDecStart"); } public boolean ptzControlFocusDecEnd(Integer cameraId, int nChannelID) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.FOCUS_FAR, 1); + return ptzControl(cameraId, HCNetSDK.FOCUS_FAR, 1, "ptzControlFocusDecEnd"); } /** @@ -254,14 +274,12 @@ public class HikCameraControlModuleImpl implements CameraControlModule { */ public boolean ptzControlIrisAddStart(Integer cameraId, int nChannelID, int dwPTZCommand) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.IRIS_OPEN, 0); + return ptzControl(cameraId, HCNetSDK.IRIS_OPEN, 0, "ptzControlIrisAddStart"); } public boolean ptzControlIrisAddEnd(Integer cameraId, int nChannelID) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.IRIS_OPEN, 1); + return ptzControl(cameraId, HCNetSDK.IRIS_OPEN, 1, "ptzControlIrisAddEnd"); } /** @@ -269,25 +287,25 @@ public class HikCameraControlModuleImpl implements CameraControlModule { */ public boolean ptzControlIrisDecStart(Integer cameraId, int nChannelID, int dwPTZCommand) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.IRIS_CLOSE, 0); + return ptzControl(cameraId, HCNetSDK.IRIS_CLOSE, 0, "ptzControlIrisDecStart"); } public boolean ptzControlIrisDecEnd(Integer cameraId, int nChannelID) { - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); - Boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.IRIS_CLOSE, 1); - return ok; + return ptzControl(cameraId, HCNetSDK.IRIS_CLOSE, 1, "ptzControlIrisDecEnd"); } public boolean pic(Integer cameraId, int nChannelID, String path) { + NetSDKLib.LLong loginId = getLoginId(cameraId); + if(loginId == null){ + return false; + } PathUtil.checkDirc(path); - int lUserId = CameraConnMap.getConnId(cameraId).intValue(); short wPicSize = 3; short wPicQuality = 0; HCNetSDK.NET_DVR_JPEGPARA jpegpara = new HCNetSDK.NET_DVR_JPEGPARA(wPicSize, wPicQuality); - boolean picResult = HikLoginModuleImpl.hcNetsdk.NET_DVR_CaptureJPEGPicture(lUserId, 1, jpegpara, path); + boolean picResult = HikLoginModuleImpl.hcNetsdk.NET_DVR_CaptureJPEGPicture(loginId.intValue(), 1, jpegpara, path); if (!picResult) { log.error("pic error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId); } @@ -296,6 +314,10 @@ public class HikCameraControlModuleImpl implements CameraControlModule { } public void downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end) { + NetSDKLib.LLong loginId = getLoginId(cameraId); + if(loginId == null){ + return; + } start = start.minusMinutes(1); end = end.minusMinutes(1); PathUtil.checkDirc(path); @@ -305,9 +327,8 @@ public class HikCameraControlModuleImpl implements CameraControlModule { endTime.setTime(end.getYear(), end.getMonthValue(), end.getDayOfMonth(), end.getHour(), end.getMinute(), end.getSecond()); log.info("start download mp4 path:{} ,cameraId:{},start_time:{},end_time:{}",path,cameraId,startTime.toStringTime(),endTime.toStringTime()); - int lUserID = CameraConnMap.getConnId(cameraId).intValue(); - int result = HikLoginModuleImpl.hcNetsdk.NET_DVR_GetFileByTime(lUserID, 1, startTime, endTime, path); + int result = HikLoginModuleImpl.hcNetsdk.NET_DVR_GetFileByTime(loginId.intValue(), 1, startTime, endTime, path); if (result == -1) { log.error("downloadMp4 error code:{},cameraId:{},path:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId,path); } else { @@ -418,8 +439,10 @@ public class HikCameraControlModuleImpl implements CameraControlModule { */ public void ptz(Integer ptzId, String name, Integer cameraId) { + NetSDKLib.LLong loginId = getLoginId(cameraId); + Assert.notNull(loginId,"球机未连接"); int dwzCommand = HCNetSDK.SET_PRESET; - Boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZPreset_Other(CameraConnMap.getConnId(cameraId).intValue(), 1, dwzCommand, ptzId.intValue()); + Boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZPreset_Other(loginId.intValue(), 1, dwzCommand, ptzId.intValue()); if(!ok){ log.error("ptz error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId); } @@ -433,8 +456,12 @@ public class HikCameraControlModuleImpl implements CameraControlModule { */ public void toPtz(Integer ptzId, Integer cameraId) { + NetSDKLib.LLong loginId = getLoginId(cameraId); + if(loginId == null){ + return; + } int dwPTZCommand = HCNetSDK.GOTO_PRESET; - Boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZPreset_Other(CameraConnMap.getConnId(cameraId).intValue(), 1, dwPTZCommand, ptzId); + Boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZPreset_Other(loginId.intValue(), 1, dwPTZCommand, ptzId); if(!ok){ log.error("toPtz error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId); } @@ -447,6 +474,10 @@ public class HikCameraControlModuleImpl implements CameraControlModule { * @param cameraId */ public void toPtzSlow(Integer cameraId,Integer x) { + NetSDKLib.LLong loginId = getLoginId(cameraId); + if(loginId == null){ + return; + } int dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_MOVE_ABSOLUTELY; NetSDKLib.PTZ_CONTROL_ABSOLUTELY absolutely = new NetSDKLib.PTZ_CONTROL_ABSOLUTELY(); @@ -456,7 +487,7 @@ public class HikCameraControlModuleImpl implements CameraControlModule { absolutely.stuSpeed.fPositionY = 0.2f; absolutely.write(); //absolutely.stuSpeed.fZoom = 0.5f; - Boolean ok = HikLoginModuleImpl.netsdk.CLIENT_DHPTZControlEx2(CameraConnMap.getConnId(cameraId), 0, dwPTZCommand, + Boolean ok = HikLoginModuleImpl.netsdk.CLIENT_DHPTZControlEx2(loginId, 0, dwPTZCommand, 0, 0, 0, 0, absolutely.getPointer()); if(!ok){ log.error("toPtzSlow error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId); 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..c45a293 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,8 +1,12 @@ package com.zhehekeji.web.lib.hik; import com.sun.jna.Pointer; +import com.zhehekeji.common.util.SpringContextUtil; +import com.zhehekeji.web.entity.Camera; +import com.zhehekeji.web.lib.CameraConnMap; import com.zhehekeji.web.lib.CameraControlLoginModule; import com.zhehekeji.web.lib.joyware.NetSDKLib; +import com.zhehekeji.web.mapper.CameraMapper; import lombok.extern.slf4j.Slf4j; /** @@ -20,8 +24,14 @@ public class HikLoginModuleImpl implements CameraControlLoginModule { private static int MAX_RECONNET_TIME = 100; + /** 重连时的最大登录尝试次数 */ + private static int MAX_RELOGIN_TIME = 3; + private static boolean hasInit = Boolean.FALSE; + /** 重连使用的实例 */ + private static final HikLoginModuleImpl INSTANCE = new HikLoginModuleImpl(); + static HikExceptionCallBack hikExceptionCallBack = new HikExceptionCallBack(); /** @@ -61,6 +71,69 @@ public class HikLoginModuleImpl implements CameraControlLoginModule { return hcNetsdk.NET_DVR_RemoteControl(userId,20005,null,0); } + /** + * 控制前调用:判断球机是否已连接,未连接则自动重连 + * + * @param cameraId 球机ID + * @return true 已连接(或重连成功) + */ + public static boolean checkAndReLogin(Integer cameraId){ + if(cameraId == null){ + return false; + } + NetSDKLib.LLong loginId = CameraConnMap.getConnId(cameraId); + if(loginId != null && connectStatus(loginId.intValue())){ + return true; + } + log.warn("camera is disconnected,ready to relogin,cameraId:{}",cameraId); + return reLogin(cameraId); + } + + /** + * 重新登录球机 + * + * @param cameraId 球机ID + * @return true 重连成功 + */ + public static boolean reLogin(Integer cameraId){ + Camera camera = getCamera(cameraId); + if(camera == null){ + log.error("relogin error,camera is not exists,cameraId:{}",cameraId); + return false; + } + //释放旧的登录句柄 + NetSDKLib.LLong oldLoginId = CameraConnMap.getConnId(cameraId); + if(oldLoginId != null){ + try{ + hcNetsdk.NET_DVR_Logout(oldLoginId.intValue()); + }catch (Exception e){ + log.error("relogin logout error,cameraId:{},message:{}",cameraId,e.getMessage()); + } + CameraConnMap.disConn(cameraId); + } + NetSDKLib.LLong loginId = INSTANCE.login(camera.getIp(),camera.getPort(),camera.getUser(),camera.getPassword(),MAX_RELOGIN_TIME); + if(loginId == null){ + log.error("relogin failed,cameraId:{},ip:{}",cameraId,camera.getIp()); + return false; + } + CameraConnMap.conn(cameraId,loginId); + log.info("relogin success,cameraId:{},ip:{}",cameraId,camera.getIp()); + return true; + } + + /** + * 查询球机登录信息,用于重连 + */ + private static Camera getCamera(Integer cameraId){ + try{ + CameraMapper cameraMapper = SpringContextUtil.getBean(CameraMapper.class); + return cameraMapper.selectById(cameraId); + }catch (Exception e){ + log.error("get camera error,cameraId:{},message:{}",cameraId,e.getMessage()); + return null; + } + } + /** * \if ENGLISH_LANG * Login Device @@ -69,6 +142,15 @@ public class HikLoginModuleImpl implements CameraControlLoginModule { * \endif */ public NetSDKLib.LLong login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword) { + return login(m_strIp, m_nPort, m_strUser, m_strPassword, MAX_RECONNET_TIME); + } + + /** + * 登录设备 + * + * @param maxRetry 最大登录尝试次数 + */ + public NetSDKLib.LLong login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword, int maxRetry) { 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();//设备信息 @@ -94,7 +176,7 @@ public class HikLoginModuleImpl implements CameraControlLoginModule { int tryTimes = 0; - while(m_lUserID < 0 && tryTimes < MAX_RECONNET_TIME){ + while(m_lUserID < 0 && tryTimes < maxRetry){ log.error("hik login error,ip:{},port:{},errorCode:{}",m_strIp,m_nPort,hcNetsdk.NET_DVR_GetLastError()); try { Thread.sleep(500); 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 65954c6..d9d88c3 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -25,6 +25,7 @@ import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.ArrayBlockingQueue; +import java.util.stream.Collectors; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -671,15 +672,33 @@ public class PlcService { */ public String IntoStockSave(String SRMNumber,String taskId,String goodsLocation,String picName){ - String ip ="http://"+ ClientChanel.getIpFromId(SRMNumber)+":9009/pic/"; + String ip = String.format("http://%s:9009/pic/", ClientChanel.getIpFromId(SRMNumber)); String[] pics = picName.split(";"); - String picNameDataBase = ip+pics[0]+";"+ ip+pics[1]; + + String picNameDataBase = Arrays.stream(pics) + .map(p -> ip + p) + .collect(Collectors.joining(";")); + Order oldOrder = orderMapper.getOneByOrderNum(taskId); oldOrder.setIntoStockPic(picNameDataBase); orderMapper.updateById(oldOrder); return ip+pics[0]+"*"+ ip+pics[1]; } + public static void main(String[] args) { + String picName = "1;2"; + String[] pics = picName.split(";"); + + StringBuilder picNameDataBase = new StringBuilder(); + for (String p :pics){ + if (picNameDataBase.length()>0){ + picNameDataBase.append(";"); + } + picNameDataBase.append(p); + } + System.out.println(picNameDataBase.toString()); + } + /** * 相机转动,拍照,并返回图片地址 * 顶部拍照 C1