diff --git a/web/src/main/java/com/zhehekeji/web/entity/Camera.java b/web/src/main/java/com/zhehekeji/web/entity/Camera.java index 6a68825..c4b8bc5 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/Camera.java +++ b/web/src/main/java/com/zhehekeji/web/entity/Camera.java @@ -1,6 +1,7 @@ package com.zhehekeji.web.entity; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; @@ -30,6 +31,9 @@ public class Camera { private String rtcServer; + @TableField(exist = false) + private String status; + private Integer rtcServerPort; @ApiModelProperty(value = "预置点 增长值",hidden = true) private Integer ptzId; 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 b777d45..37f09a0 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 @@ -57,7 +57,7 @@ public class HikLoginModuleImpl implements CameraControlLoginModule { } //检测球机连接状态 - public Boolean connectStatus(int userId){ + public static Boolean connectStatus(int userId){ return hcNetsdk.NET_DVR_RemoteControl(userId,20005,null,0); } 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 d7bb70b..1a201db 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 @@ -1,7 +1,11 @@ package com.zhehekeji.web.lib.joyware; import com.sun.jna.CallbackThreadInitializer; +import com.sun.jna.Memory; import com.sun.jna.Native; +import com.sun.jna.Pointer; +import com.sun.jna.ptr.IntByReference; +import com.zhehekeji.web.lib.CameraConnMap; import com.zhehekeji.web.lib.CameraControlLoginModule; import com.zhehekeji.web.lib.joyware.NetSDKLib.LLong; import com.zhehekeji.web.lib.joyware.NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY; @@ -34,6 +38,24 @@ public class JoywareLoginModuleImpl implements CameraControlLoginModule { public static CallBack.Mp4ReceiveCB mp4ReceiveCB= new CallBack.Mp4ReceiveCB(); + public static Boolean connectStatus(LLong userId){ + IntByReference retLen = new IntByReference(0); + Pointer p = new Memory(Integer.SIZE); + p.clear(Integer.SIZE); + if (!netsdk.CLIENT_QueryDevState(userId, + NetSDKLib.NET_DEVSTATE_ONLINE, + p, + Integer.SIZE, + retLen, + 500)) { + log.error("joyware connectStatus error,errorCode:{}",netsdk.CLIENT_GetLastError()); + return false; + } + int []a = new int[1]; + p.read(0, a, 0, 1); + return a[0] == 1; + } + /** * \if ENGLISH_LANG * Init @@ -118,7 +140,7 @@ public class JoywareLoginModuleImpl implements CameraControlLoginModule { if(m_hLoginHandle.longValue()==0){ return null; } - log.info("joyware login success"); + log.info("joyware login success,loginId:{}",m_hLoginHandle.longValue()); return m_hLoginHandle; } 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 1521202..3241ac8 100644 --- a/web/src/main/java/com/zhehekeji/web/service/CameraService.java +++ b/web/src/main/java/com/zhehekeji/web/service/CameraService.java @@ -11,6 +11,8 @@ import com.zhehekeji.web.entity.CameraIOConfig; import com.zhehekeji.web.lib.CameraConnMap; import com.zhehekeji.web.lib.CameraControlLoginModule; import com.zhehekeji.web.lib.CameraControlModule; +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.CameraIOConfigMapper; import com.zhehekeji.web.mapper.CameraIOMapper; @@ -33,6 +35,7 @@ import java.io.IOException; import java.time.LocalDateTime; import java.util.HashMap; import java.util.List; +import java.util.concurrent.CountDownLatch; @Service @Slf4j @@ -105,9 +108,53 @@ public class CameraService { public PageInfo cameras(StreetSearch streetSearch) { PageHelper.startPage(streetSearch.getPageNum(), streetSearch.getPageSize()); List cameras = cameraMapper.selectByMap(new HashMap<>(0)); + if(cameras.size() > 0){ + CountDownLatch latch = new CountDownLatch(cameras.size()); + cameras.forEach(camera -> { + StatusThread statusThread = new StatusThread(camera,latch); + statusThread.start(); + }); + try { + latch.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + return new PageInfo<>(cameras); } + public class StatusThread extends Thread{ + private Camera camera; + private CountDownLatch latch; + public StatusThread(Camera camera,CountDownLatch latch){ + this.camera = camera; + this.latch = latch; + } + @Override + 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(ok){ + camera.setStatus("连接正常"); + }else { + camera.setStatus("未连接"); + } + }catch (Exception e){ + camera.setStatus("未连接"); + }finally { + latch.countDown(); + } + } + } + + public Camera detail(Integer id){ return cameraMapper.selectById(id); }