From 867b69b7e8b946dd839f1ef04de062ff68e43f9e Mon Sep 17 00:00:00 2001
From: liusuyi <13324259@qq.com>
Date: 星期五, 08 三月 2024 18:49:24 +0800
Subject: [PATCH] 修改视频巡检间隔单位由分钟改为秒

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

diff --git a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
index 3f1c570..efed952 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,496 +1,696 @@
-package com.ruoyi.inspect.service.impl;
-
-import java.text.SimpleDateFormat;
-import java.util.*;
-import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell;
-import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper;
-import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.device.camera.domain.ArdCameras;
-import com.ruoyi.device.camera.domain.CameraCmd;
-import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
-import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
-import com.ruoyi.device.hiksdk.service.IHikClientService;
-import com.ruoyi.inspect.domain.ArdVideoInspectRecord;
-import com.ruoyi.inspect.mapper.ArdVideoInspectRecordMapper;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-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.PostConstruct;
-import javax.annotation.Resource;
-
-/**
- * 瑙嗛宸℃浠诲姟Service涓氬姟灞傚鐞�
- *
- * @author ruoyi
- * @date 2023-05-30
- */
-@Service
-@Slf4j
-public class ArdVideoInspectTaskServiceImpl implements IArdVideoInspectTaskService {
-    @Resource
-    private ArdVideoInspectTaskMapper ardVideoInspectTaskMapper;
-    @Resource
-    private ArdAlarmpointsWellMapper ardAlarmpointsWellMapper;
-    @Resource
-    private ArdVideoInspectRecordMapper ardVideoInspectRecordMapper;
-    @Resource
-    private ArdCamerasMapper ardCamerasMapper;
-    @Resource
-    private IHikClientService hikClientService;
-
-    @PostConstruct
-    public void initTask()
-    {
-        List<ArdVideoInspectTask> ardVideoInspectTasks = ardVideoInspectTaskMapper.selectArdVideoInspectTaskList(new ArdVideoInspectTask());
-        /*鍚姩鍚庡皢鎵�鏈夋墜鍔ㄤ换鍔$疆涓哄叧闂�*/
-        for(ArdVideoInspectTask ardVideoInspectTask:ardVideoInspectTasks)
-        {
-            if(ardVideoInspectTask.getInspectMode().equals("鎵嬪姩"))
-            {
-                ardVideoInspectTask.setMenualSwitch("鍏�");
-                ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask);
-            }
-        }
-    }
-    /**
-     * 鏌ヨ瑙嗛宸℃浠诲姟
-     *
-     * @param id 瑙嗛宸℃浠诲姟涓婚敭
-     * @return 瑙嗛宸℃浠诲姟
-     */
-    @Override
-    public ArdVideoInspectTask selectArdVideoInspectTaskById(String id) {
-        return ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(id);
-    }
-
-    /**
-     * 鏌ヨ瑙嗛宸℃浠诲姟鍒楄〃
-     *
-     * @param ardVideoInspectTask 瑙嗛宸℃浠诲姟
-     * @return 瑙嗛宸℃浠诲姟
-     */
-    @Override
-    public List<ArdVideoInspectTask> selectArdVideoInspectTaskList(ArdVideoInspectTask ardVideoInspectTask) {
-        return ardVideoInspectTaskMapper.selectArdVideoInspectTaskList(ardVideoInspectTask);
-    }
-
-    /**
-     * 鏂板瑙嗛宸℃浠诲姟
-     *
-     * @param ardVideoInspectTask 瑙嗛宸℃浠诲姟
-     * @return 缁撴灉
-     */
-    @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;
-    }
-
-    /**
-     * 淇敼瑙嗛宸℃浠诲姟
-     *
-     * @param ardVideoInspectTask 瑙嗛宸℃浠诲姟
-     * @return 缁撴灉
-     */
-    @Transactional
-    @Override
-    public int updateArdVideoInspectTask(ArdVideoInspectTask ardVideoInspectTask) {
-        ardVideoInspectTask.setUpdateBy(SecurityUtils.getUsername());
-        ardVideoInspectTask.setUpdateTime(DateUtils.getNowDate());
-        ardVideoInspectTaskMapper.deleteArdVideoInspectTaskStepByTaskId(ardVideoInspectTask.getId());
-        insertArdVideoInspectTaskStep(ardVideoInspectTask);
-        return ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask);
-    }
-
-    /**
-     * 淇敼瑙嗛宸℃浠诲姟,bu鏇存柊姝ラ
-     *
-     * @param ardVideoInspectTask 瑙嗛宸℃浠诲姟
-     * @return 缁撴灉
-     */
-    @Transactional
-    @Override
-    public int updateArdVideoInspectTaskSingle(ArdVideoInspectTask ardVideoInspectTask) {
-        ardVideoInspectTask.setUpdateBy(SecurityUtils.getUsername());
-        ardVideoInspectTask.setUpdateTime(DateUtils.getNowDate());
-        return ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask);
-    }
-
-    @Override
-    public int updateArdVideoInspectTaskNoUpdater(ArdVideoInspectTask ardVideoInspectTask) {
-        return ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask);
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎瑙嗛宸℃浠诲姟
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑瑙嗛宸℃浠诲姟涓婚敭
-     * @return 缁撴灉
-     */
-    @Transactional
-    @Override
-    public int deleteArdVideoInspectTaskByIds(String[] ids) {
-        ardVideoInspectTaskMapper.deleteArdVideoInspectTaskStepByTaskIds(ids);
-        return ardVideoInspectTaskMapper.deleteArdVideoInspectTaskByIds(ids);
-    }
-
-    /**
-     * 鍒犻櫎瑙嗛宸℃浠诲姟淇℃伅
-     *
-     * @param id 瑙嗛宸℃浠诲姟涓婚敭
-     * @return 缁撴灉
-     */
-    @Transactional
-    @Override
-    public int deleteArdVideoInspectTaskById(String 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);
-            }
-        }
-    }
-
-    /**
-     * 鎵嬪姩宸℃浠诲姟
-     */
-    @Override
-    public void manualTaskRun(String TaskId) {
-        ArdVideoInspectTask videoInspectTask = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(TaskId);
-        if (videoInspectTask.getArdVideoInspectTaskStepList().size() == 0) {
-            return;
-        }
-        String currentStepId = videoInspectTask.getCurrentStepId();
-        String currentStepStartTime = videoInspectTask.getCurrentStepStartTime();
-        if (StringUtils.isNull(currentStepId)||StringUtils.isEmpty(currentStepId)) {
-            //浠�1鍙锋楠ゅ紑濮�
-            videoInspectTask.setCurrentStepId(videoInspectTask.getArdVideoInspectTaskStepList().get(0).getId());
-            if(InspectionTaskManager.taskMap.containsKey(TaskId)) {
-                startRunStep(videoInspectTask);
-            }
-        } else /*褰撳墠浠诲姟宸茬粡鎵ц锛屽垽鏂槸鍚﹀埌鏈�*/ {
-            if (StringUtils.isNull(currentStepStartTime)||StringUtils.isEmpty(currentStepStartTime)) {
-                //褰撳墠浠诲姟鍚姩鏃堕棿涓簄ull锛屽垯璇存槑褰撳墠姝ラ琚腑鏂紝鐩存帴鍚姩褰撳墠姝ラ
-                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();
-                String currentStepStartTime = videoInspectTask.getCurrentStepStartTime();
-                if (StringUtils.isNull(currentStepId)||StringUtils.isEmpty(currentStepId)) {
-                    //寮�濮嬪綋鍓嶄换鍔$殑绗竴涓楠�
-                    videoInspectTask.setCurrentStepId(ardVideoInspectTaskStepList.get(0).getId());
-                    startRunStep(videoInspectTask);
-                } else /*褰撳墠浠诲姟宸茬粡鎵ц锛屽垽鏂槸鍚﹀埌鏈�*/ {
-                    if (StringUtils.isNull(currentStepStartTime)||StringUtils.isEmpty(currentStepStartTime)) {
-                        //褰撳墠浠诲姟鍚姩鏃堕棿涓虹┖锛屽垯璇存槑褰撳墠姝ラ琚腑鏂紝鐩存帴鍚姩褰撳墠姝ラ
-                        startRunStep(videoInspectTask);
-                    } else {
-                        //鍒ゆ柇褰撳墠姝ラ鏃堕棿鏄惁杩囨湡
-                        boolean expird = isExpirdStep(videoInspectTask);
-                        if (expird) {
-                            //鍋滄褰曞儚
-                            stopRunStep(videoInspectTask);
-                            //鍒囨崲姝ラ
-                            String nextStepId = changeNextStep(videoInspectTask);
-                            //寮�濮嬩笅涓�姝ラ
-                            videoInspectTask.setCurrentStepId(nextStepId);
-                            startRunStep(videoInspectTask);
-                        }
-                    }
-                }
-            }
-        }
-    }
-    /**
-     * 鑷姩鎵嬪姩鍚堝苟锛屾壂搴撴柟寮忥紝鐩墠涓嶄娇鐢�
-     */
-    @Override
-    public void taskRun() {
-        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();//褰撳墠姝ラid
-            String currentStepStartTime = videoInspectTask.getCurrentStepStartTime();//褰撳墠姝ラ鍚姩鏃堕棿
-            if (StringUtils.isNull(currentStepId)||StringUtils.isEmpty(currentStepId)) {
-                //寮�濮嬬涓�涓楠�
-                videoInspectTask.setCurrentStepId(ardVideoInspectTaskStepList.get(0).getId());
-                startRunStep(videoInspectTask);
-            } else {
-                if (StringUtils.isNull(currentStepStartTime)||StringUtils.isEmpty(currentStepStartTime)) {
-                    //褰撳墠浠诲姟鍚姩鏃堕棿涓虹┖锛屽垯璇存槑褰撳墠姝ラ琚腑鏂紝鐩存帴鍚姩褰撳墠姝ラ
-                    startRunStep(videoInspectTask);
-                } else {
-                    boolean expird = isExpirdStep(videoInspectTask); /*鍒ゆ柇褰撳墠姝ラ鏃堕棿鏄惁杩囨湡*/
-                    if (expird) {
-                        //鍋滄褰曞儚
-                        stopRunStep(videoInspectTask);
-                        //鍒囨崲姝ラ
-                        String nextStepId = changeNextStep(videoInspectTask);
-                        //寮�濮嬩笅涓�姝ラ
-                        videoInspectTask.setCurrentStepId(nextStepId);
-                        startRunStep(videoInspectTask);
-                    }
-                }
-            }
-        }
-    }
-
-    //姝ラ寮�濮�
-    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);//鍋滄褰曞儚
-                        cmd.setUploadMinio(true);
-                        hikClientService.recordToMinio(cmd);
-                        /*鎺у埗澶辫触,褰撳墠姝ラ鍚姩鏃堕棿缃畁ull*/
-                        ArdVideoInspectTask avit = new ArdVideoInspectTask();
-                        avit.setId(ardVideoInspectTask.getId());
-                        avit.setCurrentStepId(step.getId());
-                        avit.setCurrentStepStartTime("");
-                        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);
-                cmd.setUploadMinio(true);
-                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();
-            /*鑾峰彇褰撳墠浠诲姟姝e湪鎵ц鐨勬楠ゅ拰褰撳墠姝ラ寮�濮嬬殑鏃堕棿*/
-            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 "";
-    }
-}
+package com.ruoyi.inspect.service.impl;
+
+import java.util.*;
+
+import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell;
+import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.device.camera.domain.ArdCameras;
+import com.ruoyi.device.camera.domain.CameraCmd;
+import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
+import com.ruoyi.device.camera.service.ICameraSdkService;
+import com.ruoyi.inspect.domain.ArdVideoInspectRecord;
+import com.ruoyi.inspect.mapper.ArdVideoInspectRecordMapper;
+import com.ruoyi.inspect.mapper.ArdVideoInspectTaskStepMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+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.PostConstruct;
+import javax.annotation.Resource;
+
+/**
+ * 瑙嗛宸℃浠诲姟Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2023-05-30
+ */
+@Service
+@Slf4j(topic = "patrolInspectionTask")
+public class ArdVideoInspectTaskServiceImpl implements IArdVideoInspectTaskService {
+    @Resource
+    private ArdVideoInspectTaskMapper ardVideoInspectTaskMapper;
+    @Resource
+    private ArdVideoInspectTaskStepMapper ardVideoInspectTaskStepMapper;
+    @Resource
+    private ArdAlarmpointsWellMapper ardAlarmpointsWellMapper;
+    @Resource
+    private ArdVideoInspectRecordMapper ardVideoInspectRecordMapper;
+    @Resource
+    private ArdCamerasMapper ardCamerasMapper;
+    @Resource
+    private ICameraSdkService cameraSdkService;
+    @Resource
+    private ArdCamerasMapper camerasMapper;
+
+    @PostConstruct
+    public void initTask() {
+        List<ArdVideoInspectTask> ardVideoInspectTasks = ardVideoInspectTaskMapper.selectArdVideoInspectTaskList(new ArdVideoInspectTask());
+        for (ArdVideoInspectTask ardVideoInspectTask : ardVideoInspectTasks) {
+            /*鍚姩鍚庡皢鎵�鏈夋墜鍔ㄤ换鍔$疆涓哄叧闂�,鎵�鏈変换鍔″綋鍓嶆楠や俊鎭竻绌�*/
+            if (ardVideoInspectTask.getInspectMode().equals("鎵嬪姩")) {
+                ardVideoInspectTask.setMenualSwitch("鍏�");
+            }
+            ardVideoInspectTask.setCurrentStepId("");
+            ardVideoInspectTask.setCurrentStepStartTime("");
+            ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask);
+        }
+    }
+
+    /**
+     * 鏌ヨ瑙嗛宸℃浠诲姟
+     *
+     * @param id 瑙嗛宸℃浠诲姟涓婚敭
+     * @return 瑙嗛宸℃浠诲姟
+     */
+    @Override
+    public ArdVideoInspectTask selectArdVideoInspectTaskById(String id) {
+        return ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(id);
+    }
+
+    /**
+     * 鏌ヨ瑙嗛宸℃浠诲姟鍒楄〃
+     *
+     * @param ardVideoInspectTask 瑙嗛宸℃浠诲姟
+     * @return 瑙嗛宸℃浠诲姟
+     */
+    @Override
+    public List<ArdVideoInspectTask> selectArdVideoInspectTaskList(ArdVideoInspectTask ardVideoInspectTask) {
+        return ardVideoInspectTaskMapper.selectArdVideoInspectTaskList(ardVideoInspectTask);
+    }
+
+    /**
+     * 鏂板瑙嗛宸℃浠诲姟
+     *
+     * @param ardVideoInspectTask 瑙嗛宸℃浠诲姟
+     * @return 缁撴灉
+     */
+    @Transactional
+    @Override
+    public int insertArdVideoInspectTask(ArdVideoInspectTask ardVideoInspectTask) {
+        ardVideoInspectTask.setId(IdUtils.simpleUUID());
+        ardVideoInspectTask.setCreateBy(SecurityUtils.getUsername());
+        ardVideoInspectTask.setCreateTime(DateUtils.getNowDate());
+        ardVideoInspectTask.setUserId(SecurityUtils.getUserId());
+        int rows = ardVideoInspectTaskMapper.insertArdVideoInspectTask(ardVideoInspectTask);
+        insertArdVideoInspectTaskStep(ardVideoInspectTask);
+        return rows;
+    }
+
+    /**
+     * 淇敼瑙嗛宸℃浠诲姟
+     *
+     * @param ardVideoInspectTask 瑙嗛宸℃浠诲姟
+     * @return 缁撴灉
+     */
+    @Transactional
+    @Override
+    public int updateArdVideoInspectTask(ArdVideoInspectTask ardVideoInspectTask) {
+        ardVideoInspectTask.setUpdateBy(SecurityUtils.getUsername());
+        ardVideoInspectTask.setUpdateTime(DateUtils.getNowDate());
+        //  ardVideoInspectTaskMapper.deleteArdVideoInspectTaskStepByTaskId(ardVideoInspectTask.getId());
+        insertArdVideoInspectTaskStep(ardVideoInspectTask);
+        return ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask);
+    }
+
+    /**
+     * 淇敼瑙嗛宸℃浠诲姟,bu鏇存柊姝ラ
+     *
+     * @param ardVideoInspectTask 瑙嗛宸℃浠诲姟
+     * @return 缁撴灉
+     */
+    @Transactional
+    @Override
+    public int updateArdVideoInspectTaskSingle(ArdVideoInspectTask ardVideoInspectTask) {
+        ardVideoInspectTask.setUpdateBy(SecurityUtils.getUsername());
+        ardVideoInspectTask.setUpdateTime(DateUtils.getNowDate());
+        return ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask);
+    }
+
+    @Override
+    public int updateArdVideoInspectTaskNoUpdater(ArdVideoInspectTask ardVideoInspectTask) {
+        return ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎瑙嗛宸℃浠诲姟
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑瑙嗛宸℃浠诲姟涓婚敭
+     * @return 缁撴灉
+     */
+    @Transactional
+    @Override
+    public int deleteArdVideoInspectTaskByIds(String[] ids) {
+        ardVideoInspectTaskMapper.deleteArdVideoInspectTaskStepByTaskIds(ids);
+        return ardVideoInspectTaskMapper.deleteArdVideoInspectTaskByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎瑙嗛宸℃浠诲姟淇℃伅
+     *
+     * @param id 瑙嗛宸℃浠诲姟涓婚敭
+     * @return 缁撴灉
+     */
+    @Transactional
+    @Override
+    public int deleteArdVideoInspectTaskById(String id) {
+        ardVideoInspectTaskMapper.deleteArdVideoInspectTaskStepByTaskId(id);
+        return ardVideoInspectTaskMapper.deleteArdVideoInspectTaskById(id);
+    }
+
+    /**
+     * 鏂板瑙嗛宸℃姝ラ淇℃伅
+     *
+     * @param ardVideoInspectTask 瑙嗛宸℃浠诲姟瀵硅薄
+     */
+    public void insertArdVideoInspectTaskStep(ArdVideoInspectTask ardVideoInspectTask) {
+        List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTask.getArdVideoInspectTaskStepList();
+        //鑾峰彇鐩告満
+        ArdCameras camera = camerasMapper.selectArdCamerasById(ardVideoInspectTask.getCameraId());
+        Collections.sort(ardVideoInspectTaskStepList, new ArdVideoInspectTaskStepComparator(this.ardAlarmpointsWellMapper, camera.getLongitude(), camera.getLatitude()));
+        String taskId = ardVideoInspectTask.getId();
+        for (int i = 0; i < ardVideoInspectTaskStepList.size(); i++) {
+            ArdVideoInspectTaskStep step = ardVideoInspectTaskStepList.get(i);
+            step.setTaskId(taskId);
+            step.setOrderNumber(new Integer(i + 1));
+        }
+        if (StringUtils.isNotNull(ardVideoInspectTaskStepList)) {
+            for (ArdVideoInspectTaskStep ardVideoInspectTaskStep : ardVideoInspectTaskStepList) {
+                if (ardVideoInspectTaskStep.getId() == null) {
+                    //鏂扮殑姝ラ,娣诲姞
+                    ardVideoInspectTaskStep.setId(IdUtils.simpleUUID());
+                    ardVideoInspectTaskStepMapper.insertArdVideoInspectTaskStep(ardVideoInspectTaskStep);
+                } else {
+                    //宸叉湁姝ラ,鏇存柊
+                    ardVideoInspectTaskStepMapper.updateArdVideoInspectTaskStep(ardVideoInspectTaskStep);
+                }
+            }
+        }
+    }
+
+    /**
+     * 鎵嬪姩宸℃浠诲姟
+     */
+    @Override
+    public void manualTaskRun(String TaskId) {
+        try {
+            ArdVideoInspectTask videoInspectTask = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(TaskId);
+            if (!videoInspectTask.getMenualSwitch().equals("寮�")) {
+                return;
+            }
+            if (videoInspectTask.getArdVideoInspectTaskStepList().size() == 0) {
+                return;
+            }
+            String currentStepId = videoInspectTask.getCurrentStepId();
+            String currentStepStartTime = videoInspectTask.getCurrentStepStartTime();
+            if (StringUtils.isNull(currentStepId) || StringUtils.isEmpty(currentStepId)) {
+                //浠�1鍙锋楠ゅ紑濮�
+                videoInspectTask.setCurrentStepId(videoInspectTask.getArdVideoInspectTaskStepList().get(0).getId());
+                if (InspectionTaskManager.taskMap.containsKey(TaskId)) {
+                    startRunStep(videoInspectTask);
+                }
+            } else /*褰撳墠浠诲姟宸茬粡鎵ц锛屽垽鏂槸鍚﹀埌鏈�*/ {
+                if (StringUtils.isNull(currentStepStartTime) || StringUtils.isEmpty(currentStepStartTime)) {
+                    //褰撳墠浠诲姟鍚姩鏃堕棿涓簄ull锛屽垯璇存槑褰撳墠姝ラ琚腑鏂紝鐩存帴鍚姩褰撳墠姝ラ
+                    startRunStep(videoInspectTask);
+                } else {
+                    boolean expird = isExpirdStep(videoInspectTask); /*鍒ゆ柇褰撳墠姝ラ鏃堕棿鏄惁杩囨湡*/
+                    if (expird) {
+                        //鍋滄褰曞儚
+                        stopRunStep(videoInspectTask);
+                        //鍒囨崲姝ラ
+                        String nextStepId = changeNextStep(videoInspectTask);
+                        //寮�濮嬩笅涓�姝ラ
+                        videoInspectTask.setCurrentStepId(nextStepId);
+                        startRunStep(videoInspectTask);
+                    } else {
+                        //鏈繃鏈熷皾璇曞紩瀵硷紝寮曞澶辫触娓呯┖褰撳墠姝ラ寮�濮嬫椂闂达紝鏍囪涓柇
+                        tryGuide(videoInspectTask);
+                    }
+                }
+            }
+        } catch (Exception ex) {
+            log.error("鎵嬪姩宸℃寮傚父锛�" + ex.getMessage());
+        }
+    }
+
+    /**
+     * 鍒ゆ柇褰撳墠鎵嬪姩浠诲姟鑳藉惁寮�鍚�
+     */
+    @Override
+    public boolean isEnablemanualTask(String TaskId) {
+        /*鎵弿褰撳墠鎵嬪姩寮�鐨勪换鍔★紝鑾峰彇鎵嬪姩鎺у埗鐨勭浉鏈篿dList*/
+        List<String> menualCameraId = new ArrayList<>();
+        ArdVideoInspectTask menualTask = new ArdVideoInspectTask();
+        menualTask.setInspectMode("鎵嬪姩");
+        menualTask.setMenualSwitch("寮�");
+        List<ArdVideoInspectTask> menualTasks = ardVideoInspectTaskMapper.selectArdVideoInspectTaskList(menualTask);
+        if (menualTasks.size() > 0) {
+            for (ArdVideoInspectTask task : menualTasks) {
+                if (StringUtils.isNull(task.getCameraId()) || StringUtils.isEmpty(task.getCameraId())) {
+                    continue;
+                }
+                if (!menualCameraId.contains(task.getCameraId())) {
+                    menualCameraId.add(task.getCameraId());
+                }
+            }
+        }
+        /*鍒ゆ柇鐩告満鏄惁宸茬粡琚汉鎵嬪姩鎺у埗*/
+        ArdVideoInspectTask videoInspectTask = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(TaskId);
+        if (StringUtils.isNull(videoInspectTask)) {
+            return false;
+        }
+        String cameraId = videoInspectTask.getCameraId();
+        if (StringUtils.isEmpty(cameraId)) {
+            return false;
+        }
+        if (menualCameraId.contains(cameraId)) {
+            /*濡傛灉褰撳墠浠诲姟鍏宠仈鐨勭浉鏈哄凡缁忔湁浜烘墜鍔ㄦ帶鍒讹紝鍒欎笉鍏佽鎺у埗*/
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 鑷姩宸℃浠诲姟
+     */
+    @Override
+    public void autoTaskRun() {
+        try {
+            /*鎵弿褰撳墠鎵嬪姩寮�鐨勪换鍔★紝鑾峰彇鎵嬪姩鎺у埗鐨勭浉鏈篿dList*/
+            List<String> menualCameraId = new ArrayList<>();
+            ArdVideoInspectTask menualTask = new ArdVideoInspectTask();
+            menualTask.setInspectMode("鎵嬪姩");
+            menualTask.setMenualSwitch("寮�");
+            List<ArdVideoInspectTask> menualTasks = ardVideoInspectTaskMapper.selectArdVideoInspectTaskList(menualTask);
+            if (menualTasks.size() > 0) {
+                for (ArdVideoInspectTask task : menualTasks) {
+                    if (StringUtils.isNull(task.getCameraId()) || StringUtils.isEmpty(task.getCameraId())) {
+                        continue;
+                    }
+                    if (!menualCameraId.contains(task.getCameraId())) {
+                        menualCameraId.add(task.getCameraId());
+                    }
+                }
+            }
+
+            /*鎵弿鎵�鏈夎嚜鍔ㄤ换鍔�*/
+            ArdVideoInspectTask autoTask = new ArdVideoInspectTask();
+            autoTask.setInspectMode("鑷姩");
+            List<ArdVideoInspectTask> ardVideoInspectTasks = ardVideoInspectTaskMapper.selectArdVideoInspectTaskList(autoTask);
+            for (ArdVideoInspectTask videoInspectTask : ardVideoInspectTasks) {
+                /*閬嶅巻鎵�鏈夋椂闂存弧瓒崇殑鑷姩浠诲姟*/
+                boolean timeCompare = DateUtils.TimeCompare(videoInspectTask.getStartTime(), videoInspectTask.getEndTime());
+                if (timeCompare) {
+                    if (menualCameraId.contains(videoInspectTask.getCameraId())) {
+                        /*鑻ュ綋鍓嶇浉鏈烘鍦ㄦ湁浠诲姟鎵嬪姩鎵ц锛屽垯涓嶆墽琛�*/
+                        continue;
+                    }
+                    /*鑾峰彇褰撳墠浠诲姟鐨勬墍鏈夊贰妫�姝ラ*/
+                    List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(videoInspectTask.getId()).getArdVideoInspectTaskStepList();
+                    if (ardVideoInspectTaskStepList.size() == 0) {
+                        continue;
+                    }
+                    videoInspectTask.setArdVideoInspectTaskStepList(ardVideoInspectTaskStepList);
+
+                    String currentStepId = videoInspectTask.getCurrentStepId();
+                    String currentStepStartTime = videoInspectTask.getCurrentStepStartTime();
+                    if (StringUtils.isNull(currentStepId) || StringUtils.isEmpty(currentStepId)) {
+                        //寮�濮嬪綋鍓嶄换鍔$殑绗竴涓楠�
+                        videoInspectTask.setCurrentStepId(ardVideoInspectTaskStepList.get(0).getId());
+                        startRunStep(videoInspectTask);
+                    } else /*褰撳墠浠诲姟宸茬粡鎵ц锛屽垽鏂槸鍚﹀埌鏈�*/ {
+                        if (StringUtils.isNull(currentStepStartTime) || StringUtils.isEmpty(currentStepStartTime)) {
+                            //褰撳墠浠诲姟鍚姩鏃堕棿涓虹┖锛屽垯璇存槑褰撳墠姝ラ琚腑鏂紝鐩存帴鍚姩褰撳墠姝ラ
+                            startRunStep(videoInspectTask);
+                        } else {
+                            //鍒ゆ柇褰撳墠姝ラ鏃堕棿鏄惁杩囨湡
+                            boolean expird = isExpirdStep(videoInspectTask);
+                            if (expird) {
+                                //鍋滄褰曞儚
+                                stopRunStep(videoInspectTask);
+                                //鍒囨崲姝ラ
+                                String nextStepId = changeNextStep(videoInspectTask);
+                                //寮�濮嬩笅涓�姝ラ
+                                videoInspectTask.setCurrentStepId(nextStepId);
+                                startRunStep(videoInspectTask);
+                            } else {
+                                tryGuide(videoInspectTask);
+                            }
+                        }
+                    }
+                } else {
+                    if (StringUtils.isNotEmpty(videoInspectTask.getCurrentStepId())) {
+                        videoInspectTask.setCurrentStepId("");
+                        ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(videoInspectTask);
+                    }
+                    if (StringUtils.isNotEmpty(videoInspectTask.getCurrentStepStartTime())) {
+                        videoInspectTask.setCurrentStepId("");
+                        ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(videoInspectTask);
+                    }
+                }
+            }
+        } catch (Exception ex) {
+            log.error("鑷姩宸℃浠诲姟寮傚父锛�" + ex.getMessage());
+        }
+    }
+
+    /**
+     * 鑷姩鎵嬪姩鍚堝苟锛屾壂搴撴柟寮忥紝鐩墠涓嶄娇鐢�
+     */
+    @Override
+    public void taskRun() {
+        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();//褰撳墠姝ラid
+            String currentStepStartTime = videoInspectTask.getCurrentStepStartTime();//褰撳墠姝ラ鍚姩鏃堕棿
+            if (StringUtils.isNull(currentStepId) || StringUtils.isEmpty(currentStepId)) {
+                //寮�濮嬬涓�涓楠�
+                videoInspectTask.setCurrentStepId(ardVideoInspectTaskStepList.get(0).getId());
+                startRunStep(videoInspectTask);
+            } else {
+                if (StringUtils.isNull(currentStepStartTime) || StringUtils.isEmpty(currentStepStartTime)) {
+                    //褰撳墠浠诲姟鍚姩鏃堕棿涓虹┖锛屽垯璇存槑褰撳墠姝ラ琚腑鏂紝鐩存帴鍚姩褰撳墠姝ラ
+                    startRunStep(videoInspectTask);
+                } else {
+                    boolean expird = isExpirdStep(videoInspectTask); /*鍒ゆ柇褰撳墠姝ラ鏃堕棿鏄惁杩囨湡*/
+                    if (expird) {
+                        //鍋滄褰曞儚
+                        stopRunStep(videoInspectTask);
+                        //鍒囨崲姝ラ
+                        String nextStepId = changeNextStep(videoInspectTask);
+                        //寮�濮嬩笅涓�姝ラ
+                        videoInspectTask.setCurrentStepId(nextStepId);
+                        startRunStep(videoInspectTask);
+                    }
+                }
+            }
+        }
+    }
+
+    //姝ラ寮�濮�
+    private void startRunStep(ArdVideoInspectTask ardVideoInspectTask) {
+        try {
+            String currentStepId = ardVideoInspectTask.getCurrentStepId();
+            if (StringUtils.isNull(currentStepId)) {
+                log.debug("褰撳墠寮�濮嬪贰妫�姝ラid涓虹┖");
+                return;
+            }
+            log.debug("宸℃姝ラ锛�" + currentStepId + "灏濊瘯寮�濮�");
+            String cameraId = ardVideoInspectTask.getCameraId();
+            Integer channel = ardVideoInspectTask.getChannel();
+            Optional<ArdVideoInspectTaskStep> objectOptional = ardVideoInspectTask.getArdVideoInspectTaskStepList().stream()
+                    .filter(obj -> obj.getId().equals(currentStepId))
+                    .findFirst();
+            if (objectOptional.isPresent()) {
+                ArdVideoInspectTaskStep step = objectOptional.get();
+                /*鏇存柊浠诲姟褰撳墠姝ラid鍜屾楠ゅ惎鍔ㄦ椂闂�*/
+                ardVideoInspectTask.setCurrentStepId(step.getId());
+                ardVideoInspectTask.setCurrentStepStartTime(DateUtils.getTime());
+                ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask);
+                String wellId = step.getWellId();
+                if (!StringUtils.isNull(wellId)) {
+                    /*鑾峰彇浜曞潗鏍�*/
+                    ArdAlarmpointsWell well = ardAlarmpointsWellMapper.selectArdAlarmpointsWellById(wellId);
+                    if(StringUtils.isNull(well))
+                    {
+                        log.debug("鎵句笉鍒颁簳:" + well.getWellId());
+                        return;
+                    }
+                    log.debug("鎵惧埌浜�:" + well.getWellId());
+                    double[] targetPositon = new double[3];
+                    targetPositon[0] = well.getLongitude();
+                    targetPositon[1] = well.getLatitude();
+                    //targetPositon[2] = well.getAltitude();
+                    log.debug("鎵惧埌浜曞潗鏍�:" +well.getLongitude()+"-"+well.getLatitude()+"-"+well.getAltitude());
+                    /*鑾峰彇鐩告満鍧愭爣*/
+                    ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId);
+                    if (StringUtils.isNull(cameras)) {
+                        log.debug("鎵句笉鍒扮浉鏈�:" + cameraId);
+                        return;
+                    }
+                    log.debug("鎵惧埌鐩告満:" + 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.setChanNo(channel);
+                    cmd.setTargetPosition(targetPositon);
+                    cmd.setOperator("sys_patrol_inspect");
+                    cmd.setExpired(step.getRecordingTime());//绉掍负鍗曚綅
+                    boolean setTargetPosition = cameraSdkService.guideTargetPosition(cmd);
+                    if (setTargetPosition) {
+                        /*鎺у埗鐩告満宸℃鎴愬姛锛屽紑濮嬪綍鍍�*/
+                        cameraSdkService.recordStart(cmd);
+                    } else {
+                        /*鎺у埗澶辫触,褰撳墠姝ラ鍚姩鏃堕棿缃畁ull*/
+                        ardVideoInspectTask.setCurrentStepStartTime("");
+                        ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask);
+                    }
+                }
+            }
+        } catch (Exception ex) {
+            log.error("宸℃寮�濮嬪紓甯革細" + ex.getMessage());
+        }
+    }
+
+    //灏濊瘯鎺у埗寮曞
+    private void tryGuide(ArdVideoInspectTask ardVideoInspectTask) {
+        try {
+            String currentStepId = ardVideoInspectTask.getCurrentStepId();
+            if (StringUtils.isNull(currentStepId)) {
+                log.debug("褰撳墠寮�濮嬪贰妫�姝ラid涓虹┖");
+                return;
+            }
+            log.debug("宸℃姝e父锛屽皾璇曞紩瀵硷細" + 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 well = ardAlarmpointsWellMapper.selectArdAlarmpointsWellById(wellId);
+                    double[] targetPositon = new double[2];
+                    targetPositon[0] = well.getLongitude();
+                    targetPositon[1] = well.getLatitude();
+                    //targetPositon[2] = well.getAltitude();
+                    /*鑾峰彇鐩告満鍧愭爣*/
+                    ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId);
+                    if (StringUtils.isNull(cameras)) {
+                        log.debug("鎵句笉鍒扮浉鏈�:" + cameraId);
+                        return;
+                    }
+                    double[] cameraPositon = new double[3];
+                    cameraPositon[0] = cameras.getLongitude();
+                    cameraPositon[1] = cameras.getLatitude();
+                    cameraPositon[2] = cameras.getAltitude();
+                    /*鎺у埗鐩告満宸℃*/
+                    CameraCmd cmd = new CameraCmd();
+                    cmd.setCameraId(cameraId);
+                    cmd.setChanNo(channel);
+                    cmd.setTargetPosition(targetPositon);
+                    cmd.setOperator("sys_patrol_inspect");
+                    cmd.setExpired(step.getRecordingTime());//绉掍负鍗曚綅
+                    boolean setTargetPosition = cameraSdkService.guideTargetPosition(cmd);
+                    if (!setTargetPosition) {
+                        /*鎺у埗澶辫触,褰撳墠姝ラ鍚姩鏃堕棿缃畁ull*/
+                        ardVideoInspectTask.setCurrentStepStartTime("");
+                        ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask);
+                    } else {
+                        log.debug("寮曞鎴愬姛!");
+                    }
+                }
+            }
+        } catch (Exception ex) {
+            log.error("宸℃灏濊瘯寮曞寮傚父锛�" + ex.getMessage());
+        }
+    }
+
+    //姝ラ鍋滄
+    private void stopRunStep(ArdVideoInspectTask ardVideoInspectTask) {
+        try {
+            String currentStepId = ardVideoInspectTask.getCurrentStepId();
+            log.debug("宸℃姝ラ锛�" + 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.setChanNo(channel);
+                cmd.setOperator("sys_patrol_inspect");
+                cmd.setRecordBucketName("record");
+                cmd.setRecordObjectName("inspectGuide/" + DateUtils.getDateYYYYMMDD()+"/"+ IdUtils.fastSimpleUUID());
+                String url = cameraSdkService.recordStopToMinio(cmd);
+                /*鎻掑叆宸℃璁板綍*/
+                ArdVideoInspectRecord ardVideoInspectRecord = new ArdVideoInspectRecord();
+                ardVideoInspectRecord.setId(IdUtils.simpleUUID());
+                ardVideoInspectRecord.setStepId(step.getId());
+                ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellById(step.getWellId());
+                if (StringUtils.isNotNull(ardAlarmpointsWell)) {
+                    ardVideoInspectRecord.setWellName(ardAlarmpointsWell.getWellId());
+                }
+                Date currentStepStartDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStartTime);
+                Date currentStepStopDate = DateUtils.addMinutes(currentStepStartDate, step.getRecordingTime());
+                ardVideoInspectRecord.setStartTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStartDate));
+                ardVideoInspectRecord.setEndTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStopDate));
+                ardVideoInspectRecord.setRecordFilePath(url);
+                ardVideoInspectRecordMapper.insertArdVideoInspectRecord(ardVideoInspectRecord);
+            }
+        } catch (Exception ex) {
+            log.error("宸℃鍋滄寮傚父:" + ex.getMessage());
+        }
+    }
+
+    //姝ラ鍒ゆ柇鏄惁杩囨湡
+    private boolean isExpirdStep(ArdVideoInspectTask ardVideoInspectTask) {
+        try {
+            List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTask.getArdVideoInspectTaskStepList();
+            /*鑾峰彇褰撳墠浠诲姟姝e湪鎵ц鐨勬楠ゅ拰褰撳墠姝ラ寮�濮嬬殑鏃堕棿*/
+            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.updateArdVideoInspectTaskWithCurrentSetpInfo(avit);
+                log.info("姝ラ锛�" + currentStepId + "鍒囨崲涓�" + nextStepId);
+                return nextStepId;
+            }
+        } catch (Exception ex) {
+            log.error("宸℃姝ラ鍒囨崲寮傚父锛�" + ex.getMessage());
+        }
+        return "";
+    }
+
+    public List getTaskUsedCameraPeriods(String cameraId) {
+        return ardVideoInspectTaskMapper.getTaskUsedCameraPeriods(cameraId);
+    }
+
+    /**
+     * 鑾峰彇鐩告満鐨勭┖闂叉椂娈�
+     *
+     * @param cameraId
+     * @return
+     */
+    public List getCameraIdleTimeList(String cameraId) {
+        LinkedList<String> timeList = new LinkedList();
+        List<Map> usedPeriods = this.getTaskUsedCameraPeriods(cameraId);
+        for (Map p :
+                usedPeriods) {
+            timeList.add((String) p.get("start_time"));
+            timeList.add((String) p.get("end_time"));
+        }
+        //鍒ゆ柇绗竴涓捣濮嬬偣
+        if (timeList.size() > 0) {
+            if ("00:00:00".equals(timeList.getFirst())) {
+                timeList.removeFirst();
+            } else {
+                timeList.addFirst("00:00:00");
+            }
+            //鍒ゆ柇鏈�鍚庝竴涓粨鏉熸椂闂�
+            if ("23:59:59".equals(timeList.getLast())) {
+                timeList.removeLast();
+            } else {
+                timeList.addLast("23:59:59");
+            }
+            //浜嬩欢娈典负绌�,鍒欏叏澶╀綔涓轰竴涓椂闂存
+            if (timeList.size() == 0) {
+                timeList.add("00:00:00");
+                timeList.add("23:59:59");
+            }
+
+        }
+
+        return timeList;
+    }
+}

--
Gitblit v1.9.3