From 8dcb6801a19f08af6c7baaf6a1b9105c8b4dc58b Mon Sep 17 00:00:00 2001
From: liusuyi <13324259@qq.com>
Date: 周三, 31 5月 2023 21:31:38 +0800
Subject: [PATCH] 增加手动巡检

---
 ard-work/src/main/java/com/ruoyi/inspect/service/IArdVideoInspectTaskService.java         |   35 +
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/PatrolInspectionTask.java                |  460 ++++++++++++++++------------
 ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java |  422 +++++++++++++++++++++++--
 ruoyi-admin/src/main/resources/application-ard.yml                                        |    2 
 ruoyi-admin/src/main/resources/application.yml                                            |    4 
 5 files changed, 673 insertions(+), 250 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/inspect/service/IArdVideoInspectTaskService.java b/ard-work/src/main/java/com/ruoyi/inspect/service/IArdVideoInspectTaskService.java
index 9765b4c..4f070de 100644
--- a/ard-work/src/main/java/com/ruoyi/inspect/service/IArdVideoInspectTaskService.java
+++ b/ard-work/src/main/java/com/ruoyi/inspect/service/IArdVideoInspectTaskService.java
@@ -1,19 +1,19 @@
 package com.ruoyi.inspect.service;
 
 import java.util.List;
+
 import com.ruoyi.inspect.domain.ArdVideoInspectTask;
 
 /**
  * 视频巡检任务Service接口
- * 
+ *
  * @author ruoyi
  * @date 2023-05-30
  */
