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

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

@ -337,9 +337,7 @@ public class CameraControlController {
if (CameraConnMap.getConnId(cameraId) != null) {
Camera camera = cameraMapper.selectById(cameraId);
if (CameraConnMap.getConnId(cameraId)!=null){
cameraService.cameraLogin(camera);
}
Boolean ok = false;
if (configProperties.getCameraConfig().getCameraType() == ConfigProperties.HIK_CAMERA) {
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.web.service.CameraService;
import lombok.extern.slf4j.Slf4j;
import java.time.LocalDateTime;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.*;
import static com.zhehekeji.web.lib.CameraConnMap.cameraMap;
@Slf4j
public class TaskDelayExecutor {
private static ExecutorService exec = Executors.newFixedThreadPool(1);
private static ExecutorService exec = Executors.newFixedThreadPool(20);
private static DelayQueue<CameraDelayTask> queue = new DelayQueue<>();
@ -45,33 +45,58 @@ public class TaskDelayExecutor {
public void run() {
while (true) {
try {
CameraControlModule cameraControlModule = SpringContextUtil.getBean(CameraControlModule.class);
CameraDelayTask cameraDelayTask = queue.take();
if(cameraDelayTask != null){
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<?> future ;
if(cameraDelayTask.getType() == 0){
for(int i = 0; i < 3; i++) {
if(cameraControlModule.downloadMp4(cameraDelayTask.getCameraId(), cameraDelayTask.getPath(), cameraDelayTask.getStartTime(), cameraDelayTask.getEndTime())){
break;
}else {
cameraService.cameraConnect( cameraDelayTask.getCameraId());
}
future = executor.submit(() -> {
if(cameraControlModule.downloadMp4(cameraDelayTask.getCameraId(), cameraDelayTask.getPath(), cameraDelayTask.getStartTime(), cameraDelayTask.getEndTime())) {
log.info("录像成功");
} // 录像线程任务
});
try {
future.get(15, TimeUnit.SECONDS); // 设置5秒超时
} catch (TimeoutException e) {
future.cancel(true); // 超时时取消任务
System.out.println("视频线程超时");
}
}else if(cameraDelayTask.getType() == 1){
for(int i = 0; i < 10; i++) {
future = executor.submit(() -> {
if(cameraControlModule.pic(cameraDelayTask.getCameraId(), 0, cameraDelayTask.getPath())){
break;
}else {
cameraService.cameraConnect( cameraDelayTask.getCameraId());
log.info("拍照成功");
}
});
try {
future.get(15, TimeUnit.SECONDS); // 设置5秒超时
} catch (TimeoutException e) {
future.cancel(true); // 超时时取消任务
System.out.println("拍照线程超时");
}
}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) {
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.zhehekeji.web.lib.CameraConnMap;
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;
import static com.zhehekeji.web.lib.hik.HikLoginModuleImpl.hcNetsdk;
@Slf4j
@Service
public class HikExceptionCallBack implements HCNetSDK.FExceptionCallBack {
@Resource
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){
if(cameraId != null) {
log.error("hik disconnect,cameraId:{}", cameraId);
}
}else if(dwType == 32791){

@ -89,23 +89,24 @@ 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 logout error,ip:{},port:{},errorCode:{}", m_strIp, m_nPort, hcNetsdk.NET_DVR_GetLastError());
}else {
CameraConnMap.disConn(cameraId);
log.error("hik cameraId:{}注销",cameraId);
}
}
CameraConnMap.disConn(cameraId);
int m_lUserID = hcNetsdk.NET_DVR_Login_V40(m_strLoginInfo,m_strDeviceInfo);
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());

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

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

Loading…
Cancel
Save