|
@@ -7,6 +7,7 @@ import java.nio.file.Paths;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.mybatisflex.core.paginate.Page;
|
|
@@ -60,6 +61,8 @@ public class Video2imageServiceImpl extends BaseServiceImpl<Video2imageMapper, V
|
|
|
return super.query().from(VIDEO2IMAGE);
|
|
|
}
|
|
|
|
|
|
+ public Map<Long, Thread> threads = new java.util.concurrent.ConcurrentHashMap();
|
|
|
+
|
|
|
private QueryWrapper buildQueryWrapper(Video2imageBo video2imageBo) {
|
|
|
QueryWrapper queryWrapper = super.buildBaseQueryWrapper();
|
|
|
queryWrapper.and(VIDEO2IMAGE.NAME.like
|
|
@@ -74,9 +77,9 @@ public class Video2imageServiceImpl extends BaseServiceImpl<Video2imageMapper, V
|
|
|
(video2imageBo.getEndTime()));
|
|
|
queryWrapper.and(VIDEO2IMAGE.COST_SECOND.eq
|
|
|
(video2imageBo.getCostSecond()));
|
|
|
- queryWrapper.and(VIDEO2IMAGE.LOG.eq
|
|
|
+ queryWrapper.and(VIDEO2IMAGE.LOG.like
|
|
|
(video2imageBo.getLog()));
|
|
|
- queryWrapper.and(VIDEO2IMAGE.REMARKS.eq
|
|
|
+ queryWrapper.and(VIDEO2IMAGE.REMARKS.like
|
|
|
(video2imageBo.getRemarks()));
|
|
|
queryWrapper.and(VIDEO2IMAGE.PATH.eq
|
|
|
(video2imageBo.getPath()));
|
|
@@ -197,9 +200,9 @@ public class Video2imageServiceImpl extends BaseServiceImpl<Video2imageMapper, V
|
|
|
}
|
|
|
|
|
|
|
|
|
- public void updateStatusToEnd(Long id, String log) {
|
|
|
+ public void updateStatus(Long id, String log, String status) {
|
|
|
Video2image video2image = this.getById(id);
|
|
|
- video2image.setStatus(END);
|
|
|
+ video2image.setStatus(status);
|
|
|
video2image.setLog(log);
|
|
|
video2image.setEndTime(new Date());
|
|
|
video2image.setCostSecond((video2image.getEndTime().getTime() - video2image.getStartTime().getTime()) / 1000);
|
|
@@ -231,15 +234,21 @@ public class Video2imageServiceImpl extends BaseServiceImpl<Video2imageMapper, V
|
|
|
|
|
|
video2image.setStatus(RUNNING);
|
|
|
video2image.setStartTime(new Date());
|
|
|
+ video2image.setEndTime(null);
|
|
|
+ video2image.setCostSecond(null);
|
|
|
+ video2image.setLog("");
|
|
|
this.updateById(video2image);
|
|
|
|
|
|
- new Thread(() -> {
|
|
|
+
|
|
|
+ Thread thread__ = new Thread(() -> {
|
|
|
String log_str = "";
|
|
|
log.info("开始截取图片子线程...");
|
|
|
log.info("开始截取图片...");
|
|
|
|
|
|
log_str += "开始截取图片子线程...\n";
|
|
|
log_str += "开始截取图片...\n";
|
|
|
+ boolean success = false;
|
|
|
+ boolean interrupted = false;
|
|
|
try {
|
|
|
VideoCapture.startCaputreFromUrl(videoPath, outPath, fps);
|
|
|
log.info("视频转图片结束...");
|
|
@@ -252,14 +261,36 @@ public class Video2imageServiceImpl extends BaseServiceImpl<Video2imageMapper, V
|
|
|
|
|
|
log_str += "压缩图片成功...\n";
|
|
|
log.info("压缩图片成功...");
|
|
|
+ success = true;
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ log_str += "视频转图片子线程中断...\n" + e.getMessage() + "\n";
|
|
|
+ log.error("视频转图片子线程中断...", e);
|
|
|
+ interrupted = true;
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
- log_str += "视频转图片出现位置错误...\n" + e.getMessage() + "\n";
|
|
|
- log.error("视频转图片出现位置错误...", e);
|
|
|
+ log_str += "视频转图片出现未知错误...\n" + e.getMessage() + "\n";
|
|
|
+ log.error("视频转图片出现未知错误...", e);
|
|
|
+ } finally {
|
|
|
+ if (success) {
|
|
|
+ System.out.println("更新状态为结束");
|
|
|
+ updateStatus(id, log_str, END);
|
|
|
+ } else if (interrupted) {
|
|
|
+ System.out.println("更新状态为中断");
|
|
|
+ updateStatus(id, log_str, INTERRUPTED); // 子线程中断,更新状态为结束
|
|
|
+ } else {
|
|
|
+ System.out.println("更新状态为失败");
|
|
|
+ updateStatus(id, log_str, FAILED); // 子线程中断,更新状态为结束
|
|
|
+ }
|
|
|
+ log.info("视频转图片子线程结束...");
|
|
|
+
|
|
|
+ threads.remove(id);
|
|
|
}
|
|
|
- updateStatusToEnd(id, log_str);
|
|
|
- log.info("视频转图片子线程结束...");
|
|
|
- }).start();
|
|
|
+ });
|
|
|
+
|
|
|
+ threads.put(id, thread__);
|
|
|
+
|
|
|
+ thread__.start();
|
|
|
|
|
|
return true;
|
|
|
}
|
|
@@ -286,4 +317,29 @@ public class Video2imageServiceImpl extends BaseServiceImpl<Video2imageMapper, V
|
|
|
.header(HttpHeaders.CONTENT_TYPE, "application/octet-stream")
|
|
|
.body(resource);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean stopToImage(Long id) {
|
|
|
+ if (threads.containsKey(id)) {
|
|
|
+ Thread thread = threads.get(id);
|
|
|
+ System.out.println("--------------------1");
|
|
|
+
|
|
|
+ System.out.println("stopToImage..." + thread.toString() + " " + thread.isAlive());
|
|
|
+ if (ObjectUtil.isNotNull(thread)) {
|
|
|
+ System.out.println("--------------------2");
|
|
|
+
|
|
|
+ thread.interrupt();
|
|
|
+ try {
|
|
|
+ Thread.sleep(1000);
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ System.out.println("stopToImage..." + thread.toString() + " " + thread.isAlive());
|
|
|
+ threads.remove(id);
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|