| | |
| | | import com.ruoyi.inspect.service.IArdVideoInspectTaskService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Optional; |
| | | import java.io.IOException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * @Description: 巡检任务 |
| | |
| | | |
| | | @Resource |
| | | IArdVideoInspectTaskService ardVideoInspectTaskService; |
| | | @Resource |
| | | IArdAlarmpointsWellService ardAlarmpointsWellService; |
| | | @Resource |
| | | IArdVideoInspectRecordService ardVideoInspectRecordService; |
| | | @Resource |
| | | IArdCamerasService ardCamerasService; |
| | | @Resource |
| | | IHikClientService hikClientService; |
| | | |
| | | public void scanRun() throws IOException { |
| | | /*扫描所有可执行任务1-时间满足2-自动*/ |
| | | log.info("开始扫描所有可执行任务"); |
| | | ArdVideoInspectTask ardVideoInspectTask = new ArdVideoInspectTask(); |
| | | ardVideoInspectTask.setInspectMode("自动"); |
| | | List<ArdVideoInspectTask> ardVideoInspectTasks = ardVideoInspectTaskService.selectArdVideoInspectTaskList(ardVideoInspectTask); |
| | | for (ArdVideoInspectTask videoInspectTask : ardVideoInspectTasks) { |
| | | /*遍历所有时间满足的自动任务*/ |
| | | boolean timeCompare = DateUtils.TimeCompare(videoInspectTask.getStartTime(), videoInspectTask.getEndTime()); |
| | | if (timeCompare) { |
| | | log.info("满足时间"); |
| | | /*当前任务的巡检步骤*/ |
| | | List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTaskService.selectArdVideoInspectTaskById(videoInspectTask.getId()).getArdVideoInspectTaskStepList(); |
| | | Integer setpNum=ardVideoInspectTaskStepList.size();//步骤数量 |
| | | /*获取当前任务正在执行的步骤和当前步骤开始的时间*/ |
| | | String currentStepId = videoInspectTask.getCurrentStepId(); |
| | | String cameraId = videoInspectTask.getCameraId(); |
| | | Integer channel = videoInspectTask.getChannel(); |
| | | String currentStepStartTime = videoInspectTask.getCurrentStepStartTime(); |
| | | /*如果当前步骤未找到,则从1开始*/ |
| | | if (StringUtils.isNull(currentStepId)) { |
| | | String wellId = ardVideoInspectTaskStepList.get(0).getWellId();//获取第一个步骤的井号 |
| | | if (!StringUtils.isNull(wellId)) { |
| | | /*获取井坐标*/ |
| | | ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellService.selectArdAlarmpointsWellById(wellId); |
| | | double[] targetPositon = new double[3]; |
| | | targetPositon[0]=ardAlarmpointsWell.getLongitude(); |
| | | targetPositon[1]=ardAlarmpointsWell.getLatitude(); |
| | | targetPositon[2]=ardAlarmpointsWell.getAltitude(); |
| | | /*获取相机坐标*/ |
| | | ArdCameras cameras = ardCamerasService.selectArdCamerasById(cameraId); |
| | | double[] cameraPositon = new double[3]; |
| | | cameraPositon[0]=cameras.getLongitude(); |
| | | cameraPositon[1]=cameras.getLatitude(); |
| | | cameraPositon[2]=cameras.getAltitude(); |
| | | /*控制相机巡检*/ |
| | | CameraCmd cmd = new CameraCmd(); |
| | | cmd.setCameraId(cameraId); |
| | | cmd.setChannelNum(channel); |
| | | cmd.setCamPosition(cameraPositon); |
| | | cmd.setTargetPosition(targetPositon); |
| | | cmd.setOperator("sys_patrol_inspect"); |
| | | cmd.setExpired(ardVideoInspectTaskStepList.get(0).getRecordingTime()); |
| | | boolean setTargetPosition = hikClientService.setTargetPosition(cmd); |
| | | if(setTargetPosition) |
| | | { |
| | | /*控制相机巡检成功,开始录像*/ |
| | | cmd.setEnable(true);//启动录像 |
| | | hikClientService.recordToMinio(cmd); |
| | | /*更新任务当前步骤id和步骤启动时间*/ |
| | | ArdVideoInspectTask avit=new ArdVideoInspectTask(); |
| | | avit.setId(videoInspectTask.getId()); |
| | | avit.setCurrentStepId(ardVideoInspectTaskStepList.get(0).getId()); |
| | | avit.setCurrentStepStartTime(DateUtils.getTime()); |
| | | //TODO with int i = ardVideoInspectTaskService.updateArdVideoInspectTaskWithCurrentStepInfo(avit); |
| | | // log.info("更新结果"+i); |
| | | } |
| | | } |
| | | } |
| | | else /*当前任务已经执行,判断是否到期*/ |
| | | { |
| | | Optional<Integer> recordingTime = ardVideoInspectTaskStepList.stream() |
| | | .filter(ardVideoInspectTaskStep -> ardVideoInspectTaskStep.getId().equals(currentStepId)) |
| | | .map(ArdVideoInspectTaskStep::getRecordingTime) |
| | | .findFirst(); |
| | | if (recordingTime.isPresent()) { |
| | | System.out.println("找到了匹配的recordingTime: " + recordingTime.get()); |
| | | /*获取到当前步骤的持续时间*/ |
| | | Date currentStepStartDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStartTime); |
| | | Date currentStepStopDate = DateUtils.addMinutes(currentStepStartDate,recordingTime.get()); |
| | | /*判断时间是否过期*/ |
| | | if(!DateUtils.TimeCompare(currentStepStartDate,currentStepStopDate)) |
| | | { |
| | | /*已过期,停止录像,执行下一步骤*/ |
| | | 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); |
| | | String url= MinioClientSingleton.domainUrl+ "/" +cmd.getRecordBucketName()+ "/"+recordName; |
| | | hikClientService.recordToMinio(cmd); |
| | | /*更新巡检记录*/ |
| | | ArdVideoInspectRecord ardVideoInspectRecord=new ArdVideoInspectRecord(); |
| | | ardVideoInspectRecord.setStepId(currentStepId); |
| | | 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(record); |
| | | ardVideoInspectRecordService.insertArdVideoInspectRecord(ardVideoInspectRecord); |
| | | log.info(record); |
| | | } |
| | | } else { |
| | | System.out.println("未找到匹配的recordingTime"); |
| | | } |
| | | |
| | | } |
| | | /*否则判断当前步骤开始时间,判断是否到期*/ |
| | | /*未到期*/ |
| | | /*忽略*/ |
| | | /*已到期*/ |
| | | /*结束录像,转到下一个步骤, |
| | | 控制云台指向关联井坐标,并开始录像,更新当前步骤和当前步骤开始时间/ |
| | | */ |
| | | } |
| | | } |
| | | //巡检任务 |
| | | public void scanRun() { |
| | | ardVideoInspectTaskService.autoTaskRun(); |
| | | } |
| | | } |