-public interface IArdVideoInspectTaskService 
-{
+public interface IArdVideoInspectTaskService {
     /**
      * 查询视频巡检任务
-     * 
+     *
      * @param id 视频巡检任务主键
      * @return 视频巡检任务
      */
@@ -21,7 +21,7 @@
 
     /**
      * 查询视频巡检任务列表
-     * 
+     *
      * @param ardVideoInspectTask 视频巡检任务
      * @return 视频巡检任务集合
      */
@@ -29,7 +29,7 @@
 
     /**
      * 新增视频巡检任务
-     * 
+     *
      * @param ardVideoInspectTask 视频巡检任务
      * @return 结果
      */
@@ -37,15 +37,17 @@
 
     /**
      * 修改视频巡检任务
-     * 
+     *
      * @param ardVideoInspectTask 视频巡检任务
      * @return 结果
      */
     public int updateArdVideoInspectTask(ArdVideoInspectTask ardVideoInspectTask);
+
     public int updateArdVideoInspectTaskNoUpdater(ArdVideoInspectTask ardVideoInspectTask);
+
     /**
      * 批量删除视频巡检任务
-     * 
+     *
      * @param ids 需要删除的视频巡检任务主键集合
      * @return 结果
      */
@@ -53,9 +55,24 @@
 
     /**
      * 删除视频巡检任务信息
-     * 
+     *
      * @param id 视频巡检任务主键
      * @return 结果
      */
     public int deleteArdVideoInspectTaskById(String id);
+
+    /**
+     * 自动巡检任务
+     */
+    public void autoTaskRun();
+
+    /**
+     * 手动巡检任务
+     */
+    public void manualTaskRun();
+
+    /**
+     * 巡检任务
+     */
+    public void taskRun();
 }
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 ce253a1..126e3bc 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,19 +1,35 @@
 package com.ruoyi.inspect.service.impl;
 
-import java.util.List;
-        import com.ruoyi.common.utils.DateUtils;
+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.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 lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-    import java.util.ArrayList;
 
-    import com.ruoyi.common.utils.StringUtils;
-    import com.ruoyi.common.utils.SecurityUtils;
-    import org.springframework.transaction.annotation.Transactional;
-    import com.ruoyi.inspect.domain.ArdVideoInspectTaskStep;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import org.springframework.transaction.annotation.Transactional;
+import com.ruoyi.inspect.domain.ArdVideoInspectTaskStep;
 import com.ruoyi.inspect.mapper.ArdVideoInspectTaskMapper;
 import com.ruoyi.inspect.domain.ArdVideoInspectTask;
 import com.ruoyi.inspect.service.IArdVideoInspectTaskService;
+
+import javax.annotation.Resource;
 
 /**
  * 视频巡检任务Service业务层处理
@@ -22,9 +38,18 @@
  * @date 2023-05-30
  */
 @Service
+@Slf4j
 public class ArdVideoInspectTaskServiceImpl implements IArdVideoInspectTaskService {
-    @Autowired
+    @Resource
     private ArdVideoInspectTaskMapper ardVideoInspectTaskMapper;
+    @Resource
+    private ArdAlarmpointsWellMapper ardAlarmpointsWellMapper;
+    @Resource
+    private ArdVideoInspectRecordMapper ardVideoInspectRecordMapper;
+    @Resource
+    private ArdCamerasMapper ardCamerasMapper;
+    @Resource
+    private IHikClientService hikClientService;
 
     /**
      * 查询视频巡检任务
@@ -54,15 +79,15 @@
      * @param ardVideoInspectTask 视频巡检任务
      * @return 结果
      */
-        @Transactional
+    @Transactional
     @Override
     public int insertArdVideoInspectTask(ArdVideoInspectTask ardVideoInspectTask) {
-                ardVideoInspectTask.setCreateBy(SecurityUtils.getUsername());
-                ardVideoInspectTask.setCreateTime(DateUtils.getNowDate());
-                ardVideoInspectTask.setUserId(SecurityUtils.getUserId());
-            int rows = ardVideoInspectTaskMapper.insertArdVideoInspectTask(ardVideoInspectTask);
-            insertArdVideoInspectTaskStep(ardVideoInspectTask);
-            return rows;
+        ardVideoInspectTask.setCreateBy(SecurityUtils.getUsername());
+        ardVideoInspectTask.setCreateTime(DateUtils.getNowDate());
+        ardVideoInspectTask.setUserId(SecurityUtils.getUserId());
+        int rows = ardVideoInspectTaskMapper.insertArdVideoInspectTask(ardVideoInspectTask);
+        insertArdVideoInspectTaskStep(ardVideoInspectTask);
+        return rows;
     }
 
     /**
@@ -71,30 +96,32 @@
      * @param ardVideoInspectTask 视频巡检任务
      * @return 结果
      */
-        @Transactional
+    @Transactional
     @Override
     public int updateArdVideoInspectTask(ArdVideoInspectTask ardVideoInspectTask) {
-                ardVideoInspectTask.setUpdateBy(SecurityUtils.getUsername());
-                ardVideoInspectTask.setUpdateTime(DateUtils.getNowDate());
-                ardVideoInspectTaskMapper.deleteArdVideoInspectTaskStepByTaskId(ardVideoInspectTask.getId())
-            ;
-            insertArdVideoInspectTaskStep(ardVideoInspectTask);
+        ardVideoInspectTask.setUpdateBy(SecurityUtils.getUsername());
+        ardVideoInspectTask.setUpdateTime(DateUtils.getNowDate());
+        ardVideoInspectTaskMapper.deleteArdVideoInspectTaskStepByTaskId(ardVideoInspectTask.getId())
+        ;
+        insertArdVideoInspectTaskStep(ardVideoInspectTask);
         return ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask);
     }
+
     @Override
     public int updateArdVideoInspectTaskNoUpdater(ArdVideoInspectTask ardVideoInspectTask) {
         return ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask);
     }
+
     /**
      * 批量删除视频巡检任务
      *
      * @param ids 需要删除的视频巡检任务主键
      * @return 结果
      */
-        @Transactional
+    @Transactional
     @Override
     public int deleteArdVideoInspectTaskByIds(String[] ids) {
-                ardVideoInspectTaskMapper.deleteArdVideoInspectTaskStepByTaskIds(ids);
+        ardVideoInspectTaskMapper.deleteArdVideoInspectTaskStepByTaskIds(ids);
         return ardVideoInspectTaskMapper.deleteArdVideoInspectTaskByIds(ids);
     }
 
@@ -104,31 +131,342 @@
      * @param id 视频巡检任务主键
      * @return 结果
      */
