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 |  434 ++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 323 insertions(+), 111 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 126e3bc..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,26 +1,19 @@
 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.alarmpoints.well.service.IArdAlarmpointsWellService;
 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.camera.service.IArdCamerasService;
-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;
-import com.ruoyi.inspect.service.IArdVideoInspectRecordService;
+import com.ruoyi.inspect.mapper.ArdVideoInspectTaskStepMapper;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import org.springframework.transaction.annotation.Transactional;
@@ -28,7 +21,7 @@
 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;
 
 /**
@@ -38,10 +31,12 @@
  * @date 2023-05-30
  */
 @Service
-@Slf4j
+@Slf4j(topic = "PatrolInspectionTask")
 public class ArdVideoInspectTaskServiceImpl implements IArdVideoInspectTaskService {
     @Resource
     private ArdVideoInspectTaskMapper ardVideoInspectTaskMapper;
+    @Resource
+    private ArdVideoInspectTaskStepMapper ardVideoInspectTaskStepMapper;
     @Resource
     private ArdAlarmpointsWellMapper ardAlarmpointsWellMapper;
     @Resource
@@ -50,6 +45,22 @@
     private ArdCamerasMapper ardCamerasMapper;
     @Resource
     private IHikClientService hikClientService;
+    @Resource
+    private ArdCamerasMapper camerasMapper;
+
+    @PostConstruct
+    public void initTask() {
+        List<ArdVideoInspectTask> ardVideoInspectTasks = ardVideoInspectTaskMapper.selectArdVideoInspectTaskList(new ArdVideoInspectTask());
+        for (ArdVideoInspectTask ardVideoInspectTask : ardVideoInspectTasks) {
+            /*启动后将所有手动任务置为关闭,所有任务当前步骤信息清空*/
+            if (ardVideoInspectTask.getInspectMode().equals("手动")) {
+                ardVideoInspectTask.setMenualSwitch("关");
+            }
+            ardVideoInspectTask.setCurrentStepId("");
+            ardVideoInspectTask.setCurrentStepStartTime("");
+            ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask);
+        }
+    }
 
     /**
      * 查询视频巡检任务
@@ -82,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());
@@ -101,9 +113,22 @@
     public int updateArdVideoInspectTask(ArdVideoInspectTask ardVideoInspectTask) {
         ardVideoInspectTask.setUpdateBy(SecurityUtils.getUsername());
         ardVideoInspectTask.setUpdateTime(DateUtils.getNowDate());
-        ardVideoInspectTaskMapper.deleteArdVideoInspectTaskStepByTaskId(ardVideoInspectTask.getId())
-        ;
+        //  ardVideoInspectTaskMapper.deleteArdVideoInspectTaskStepByTaskId(ardVideoInspectTask.getId());
         insertArdVideoInspectTaskStep(ardVideoInspectTask);
+        return ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask);
+    }
+
+    /**
+     * 修改视频巡检任务,bu更新步骤
+     *
+     * @param ardVideoInspectTask 视频巡检任务
+     * @return 结果
+     */
+    @Transactional
+    @Override
+    public int updateArdVideoInspectTaskSingle(ArdVideoInspectTask ardVideoInspectTask) {
+        ardVideoInspectTask.setUpdateBy(SecurityUtils.getUsername());
+        ardVideoInspectTask.setUpdateTime(DateUtils.getNowDate());
         return ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask);
     }
 
