fuliqi
2024-11-05 3dc714284a95fe9677a964ec039b2b547547e30d
ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java
@@ -1,6 +1,7 @@
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;
@@ -8,13 +9,21 @@
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;
@@ -39,15 +48,15 @@
    private final DeviceInfoMapper deviceInfoMapper;
    private final WorkOrderCheckImgMapper workOrderCheckImgMapper;
    private static final ExecutorService executorService = new ThreadPoolExecutor(16,
            32,
            5000,
            TimeUnit.SECONDS,
            new ArrayBlockingQueue<>(1000),
            new ThreadPoolExecutor.CallerRunsPolicy()
    );
//    private static final ExecutorService executorService = new ThreadPoolExecutor(8,
//            10,
//            5000,
//            TimeUnit.SECONDS,
//            new ArrayBlockingQueue<>(1024),
//            new ThreadPoolExecutor.CallerRunsPolicy()
//    );
    public void run() {
    public void run() throws FFmpegFrameGrabber.Exception {
        // 查出最近一周的故障的设备
        Date now = new Date();
        Calendar ca = Calendar.getInstance();
@@ -57,6 +66,7 @@
        if (CollectionUtils.isEmpty(deviceList)) {
            return;
        }
        log.info("此次共检测工单图片工单数" + deviceList.size());
        // 查出国标设备,就一条数据
        List<DeviceInfo> gbDevices = new LambdaQueryChainWrapper<>(deviceInfoMapper)
                .orderByDesc(DeviceInfo::getUpdateTime)
@@ -66,19 +76,22 @@
            return;
        }
        for (DeviceInfoVO deviceInfo : deviceList) {
            executorService.submit(() -> {
                // 国标设备的编码就是取视频流的设备编码,国标设备就一个。国标设备的每一个通道代表一个摄像头,也就是设备id是取流的通道id
                String frameImg = workOrderService.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), deviceInfo.getDeviceId(), deviceInfo.getWorkOrderNo());
                if (StringUtils.hasText(frameImg)) {
                    WorkOrderCheckImg img = new WorkOrderCheckImg();
                    img.setWorkOrderNo(deviceInfo.getWorkOrderNo());
                    img.setImgUrl(frameImg);
                    img.setCreateTime(new Date());
                    workOrderCheckImgMapper.insert(img);
                }
            });
            // 国标设备的编码就是取视频流的设备编码,国标设备就一个。国标设备的每一个通道代表一个摄像头,也就是设备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);
            }
        }
        executorService.shutdown();
    }
}