-        @Transactional
+    @Transactional
     @Override
     public int deleteArdVideoInspectTaskById(String id) {
-                ardVideoInspectTaskMapper.deleteArdVideoInspectTaskStepByTaskId(id);
+        ardVideoInspectTaskMapper.deleteArdVideoInspectTaskStepByTaskId(id);
         return ardVideoInspectTaskMapper.deleteArdVideoInspectTaskById(id);
     }
 
-        /**
-         * 新增视频巡检步骤信息
-         *
-         * @param ardVideoInspectTask 视频巡检任务对象
-         */
-        public void insertArdVideoInspectTaskStep(ArdVideoInspectTask ardVideoInspectTask) {
-            List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTask.getArdVideoInspectTaskStepList();
-            String id = ardVideoInspectTask.getId();
-            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);
+    /**
+     * 新增视频巡检步骤信息
+     *
+     * @param ardVideoInspectTask 视频巡检任务对象
+     */
+    public void insertArdVideoInspectTaskStep(ArdVideoInspectTask ardVideoInspectTask) {
+        List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTask.getArdVideoInspectTaskStepList();
+        String id = ardVideoInspectTask.getId();
+        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);
+            }
+        }
+    }
+
+
+    /**
+     * 手动巡检任务
+     */
+    @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;
+            }
+            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);
+                    }
                 }
             }
         }
