|
|
|
@ -6,6 +6,9 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
import java.util.concurrent.*;
|
|
|
|
import java.util.concurrent.*;
|
|
|
|
|
|
|
|
import java.util.function.Consumer;
|
|
|
|
|
|
|
|
import java.util.function.Function;
|
|
|
|
|
|
|
|
import java.util.function.Predicate;
|
|
|
|
|
|
|
|
|
|
|
|
import static com.zhehekeji.web.lib.CameraConnMap.cameraMap;
|
|
|
|
import static com.zhehekeji.web.lib.CameraConnMap.cameraMap;
|
|
|
|
|
|
|
|
|
|
|
|
@ -13,7 +16,6 @@ import static com.zhehekeji.web.lib.CameraConnMap.cameraMap;
|
|
|
|
public class TaskDelayExecutor {
|
|
|
|
public class TaskDelayExecutor {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static ExecutorService exec = Executors.newFixedThreadPool(20);
|
|
|
|
private static ExecutorService exec = Executors.newFixedThreadPool(20);
|
|
|
|
|
|
|
|
|
|
|
|
private static DelayQueue<CameraDelayTask> queue = new DelayQueue<>();
|
|
|
|
private static DelayQueue<CameraDelayTask> queue = new DelayQueue<>();
|
|
|
|
@ -33,13 +35,15 @@ public class TaskDelayExecutor {
|
|
|
|
cameraDelayTask.setPtzId(ptzId);
|
|
|
|
cameraDelayTask.setPtzId(ptzId);
|
|
|
|
queue.add(cameraDelayTask);
|
|
|
|
queue.add(cameraDelayTask);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private static CameraService cameraService = SpringContextUtil.getBean(CameraService.class);
|
|
|
|
private static CameraService cameraService = SpringContextUtil.getBean(CameraService.class);
|
|
|
|
|
|
|
|
|
|
|
|
public static void runMp4DownloadExecutor() {
|
|
|
|
public static void runMp4DownloadExecutor() {
|
|
|
|
|
|
|
|
|
|
|
|
exec.execute(new Consumer());
|
|
|
|
exec.execute(new ConsumerTask());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private static class Consumer implements Runnable {
|
|
|
|
private static class ConsumerTask implements Runnable {
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
public void run() {
|
|
|
|
@ -47,49 +51,33 @@ public class TaskDelayExecutor {
|
|
|
|
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) {
|
|
|
|
future = executor.submit(() -> {
|
|
|
|
|
|
|
|
if(cameraControlModule.downloadMp4(cameraDelayTask.getCameraId(), cameraDelayTask.getPath(), cameraDelayTask.getStartTime(), cameraDelayTask.getEndTime())) {
|
|
|
|
foreach(s->{
|
|
|
|
log.info("录像成功");
|
|
|
|
return cameraControlModule.downloadMp4(cameraDelayTask.getCameraId(), cameraDelayTask.getPath(), cameraDelayTask.getStartTime(), cameraDelayTask.getEndTime());
|
|
|
|
} // 录像线程任务
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
|
|
|
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) {
|
|
|
|
future = executor.submit(() -> {
|
|
|
|
//
|
|
|
|
if(cameraControlModule.pic(cameraDelayTask.getCameraId(), 0, cameraDelayTask.getPath())){
|
|
|
|
// if (cameraControlModule.pic(cameraDelayTask.getCameraId(), 0, cameraDelayTask.getPath())) {
|
|
|
|
log.info("拍照成功");
|
|
|
|
// log.info("拍照成功");
|
|
|
|
}
|
|
|
|
// }
|
|
|
|
|
|
|
|
foreach(s->{
|
|
|
|
|
|
|
|
return cameraControlModule.pic(cameraDelayTask.getCameraId(), 0, cameraDelayTask.getPath());
|
|
|
|
});
|
|
|
|
});
|
|
|
|
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) {
|
|
|
|
future = executor.submit(() -> {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cameraControlModule.toPtz(cameraDelayTask.getPtzId(),cameraDelayTask.getCameraId());
|
|
|
|
foreach(s->{
|
|
|
|
|
|
|
|
return cameraControlModule.toPtz(cameraDelayTask.getPtzId(), cameraDelayTask.getCameraId());
|
|
|
|
});
|
|
|
|
});
|
|
|
|
try {
|
|
|
|
;
|
|
|
|
future.get(15, TimeUnit.SECONDS); // 设置5秒超时
|
|
|
|
|
|
|
|
} catch (TimeoutException e) {
|
|
|
|
|
|
|
|
future.cancel(true); // 超时时取消任务
|
|
|
|
|
|
|
|
System.out.println("云台线程超时");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -98,7 +86,25 @@ public class TaskDelayExecutor {
|
|
|
|
} catch (Exception e) {
|
|
|
|
} catch (Exception e) {
|
|
|
|
log.error("队列失败", e);
|
|
|
|
log.error("队列失败", e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void foreach(Predicate<String> predicate){
|
|
|
|
|
|
|
|
int i = 0;
|
|
|
|
|
|
|
|
while (i<5){
|
|
|
|
|
|
|
|
if(predicate.test("")){
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
Thread.sleep(300);
|
|
|
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.info("任务成功");
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
System.out.printf("未成功");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|