‘liusuyi’
2023-06-15 81dd45819944baa8032d942e2e28c5c859c0cc81
ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
@@ -6,7 +6,6 @@
import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell;
import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.constant.Global;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
@@ -15,7 +14,6 @@
import com.ruoyi.inspect.domain.ArdVideoInspectRecord;
import com.ruoyi.inspect.mapper.ArdVideoInspectRecordMapper;
import com.ruoyi.inspect.mapper.ArdVideoInspectTaskStepMapper;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.ruoyi.common.utils.StringUtils;
@@ -36,7 +34,7 @@
 * @date 2023-05-30
 */
@Service
@Slf4j
@Slf4j(topic = "PatrolInspectionTask")
public class ArdVideoInspectTaskServiceImpl implements IArdVideoInspectTaskService {
    @Resource
    private ArdVideoInspectTaskMapper ardVideoInspectTaskMapper;
@@ -176,12 +174,12 @@
        List<ArdVideoInspectTaskStep> ardVideoInspectTaskStepList = ardVideoInspectTask.getArdVideoInspectTaskStepList();
        //获取相机
        ArdCameras camera = camerasMapper.selectArdCamerasById(ardVideoInspectTask.getCameraId());
        Collections.sort(ardVideoInspectTaskStepList,new ArdVideoInspectTaskStepComparator(this.ardAlarmpointsWellMapper,camera.getLongitude(),camera.getLatitude()));
        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));
            step.setOrderNumber(new Integer(i + 1));
        }
        if (StringUtils.isNotNull(ardVideoInspectTaskStepList)) {
            for (ArdVideoInspectTaskStep ardVideoInspectTaskStep : ardVideoInspectTaskStepList) {
@@ -231,6 +229,9 @@
                        //开始下一步骤
                        videoInspectTask.setCurrentStepId(nextStepId);
                        startRunStep(videoInspectTask);
                    }else{
                        //未过期尝试引导,引导失败清空当前步骤开始时间,标记中断
                        tryGuide(videoInspectTask);
                    }
                }
            }
@@ -339,26 +340,10 @@
                                //开始下一步骤
                                videoInspectTask.setCurrentStepId(nextStepId);
                                startRunStep(videoInspectTask);
                            }
                            }else{tryGuide(videoInspectTask);}
                        }
                    }
                } else {
//                    if(Global.task_record.contains(videoInspectTask.getId()))
//                    {
//                        /*停止录像*/
//                        CameraCmd cmd = new CameraCmd();
//                        cmd.setCameraId(videoInspectTask.getCameraId());
//                        cmd.setChannelNum(videoInspectTask.getChannel());
//                        cmd.setOperator("sys_patrol_inspect");
//                        cmd.setEnable(false);//停止录像
//                        String uuid = UUID.randomUUID().toString().replace("-", "");
//                        String time = new SimpleDateFormat("yyyyMMdd").format(new Date());
//                        String recordName = videoInspectTask.getCameraId() + "/" + time + "/" + uuid + ".mp4";
//                        cmd.setRecordBucketName("record");
//                        cmd.setRecordObjectName(recordName);
//                        cmd.setUploadMinio(true);
//                        hikClientService.recordToMinio(cmd);
//                    }
                    if (StringUtils.isNotEmpty(videoInspectTask.getCurrentStepId())) {
                        videoInspectTask.setCurrentStepId("");
                        ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(videoInspectTask);
@@ -432,7 +417,7 @@
                log.info("当前开始巡检步骤id为空");
                return;
            }
            log.info("步骤:" + currentStepId + "开始");
            log.debug("巡检步骤:" + currentStepId + "尝试开始");
            String cameraId = ardVideoInspectTask.getCameraId();
            Integer channel = ardVideoInspectTask.getChannel();
            Optional<ArdVideoInspectTaskStep> objectOptional = ardVideoInspectTask.getArdVideoInspectTaskStepList().stream()
@@ -462,22 +447,15 @@
                    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.setExpired(step.getRecordingTime()*60);
                    boolean setTargetPosition = hikClientService.setTargetPosition(cmd);
                    if (setTargetPosition) {
                        if (!Global.task_record.contains(ardVideoInspectTask.getId())) {
                            /*控制相机巡检成功,开始录像*/
                            cmd.setEnable(true);//启动录像
                            hikClientService.recordToMinio(cmd);
                            Global.task_record.add(ardVideoInspectTask.getId());
                        }
                    } else {
                        cmd.setEnable(false);//停止录像
                        cmd.setUploadMinio(true);
                        /*控制相机巡检成功,开始录像*/
                        cmd.setEnable(true);//启动录像
                        hikClientService.recordToMinio(cmd);
                    } else {
                        /*控制失败,当前步骤启动时间置null*/
                        ardVideoInspectTask.setCurrentStepStartTime("");
                        ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask);
@@ -488,12 +466,60 @@
            log.error("巡检开始异常:" + ex.getMessage());
        }
    }
    //尝试控制引导
    private void tryGuide(ArdVideoInspectTask ardVideoInspectTask) {
        try {
            String currentStepId = ardVideoInspectTask.getCurrentStepId();
            if (StringUtils.isNull(currentStepId)) {
                log.info("当前开始巡检步骤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();
                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.setTargetPosition(targetPositon);
                    cmd.setOperator("sys_patrol_inspect");
                    cmd.setExpired(step.getRecordingTime()*60);
                    boolean setTargetPosition = hikClientService.setTargetPosition(cmd);
                    if (!setTargetPosition) {
                        /*控制失败,当前步骤启动时间置null*/
                        ardVideoInspectTask.setCurrentStepStartTime("");
                        ardVideoInspectTaskMapper.updateArdVideoInspectTaskWithCurrentSetpInfo(ardVideoInspectTask);
                    }
                }
            }
        } catch (Exception ex) {
            log.error("巡检尝试引导异常:" + ex.getMessage());
        }
    }
    //步骤停止
    private void stopRunStep(ArdVideoInspectTask ardVideoInspectTask) {
        try {
            String currentStepId = ardVideoInspectTask.getCurrentStepId();
            log.info("步骤:" + currentStepId + "停止");
            log.debug("巡检步骤:" + currentStepId + "停止");
            if (StringUtils.isNull(currentStepId)) {
                log.info("当前停止巡检步骤id为空");
                return;
@@ -519,13 +545,11 @@
                cmd.setRecordObjectName(recordName);
                cmd.setUploadMinio(true);
                hikClientService.recordToMinio(cmd);
                Global.task_record.remove(ardVideoInspectTask.getId());
                /*插入巡检记录*/
                ArdVideoInspectRecord ardVideoInspectRecord = new ArdVideoInspectRecord();
                ardVideoInspectRecord.setStepId(step.getId());
                ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.selectArdAlarmpointsWellById(step.getWellId());
                if(StringUtils.isNotNull(ardAlarmpointsWell))
                {
                if (StringUtils.isNotNull(ardAlarmpointsWell)) {
                    ardVideoInspectRecord.setWellName(ardAlarmpointsWell.getWellId());
                }
                Date currentStepStartDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, currentStepStartTime);
@@ -642,4 +666,4 @@
        return timeList;
    }
}
}