package com.ycl.task;
|
|
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
import com.ycl.config.PlatformConfig;
|
import com.ycl.platform.domain.entity.DeviceInfo;
|
import com.ycl.platform.domain.entity.WorkOrderCheckImg;
|
import com.ycl.platform.domain.vo.DeviceInfoVO;
|
import com.ycl.platform.mapper.DeviceInfoMapper;
|
import com.ycl.platform.mapper.WorkOrderCheckImgMapper;
|
import com.ycl.platform.service.WorkOrderService;
|
import com.ycl.utils.DateUtils;
|
import com.ycl.utils.uuid.IdUtils;
|
import constant.Constants;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.bytedeco.javacv.FFmpegFrameGrabber;
|
import org.bytedeco.javacv.Frame;
|
import org.bytedeco.javacv.Java2DFrameConverter;
|
import org.springframework.stereotype.Component;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.StringUtils;
|
|
import javax.imageio.ImageIO;
|
import java.awt.image.BufferedImage;
|
import java.io.File;
|
import java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.Calendar;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.concurrent.ArrayBlockingQueue;
|
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ThreadPoolExecutor;
|
import java.util.concurrent.TimeUnit;
|
|
/**
|
* 工单恢复图片获取
|
*
|
* @author:xp
|
* @date:2024/8/21 11:56
|
*/
|
@Slf4j
|
@RequiredArgsConstructor
|
@Component("workOrderImgTask")
|
public class WorkOrderImgTask {
|
|
private final WorkOrderService workOrderService;
|
private final DeviceInfoMapper deviceInfoMapper;
|
private final WorkOrderCheckImgMapper workOrderCheckImgMapper;
|
|
// private static final ExecutorService executorService = new ThreadPoolExecutor(8,
|
// 10,
|
// 5000,
|
// TimeUnit.SECONDS,
|
// new ArrayBlockingQueue<>(1024),
|
// new ThreadPoolExecutor.CallerRunsPolicy()
|
// );
|
|
public void run() throws FFmpegFrameGrabber.Exception {
|
// String rtspUrl = "http://www.w3school.com.cn/i/movie.mp4";
|
// if (StringUtils.hasText(rtspUrl)) {
|
// FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(rtspUrl);
|
// try {
|
//// grabber.setOption("rtsp_transport", "tcp"); // 使用tcp的方式,不然会丢包很严重
|
// grabber.setImageWidth(1920);
|
// grabber.setImageHeight(1080);
|
// grabber.setFrameRate(25);
|
// grabber.start();
|
// System.out.println("成功");
|
// Frame frame = grabber.grabImage();
|
// String imgUrl = null;
|
// if (frame != null) {
|
// System.out.println("成功2");
|
// //转换图像
|
// Java2DFrameConverter converter = new Java2DFrameConverter();
|
// BufferedImage srcImage = converter.getBufferedImage(frame);
|
// System.out.println(srcImage);
|
// if (srcImage != null) {
|
// imgUrl = IdUtils.fastSimpleUUID() + ".png";
|
// // 生成图片路径
|
// String imgPath = "/" + imgUrl;
|
// System.out.println("图片保存地址:" + imgPath);
|
//// imgUrl = Constants.RESOURCE_PREFIX + "/" + imgUrl;
|
// //创建文件
|
// File file = new File("D:\\Codes\\zgyw\\"+imgUrl);
|
// //输出文件
|
// ImageIO.write(srcImage, "png", file);
|
// }
|
// }
|
// } catch (IOException e) {
|
// e.printStackTrace();
|
// } finally {
|
// grabber.stop(); // 停止捕获
|
//// grabber.close(); // 释放资源
|
// }
|
// }
|
|
// 查出最近一周的故障的设备
|
Date now = new Date();
|
Calendar ca = Calendar.getInstance();
|
ca.setTime(now);
|
ca.add(Calendar.DATE, -6);
|
List<DeviceInfoVO> deviceList = workOrderService.hasErrorWorkOrderList(DateUtils.getDayStart(ca.getTime()), DateUtils.getDayEnd(now));
|
if (CollectionUtils.isEmpty(deviceList)) {
|
return;
|
}
|
log.info("此次共检测工单图片工单数" + deviceList.size());
|
// 查出国标设备,就一条数据
|
List<DeviceInfo> gbDevices = new LambdaQueryChainWrapper<>(deviceInfoMapper)
|
.orderByDesc(DeviceInfo::getUpdateTime)
|
.last("limit 1")
|
.list();
|
if (CollectionUtils.isEmpty(gbDevices)) {
|
return;
|
}
|
for (DeviceInfoVO deviceInfo : deviceList) {
|
// 国标设备的编码就是取视频流的设备编码,国标设备就一个。国标设备的每一个通道代表一个摄像头,也就是设备id是取流的通道id
|
String frameImg = null;
|
try {
|
frameImg = workOrderService.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), deviceInfo.getDeviceId(), deviceInfo.getWorkOrderNo());
|
} catch (Exception e) {
|
e.printStackTrace();
|
continue;
|
}
|
if (StringUtils.hasText(frameImg)) {
|
WorkOrderCheckImg img = new WorkOrderCheckImg();
|
img.setWorkOrderNo(deviceInfo.getWorkOrderNo());
|
img.setImgUrl(frameImg);
|
img.setCreateTime(new Date());
|
workOrderCheckImgMapper.insert(img);
|
}
|
} }
|
|
}
|