球机经常断连修改,队列崩掉

焦作-mxbc-北起
LAPTOP-S9HJSOEB\昊天 2 years ago
parent 2d10ca8ae3
commit 20cb77a694

@ -337,9 +337,7 @@ public class CameraControlController {
if (CameraConnMap.getConnId(cameraId) != null) { if (CameraConnMap.getConnId(cameraId) != null) {
Camera camera = cameraMapper.selectById(cameraId); Camera camera = cameraMapper.selectById(cameraId);
if (CameraConnMap.getConnId(cameraId)!=null){
cameraService.cameraLogin(camera);
}
Boolean ok = false; Boolean ok = false;
if (configProperties.getCameraConfig().getCameraType() == ConfigProperties.HIK_CAMERA) { if (configProperties.getCameraConfig().getCameraType() == ConfigProperties.HIK_CAMERA) {
ok = HikLoginModuleImpl.connectStatus(CameraConnMap.getConnId(cameraId).intValue()); ok = HikLoginModuleImpl.connectStatus(CameraConnMap.getConnId(cameraId).intValue());

@ -2,19 +2,19 @@ package com.zhehekeji.web.lib;
import com.zhehekeji.common.util.SpringContextUtil; import com.zhehekeji.common.util.SpringContextUtil;
import com.zhehekeji.web.service.CameraService; import com.zhehekeji.web.service.CameraService;
import lombok.extern.slf4j.Slf4j;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.concurrent.DelayQueue; import java.util.concurrent.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import static com.zhehekeji.web.lib.CameraConnMap.cameraMap; import static com.zhehekeji.web.lib.CameraConnMap.cameraMap;
@Slf4j
public class TaskDelayExecutor { public class TaskDelayExecutor {
private static ExecutorService exec = Executors.newFixedThreadPool(1); private static ExecutorService exec = Executors.newFixedThreadPool(20);
private static DelayQueue<CameraDelayTask> queue = new DelayQueue<>(); private static DelayQueue<CameraDelayTask> queue = new DelayQueue<>();
@ -45,33 +45,58 @@ public class TaskDelayExecutor {
public void run() { public void run() {
while (true) { while (true) {
try { try {
CameraControlModule cameraControlModule = SpringContextUtil.getBean(CameraControlModule.class); CameraControlModule cameraControlModule = SpringContextUtil.getBean(CameraControlModule.class);
CameraDelayTask cameraDelayTask = queue.take(); CameraDelayTask cameraDelayTask = queue.take();
if(cameraDelayTask != null){ if(cameraDelayTask != null){
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<?> future ;
if(cameraDelayTask.getType() == 0){ if(cameraDelayTask.getType() == 0){
for(int i = 0; i < 3; i++) { future = executor.submit(() -> {
if(cameraControlModule.downloadMp4(cameraDelayTask.getCameraId(), cameraDelayTask.getPath(), cameraDelayTask.getStartTime(), cameraDelayTask.getEndTime())){ if(cameraControlModule.downloadMp4(cameraDelayTask.getCameraId(), cameraDelayTask.getPath(), cameraDelayTask.getStartTime(), cameraDelayTask.getEndTime())) {
break; log.info("录像成功");
}else { } // 录像线程任务
cameraService.cameraConnect( cameraDelayTask.getCameraId()); });
} try {
future.get(15, TimeUnit.SECONDS); // 设置5秒超时
} catch (TimeoutException e) {
future.cancel(true); // 超时时取消任务
System.out.println("视频线程超时");
} }
}else if(cameraDelayTask.getType() == 1){ }else if(cameraDelayTask.getType() == 1){
for(int i = 0; i < 10; i++) { future = executor.submit(() -> {
if(cameraControlModule.pic(cameraDelayTask.getCameraId(), 0, cameraDelayTask.getPath())){ if(cameraControlModule.pic(cameraDelayTask.getCameraId(), 0, cameraDelayTask.getPath())){
break; log.info("拍照成功");
}else {
cameraService.cameraConnect( cameraDelayTask.getCameraId());
} }
});
try {
future.get(15, TimeUnit.SECONDS); // 设置5秒超时
} catch (TimeoutException e) {
future.cancel(true); // 超时时取消任务
System.out.println("拍照线程超时");
} }
}else if(cameraDelayTask.getType() == 2){ }else if(cameraDelayTask.getType() == 2){
cameraControlModule.toPtz(cameraDelayTask.getPtzId(),cameraDelayTask.getCameraId()); future = executor.submit(() -> {
cameraControlModule.toPtz(cameraDelayTask.getPtzId(),cameraDelayTask.getCameraId());
});
try {
future.get(15, TimeUnit.SECONDS); // 设置5秒超时
} catch (TimeoutException e) {
future.cancel(true); // 超时时取消任务
System.out.println("云台线程超时");
}
} }
} }
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); log.error("任务执行失败",e);
}catch (Exception e){
log.error("队列失败",e);
} }
} }
} }

@ -3,17 +3,27 @@ package com.zhehekeji.web.lib.hik;
import com.sun.jna.Pointer; import com.sun.jna.Pointer;
import com.zhehekeji.web.lib.CameraConnMap; import com.zhehekeji.web.lib.CameraConnMap;
import com.zhehekeji.web.lib.joyware.NetSDKLib; import com.zhehekeji.web.lib.joyware.NetSDKLib;
import com.zhehekeji.web.service.CameraService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import static com.zhehekeji.web.lib.hik.HikLoginModuleImpl.hcNetsdk;
@Slf4j @Slf4j
@Service
public class HikExceptionCallBack implements HCNetSDK.FExceptionCallBack { public class HikExceptionCallBack implements HCNetSDK.FExceptionCallBack {
@Resource
CameraService cameraService;
@Override @Override
public void invoke(int dwType, int lUserID, int lHandle, Pointer pUser) { public void invoke(int dwType, int lUserID, int lHandle, Pointer pUser) {
Integer cameraId =CameraConnMap.getCameraIdByLoginId(new NetSDKLib.LLong(lUserID)); Integer cameraId =CameraConnMap.getCameraIdByLoginId(new NetSDKLib.LLong(lUserID));
if(dwType == 32768){ if(dwType == 32768){
if(cameraId != null) { if(cameraId != null) {
log.error("hik disconnect,cameraId:{}", cameraId); log.error("hik disconnect,cameraId:{}", cameraId);
} }
}else if(dwType == 32791){ }else if(dwType == 32791){

@ -89,23 +89,24 @@ public class HikLoginModuleImpl implements CameraControlLoginModule {
m_strLoginInfo.bUseAsynLogin = true; //是否异步登录0- 否1- 是 m_strLoginInfo.bUseAsynLogin = true; //是否异步登录0- 否1- 是
m_strLoginInfo.write(); m_strLoginInfo.write();
HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo30 = new HCNetSDK.NET_DVR_DEVICEINFO_V30();//设备信息 HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo30 = new HCNetSDK.NET_DVR_DEVICEINFO_V30();//设备信息
////先注销,在登录 ////先注销,在登录
if (CameraConnMap.getConnId(cameraId) !=null ) { if (CameraConnMap.getConnId(cameraId) !=null ) {
if(hcNetsdk.NET_DVR_Logout_V30(CameraConnMap.getConnId(cameraId).intValue())) { if(hcNetsdk.NET_DVR_Logout_V30(CameraConnMap.getConnId(cameraId).intValue())) {
log.error("hik logout error,ip:{},port:{},errorCode:{}", m_strIp, m_nPort, hcNetsdk.NET_DVR_GetLastError()); log.error("hik cameraId:{}注销",cameraId);
}else {
CameraConnMap.disConn(cameraId);
} }
} }
CameraConnMap.disConn(cameraId);
int m_lUserID = hcNetsdk.NET_DVR_Login_V40(m_strLoginInfo,m_strDeviceInfo); int m_lUserID = hcNetsdk.NET_DVR_Login_V40(m_strLoginInfo,m_strDeviceInfo);
int lChannel = 2; int lChannel = 2;
//byStartDChan为IP通道起始通道号, 预览回放NVR的IP通道时需要根据起始通道号进行取值 //byStartDChan为IP通道起始通道号, 预览回放NVR的IP通道时需要根据起始通道号进行取值
int tryTimes = 0; int tryTimes = 0;
while(m_lUserID < 0 && tryTimes < MAX_RECONNET_TIME){ while(m_lUserID < 0 && tryTimes < MAX_RECONNET_TIME){
log.error("hik login error,ip:{},port:{},errorCode:{}",m_strIp,m_nPort,hcNetsdk.NET_DVR_GetLastError()); log.error("hik login error,ip:{},port:{},errorCode:{}",m_strIp,m_nPort,hcNetsdk.NET_DVR_GetLastError());

@ -14,7 +14,7 @@ public class StockCheck {
// private String shelveId; // private String shelveId;
private Integer streetId; private Integer streetId;
private Integer streetPlc; private String streetPlc;
private Integer direction; private Integer direction;

@ -117,9 +117,6 @@ public class CronTab {
List<Camera> cameras = cameraMapper.selectList(new QueryWrapper<>()); List<Camera> cameras = cameraMapper.selectList(new QueryWrapper<>());
for (Camera camera : cameras){ for (Camera camera : cameras){
Boolean ok = false; Boolean ok = false;
if (CameraConnMap.getConnId(camera.getId()) !=null){
cameraService.cameraLogin(camera);
}
if(configProperties.getCameraConfig().getCameraType() == ConfigProperties.HIK_CAMERA ){ if(configProperties.getCameraConfig().getCameraType() == ConfigProperties.HIK_CAMERA ){
ok = HikLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId()).intValue()); ok = HikLoginModuleImpl.connectStatus(CameraConnMap.getConnId(camera.getId()).intValue());
}else { }else {
@ -128,10 +125,6 @@ public class CronTab {
if(ok){ if(ok){
cameraControlModule.setCameraTime(camera.getId()); cameraControlModule.setCameraTime(camera.getId());
}else {
CameraConnMap.disConn(camera.getId());
camera.setStatus("未连接");
cameraService.cameraLogin(camera);
} }
} }
} }

Loading…
Cancel
Save