+    }
+
+    /**
+     * 自动巡检任务
+     */
+    @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);
+                        }
+                    }
+                }
+            }
+        }
+    }
+    @Override
+    public void taskRun() {
+        /*扫描所有可执行任务1-时间满足2-自动*/
+        ArdVideoInspectTask ardVideoInspectTask = new ArdVideoInspectTask();
+        List<ArdVideoInspectTask> ardVideoInspectTasks = ardVideoInspectTaskMapper.selectArdVideoInspectTaskList(ardVideoInspectTask);
+        for (ArdVideoInspectTask videoInspectTask : ardVideoInspectTasks) {
+            if (videoInspectTask.getInspectMode().equals("自动")) {
+                boolean timeCompare = DateUtils.TimeCompare(videoInspectTask.getStartTime(), videoInspectTask.getEndTime());
+                if (!timeCompare) {
+                    continue;
+                }
+            } else {
+                if (videoInspectTask.getMenualSwitch().equals("关")) {
+                    continue;
+                }
+            }
+            /*获取当前任务的所有巡检步骤*/
+            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);
+                    }
+                }
+            }
+        }
+    }
+
+    //步骤开始
+    private void startRunStep(ArdVideoInspectTask ardVideoInspectTask) {
+        try {
+            String currentStepId = ardVideoInspectTask.getCurrentStepId();
+            if (StringUtils.isNull(currentStepId)) {
+                log.info("当前开始巡检步骤id为空");
+                return;
+            }
+            log.info("步骤:" + 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);
+                    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.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);
+                        /*控制失败,当前步骤启动时间置null*/
+                        ArdVideoInspectTask avit = new ArdVideoInspectTask();
+                        avit.setId(ardVideoInspectTask.getId());
+                        avit.setCurrentStepId(step.getId());
+                        avit.setCurrentStepStartTime(null);
+                        ardVideoInspectTaskMapper.updateArdVideoInspectTask(avit);
+                    }
+                }
+            }
+        } catch (Exception ex) {
+            log.error("巡检开始异常:" + ex.getMessage());
+        }
+    }
+
+    //步骤停止
+    private void stopRunStep(ArdVideoInspectTask ardVideoInspectTask) {
+        try {
+            String currentStepId = ardVideoInspectTask.getCurrentStepId();
+            log.info("步骤:" + currentStepId + "停止");
+            if (StringUtils.isNull(currentStepId)) {
+                log.info("当前停止巡检步骤id为空");
+                return;
+            }
+            String currentStepStartTime = ardVideoInspectTask.getCurrentStepStartTime();
+            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();
+                /*停止录像*/
+                CameraCmd cmd = new CameraCmd();
+                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);
+                /*插入巡检记录*/
+                ArdVideoInspectRecord ardVideoInspectRecord = new ArdVideoInspectRecord();
+                ardVideoInspectRecord.setStepId(step.getId());
+                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);
+            }
+        } catch (Exception ex) {
+            log.error("巡检停止异常:" + ex.getMessage());
+        }
+    }
+
+    //步骤判断是否过期
+    private boolean isExpirdStep(ArdVideoInspectTask ardVideoInspectTask) {
+        try {
+            List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTask.getArdVideoInspectTaskStepList();
+            /*获取当前任务正在执行的步骤和当前步骤开始的时间*/
+            String currentStepId = ardVideoInspectTask.getCurrentStepId();
+            String currentStepStartTime = ardVideoInspectTask.getCurrentStepStartTime();
+            Optional<ArdVideoInspectTaskStep> objectOptional = ardVideoInspectTaskStepList.stream()
+                    .filter(ardVideoInspectTaskStep -> ardVideoInspectTaskStep.getId().equals(currentStepId))
+                    .findFirst();
+            if (objectOptional.isPresent()) {
+                /*获取当前步骤信息*/
+                ArdVideoInspectTaskStep currentStep = objectOptional.get();
+                /*获取到当前步骤的开始和结束时间*/
+                Date currentStepStartDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStartTime);
+                Date currentStepStopDate = DateUtils.addMinutes(currentStepStartDate, currentStep.getRecordingTime());
+                /*判断当前步骤时间是否过期*/
+                if (!DateUtils.TimeCompare(currentStepStartDate, currentStepStopDate)) {
+                    return true;
+                } else {
+                    return false;
+                }
+            } else {
+                return false;
+            }
+        } catch (Exception ex) {
+            log.error("判断巡检步骤过期异常:" + ex.getMessage());
+            return false;
+        }
+    }
+
+    //步骤切换
+    private String changeNextStep(ArdVideoInspectTask ardVideoInspectTask) {
+        try {
+            String currentStepId = ardVideoInspectTask.getCurrentStepId();
+            Optional<ArdVideoInspectTaskStep> objectOptional = ardVideoInspectTask.getArdVideoInspectTaskStepList().stream()
+                    .filter(obj -> obj.getId().equals(currentStepId))
+                    .findFirst();
+            if (objectOptional.isPresent()) {
+                ArdVideoInspectTaskStep step = objectOptional.get();
+                Integer currentStepOrderNumber = step.getOrderNumber();
+                /*判断当前步骤序号是否小于步骤总数*/
+                if (currentStepOrderNumber < ardVideoInspectTask.getArdVideoInspectTaskStepList().size()) {
+                    /*小于则执行下一步骤*/
+                    currentStepOrderNumber++;
+                } else {
+                    /*否则从1开始执行*/
+                    currentStepOrderNumber = 1;
+                }
+                Integer nextStepOrderNumber = currentStepOrderNumber;
+                /*更新当前任务切换新步骤*/
+                ArdVideoInspectTask avit = new ArdVideoInspectTask();
+                avit.setId(ardVideoInspectTask.getId());
+                String nextStepId = ardVideoInspectTask.getArdVideoInspectTaskStepList().stream()
+                        .filter(obj -> obj.getOrderNumber() == nextStepOrderNumber)
+                        .map(ArdVideoInspectTaskStep::getId)
+                        .findFirst()
+                        .orElse(null);
+                avit.setCurrentStepId(nextStepId);
+                ardVideoInspectTaskMapper.updateArdVideoInspectTask(avit);
+                log.info("步骤:" + currentStepId + "切换为" + nextStepId);
+                return nextStepId;
+            }
+        } catch (Exception ex) {
+            log.error("巡检步骤切换异常:" + ex.getMessage());
+        }
+        return "";
+    }
 }
diff --git a/ruoyi-admin/src/main/resources/application-ard.yml b/ruoyi-admin/src/main/resources/application-ard.yml
index 3c47288..d1f8fbe 100644
--- a/ruoyi-admin/src/main/resources/application-ard.yml
+++ b/ruoyi-admin/src/main/resources/application-ard.yml
@@ -1,6 +1,6 @@
 # minio配置
 minio:
