From ba1e219d97e123b91657dc424f13a2fdeaa85d21 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: Mon, 21 Aug 2023 13:37:01 +0800
Subject: [PATCH] 修改兴趣点列表井号模糊查询

---
 ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java |  139 +++++++++++++++++++++++++++++++++------------
 1 files changed, 101 insertions(+), 38 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
index 73f0659..5644b88 100644
--- a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
@@ -1,15 +1,13 @@
 package com.ruoyi.inspect.service.impl;
 
-import java.text.SimpleDateFormat;
 import java.util.*;
-
 import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell;
 import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper;
 import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.device.camera.domain.ArdCameras;
 import com.ruoyi.device.camera.domain.CameraCmd;
 import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
-import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
 import com.ruoyi.device.hiksdk.service.IHikClientService;
 import com.ruoyi.inspect.domain.ArdVideoInspectRecord;
 import com.ruoyi.inspect.mapper.ArdVideoInspectRecordMapper;
@@ -23,7 +21,6 @@
 import com.ruoyi.inspect.mapper.ArdVideoInspectTaskMapper;
 import com.ruoyi.inspect.domain.ArdVideoInspectTask;
 import com.ruoyi.inspect.service.IArdVideoInspectTaskService;
-
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 
@@ -34,7 +31,7 @@
  * @date 2023-05-30
  */
 @Service
-@Slf4j
+@Slf4j(topic = "PatrolInspectionTask")
 public class ArdVideoInspectTaskServiceImpl implements IArdVideoInspectTaskService {
     @Resource
     private ArdVideoInspectTaskMapper ardVideoInspectTaskMapper;
@@ -96,6 +93,7 @@
     @Transactional
     @Override
     public int insertArdVideoInspectTask(ArdVideoInspectTask ardVideoInspectTask) {
+        ardVideoInspectTask.setId(IdUtils.simpleUUID());
         ardVideoInspectTask.setCreateBy(SecurityUtils.getUsername());
         ardVideoInspectTask.setCreateTime(DateUtils.getNowDate());
         ardVideoInspectTask.setUserId(SecurityUtils.getUserId());
@@ -229,6 +227,9 @@
                         //开始下一步骤
                         videoInspectTask.setCurrentStepId(nextStepId);
                         startRunStep(videoInspectTask);
+                    } else {
+                        //未过期尝试引导,引导失败清空当前步骤开始时间,标记中断
+                        tryGuide(videoInspectTask);
                     }
                 }
             }
@@ -337,6 +338,8 @@
                                 //开始下一步骤
                                 videoInspectTask.setCurrentStepId(nextStepId);
                                 startRunStep(videoInspectTask);
+                            } else {
+                                tryGuide(videoInspectTask);
                             }
                         }
                     }
@@ -411,10 +414,10 @@
         try {
             String currentStepId = ardVideoInspectTask.getCurrentStepId();
             if (StringUtils.isNull(currentStepId)) {
-                log.info("当前开始巡检步骤id为空");
+                log.debug("当前开始巡检步骤id为空");
                 return;
             }
-            log.info("步骤:" + currentStepId + "开始");
+            log.debug("巡检步骤:" + currentStepId + "尝试开始");
             String cameraId = ardVideoInspectTask.getCameraId();
             Integer channel = ardVideoInspectTask.getChannel();
             Optional<ArdVideoInspectTaskStep> objectOptional = ardVideoInspectTask.getArdVideoInspectTaskStepList().stream()
@@ -436,6 +439,11 @@
                     targetPositon[2] = ardAlarmpointsWell.getAltitude();
                     /*获取相机坐标*/
                     ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId);
+                    if(StringUtils.isNull(cameras))
+                    {
+                        log.debug("找不到相机:"+cameraId);
+                        return;
+                    }
                     double[] cameraPositon = new double[3];
                     cameraPositon[0] = cameras.getLongitude();
                     cameraPositon[1] = cameras.getLatitude();
@@ -446,16 +454,12 @@
                     cmd.setChannelNum(channel);
                     cmd.setTargetPosition(targetPositon);
                     cmd.setOperator("sys_patrol_inspect");
-                    cmd.setExpired(step.getRecordingTime());
-                    boolean setTargetPosition = hikClientService.setTargetPosition(cmd);
+                    cmd.setExpired(step.getRecordingTime() * 60);
+                    boolean setTargetPosition = hikClientService.guideTargetPosition(cmd);
                     if (setTargetPosition) {
                         /*控制相机巡检成功,开始录像*/
-                        cmd.setEnable(true);//启动录像
-                        hikClientService.recordToMinio(cmd);
+                        hikClientService.recordStart(cmd);
                     } else {
-                        cmd.setEnable(false);//停止录像
-                        cmd.setUploadMinio(true);
-                        hikClientService.recordToMinio(cmd);
                         /*控制失败,当前步骤启动时间置null*/
                         ardVideoInspectTask.setCurrentStepStartTime("");
                         ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask);
@@ -467,11 +471,68 @@
         }
     }
 
