From 1e17cb5f4890dabbb23966a4a48ea921411fe811 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期四, 22 八月 2024 16:38:34 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java |   90 ++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 88 insertions(+), 2 deletions(-)

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 66e3094..13a982c 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
@@ -1,14 +1,18 @@
 package com.ycl.platform.service.impl;
 
+import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.config.PlatformConfig;
+import com.ycl.config.ServerConfig;
 import com.ycl.exception.ServiceException;
 import com.ycl.platform.domain.entity.*;
 import com.ycl.platform.domain.form.*;
 import com.ycl.platform.domain.query.*;
+import com.ycl.platform.domain.vo.DeviceInfoVO;
 import com.ycl.platform.domain.vo.DistributeWorkOrderVO;
 import com.ycl.platform.domain.vo.WorkOrderVO;
 import com.ycl.platform.domain.vo.WorkOrderYwConditionRecordVO;
@@ -20,6 +24,8 @@
 import com.ycl.platform.service.WorkOrderAuditingRecordService;
 import com.ycl.platform.service.WorkOrderService;
 import com.ycl.platform.service.YwPointService;
+import com.ycl.platform.wvp.StreamContent;
+import com.ycl.platform.wvp.WVPResult;
 import com.ycl.system.Result;
 import com.ycl.system.domain.SysConfig;
 import com.ycl.system.mapper.SysConfigMapper;
@@ -27,20 +33,29 @@
 import com.ycl.system.page.PageUtil;
 import com.ycl.utils.DateUtils;
 import com.ycl.utils.SecurityUtils;
+import com.ycl.utils.http.HttpUtils;
 import com.ycl.utils.redis.RedisCache;
 import com.ycl.utils.uuid.IdUtils;
 import enumeration.general.*;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
+import org.bytedeco.javacv.FFmpegFrameGrabber;
+import org.bytedeco.javacv.Frame;
+import org.bytedeco.javacv.Java2DFrameConverter;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
 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.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.*;
@@ -66,6 +81,11 @@
     private final WorkOrderDistributeRecordMapper workOrderDistributeRecordMapper;
     private final TMonitorMapper monitorMapper;
     private final SysConfigMapper configMapper;
+    private final ServerConfig serverConfig;
+    private final ReportMapper reportMapper;
+
+    @Value("${rtsp.server:http://127.0.0.1:7788}")
+    private String rtspServer;
 
     private final String DISTRIBUTE_LOCK_KEY = "distributeLock";
     private final static String IMPORTANT = "important";
@@ -93,7 +113,7 @@
         Map<String, WorkOrder> mapping = inDatabaseWorkOrderList.stream().collect((Collectors.toMap(WorkOrder::getSerialNumber, workOrder -> workOrder)));
         List<WorkOrder> waitAddList = new ArrayList<>(48);
         Integer updateNum = 0;
-        // TODO 鏌ヨ鏄惁鎶ュ杩囷紝鏇存柊鏁呴殰绫诲瀷
+
         for (WorkOrder workOrder : workOrderList) {
             WorkOrder databaseWorkOrder = mapping.get(workOrder.getSerialNumber());
             if (Objects.nonNull(databaseWorkOrder)) {
@@ -110,11 +130,22 @@
                     databaseWorkOrder.setUpdateTime(now);
                     baseMapper.updateById(databaseWorkOrder);
                     updateNum++;
-                    // 鍚屾椂鏂板涓�涓繍缁村鐞嗕俊鎭紝琛ㄦ槑姝ゅ伐鍗曡璋冩暣 TODO
+                    // 鍚屾椂鏂板涓�涓繍缁村鐞嗕俊鎭紝琛ㄦ槑姝ゅ伐鍗曡璋冩暣
+                    WorkOrderYwConditionRecord ywRecord = new WorkOrderYwConditionRecord();
+                    ywRecord.setWorkOrderId(databaseWorkOrder.getId());
+                    ywRecord.setCommitUser(1);
+                    ywRecord.setYwCondition("鏁呴殰绫诲瀷鏇存柊锛屽伐鍗曠姸鎬佽皟鏁翠负寰呭鐞�");
+                    ywRecord.setCreateTime(new Date());
+                    workOrderYwConditionRecordMapper.insert(ywRecord);
                 }
             } else {
                 workOrder.setCreateTime(new Date());
                 workOrder.setUpdateTime(new Date());
+                // 濡傛灉鎶ュ杩囷紝浣跨敤鏈�鏂版姤澶囩殑閿欒绫诲瀷
+                Report report = reportMapper.checkPointReported(workOrder.getSerialNumber());
+                if (Objects.nonNull(report)) {
+                    workOrder.setErrorType(report.getErrorType());
+                }
                 waitAddList.add(workOrder);
             }
         }
