fuliqi
2025-02-06 7c23177f6a10c43479e0fb77ac53664ba0c0f9f3
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(8,
            10,
    private static final ExecutorService executorService = new ThreadPoolExecutor(16,
            128,
            5000,
            TimeUnit.SECONDS,
            new ArrayBlockingQueue<>(1024),
            new ArrayBlockingQueue<>(1000),
            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)
@@ -68,7 +78,12 @@
        for (DeviceInfoVO deviceInfo : deviceList) {
            executorService.submit(() -> {
                // 国标设备的编码就是取视频流的设备编码,国标设备就一个。国标设备的每一个通道代表一个摄像头,也就是设备id是取流的通道id
                String frameImg = workOrderService.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), deviceInfo.getDeviceId(), deviceInfo.getWorkOrderNo());
                String frameImg = null;
                try {
                    frameImg = workOrderService.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), deviceInfo.getDeviceId(), deviceInfo.getWorkOrderNo());
                } catch (Exception e) {
                    e.printStackTrace();
                }
                if (StringUtils.hasText(frameImg)) {
                    WorkOrderCheckImg img = new WorkOrderCheckImg();
                    img.setWorkOrderNo(deviceInfo.getWorkOrderNo());
@@ -78,6 +93,7 @@
                }
            });
        }
        log.info("工单检测图片结束");
    }
}