-  endpoint: http://192.168.1.15:9001
+  endpoint: http://192.168.1.55:9001
   accessKey: admin
   secretKey: xzx12345
 # forest配置
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 7150798..fa2b341 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -70,13 +70,13 @@
   # redis 配置
   redis:
     # 地址
-    host: 192.168.1.15
+    host: 192.168.1.55
     # 端口,默认为6379
     port: 6379
     # 数据库索引
     database: 0
     # 密码
-    password: 5959932
+    password:
     # 连接超时时间
     timeout: 10s
     lettuce:
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/PatrolInspectionTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/PatrolInspectionTask.java
index e51cd61..291f326 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/PatrolInspectionTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/PatrolInspectionTask.java
@@ -35,205 +35,273 @@
 
     @Resource
     IArdVideoInspectTaskService ardVideoInspectTaskService;
-    @Resource
-    IArdAlarmpointsWellService ardAlarmpointsWellService;
-    @Resource
-    IArdVideoInspectRecordService ardVideoInspectRecordService;
-    @Resource
-    IArdCamerasService ardCamerasService;
-    @Resource
-    IHikClientService hikClientService;
 
+    //巡检任务
     public void scanRun() {
-        /*扫描所有可执行任务1-时间满足2-自动*/
-        ArdVideoInspectTask ardVideoInspectTask = new ArdVideoInspectTask();
-        ardVideoInspectTask.setInspectMode("自动");
-        List<ArdVideoInspectTask> ardVideoInspectTasks = ardVideoInspectTaskService.selectArdVideoInspectTaskList(ardVideoInspectTask);
-        for (ArdVideoInspectTask videoInspectTask : ardVideoInspectTasks) {
-            /*遍历所有时间满足的自动任务*/
-            boolean timeCompare = DateUtils.TimeCompare(videoInspectTask.getStartTime(), videoInspectTask.getEndTime());
-            if (timeCompare) {
-                /*获取当前任务的所有巡检步骤*/
-                List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTaskService.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 /*当前任务已经执行,判断是否到期*/ {
-                    boolean expird = isExpirdStep(videoInspectTask); /*判断当前步骤时间是否过期*/
-                    if (expird) {
-                        /*已过期,停止录像*/
-
-                        stopRunStep(videoInspectTask);
-                        /*切换下一步*/
-                        String nextStepId = changeNextStep(videoInspectTask);
-                        /*开始*/
-                        videoInspectTask.setCurrentStepId(nextStepId);
-                        startRunStep(videoInspectTask);
-                    }
-                }
-            }
-        }
+        ardVideoInspectTaskService.taskRun();
     }
 
-    //步骤开始
-    private void startRunStep(ArdVideoInspectTask ardVideoInspectTask) {
-        String currentStepId = ardVideoInspectTask.getCurrentStepId();
-        if(StringUtils.isNull(currentStepId))
-        {
-            log.info("当前开始巡检步骤id为空");
-            return;
-        }
-        log.info("步骤:" + 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 = ardAlarmpointsWellService.selectArdAlarmpointsWellById(wellId);
-                double[] targetPositon = new double[3];
-                targetPositon[0] = ardAlarmpointsWell.getLongitude();
-                targetPositon[1] = ardAlarmpointsWell.getLatitude();
-                targetPositon[2] = ardAlarmpointsWell.getAltitude();
-                /*获取相机坐标*/
-                ArdCameras cameras = ardCamerasService.selectArdCamerasById(cameraId);
-                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.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());
-                    ardVideoInspectTaskService.updateArdVideoInspectTaskNoUpdater(avit);
-                }
-            }
-        }
-    }
+    //自动巡检任务
+//    public void scanRun() {
+//        /*扫描所有可执行任务1-时间满足2-自动*/
+//        ArdVideoInspectTask ardVideoInspectTask = new ArdVideoInspectTask();
+//        ardVideoInspectTask.setInspectMode("自动");
+//        List<ArdVideoInspectTask> ardVideoInspectTasks = ardVideoInspectTaskService.selectArdVideoInspectTaskList(ardVideoInspectTask);
+//        for (ArdVideoInspectTask videoInspectTask : ardVideoInspectTasks) {
+//            /*遍历所有时间满足的自动任务*/
+//            boolean timeCompare = DateUtils.TimeCompare(videoInspectTask.getStartTime(), videoInspectTask.getEndTime());
+//            if (timeCompare) {
+//                /*获取当前任务的所有巡检步骤*/
+//                List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTaskService.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);
+//                        }
+//                    }
+//                }
+//            }
+//        }
+//    }
 