+    //尝试控制引导
+    private void tryGuide(ArdVideoInspectTask ardVideoInspectTask) {
+        try {
+            String currentStepId = ardVideoInspectTask.getCurrentStepId();
+            if (StringUtils.isNull(currentStepId)) {
+                log.debug("当前开始巡检步骤id为空");
+                return;
+            }
+            log.debug("巡检正常,尝试引导:" + currentStepId);
+            String cameraId = ardVideoInspectTask.getCameraId();
+            Integer channel = ardVideoInspectTask.getChannel();
+            Optional<ArdVideoInspectTaskStep> objectOptional = ardVideoInspectTask.getArdVideoInspectTaskStepList().stream()
+                    .filter(obj -> obj.getId().equals(currentStepId))
+                    .findFirst();
+            if (objectOptional.isPresent()) {
+                ArdVideoInspectTaskStep step = objectOptional.get();
+                String wellId = step.getWellId();
+                if (!StringUtils.isNull(wellId)) {
+                    /*获取井坐标*/
+                    ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellById(wellId);
+                    double[] targetPositon = new double[3];
+                    targetPositon[0] = ardAlarmpointsWell.getLongitude();
+                    targetPositon[1] = ardAlarmpointsWell.getLatitude();
+                    targetPositon[2] = ardAlarmpointsWell.getAltitude();
+                    /*获取相机坐标*/
+                    ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId);
+                    if(StringUtils.isNull(cameras))
+                    {
+                        log.debug("找不到相机:"+cameraId);
+                        return;
+                    }
+                    double[] cameraPositon = new double[3];
+                    cameraPositon[0] = cameras.getLongitude();
+                    cameraPositon[1] = cameras.getLatitude();
+                    cameraPositon[2] = cameras.getAltitude();
+                    /*控制相机巡检*/
+                    CameraCmd cmd = new CameraCmd();
+                    cmd.setCameraId(cameraId);
+                    cmd.setChannelNum(channel);
+                    cmd.setTargetPosition(targetPositon);
+                    cmd.setOperator("sys_patrol_inspect");
+                    cmd.setExpired(step.getRecordingTime() * 60);
+                    boolean setTargetPosition = hikClientService.guideTargetPosition(cmd);
+                    if (!setTargetPosition) {
+                        /*控制失败,当前步骤启动时间置null*/
+                        ardVideoInspectTask.setCurrentStepStartTime("");
+                        ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask);
+                    } else {
+                        log.debug("引导成功!");
+                    }
+                }
+            }
+        } catch (Exception ex) {
+            log.error("巡检尝试引导异常:" + ex.getMessage());
+        }
+    }
+
     //步骤停止
     private void stopRunStep(ArdVideoInspectTask ardVideoInspectTask) {
         try {
             String currentStepId = ardVideoInspectTask.getCurrentStepId();
-            log.info("步骤:" + currentStepId + "停止");
+            log.debug("巡检步骤:" + currentStepId + "停止");
             if (StringUtils.isNull(currentStepId)) {
                 log.info("当前停止巡检步骤id为空");
                 return;
@@ -489,14 +550,9 @@
                 cmd.setCameraId(cameraId);
                 cmd.setChannelNum(channel);
                 cmd.setOperator("sys_patrol_inspect");
-                cmd.setEnable(false);//停止录像
-                String uuid = UUID.randomUUID().toString().replace("-", "");
-                String time = new SimpleDateFormat("yyyyMMdd").format(new Date());
-                String recordName = cameraId + "/" + time + "/" + uuid + ".mp4";
                 cmd.setRecordBucketName("record");
-                cmd.setRecordObjectName(recordName);
-                cmd.setUploadMinio(true);
-                hikClientService.recordToMinio(cmd);
+                cmd.setRecordObjectName("inspect_" + IdUtils.fastSimpleUUID());
+                String url = hikClientService.recordStopToMinio(cmd);
                 /*插入巡检记录*/
                 ArdVideoInspectRecord ardVideoInspectRecord = new ArdVideoInspectRecord();
                 ardVideoInspectRecord.setStepId(step.getId());
@@ -508,7 +564,6 @@
                 Date currentStepStopDate = DateUtils.addMinutes(currentStepStartDate, step.getRecordingTime());
                 ardVideoInspectRecord.setStartTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStartDate));
                 ardVideoInspectRecord.setEndTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStopDate));
-                String url = MinioClientSingleton.domainUrl + "/" + cmd.getRecordBucketName() + "/" + recordName;
                 ardVideoInspectRecord.setRecordFilePath(url);
                 ardVideoInspectRecordMapper.insertArdVideoInspectRecord(ardVideoInspectRecord);
             }
@@ -590,6 +645,11 @@
         return ardVideoInspectTaskMapper.getTaskUsedCameraPeriods(cameraId);
     }
 
+    /**
+     * 获取相机的空闲时段
+     * @param cameraId
+     * @return
+     */
     public List getCameraIdleTimeList(String cameraId) {
         LinkedList<String> timeList = new LinkedList();
         List<Map> usedPeriods = this.getTaskUsedCameraPeriods(cameraId);
@@ -599,21 +659,24 @@
             timeList.add((String) p.get("end_time"));
         }
         //判断第一个起始点
-        if (timeList.getFirst().equals("00:00:00")) {
-            timeList.removeFirst();
-        } else {
-            timeList.addFirst("00:00:00");
-        }
-        //判断最后一个结束时间
-        if (timeList.getLast().equals("23:59:59")) {
-            timeList.removeLast();
-        } else {
-            timeList.addLast("23:59:59");
-        }
-        //事件段为空,则全天作为一个时间段
-        if (timeList.size() == 0) {
-            timeList.add("00:00:00");
-            timeList.add("23:59:59");
+        if (timeList.size() > 0) {
+            if ("00:00:00".equals(timeList.getFirst())) {
+                timeList.removeFirst();
+            } else {
+                timeList.addFirst("00:00:00");
+            }
+            //判断最后一个结束时间
+            if ("23:59:59".equals(timeList.getLast())) {
+                timeList.removeLast();
+            } else {
+                timeList.addLast("23:59:59");
+            }
+            //事件段为空,则全天作为一个时间段
+            if (timeList.size() == 0) {
+                timeList.add("00:00:00");
+                timeList.add("23:59:59");
+            }
+
         }
 
         return timeList;

--
Gitblit v1.9.3