From 3456ced921bf136035047b24702891f8b4f260ba Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期四, 29 八月 2024 10:40:27 +0800
Subject: [PATCH] 新增工单检测图片表

---
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DeviceInfoVO.java              |    3 +
 ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderCheckImgMapper.java    |   27 +++++++++
 ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml                    |    1 
 ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java                      |   19 ++++--
 ycl-pojo/src/main/java/com/ycl/platform/domain/entity/WorkOrderCheckImg.java     |   32 ++++++++++
 ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java |   23 +++----
 ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java          |    9 +-
 ycl-server/src/main/resources/mapper/zgyw/WorkOrderCheckImgMapper.xml            |   14 ++++
 8 files changed, 105 insertions(+), 23 deletions(-)

diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/WorkOrderCheckImg.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/WorkOrderCheckImg.java
new file mode 100644
index 0000000..e0bfc64
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/WorkOrderCheckImg.java
@@ -0,0 +1,32 @@
+package com.ycl.platform.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 宸ュ崟妫�娴嬪浘鐗�
+ *
+ * @author锛歺p
+ * @date锛�2024/8/29 10:22
+ */
+@Data
+@TableName("t_work_order_check_img")
+public class WorkOrderCheckImg {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("work_order_no")
+    private String workOrderNo;
+
+    @TableField("img_url")
+    private String imgUrl;
+
+    @TableField("create_time")
+    private Date createTime;
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DeviceInfoVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DeviceInfoVO.java
index bcb6362..91455f1 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DeviceInfoVO.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DeviceInfoVO.java
@@ -19,6 +19,9 @@
     /** 宸ュ崟ID */
     private Integer workOrderId;
 
+    /** 宸ュ崟鍙� */
+    private String workOrderNo;
+
     /** 璁惧缂栧彿/鍥芥爣鐮� */
     private String deviceId;
 
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderCheckImgMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderCheckImgMapper.java
new file mode 100644
index 0000000..fbc6287
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderCheckImgMapper.java
@@ -0,0 +1,27 @@
+package com.ycl.platform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.platform.domain.entity.CalculateMoneyRule;
+import com.ycl.platform.domain.entity.WorkOrderCheckImg;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 宸ュ崟鍥剧墖妫�娴�
+ *
+ * @author xp
+ * @since 2024-04-26
+ */
+@Mapper
+public interface WorkOrderCheckImgMapper extends BaseMapper<WorkOrderCheckImg> {
+
+    /**
+     * 鎵归噺鎻掑叆
+     * @param list
+     */
+    void insertMany(@Param("list") List<WorkOrderCheckImg> list);
+
+
+}
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java b/ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java
index 6acfa37..4a2bca7 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java
@@ -181,11 +181,12 @@
     /**
      * 宸ュ崟璁惧鐐规挱鑾峰彇涓�甯у浘鐗�
      *
-     * @param deviceId 璁惧鍥芥爣鐮�
-     * @param channelId 璁惧閫氶亾缂栧彿
+     * @param deviceId 鍥芥爣璁惧鍥芥爣鐮�
+     * @param channelId 璁惧閫氶亾缂栧彿锛堣澶囧浗鏍囩爜锛�
+     * @param workOrderNo 宸ュ崟鍙�
      * @return 鏁版嵁
      */
-    String getFrameImgByDevice(String deviceId, String channelId) throws FFmpegFrameGrabber.Exception;
+    String getFrameImgByDevice(String deviceId, String channelId, String workOrderNo);
 
     /**
      * 鏌ヨ宸ュ崟锛氬凡涓嬪彂銆佸凡澶勭悊銆佸凡瀹屾垚鐨勫伐鍗�
@@ -195,7 +196,7 @@
     List<DeviceInfoVO> hasErrorWorkOrderList();
 
     /**
-     * 鏌ヨ宸ュ崟锛氬凡涓嬪彂銆佸凡澶勭悊銆佸凡瀹屾垚鐨勫伐鍗�
+     * 鏇存柊宸ュ崟鍥剧墖
      *
      * @param workOrderId 宸ュ崟ID
      * @param imgPath 鍥惧儚鍦板潃
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
index a389e0d..7292182 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
+++ b/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;
@@ -663,35 +664,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鐨勮繑鍥炴牸寮�
             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("鎴愬姛鎹曡幏涓�甯�");
-
                         // 灏咶rame杞崲涓篗at
                         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 +712,8 @@
         } else {
             System.out.println("璇锋眰澶辫触锛岄敊璇爜锛�" + wvpResult.getCode());
         }
-
-        return null;
+        System.out.println("鍥剧墖URL锛�" + imgUrl);
+        return imgUrl;
     }
 
     @Override
@@ -728,6 +726,7 @@
     public void updateImgById(Integer workOrderId, String imgPath) {
         new LambdaUpdateChainWrapper<>(baseMapper)
                 .eq(WorkOrder::getId, workOrderId)
-                .set(WorkOrder::getYwCheckResult, imgPath);
+                .set(WorkOrder::getYwCheckResult, imgPath)
+                .update();
     }
 }
diff --git a/ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java b/ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java
index 85a2aec..f93ab74 100644
--- a/ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java
@@ -2,8 +2,10 @@
 
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 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 lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -12,6 +14,8 @@
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.ExecutorService;
@@ -31,6 +35,7 @@
 
     private final WorkOrderService workOrderService;
     private final DeviceInfoMapper deviceInfoMapper;
+    private final WorkOrderCheckImgMapper workOrderCheckImgMapper;
 
     private static final ExecutorService executorService = new ThreadPoolExecutor(8,
             24,
@@ -46,6 +51,7 @@
         if (CollectionUtils.isEmpty(deviceList)) {
             return;
         }
+        // 鏌ュ嚭鍥芥爣璁惧锛屽氨涓�鏉℃暟鎹�
         List<DeviceInfo> gbDevices = new LambdaQueryChainWrapper<>(deviceInfoMapper)
                 .orderByDesc(DeviceInfo::getUpdateTime)
                 .last("limit 1")
@@ -56,14 +62,13 @@
         for (DeviceInfoVO deviceInfo : deviceList) {
             executorService.submit(() -> {
                 // 鍥芥爣璁惧鐨勭紪鐮佸氨鏄彇瑙嗛娴佺殑璁惧缂栫爜锛屽浗鏍囪澶囧氨涓�涓�傚浗鏍囪澶囩殑姣忎竴涓�氶亾浠h〃涓�涓憚鍍忓ご锛屼篃灏辨槸璁惧id鏄彇娴佺殑閫氶亾id
-                String frameImg = null;
-                try {
-                    frameImg = workOrderService.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), deviceInfo.getDeviceId());
-                } catch (FFmpegFrameGrabber.Exception e) {
-                    e.printStackTrace();
-                }
+                String frameImg = workOrderService.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), deviceInfo.getDeviceId(), deviceInfo.getWorkOrderNo());
                 if (StringUtils.hasText(frameImg)) {
-                    workOrderService.updateImgById(deviceInfo.getWorkOrderId(), frameImg);
+                    WorkOrderCheckImg img = new WorkOrderCheckImg();
+                    img.setWorkOrderNo(deviceInfo.getWorkOrderNo());
+                    img.setImgUrl(frameImg);
+                    img.setCreateTime(new Date());
+                    workOrderCheckImgMapper.insert(img);
                 }
             });
         }
diff --git a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderCheckImgMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderCheckImgMapper.xml
new file mode 100644
index 0000000..3e4de8e
--- /dev/null
+++ b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderCheckImgMapper.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ycl.platform.mapper.WorkOrderCheckImgMapper">
+
+    <insert id="insertMany">
+        INSERT INTO t_work_order_check_img (work_order_no, img_url, create_time)
+        VALUES <foreach collection="list" item="img" separator=",">
+        (#{img.workOrderNo}, #{img.imgUrl}, #{img.createTime})
+    </foreach>
+    </insert>
+
+</mapper>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
index 87fad71..d090669 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
@@ -215,6 +215,7 @@
     <select id="hasErrorWorkOrderList" resultType="com.ycl.platform.domain.vo.DeviceInfoVO">
         SELECT
                wo.id as workOrderId,
+               wo.work_order_no as workOrderNo,
                wo.serial_number as deviceId
         FROM
              t_work_order wo

--
Gitblit v1.8.0