@@ -297,6 +328,7 @@
         workOrderYwConditionRecord.setCommitUser(SecurityUtils.getLoginUser().getUserId().intValue());
         workOrderYwConditionRecord.setYwCondition(form.getYwCondition());
         workOrderYwConditionRecord.setYwProofMaterials(form.getYwProofMaterials());
+        workOrderYwConditionRecord.setSysMsg(Boolean.FALSE);
         workOrderYwConditionRecordMapper.insert(workOrderYwConditionRecord);
         return Result.ok("鎿嶄綔鎴愬姛");
     }
@@ -304,6 +336,11 @@
     @Override
     public Result selectYwConditionByYwId(Integer id) {
         List<WorkOrderYwConditionRecordVO> ywConditionList = workOrderYwConditionRecordMapper.selectYwConditionByYwId(id);
+        ywConditionList.stream().forEach(item -> {
+            if (Objects.nonNull(item.getSysMsg()) && item.getSysMsg()) {
+                item.setCommitUserName("绯荤粺娑堟伅");
+            }
+        });
         return Result.ok().data(ywConditionList);
     }
 
@@ -557,4 +594,53 @@
     public List<WorkOrderRegionVO> workOrderRegion(DashboardQuery dashboardQuery) {
         return baseMapper.workOrderRegion(dashboardQuery);
     }
+
+
+    @Override
+    public String getFrameImgByDevice(String deviceId, String channelId) {
+        String url = String.format(this.rtspServer + "/start/%s/%s", deviceId, channelId);
+        String result = HttpUtils.sendGet(url);
+        WVPResult wvpResult = JSON.parseObject(result, WVPResult.class);
+        if (0 == wvpResult.getCode()) {
+            StreamContent data = (StreamContent) wvpResult.getData();
+            String rtspUrl = data.getRtsp();
+            if (StringUtils.hasText(rtspUrl)) {
+                try {
+                    // 鍒涘缓FFmpegFrameGrabber瀵硅薄
+                    FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(rtspUrl);
+                    grabber.start(); // 寮�濮嬫崟鑾�
+
+                    Frame frame;
+                    if ((frame = grabber.grabFrame()) != null) {
+                        // 灏嗗抚杞崲涓哄浘鐗�
+                        Java2DFrameConverter converter = new Java2DFrameConverter();
+                        BufferedImage image = converter.convert(frame);
+                        File outputfile = new File(serverConfig.getUrl() + PlatformConfig.getUploadPath() + deviceId + IdUtils.fastSimpleUUID() + ".png");
+                        ImageIO.write(image, "png", outputfile);
+                        String imgPath = outputfile.getAbsolutePath();
+                        System.out.println("Saved " + imgPath);
+                        return imgPath;
+                    }
+                    grabber.stop(); // 鍋滄鎹曡幏
+                    grabber.release(); // 閲婃斁璧勬簮
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public List<DeviceInfoVO> hasErrorWorkOrderList() {
+        List<DeviceInfoVO> list = baseMapper.hasErrorWorkOrderList();
+        return list;
+    }
+
+    @Override
+    public void updateImgById(Integer workOrderId, String imgPath) {
+        new LambdaUpdateChainWrapper<>(baseMapper)
+                .eq(WorkOrder::getId, workOrderId)
+                .set(WorkOrder::getYwCheckCondition, imgPath);
+    }
 }

--
Gitblit v1.8.0