fuliqi
2024-08-29 c1ade366428ade752213c196f3c76b49020a9839
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -38,6 +38,7 @@
import com.ycl.utils.http.HttpUtils;
import com.ycl.utils.redis.RedisCache;
import com.ycl.utils.uuid.IdUtils;
import constant.Constants;
import enumeration.general.NotifyTypeEnum;
import enumeration.general.UrgentLevelEnum;
import enumeration.general.WorkOrderDistributeWayEnum;
@@ -132,7 +133,7 @@
        for (WorkOrder workOrder : workOrderList) {
            WorkOrder databaseWorkOrder = mapping.get(workOrder.getSerialNumber());
            if (Objects.nonNull(databaseWorkOrder)) {
                List<String> errorNameList = workOrderErrorTypeService.getBaseMapper().getNotFinishWorkOrderErrors(workOrder.getWorkOrderNo());
                List<String> errorNameList = workOrderErrorTypeService.getBaseMapper().getNotFinishWorkOrderErrors(databaseWorkOrder.getWorkOrderNo());
                List<String> errorTypes = workOrder.getErrorTypeList();
                if (errorNameList.containsAll(errorTypes)) {
                    // 如果,国标码、故障类型都一样,则跳过不处理
@@ -179,6 +180,7 @@
        if (willAddMsg.size() > 0) {
            workOrderYwConditionRecordMapper.insertMany(willAddMsg);
        }
        log.info("将要更新的工单数:" + willUpdateStatusWorkOrderList.size());
        if (willUpdateStatusWorkOrderList.size() > 0) {
            this.baseMapper.updateMany(willUpdateStatusWorkOrderList);
        }
@@ -663,35 +665,32 @@
    @Override
    public String getFrameImgByDevice(String deviceId, String channelId) throws FFmpegFrameGrabber.Exception {
    public String getFrameImgByDevice(String deviceId, String channelId, String workOrderNo) {
        String url = String.format(this.rtspServer + "/api/play/start/%s/%s", deviceId, channelId);
        String result = HttpUtils.sendGet(url);
// 假设WVPResult是正确解析响应的类
        WVPResult wvpResult = JSON.parseObject(result, WVPResult.class);
        String imgUrl = null;
        if (wvpResult.getCode() == 0) {
            System.out.println("请求成功");
            JSONObject data = (JSONObject) wvpResult.getData();
            String rtspUrl = data.getString("fmp4"); // 注意:通常RTSP URL不会以"fmp4"结尾,这里可能是特定API的返回格式
            String rtspUrl = data.getString("fmp4"); // 取mp4地址
            if (StringUtils.hasText(rtspUrl)) {
                System.out.println("目标地址:" + rtspUrl);
                FFmpegFrameGrabber grabber = null;
                try {
                    grabber = FFmpegFrameGrabber.createDefault(rtspUrl);
                    grabber.start();
                    Frame frame = grabber.grabImage(); // 直接捕获一帧
                    if (frame != null) {
                        System.out.println("成功捕获一帧");
                        // 将Frame转换为Mat
                        OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();
                        Mat mat = converter.convertToMat(frame);
                        imgUrl = workOrderNo + "_" + IdUtils.fastSimpleUUID() + ".png";
                        // 生成图片路径
                        String imgPath = PlatformConfig.getUploadPath() + deviceId + IdUtils.fastSimpleUUID() + ".png";
                        System.out.println("图片地址:" + imgPath);
                        String imgPath = PlatformConfig.getUploadPath() + "/" + imgUrl;
                        System.out.println("图片保存地址:" + imgPath);
                        imgUrl = Constants.RESOURCE_PREFIX + "/" + imgUrl;
                        // 保存图片
                        opencv_imgcodecs.imwrite(imgPath, mat);
                    } else {
@@ -714,8 +713,8 @@
        } else {
            System.out.println("请求失败,错误码:" + wvpResult.getCode());
        }
        return null;
        System.out.println("图片URL:" + imgUrl);
        return imgUrl;
    }
    @Override
@@ -728,6 +727,7 @@
    public void updateImgById(Integer workOrderId, String imgPath) {
        new LambdaUpdateChainWrapper<>(baseMapper)
                .eq(WorkOrder::getId, workOrderId)
                .set(WorkOrder::getYwCheckResult, imgPath);
                .set(WorkOrder::getYwCheckResult, imgPath)
                .update();
    }
}