@@ -145,43 +170,51 @@
      */
     public void insertArdVideoInspectTaskStep(ArdVideoInspectTask ardVideoInspectTask) {
         List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTask.getArdVideoInspectTaskStepList();
-        String id = ardVideoInspectTask.getId();
+        //获取相机
+        ArdCameras camera = camerasMapper.selectArdCamerasById(ardVideoInspectTask.getCameraId());
+        Collections.sort(ardVideoInspectTaskStepList, new ArdVideoInspectTaskStepComparator(this.ardAlarmpointsWellMapper, camera.getLongitude(), camera.getLatitude()));
+        String taskId = ardVideoInspectTask.getId();
+        for (int i = 0; i < ardVideoInspectTaskStepList.size(); i++) {
+            ArdVideoInspectTaskStep step = ardVideoInspectTaskStepList.get(i);
+            step.setTaskId(taskId);
+            step.setOrderNumber(new Integer(i + 1));
+        }
         if (StringUtils.isNotNull(ardVideoInspectTaskStepList)) {
-            List<ArdVideoInspectTaskStep> list = new ArrayList<ArdVideoInspectTaskStep>();
             for (ArdVideoInspectTaskStep ardVideoInspectTaskStep : ardVideoInspectTaskStepList) {
-                ardVideoInspectTaskStep.setTaskId(id);
-                list.add(ardVideoInspectTaskStep);
-            }
-            if (list.size() > 0) {
-                ardVideoInspectTaskMapper.batchArdVideoInspectTaskStep(list);
+                if (ardVideoInspectTaskStep.getId() == null) {
+                    //新的步骤,添加
+                    ardVideoInspectTaskStepMapper.insertArdVideoInspectTaskStep(ardVideoInspectTaskStep);
+                } else {
+                    //已有步骤,更新
+                    ardVideoInspectTaskStepMapper.updateArdVideoInspectTaskStep(ardVideoInspectTaskStep);
+                }
             }
         }
     }
-
 
     /**
      * 手动巡检任务
      */
     @Override
