|
|
|
|
@ -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){
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|