From 32174535f5cd608c87992a9cdec259a803af63e4 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期六, 13 四月 2024 13:35:35 +0800 Subject: [PATCH] 增加视频巡检兴趣点上报 --- ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java | 1386 +++++++++++++++++++++++++++++---------------------------- 1 files changed, 703 insertions(+), 683 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 66f6a26..50701bc 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,683 +1,703 @@ -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.hiksdk.service.IHikClientService; -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 IHikClientService hikClientService; - @Resource - private ArdCamerasMapper camerasMapper; - - @PostConstruct - public void initTask() { - List<ArdVideoInspectTask> ardVideoInspectTasks = ardVideoInspectTaskMapper.selectArdVideoInspectTaskList(new ArdVideoInspectTask()); - for (ArdVideoInspectTask ardVideoInspectTask : ardVideoInspectTasks) { - /*鍚姩鍚庡皢鎵�鏈夋墜鍔ㄤ换鍔$疆涓哄叧闂�,鎵�鏈変换鍔″綋鍓嶆楠や俊鎭竻绌�*/ - if (ardVideoInspectTask.getInspectMode().equals("鎵嬪姩")) { - ardVideoInspectTask.setMenualSwitch("鍏�"); - } - ardVideoInspectTask.setCurrentStepId(""); - ardVideoInspectTask.setCurrentStepStartTime(""); - ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask); - } - } - - /** - * 鏌ヨ瑙嗛宸℃浠诲姟 - * - * @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(); - //鑾峰彇鐩告満 - 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) { - //鏂扮殑姝ラ,娣诲姞 - 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 ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellById(wellId); - double[] targetPositon = new double[3]; - targetPositon[0] = ardAlarmpointsWell.getLongitude(); - targetPositon[1] = ardAlarmpointsWell.getLatitude(); - targetPositon[2] = ardAlarmpointsWell.getAltitude(); - /*鑾峰彇鐩告満鍧愭爣*/ - ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId); - if(StringUtils.isNull(cameras)) - { - log.debug("鎵句笉鍒扮浉鏈�:"+cameraId); - return; - } - double[] cameraPositon = new double[3]; - cameraPositon[0] = cameras.getLongitude(); - cameraPositon[1] = cameras.getLatitude(); - cameraPositon[2] = cameras.getAltitude(); - /*鎺у埗鐩告満宸℃*/ - CameraCmd cmd = new CameraCmd(); - cmd.setCameraId(cameraId); - cmd.setChannelNum(channel); - cmd.setTargetPosition(targetPositon); - cmd.setOperator("sys_patrol_inspect"); - cmd.setExpired(step.getRecordingTime() * 60); - boolean setTargetPosition = hikClientService.guideTargetPosition(cmd); - if (setTargetPosition) { - /*鎺у埗鐩告満宸℃鎴愬姛锛屽紑濮嬪綍鍍�*/ - hikClientService.recordStart(cmd); - } else { - /*鎺у埗澶辫触,褰撳墠姝ラ鍚姩鏃堕棿缃畁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 ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellById(wellId); - double[] targetPositon = new double[3]; - targetPositon[0] = ardAlarmpointsWell.getLongitude(); - targetPositon[1] = ardAlarmpointsWell.getLatitude(); - targetPositon[2] = ardAlarmpointsWell.getAltitude(); - /*鑾峰彇鐩告満鍧愭爣*/ - ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId); - if(StringUtils.isNull(cameras)) - { - log.debug("鎵句笉鍒扮浉鏈�:"+cameraId); - return; - } - double[] cameraPositon = new double[3]; - cameraPositon[0] = cameras.getLongitude(); - cameraPositon[1] = cameras.getLatitude(); - cameraPositon[2] = cameras.getAltitude(); - /*鎺у埗鐩告満宸℃*/ - CameraCmd cmd = new CameraCmd(); - cmd.setCameraId(cameraId); - cmd.setChannelNum(channel); - cmd.setTargetPosition(targetPositon); - cmd.setOperator("sys_patrol_inspect"); - cmd.setExpired(step.getRecordingTime() * 60); - boolean setTargetPosition = hikClientService.guideTargetPosition(cmd); - if (!setTargetPosition) { - /*鎺у埗澶辫触,褰撳墠姝ラ鍚姩鏃堕棿缃畁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.setChannelNum(channel); - cmd.setOperator("sys_patrol_inspect"); - cmd.setRecordBucketName("record"); - cmd.setRecordObjectName("inspect_" + IdUtils.fastSimpleUUID()); - String url = hikClientService.recordStopToMinio(cmd); - /*鎻掑叆宸℃璁板綍*/ - ArdVideoInspectRecord ardVideoInspectRecord = new ArdVideoInspectRecord(); - ardVideoInspectRecord.setStepId(step.getId()); - ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellById(step.getWellId()); - if (StringUtils.isNotNull(ardAlarmpointsWell)) { - ardVideoInspectRecord.setWellName(ardAlarmpointsWell.getWellId()); - } - Date currentStepStartDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStartTime); - Date currentStepStopDate = DateUtils.addMinutes(currentStepStartDate, step.getRecordingTime()); - ardVideoInspectRecord.setStartTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStartDate)); - ardVideoInspectRecord.setEndTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStopDate)); - 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; - } -} +package com.ruoyi.inspect.service.impl; + +import java.util.*; + +import com.ruoyi.alarm.global.domain.GuidePoint; +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 com.ruoyi.utils.websocket.util.WebSocketUtils; +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) { + //鏂扮殑姝ラ,娣诲姞 + ardVideoInspectTaskStep.setId(IdUtils.simpleUUID()); + ardVideoInspectTaskStepMapper.insertArdVideoInspectTaskStep(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()); + GuidePoint guidePoint = new GuidePoint().setLongitude(well.getLongitude()).setLatitude(well.getLatitude()); + log.debug("鎵惧埌浜曞潗鏍�:" + well.getLongitude() + "-" + well.getLatitude() + "-" + well.getAltitude()); + /*鑾峰彇鐩告満鍧愭爣*/ + ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId); + if (StringUtils.isNull(cameras)) { + log.debug("鎵句笉鍒扮浉鏈�:" + cameraId); + return; + } + log.debug("鎵惧埌鐩告満:" + cameraId); + /*鎺у埗鐩告満宸℃*/ + CameraCmd cmd = new CameraCmd(); + cmd.setCameraId(cameraId); + cmd.setChanNo(channel); + cmd.setTargetPosition(new double[]{guidePoint.getLongitude(), guidePoint.getLatitude()}); + cmd.setOperator("sys_patrol_inspect"); + cmd.setExpired(step.getRecordingTime());//绉掍负鍗曚綅 + boolean setTargetPosition = cameraSdkService.guideTargetPosition(cmd).get("code").equals(200); + if (setTargetPosition) { + /*鎺у埗鐩告満宸℃鎴愬姛锛屽紑濮嬪綍鍍�*/ + cameraSdkService.recordStart(cmd); + //region 閫氱煡鍓嶇 + Map<String, Object> message = new HashMap<>(); + Map<String, String> data = new HashMap<>(); + data.put("cameraId", cmd.getCameraId()); + data.put("wellId", well.getWellId()); + message.put("70000", data); + WebSocketUtils.sendMessageAll(message); + //endregion + } 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); + if(StringUtils.isNull(well)) + { + log.debug("鎵句笉鍒颁簳:" + well.getWellId()); + return; + } + log.debug("鎵惧埌浜�:" + well.getWellId()); + GuidePoint guidePoint = new GuidePoint().setLongitude(well.getLongitude()).setLatitude(well.getLatitude()); + /*鑾峰彇鐩告満鍧愭爣*/ + ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId); + if (StringUtils.isNull(cameras)) { + log.debug("鎵句笉鍒扮浉鏈�:" + cameraId); + return; + } + log.debug("鎵惧埌鐩告満:" + cameraId); + /*鎺у埗鐩告満宸℃*/ + CameraCmd cmd = new CameraCmd(); + cmd.setCameraId(cameraId); + cmd.setChanNo(channel); + cmd.setTargetPosition(new double[]{guidePoint.getLongitude(), guidePoint.getLatitude()}); + cmd.setOperator("sys_patrol_inspect"); + cmd.setExpired(step.getRecordingTime());//绉掍负鍗曚綅 + boolean setTargetPosition = cameraSdkService.guideTargetPosition(cmd).get("code").equals(200); + if (!setTargetPosition) { + /*鎺у埗澶辫触,褰撳墠姝ラ鍚姩鏃堕棿缃畁ull*/ + ardVideoInspectTask.setCurrentStepStartTime(""); + ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask); + } else { + log.debug("寮曞鎴愬姛!"); + //region 閫氱煡鍓嶇 + Map<String, Object> message = new HashMap<>(); + Map<String, String> data = new HashMap<>(); + data.put("cameraId", cmd.getCameraId()); + data.put("wellId", well.getWellId()); + message.put("70000", data); + WebSocketUtils.sendMessageAll(message); + //endregion + } + } + } + } 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.addSeconds(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.addSeconds(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); + //浜嬩欢娈典负绌�,鍒欏叏澶╀綔涓轰竴涓椂闂存 + if (usedPeriods.size() == 0) { + timeList.add("00:00:00"); + timeList.add("23:59:59"); + }else{ + 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"); + } + + + } + } + + + return timeList; + } +} -- Gitblit v1.9.3