liusuyi
2023-05-31 8dcb6801a19f08af6c7baaf6a1b9105c8b4dc58b
增加手动巡检
已修改5个文件
923 ■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/inspect/service/IArdVideoInspectTaskService.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java 422 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-ard.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/PatrolInspectionTask.java 460 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
}
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 "";
    }
}
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配置
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:
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 "";
//    }
}