|  |  | 
 |  |  | 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; | 
 |  |  | 
 |  |  |     @Resource | 
 |  |  |     private ArdVideoInspectTaskMapper ardVideoInspectTaskMapper; | 
 |  |  |     @Resource | 
 |  |  |     private ArdVideoInspectTaskStepMapper ardVideoInspectTaskStepMapper; | 
 |  |  |     @Resource | 
 |  |  |     private ArdAlarmpointsWellMapper ardAlarmpointsWellMapper; | 
 |  |  |     @Resource | 
 |  |  |     private ArdVideoInspectRecordMapper ardVideoInspectRecordMapper; | 
 |  |  | 
 |  |  |     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("关"); | 
 |  |  |                 ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask); | 
 |  |  |             } | 
 |  |  |             ardVideoInspectTask.setCurrentStepId(""); | 
 |  |  |             ardVideoInspectTask.setCurrentStepStartTime(""); | 
 |  |  |             ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |     public int updateArdVideoInspectTask(ArdVideoInspectTask ardVideoInspectTask) { | 
 |  |  |         ardVideoInspectTask.setUpdateBy(SecurityUtils.getUsername()); | 
 |  |  |         ardVideoInspectTask.setUpdateTime(DateUtils.getNowDate()); | 
 |  |  |         ardVideoInspectTaskMapper.deleteArdVideoInspectTaskStepByTaskId(ardVideoInspectTask.getId()); | 
 |  |  |         //  ardVideoInspectTaskMapper.deleteArdVideoInspectTaskStepByTaskId(ardVideoInspectTask.getId()); | 
 |  |  |         insertArdVideoInspectTaskStep(ardVideoInspectTask); | 
 |  |  |         return ardVideoInspectTaskMapper.updateArdVideoInspectTask(ardVideoInspectTask); | 
 |  |  |     } | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     public void insertArdVideoInspectTaskStep(ArdVideoInspectTask ardVideoInspectTask) { | 
 |  |  |         List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTask.getArdVideoInspectTaskStepList(); | 
 |  |  |         String id = ardVideoInspectTask.getId(); | 
 |  |  |         //获取相机 | 
 |  |  |         ArdCameras camera = camerasMapper.selectArdCamerasById(ardVideoInspectTask.getCameraId()); | 
 |  |  |         Collections.sort(ardVideoInspectTaskStepList, new ArdVideoInspectTaskStepComparator(this.ardAlarmpointsWellMapper, camera.getLongitude(), camera.getLatitude())); | 
 |  |  |         String taskId = ardVideoInspectTask.getId(); | 
 |  |  |         for (int i = 0; i < ardVideoInspectTaskStepList.size(); i++) { | 
 |  |  |             ArdVideoInspectTaskStep step = ardVideoInspectTaskStepList.get(i); | 
 |  |  |             step.setTaskId(taskId); | 
 |  |  |             step.setOrderNumber(new Integer(i + 1)); | 
 |  |  |         } | 
 |  |  |         if (StringUtils.isNotNull(ardVideoInspectTaskStepList)) { | 
 |  |  |             List<ArdVideoInspectTaskStep> list = new ArrayList<ArdVideoInspectTaskStep>(); | 
 |  |  |             for (ArdVideoInspectTaskStep ardVideoInspectTaskStep : ardVideoInspectTaskStepList) { | 
 |  |  |                 ardVideoInspectTaskStep.setTaskId(id); | 
 |  |  |                 list.add(ardVideoInspectTaskStep); | 
 |  |  |             } | 
 |  |  |             if (list.size() > 0) { | 
 |  |  |                 ardVideoInspectTaskMapper.batchArdVideoInspectTaskStep(list); | 
 |  |  |                 if (ardVideoInspectTaskStep.getId() == null) { | 
 |  |  |                     //新的步骤,添加 | 
 |  |  |                     ardVideoInspectTaskStepMapper.insertArdVideoInspectTaskStep(ardVideoInspectTaskStep); | 
 |  |  |                 } else { | 
 |  |  |                     //已有步骤,更新 | 
 |  |  |                     ardVideoInspectTaskStepMapper.updateArdVideoInspectTaskStep(ardVideoInspectTaskStep); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | 
 |  |  |     public void manualTaskRun(String TaskId) { | 
 |  |  |         try { | 
 |  |  |             ArdVideoInspectTask videoInspectTask = ardVideoInspectTaskMapper.selectArdVideoInspectTaskById(TaskId); | 
 |  |  |             if (!videoInspectTask.getMenualSwitch().equals("开")) { | 
 |  |  |                 return; | 
 |  |  |             } | 
 |  |  |             if (videoInspectTask.getArdVideoInspectTaskStepList().size() == 0) { | 
 |  |  |                 return; | 
 |  |  |             } | 
 |  |  | 
 |  |  |         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) { | 
 |  |  | 
 |  |  |             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) { | 
 |  |  | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     videoInspectTask.setArdVideoInspectTaskStepList(ardVideoInspectTaskStepList); | 
 |  |  |  | 
 |  |  |                     String currentStepId = videoInspectTask.getCurrentStepId(); | 
 |  |  |                     String currentStepStartTime = videoInspectTask.getCurrentStepStartTime(); | 
 |  |  |                     if (StringUtils.isNull(currentStepId) || StringUtils.isEmpty(currentStepId)) { | 
 |  |  | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } else { | 
 |  |  |                     if (StringUtils.isEmpty(videoInspectTask.getCurrentStepId()) || StringUtils.isEmpty(videoInspectTask.getCurrentStepStartTime())) { | 
 |  |  |                         continue; | 
 |  |  |                     if (StringUtils.isNotEmpty(videoInspectTask.getCurrentStepId())) { | 
 |  |  |                         videoInspectTask.setCurrentStepId(""); | 
 |  |  |                         ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(videoInspectTask); | 
 |  |  |                     } | 
 |  |  |                     /*过期的任务清空当前步骤信息*/ | 
 |  |  |                     videoInspectTask.setCurrentStepId(""); | 
 |  |  |                     videoInspectTask.setCurrentStepStartTime(""); | 
 |  |  |                     ardVideoInspectTaskMapper.updateArdVideoInspectTask(videoInspectTask); | 
 |  |  |                     if (StringUtils.isNotEmpty(videoInspectTask.getCurrentStepStartTime())) { | 
 |  |  |                         videoInspectTask.setCurrentStepId(""); | 
 |  |  |                         ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(videoInspectTask); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } catch (Exception ex) { | 
 |  |  | 
 |  |  |                     .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)) { | 
 |  |  |                     /*获取井坐标*/ | 
 |  |  | 
 |  |  |                     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()); | 
 |  |  | 
 |  |  |                         /*控制相机巡检成功,开始录像*/ | 
 |  |  |                         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); | 
 |  |  |                         /*控制失败,当前步骤启动时间置null*/ | 
 |  |  |                         ArdVideoInspectTask avit = new ArdVideoInspectTask(); | 
 |  |  |                         avit.setId(ardVideoInspectTask.getId()); | 
 |  |  |                         avit.setCurrentStepId(step.getId()); | 
 |  |  |                         avit.setCurrentStepStartTime(""); | 
 |  |  |                         ardVideoInspectTaskMapper.updateArdVideoInspectTask(avit); | 
 |  |  |                         ardVideoInspectTask.setCurrentStepStartTime(""); | 
 |  |  |                         ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  | 
 |  |  |                 /*插入巡检记录*/ | 
 |  |  |                 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)); | 
 |  |  | 
 |  |  |                         .findFirst() | 
 |  |  |                         .orElse(null); | 
 |  |  |                 avit.setCurrentStepId(nextStepId); | 
 |  |  |                 ardVideoInspectTaskMapper.updateArdVideoInspectTask(avit); | 
 |  |  |                 ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(avit); | 
 |  |  |                 log.info("步骤:" + currentStepId + "切换为" + nextStepId); | 
 |  |  |                 return nextStepId; | 
 |  |  |             } | 
 |  |  | 
 |  |  |         } | 
 |  |  |         return ""; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public List getTaskUsedCameraPeriods(String cameraId) { | 
 |  |  |         return ardVideoInspectTaskMapper.getTaskUsedCameraPeriods(cameraId); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     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.getFirst().equals("00:00:00")) { | 
 |  |  |             timeList.removeFirst(); | 
 |  |  |         } else { | 
 |  |  |             timeList.addFirst("00:00:00"); | 
 |  |  |         } | 
 |  |  |         //判断最后一个结束时间 | 
 |  |  |         if (timeList.getLast().equals("23:59:59")) { | 
 |  |  |             timeList.removeLast(); | 
 |  |  |         } else { | 
 |  |  |             timeList.addLast("23:59:59"); | 
 |  |  |         } | 
 |  |  |         //事件段为空,则全天作为一个时间段 | 
 |  |  |         if (timeList.size() == 0) { | 
 |  |  |             timeList.add("00:00:00"); | 
 |  |  |             timeList.add("23:59:59"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return timeList; | 
 |  |  |     } | 
 |  |  | } |