-    //步骤停止
-    private void stopRunStep(ArdVideoInspectTask ardVideoInspectTask) {
-        String currentStepId = ardVideoInspectTask.getCurrentStepId();
-        log.info("步骤:" + currentStepId + "停止");
-        if(StringUtils.isNull(currentStepId))
-        {
-            log.info("当前停止巡检步骤id为空");
-            return;
-        }
-        String currentStepStartTime = ardVideoInspectTask.getCurrentStepStartTime();
-        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();
-            /*停止录像*/
-            CameraCmd cmd = new CameraCmd();
-            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);
-            /*插入巡检记录*/
-            ArdVideoInspectRecord ardVideoInspectRecord = new ArdVideoInspectRecord();
-            ardVideoInspectRecord.setStepId(step.getId());
-            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);
-            ardVideoInspectRecordService.insertArdVideoInspectRecord(ardVideoInspectRecord);
-        }
-    }
-
-    //步骤判断是否过期
-    private boolean isExpirdStep(ArdVideoInspectTask ardVideoInspectTask) {
-        List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTask.getArdVideoInspectTaskStepList();
-        /*获取当前任务正在执行的步骤和当前步骤开始的时间*/
-        String currentStepId = ardVideoInspectTask.getCurrentStepId();
-        String currentStepStartTime = ardVideoInspectTask.getCurrentStepStartTime();
-        Optional<ArdVideoInspectTaskStep> objectOptional = ardVideoInspectTaskStepList.stream()
-                .filter(ardVideoInspectTaskStep -> ardVideoInspectTaskStep.getId().equals(currentStepId))
-                .findFirst();
-        if (objectOptional.isPresent()) {
-            /*获取当前步骤信息*/
-            ArdVideoInspectTaskStep currentStep = objectOptional.get();
-            /*获取到当前步骤的开始和结束时间*/
-            Date currentStepStartDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStartTime);
-            Date currentStepStopDate = DateUtils.addMinutes(currentStepStartDate, currentStep.getRecordingTime());
-            /*判断当前步骤时间是否过期*/
-            if (!DateUtils.TimeCompare(currentStepStartDate, currentStepStopDate)) {
-                return true;
-            } else {
-                return false;
-            }
-        } else {
-            return false;
-        }
-
-    }
-
-    //步骤切换
-    private String changeNextStep(ArdVideoInspectTask ardVideoInspectTask) {
-        String currentStepId = ardVideoInspectTask.getCurrentStepId();
-        Optional<ArdVideoInspectTaskStep> objectOptional = ardVideoInspectTask.getArdVideoInspectTaskStepList().stream()
-                .filter(obj -> obj.getId().equals(currentStepId))
-                .findFirst();
-        if (objectOptional.isPresent()) {
-            ArdVideoInspectTaskStep step = objectOptional.get();
-            Integer currentStepOrderNumber = step.getOrderNumber();
-            /*判断当前步骤序号是否小于步骤总数*/
-            if (currentStepOrderNumber < ardVideoInspectTask.getArdVideoInspectTaskStepList().size()) {
-                /*小于则执行下一步骤*/
-                currentStepOrderNumber++;
-            } else {
-                /*否则从1开始执行*/
-                currentStepOrderNumber = 1;
-            }
-            Integer nextStepOrderNumber = currentStepOrderNumber;
-            /*更新当前任务切换新步骤*/
-            ArdVideoInspectTask avit = new ArdVideoInspectTask();
-            avit.setId(ardVideoInspectTask.getId());
-            String nextStepId = ardVideoInspectTask.getArdVideoInspectTaskStepList().stream()
-                    .filter(obj -> obj.getOrderNumber() == nextStepOrderNumber)
-                    .map(ArdVideoInspectTaskStep::getId)
-                    .findFirst()
-                    .orElse(null);
-            avit.setCurrentStepId(nextStepId);
-            ardVideoInspectTaskService.updateArdVideoInspectTaskNoUpdater(avit);
-            log.info("步骤:" + currentStepId + "切换为"+nextStepId);
-            return nextStepId;
-        }
-        return "";
-    }
+//    //手动巡检任务
+//    public void ManualTaskRun(String taskId) {
+//        Timer timer = new Timer();
+//        // 5s后执行
+//        // timer.schedule(new MyTask(), 5000);
+//        // 马上执行任务,每隔2000执行一次
+//        timerTask = new TimerTask() {
+//            @Override
+//            public void run() {
+//                ArdVideoInspectTask videoInspectTask = ardVideoInspectTaskService.selectArdVideoInspectTaskById(taskId);
+//                /*获取当前任务的所有巡检步骤*/
+//                List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTaskService.selectArdVideoInspectTaskById(videoInspectTask.getId()).getArdVideoInspectTaskStepList();
+//                if (ardVideoInspectTaskStepList.size() == 0) {
+//                    log.error("当前任务没有发现执行步骤");
+//                    return;
+//                }
+//                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);
+//                        }
+//                    }
+//                }
+//            }
+//        };
+//        timer.scheduleAtFixedRate(timerTask, new Date(), 2000);
+//    }
+//
+//    //步骤开始
+//    private void startRunStep(ArdVideoInspectTask ardVideoInspectTask) {
+//        try {
+//            String currentStepId = ardVideoInspectTask.getCurrentStepId();
+//            if (StringUtils.isNull(currentStepId)) {
+//                log.info("当前开始巡检步骤id为空");
+//                return;
+//            }
+//            log.info("步骤:" + 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 = ardAlarmpointsWellService.selectArdAlarmpointsWellById(wellId);
+//                    double[] targetPositon = new double[3];
+//                    targetPositon[0] = ardAlarmpointsWell.getLongitude();
+//                    targetPositon[1] = ardAlarmpointsWell.getLatitude();
+//                    targetPositon[2] = ardAlarmpointsWell.getAltitude();
+//                    /*获取相机坐标*/
+//                    ArdCameras cameras = ardCamerasService.selectArdCamerasById(cameraId);
+//                    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.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());
+//                        ardVideoInspectTaskService.updateArdVideoInspectTaskNoUpdater(avit);
+//                    } else {
+//                        cmd.setEnable(false);//停止录像
+//                        hikClientService.recordToMinio(cmd);
+//                        /*控制失败,当前步骤启动时间置null*/
+//                        ArdVideoInspectTask avit = new ArdVideoInspectTask();
+//                        avit.setId(ardVideoInspectTask.getId());
+//                        avit.setCurrentStepId(step.getId());
+//                        avit.setCurrentStepStartTime(null);
+//                        ardVideoInspectTaskService.updateArdVideoInspectTaskNoUpdater(avit);
+//                    }
+//                }
+//            }
+//        } catch (Exception ex) {
+//            log.error("巡检开始异常:" + ex.getMessage());
+//        }
+//    }
+//
+//    //步骤停止
+//    private void stopRunStep(ArdVideoInspectTask ardVideoInspectTask) {
+//        try {
+//            String currentStepId = ardVideoInspectTask.getCurrentStepId();
+//            log.info("步骤:" + currentStepId + "停止");
+//            if (StringUtils.isNull(currentStepId)) {
+//                log.info("当前停止巡检步骤id为空");
+//                return;
+//            }
+//            String currentStepStartTime = ardVideoInspectTask.getCurrentStepStartTime();
+//            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();
+//                /*停止录像*/
+//                CameraCmd cmd = new CameraCmd();
+//                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);
+//                /*插入巡检记录*/
+//                ArdVideoInspectRecord ardVideoInspectRecord = new ArdVideoInspectRecord();
+//                ardVideoInspectRecord.setStepId(step.getId());
+//                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);
+//                ardVideoInspectRecordService.insertArdVideoInspectRecord(ardVideoInspectRecord);
+//            }
+//        } catch (Exception ex) {
+//            log.error("巡检停止异常:" + ex.getMessage());
+//        }
+//    }
+//
+//    //步骤判断是否过期
+//    private boolean isExpirdStep(ArdVideoInspectTask ardVideoInspectTask) {
+//        try {
+//            List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTask.getArdVideoInspectTaskStepList();
+//            /*获取当前任务正在执行的步骤和当前步骤开始的时间*/
+//            String currentStepId = ardVideoInspectTask.getCurrentStepId();
+//            String currentStepStartTime = ardVideoInspectTask.getCurrentStepStartTime();
+//            Optional<ArdVideoInspectTaskStep> objectOptional = ardVideoInspectTaskStepList.stream()
+//                    .filter(ardVideoInspectTaskStep -> ardVideoInspectTaskStep.getId().equals(currentStepId))
+//                    .findFirst();
+//            if (objectOptional.isPresent()) {
+//                /*获取当前步骤信息*/
+//                ArdVideoInspectTaskStep currentStep = objectOptional.get();
+//                /*获取到当前步骤的开始和结束时间*/
+//                Date currentStepStartDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStartTime);
+//                Date currentStepStopDate = DateUtils.addMinutes(currentStepStartDate, currentStep.getRecordingTime());
+//                /*判断当前步骤时间是否过期*/
+//                if (!DateUtils.TimeCompare(currentStepStartDate, currentStepStopDate)) {
+//                    return true;
+//                } else {
+//                    return false;
+//                }
+//            } else {
+//                return false;
+//            }
+//        } catch (Exception ex) {
+//            log.error("判断巡检步骤过期异常:" + ex.getMessage());
+//            return false;
+//        }
+//    }
+//
+//    //步骤切换
+//    private String changeNextStep(ArdVideoInspectTask ardVideoInspectTask) {
+//        try {
+//            String currentStepId = ardVideoInspectTask.getCurrentStepId();
+//            Optional<ArdVideoInspectTaskStep> objectOptional = ardVideoInspectTask.getArdVideoInspectTaskStepList().stream()
+//                    .filter(obj -> obj.getId().equals(currentStepId))
+//                    .findFirst();
+//            if (objectOptional.isPresent()) {
+//                ArdVideoInspectTaskStep step = objectOptional.get();
+//                Integer currentStepOrderNumber = step.getOrderNumber();
+//                /*判断当前步骤序号是否小于步骤总数*/
+//                if (currentStepOrderNumber < ardVideoInspectTask.getArdVideoInspectTaskStepList().size()) {
+//                    /*小于则执行下一步骤*/
+//                    currentStepOrderNumber++;
+//                } else {
+//                    /*否则从1开始执行*/
+//                    currentStepOrderNumber = 1;
+//                }
+//                Integer nextStepOrderNumber = currentStepOrderNumber;
+//                /*更新当前任务切换新步骤*/
+//                ArdVideoInspectTask avit = new ArdVideoInspectTask();
+//                avit.setId(ardVideoInspectTask.getId());
+//                String nextStepId = ardVideoInspectTask.getArdVideoInspectTaskStepList().stream()
+//                        .filter(obj -> obj.getOrderNumber() == nextStepOrderNumber)
+//                        .map(ArdVideoInspectTaskStep::getId)
+//                        .findFirst()
+//                        .orElse(null);
+//                avit.setCurrentStepId(nextStepId);
+//                ardVideoInspectTaskService.updateArdVideoInspectTaskNoUpdater(avit);
+//                log.info("步骤:" + currentStepId + "切换为" + nextStepId);
+//                return nextStepId;
+//            }
+//        } catch (Exception ex) {
+//            log.error("巡检步骤切换异常:" + ex.getMessage());
+//        }
+//        return "";
+//    }
 }

--
Gitblit v1.9.3