diff --git a/web/src/main/java/com/leaper/web/controller/CameraControlController.java b/web/src/main/java/com/leaper/web/controller/CameraControlController.java index b810f9a..7e7a61a 100644 --- a/web/src/main/java/com/leaper/web/controller/CameraControlController.java +++ b/web/src/main/java/com/leaper/web/controller/CameraControlController.java @@ -58,7 +58,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(camera.getId(),camera.getIp(),camera.getPort(),camera.getUser(),camera.getPassword()); return lLong; } diff --git a/web/src/main/java/com/leaper/web/lib/CameraConnMap.java b/web/src/main/java/com/leaper/web/lib/CameraConnMap.java index 64ca929..c861d73 100644 --- a/web/src/main/java/com/leaper/web/lib/CameraConnMap.java +++ b/web/src/main/java/com/leaper/web/lib/CameraConnMap.java @@ -43,6 +43,7 @@ public class CameraConnMap { } public static Integer getCameraIdByLoginId(NetSDKLib.LLong lLong){ + return loginMap.get(lLong); } diff --git a/web/src/main/java/com/leaper/web/lib/CameraControlLoginModule.java b/web/src/main/java/com/leaper/web/lib/CameraControlLoginModule.java index 5d4a706..eca6b80 100644 --- a/web/src/main/java/com/leaper/web/lib/CameraControlLoginModule.java +++ b/web/src/main/java/com/leaper/web/lib/CameraControlLoginModule.java @@ -4,6 +4,5 @@ import com.leaper.web.lib.joyware.NetSDKLib; public interface CameraControlLoginModule { - NetSDKLib.LLong login(String ip, int port, String user, String password); - + NetSDKLib.LLong login(Integer id,String ip, int port, String user, String password); } diff --git a/web/src/main/java/com/leaper/web/lib/hik/HikExceptionCallBack.java b/web/src/main/java/com/leaper/web/lib/hik/HikExceptionCallBack.java index 4490b3a..457e15d 100644 --- a/web/src/main/java/com/leaper/web/lib/hik/HikExceptionCallBack.java +++ b/web/src/main/java/com/leaper/web/lib/hik/HikExceptionCallBack.java @@ -10,13 +10,20 @@ public class HikExceptionCallBack implements HCNetSDK.FExceptionCallBack { @Override public void invoke(int dwType, int lUserID, int lHandle, Pointer pUser) { - Integer cameraId =CameraConnMap.getCameraIdByLoginId(new NetSDKLib.LLong(lUserID)); + NetSDKLib.LLong lLoginID = new NetSDKLib.LLong(lUserID); + Integer cameraId =CameraConnMap.getCameraIdByLoginId(lLoginID); if(dwType == 32768){ - log.error("hik disconnect,cameraId:{}", cameraId); + if(cameraId != null){ + log.error("hik disconnect,cameraId:{}", cameraId); + CameraConnMap.disConn(cameraId); + } }else if(dwType == 32791){ - log.info("hik reconnect,cameraId:{}", CameraConnMap.getCameraIdByLoginId(new NetSDKLib.LLong(lUserID))); + if(CameraConnMap.getCameraIdByLoginId(lLoginID) == null){ + CameraConnMap.conn(cameraId,lLoginID); + } + log.info("hik reconnect,cameraId:{}", CameraConnMap.getCameraIdByLoginId(lLoginID)); } } diff --git a/web/src/main/java/com/leaper/web/lib/hik/HikLoginModuleImpl.java b/web/src/main/java/com/leaper/web/lib/hik/HikLoginModuleImpl.java index e3813cf..33009b3 100644 --- a/web/src/main/java/com/leaper/web/lib/hik/HikLoginModuleImpl.java +++ b/web/src/main/java/com/leaper/web/lib/hik/HikLoginModuleImpl.java @@ -1,5 +1,6 @@ package com.leaper.web.lib.hik; +import com.leaper.web.lib.CameraConnMap; import com.leaper.web.lib.joyware.NetSDKLib; import com.sun.jna.Pointer; import com.leaper.web.lib.CameraControlLoginModule; @@ -68,7 +69,14 @@ 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.info("hik camera:{}注销",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();//设备信息 @@ -92,7 +100,6 @@ public class HikLoginModuleImpl implements CameraControlLoginModule { 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/leaper/web/lib/joyware/JoywareLoginModuleImpl.java b/web/src/main/java/com/leaper/web/lib/joyware/JoywareLoginModuleImpl.java index ec8db4c..e7f9cc9 100644 --- a/web/src/main/java/com/leaper/web/lib/joyware/JoywareLoginModuleImpl.java +++ b/web/src/main/java/com/leaper/web/lib/joyware/JoywareLoginModuleImpl.java @@ -113,7 +113,7 @@ public class JoywareLoginModuleImpl 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) { //IntByReference nError = new IntByReference(0); //入参 init(disConnectCallBack,haveReConnect); diff --git a/web/src/main/java/com/leaper/web/service/CameraService.java b/web/src/main/java/com/leaper/web/service/CameraService.java index 301be9d..d900120 100644 --- a/web/src/main/java/com/leaper/web/service/CameraService.java +++ b/web/src/main/java/com/leaper/web/service/CameraService.java @@ -118,14 +118,25 @@ public class CameraService { public PageInfo cameras(StreetSearch streetSearch) { PageHelper.startPage(streetSearch.getPageNum(), streetSearch.getPageSize()); List cameras = cameraMapper.selectByMap(new HashMap<>(0)); - for(Camera camera : cameras){ - if (CameraConnMap.cameraMap.containsKey(camera.getId())) { - camera.setStatus("连接成功"); + List collect = cameras.parallelStream().peek(camera -> { + + Boolean ok = false; + if(CameraConnMap.getConnId(camera.getId())!=null){ + 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) { + camera.setStatus("连接正常"); } else { + CameraConnMap.disConn(camera.getId()); camera.setStatus("未连接"); + cameraLogin(camera); } - } - + }).collect(Collectors.toList()); return new PageInfo<>(cameras); } @@ -401,7 +412,7 @@ 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); diff --git a/web/src/main/java/com/leaper/web/service/CronTab.java b/web/src/main/java/com/leaper/web/service/CronTab.java index 12d7aa0..046817c 100644 --- a/web/src/main/java/com/leaper/web/service/CronTab.java +++ b/web/src/main/java/com/leaper/web/service/CronTab.java @@ -56,6 +56,8 @@ public class CronTab { PicDataMapper picDataMapper; @Resource OrderLiveMapper orderLiveMapper; + @Resource + CameraService cameraService; private static LocalDateTime now; @@ -99,7 +101,6 @@ public class CronTab { } @Scheduled(cron = "0 * * * * ?") - //@Scheduled(cron = "0 0/1 * * * *") public void cameraConn() { log.info("球机连接判断"); List cameras = cameraMapper.selectByMap(new HashMap<>(0)); @@ -131,10 +132,13 @@ public class CronTab { public void run() { try { 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(CameraConnMap.getConnId(camera.getId())!=null){ + 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) { @@ -142,6 +146,7 @@ public class CronTab { } else { CameraConnMap.disConn(camera.getId()); camera.setStatus("未连接"); + //cameraService.cameraLogin(camera); } } catch (Exception e) { CameraConnMap.disConn(camera.getId());