From 20cb77a694165a034547c9a73379055811a71271 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LAPTOP-S9HJSOEB=5C=E6=98=8A=E5=A4=A9?= Date: Fri, 17 May 2024 11:28:59 +0800 Subject: [PATCH] =?UTF-8?q?=E7=90=83=E6=9C=BA=E7=BB=8F=E5=B8=B8=E6=96=AD?= =?UTF-8?q?=E8=BF=9E=E4=BF=AE=E6=94=B9=EF=BC=8C=E9=98=9F=E5=88=97=E5=B4=A9?= =?UTF-8?q?=E6=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CameraControlController.java | 4 +- .../zhehekeji/web/lib/TaskDelayExecutor.java | 57 +++++++++++++------ .../web/lib/hik/HikExceptionCallBack.java | 10 ++++ .../web/lib/hik/HikLoginModuleImpl.java | 9 +-- .../zhehekeji/web/pojo/stock/StockCheck.java | 2 +- .../com/zhehekeji/web/service/CronTab.java | 7 --- 6 files changed, 58 insertions(+), 31 deletions(-) diff --git a/web/src/main/java/com/zhehekeji/web/controller/CameraControlController.java b/web/src/main/java/com/zhehekeji/web/controller/CameraControlController.java index 31c4acd..01c8535 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/CameraControlController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/CameraControlController.java @@ -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()); diff --git a/web/src/main/java/com/zhehekeji/web/lib/TaskDelayExecutor.java b/web/src/main/java/com/zhehekeji/web/lib/TaskDelayExecutor.java index 379d263..01ce7f3 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/TaskDelayExecutor.java +++ b/web/src/main/java/com/zhehekeji/web/lib/TaskDelayExecutor.java @@ -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 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); } } } diff --git a/web/src/main/java/com/zhehekeji/web/lib/hik/HikExceptionCallBack.java b/web/src/main/java/com/zhehekeji/web/lib/hik/HikExceptionCallBack.java index 1d47d9a..11232ae 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/hik/HikExceptionCallBack.java +++ b/web/src/main/java/com/zhehekeji/web/lib/hik/HikExceptionCallBack.java @@ -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){ 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 06976de..3e86698 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 @@ -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()); diff --git a/web/src/main/java/com/zhehekeji/web/pojo/stock/StockCheck.java b/web/src/main/java/com/zhehekeji/web/pojo/stock/StockCheck.java index 6e8267c..3fb25e2 100644 --- a/web/src/main/java/com/zhehekeji/web/pojo/stock/StockCheck.java +++ b/web/src/main/java/com/zhehekeji/web/pojo/stock/StockCheck.java @@ -14,7 +14,7 @@ public class StockCheck { // private String shelveId; private Integer streetId; - private Integer streetPlc; + private String streetPlc; private Integer direction; diff --git a/web/src/main/java/com/zhehekeji/web/service/CronTab.java b/web/src/main/java/com/zhehekeji/web/service/CronTab.java index 9b926d0..6c8c687 100644 --- a/web/src/main/java/com/zhehekeji/web/service/CronTab.java +++ b/web/src/main/java/com/zhehekeji/web/service/CronTab.java @@ -117,9 +117,6 @@ public class CronTab { List 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); } } }