-    public void manualTaskRun() {
-        /*扫描所有可执行任务1-时间满足2-自动*/
-        ArdVideoInspectTask ardVideoInspectTask = new ArdVideoInspectTask();
-        ardVideoInspectTask.setInspectMode("手动");
-        ardVideoInspectTask.setMenualSwitch("开");
-        List<ArdVideoInspectTask> ardVideoInspectTasks = ardVideoInspectTaskMapper.selectArdVideoInspectTaskList(ardVideoInspectTask);
-        for (ArdVideoInspectTask videoInspectTask : ardVideoInspectTasks) {
-            /*获取当前任务的所有巡检步骤*/
-            List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(videoInspectTask.getId()).getArdVideoInspectTaskStepList();
-            if (ardVideoInspectTaskStepList.size() == 0) {
-                continue;
+    public void manualTaskRun(String TaskId) {
+        try {
+            ArdVideoInspectTask videoInspectTask = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(TaskId);
+            if (!videoInspectTask.getMenualSwitch().equals("开")) {
+                return;
             }
-            videoInspectTask.setArdVideoInspectTaskStepList(ardVideoInspectTaskStepList);
+            if (videoInspectTask.getArdVideoInspectTaskStepList().size() == 0) {
+                return;
+            }
             String currentStepId = videoInspectTask.getCurrentStepId();
-            if (StringUtils.isNull(currentStepId)) {
-                videoInspectTask.setCurrentStepId(ardVideoInspectTaskStepList.get(0).getId());
-                startRunStep(videoInspectTask);//开始当前任务的第一个步骤
+            String currentStepStartTime = videoInspectTask.getCurrentStepStartTime();
+            if (StringUtils.isNull(currentStepId) || StringUtils.isEmpty(currentStepId)) {
+                //从1号步骤开始
+                videoInspectTask.setCurrentStepId(videoInspectTask.getArdVideoInspectTaskStepList().get(0).getId());
+                if (InspectionTaskManager.taskMap.containsKey(TaskId)) {
+                    startRunStep(videoInspectTask);
+                }
             } else /*当前任务已经执行,判断是否到期*/ {
-                if (StringUtils.isNull(videoInspectTask.getCurrentStepStartTime())) {
+                if (StringUtils.isNull(currentStepStartTime) || StringUtils.isEmpty(currentStepStartTime)) {
                     //当前任务启动时间为null,则说明当前步骤被中断,直接启动当前步骤
                     startRunStep(videoInspectTask);
                 } else {
@@ -194,10 +227,52 @@
                         //开始下一步骤
                         videoInspectTask.setCurrentStepId(nextStepId);
                         startRunStep(videoInspectTask);
+                    } else {
+                        //未过期尝试引导,引导失败清空当前步骤开始时间,标记中断
+                        tryGuide(videoInspectTask);
                     }
                 }
             }
+        } catch (Exception ex) {
+            log.error("手动巡检异常:" + ex.getMessage());
         }
+    }
+
+    /**
+     * 判断当前手动任务能否开启
+     */
+    @Override
+    public boolean isEnablemanualTask(String TaskId) {
+        /*扫描当前手动开的任务,获取手动控制的相机idList*/
+        List<String> menualCameraId = new ArrayList<>();
+        ArdVideoInspectTask menualTask = new ArdVideoInspectTask();
+        menualTask.setInspectMode("手动");
+        menualTask.setMenualSwitch("开");
+        List<ArdVideoInspectTask> menualTasks = ardVideoInspectTaskMapper.selectArdVideoInspectTaskList(menualTask);
+        if (menualTasks.size() > 0) {
+            for (ArdVideoInspectTask task : menualTasks) {
+                if (StringUtils.isNull(task.getCameraId()) || StringUtils.isEmpty(task.getCameraId())) {
+                    continue;
+                }
+                if (!menualCameraId.contains(task.getCameraId())) {
+                    menualCameraId.add(task.getCameraId());
+                }
+            }
+        }
+        /*判断相机是否已经被人手动控制*/
+        ArdVideoInspectTask videoInspectTask = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(TaskId);
+        if (StringUtils.isNull(videoInspectTask)) {
+            return false;
+        }
+        String cameraId = videoInspectTask.getCameraId();
+        if (StringUtils.isEmpty(cameraId)) {
+            return false;
+        }
+        if (menualCameraId.contains(cameraId)) {
+            /*如果当前任务关联的相机已经有人手动控制,则不允许控制*/
+            return false;
+        }
+        return true;
     }
 
     /**
@@ -205,48 +280,90 @@
      */
     @Override
     public void autoTaskRun() {
-        /*扫描所有可执行任务1-时间满足2-自动*/
-        ArdVideoInspectTask ardVideoInspectTask = new ArdVideoInspectTask();
-        ardVideoInspectTask.setInspectMode("自动");
-        List<ArdVideoInspectTask> ardVideoInspectTasks = ardVideoInspectTaskMapper.selectArdVideoInspectTaskList(ardVideoInspectTask);
-        for (ArdVideoInspectTask videoInspectTask : ardVideoInspectTasks) {
-            /*遍历所有时间满足的自动任务*/
-            boolean timeCompare = DateUtils.TimeCompare(videoInspectTask.getStartTime(), videoInspectTask.getEndTime());
-            if (timeCompare) {
-                log.info("自动任务启动:" + videoInspectTask.getId());
-                /*获取当前任务的所有巡检步骤*/
-                List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(videoInspectTask.getId()).getArdVideoInspectTaskStepList();
-                if (ardVideoInspectTaskStepList.size() == 0) {
-                    continue;
-                }
-                videoInspectTask.setArdVideoInspectTaskStepList(ardVideoInspectTaskStepList);
-                String currentStepId = videoInspectTask.getCurrentStepId();
-                if (StringUtils.isNull(currentStepId)) {
-                    videoInspectTask.setCurrentStepId(ardVideoInspectTaskStepList.get(0).getId());
-                    startRunStep(videoInspectTask);//开始当前任务的第一个步骤
-                } else /*当前任务已经执行,判断是否到期*/ {
-                    if (StringUtils.isNull(videoInspectTask.getCurrentStepStartTime())) {
-                        //当前任务启动时间为null,则说明当前步骤被中断,直接启动当前步骤
-                        startRunStep(videoInspectTask);
-                    } else {
-                        boolean expird = isExpirdStep(videoInspectTask); /*判断当前步骤时间是否过期*/
-                        if (expird) {
-                            //停止录像
-                            stopRunStep(videoInspectTask);
-                            //切换步骤
-                            String nextStepId = changeNextStep(videoInspectTask);
-                            //开始下一步骤
-                            videoInspectTask.setCurrentStepId(nextStepId);
-                            startRunStep(videoInspectTask);
-                        }
+        try {
+            /*扫描当前手动开的任务,获取手动控制的相机idList*/
+            List<String> menualCameraId = new ArrayList<>();
+            ArdVideoInspectTask menualTask = new ArdVideoInspectTask();
+            menualTask.setInspectMode("手动");
+            menualTask.setMenualSwitch("开");
+            List<ArdVideoInspectTask> menualTasks = ardVideoInspectTaskMapper.selectArdVideoInspectTaskList(menualTask);
+            if (menualTasks.size() > 0) {
+                for (ArdVideoInspectTask task : menualTasks) {
+                    if (StringUtils.isNull(task.getCameraId()) || StringUtils.isEmpty(task.getCameraId())) {
+                        continue;
+                    }
+                    if (!menualCameraId.contains(task.getCameraId())) {
+                        menualCameraId.add(task.getCameraId());
                     }
                 }
             }
+
+            /*扫描所有自动任务*/
+            ArdVideoInspectTask autoTask = new ArdVideoInspectTask();
+            autoTask.setInspectMode("自动");
+            List<ArdVideoInspectTask> ardVideoInspectTasks = ardVideoInspectTaskMapper.selectArdVideoInspectTaskList(autoTask);
+            for (ArdVideoInspectTask videoInspectTask : ardVideoInspectTasks) {
+                /*遍历所有时间满足的自动任务*/
+                boolean timeCompare = DateUtils.TimeCompare(videoInspectTask.getStartTime(), videoInspectTask.getEndTime());
+                if (timeCompare) {
+                    if (menualCameraId.contains(videoInspectTask.getCameraId())) {
+                        /*若当前相机正在有任务手动执行,则不执行*/
+                        continue;
+                    }
+                    /*获取当前任务的所有巡检步骤*/
+                    List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(videoInspectTask.getId()).getArdVideoInspectTaskStepList();
+                    if (ardVideoInspectTaskStepList.size() == 0) {
+                        continue;
+                    }
+                    videoInspectTask.setArdVideoInspectTaskStepList(ardVideoInspectTaskStepList);
+
+                    String currentStepId = videoInspectTask.getCurrentStepId();
+                    String currentStepStartTime = videoInspectTask.getCurrentStepStartTime();
+                    if (StringUtils.isNull(currentStepId) || StringUtils.isEmpty(currentStepId)) {
+                        //开始当前任务的第一个步骤
+                        videoInspectTask.setCurrentStepId(ardVideoInspectTaskStepList.get(0).getId());
+                        startRunStep(videoInspectTask);
+                    } else /*当前任务已经执行,判断是否到期*/ {
+                        if (StringUtils.isNull(currentStepStartTime) || StringUtils.isEmpty(currentStepStartTime)) {
+                            //当前任务启动时间为空,则说明当前步骤被中断,直接启动当前步骤
+                            startRunStep(videoInspectTask);
+                        } else {
+                            //判断当前步骤时间是否过期
+                            boolean expird = isExpirdStep(videoInspectTask);
+                            if (expird) {
+                                //停止录像
+                                stopRunStep(videoInspectTask);
+                                //切换步骤
+                                String nextStepId = changeNextStep(videoInspectTask);
+                                //开始下一步骤
+                                videoInspectTask.setCurrentStepId(nextStepId);
+                                startRunStep(videoInspectTask);
+                            } else {
+                                tryGuide(videoInspectTask);
+                            }
+                        }
+                    }
+                } else {
+                    if (StringUtils.isNotEmpty(videoInspectTask.getCurrentStepId())) {
+                        videoInspectTask.setCurrentStepId("");
+                        ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(videoInspectTask);
+                    }
+                    if (StringUtils.isNotEmpty(videoInspectTask.getCurrentStepStartTime())) {
+                        videoInspectTask.setCurrentStepId("");
+                        ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(videoInspectTask);
+                    }
+                }
+            }
+        } catch (Exception ex) {
+            log.error("自动巡检任务异常:" + ex.getMessage());
         }
     }
+
+    /**
+     * 自动手动合并,扫库方式,目前不使用
+     */
     @Override
     public void taskRun() {
-        /*扫描所有可执行任务1-时间满足2-自动*/
         ArdVideoInspectTask ardVideoInspectTask = new ArdVideoInspectTask();
         List<ArdVideoInspectTask> ardVideoInspectTasks = ardVideoInspectTaskMapper.selectArdVideoInspectTaskList(ardVideoInspectTask);
         for (ArdVideoInspectTask videoInspectTask : ardVideoInspectTasks) {
@@ -266,13 +383,15 @@
                 continue;
             }
             videoInspectTask.setArdVideoInspectTaskStepList(ardVideoInspectTaskStepList);
-            String currentStepId = videoInspectTask.getCurrentStepId();
-            if (StringUtils.isNull(currentStepId)) {
+            String currentStepId = videoInspectTask.getCurrentStepId();//当前步骤id
+            String currentStepStartTime = videoInspectTask.getCurrentStepStartTime();//当前步骤启动时间
+            if (StringUtils.isNull(currentStepId) || StringUtils.isEmpty(currentStepId)) {
+                //开始第一个步骤
                 videoInspectTask.setCurrentStepId(ardVideoInspectTaskStepList.get(0).getId());
-                startRunStep(videoInspectTask);//开始当前任务的第一个步骤
-            } else /*当前任务已经执行,判断是否到期*/ {
-                if (StringUtils.isNull(videoInspectTask.getCurrentStepStartTime())) {
-                    //当前任务启动时间为null,则说明当前步骤被中断,直接启动当前步骤
+                startRunStep(videoInspectTask);
+            } else {
+                if (StringUtils.isNull(currentStepStartTime) || StringUtils.isEmpty(currentStepStartTime)) {
+                    //当前任务启动时间为空,则说明当前步骤被中断,直接启动当前步骤
                     startRunStep(videoInspectTask);
                 } else {
                     boolean expird = isExpirdStep(videoInspectTask); /*判断当前步骤时间是否过期*/
@@ -295,10 +414,72 @@
         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()
+                    .filter(obj -> obj.getId().equals(currentStepId))
+                    .findFirst();
+            if (objectOptional.isPresent()) {
+                ArdVideoInspectTaskStep step = objectOptional.get();
+                /*更新任务当前步骤id和步骤启动时间*/
+                ardVideoInspectTask.setCurrentStepId(step.getId());
+                ardVideoInspectTask.setCurrentStepStartTime(DateUtils.getTime());
+                ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask);
+                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) {
+                        /*控制相机巡检成功,开始录像*/
+                        hikClientService.recordStart(cmd);
+                    } else {
+                        /*控制失败,当前步骤启动时间置null*/
+                        ardVideoInspectTask.setCurrentStepStartTime("");
+                        ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask);
+                    }
+                }
+            }
+        } catch (Exception ex) {
+            log.error("巡检开始异常:" + ex.getMessage());
+        }
+    }
+
+    //尝试控制引导
+    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()
@@ -316,6 +497,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();
@@ -324,35 +510,21 @@
                     CameraCmd cmd = new CameraCmd();
                     cmd.setCameraId(cameraId);
                     cmd.setChannelNum(channel);
-                    cmd.setCamPosition(cameraPositon);
                     cmd.setTargetPosition(targetPositon);
                     cmd.setOperator("sys_patrol_inspect");
-                    cmd.setExpired(step.getRecordingTime());
-                    boolean setTargetPosition = hikClientService.setTargetPosition(cmd);
-                    if (setTargetPosition) {
-                        /*控制相机巡检成功,开始录像*/
-                        cmd.setEnable(true);//启动录像
-                        hikClientService.recordToMinio(cmd);
-                        /*更新任务当前步骤id和步骤启动时间*/
-                        ArdVideoInspectTask avit = new ArdVideoInspectTask();
-                        avit.setId(ardVideoInspectTask.getId());
-                        avit.setCurrentStepId(step.getId());
-                        avit.setCurrentStepStartTime(DateUtils.getTime());
-                        ardVideoInspectTaskMapper.updateArdVideoInspectTask(avit);
-                    } else {
-                        cmd.setEnable(false);//停止录像
-                        hikClientService.recordToMinio(cmd);
+                    cmd.setExpired(step.getRecordingTime() * 60);
+                    boolean setTargetPosition = hikClientService.guideTargetPosition(cmd);
+                    if (!setTargetPosition) {
                         /*控制失败,当前步骤启动时间置null*/
-                        ArdVideoInspectTask avit = new ArdVideoInspectTask();
-                        avit.setId(ardVideoInspectTask.getId());
-                        avit.setCurrentStepId(step.getId());
-                        avit.setCurrentStepStartTime(null);
-                        ardVideoInspectTaskMapper.updateArdVideoInspectTask(avit);
+                        ardVideoInspectTask.setCurrentStepStartTime("");
+                        ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask);
+                    } else {
+                        log.debug("引导成功!");
                     }
                 }
             }
         } catch (Exception ex) {
-            log.error("巡检开始异常:" + ex.getMessage());
+            log.error("巡检尝试引导异常:" + ex.getMessage());
         }
     }
 
@@ -360,7 +532,7 @@
     private void stopRunStep(ArdVideoInspectTask ardVideoInspectTask) {
         try {
             String currentStepId = ardVideoInspectTask.getCurrentStepId();
-            log.info("步骤:" + currentStepId + "停止");
+            log.debug("巡检步骤:" + currentStepId + "停止");
             if (StringUtils.isNull(currentStepId)) {
                 log.info("当前停止巡检步骤id为空");
                 return;
@@ -378,21 +550,20 @@
                 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);
-                hikClientService.recordToMinio(cmd);
+                cmd.setRecordObjectName("inspect_" + IdUtils.fastSimpleUUID());
+                String url = hikClientService.recordStopToMinio(cmd);
                 /*插入巡检记录*/
                 ArdVideoInspectRecord ardVideoInspectRecord = new ArdVideoInspectRecord();
                 ardVideoInspectRecord.setStepId(step.getId());
+                ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellById(step.getWellId());
+                if (StringUtils.isNotNull(ardAlarmpointsWell)) {
+                    ardVideoInspectRecord.setWellName(ardAlarmpointsWell.getWellId());
+                }
                 Date currentStepStartDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStartTime);
                 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);
             }
@@ -460,7 +631,7 @@
                         .findFirst()
                         .orElse(null);
                 avit.setCurrentStepId(nextStepId);
-                ardVideoInspectTaskMapper.updateArdVideoInspectTask(avit);
+                ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(avit);
                 log.info("步骤:" + currentStepId + "切换为" + nextStepId);
                 return nextStepId;
             }
@@ -469,4 +640,45 @@
         }
         return "";
     }
+
+    public List getTaskUsedCameraPeriods(String cameraId) {
+        return ardVideoInspectTaskMapper.getTaskUsedCameraPeriods(cameraId);
+    }
+
+    /**
+     * 获取相机的空闲时段
+     * @param cameraId
+     * @return
+     */
+    public List getCameraIdleTimeList(String cameraId) {
+        LinkedList<String> timeList = new LinkedList();
+        List<Map> usedPeriods = this.getTaskUsedCameraPeriods(cameraId);
+        for (Map p :
+                usedPeriods) {
+            timeList.add((String) p.get("start_time"));
+            timeList.add((String) p.get("end_time"));
+        }
+        //判断第一个起始点
+        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