‘liusuyi’
2023-06-14 43fc617eb7b94c7e1cc66884cbb9672da8b3bc32
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
@@ -17,7 +17,15 @@
import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.tools.ArdTool;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.common.utils.uuid.UUID;
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.device.hiksdk.util.hikSdkUtil.GisUtil;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.utils.tube.GeoPoint;
import com.ruoyi.utils.tube.TubeTools;
@@ -55,7 +63,10 @@
    ArdTubesDetailsMapper ardTubesDetailsMapper;
    @Resource
    private ISysConfigService configService;
    @Resource
    private ArdCamerasMapper ardCamerasMapper;
    @Resource
    private IHikClientService hikClientService;
    @Override
    public List<GlobalAlarmData> selectAlarmLogs(GlobalAlarmCondition condition) {
        String refreshTime = configService.selectConfigByKey("refreshTime");
@@ -124,31 +135,29 @@
    @Override
    @Async("alarmExecutor")
    public void receiveAlarm(String topic, String message) {
        String uuid = UUID.randomUUID().toString().replace("-", "");
        try {
            String simpleUUID = IdUtils.simpleUUID();
        switch (topic) {
            case "stealelec":
                ArdAlarmStealelec ardAlarmStealelec = JSONObject.parseObject(message, ArdAlarmStealelec.class);
                ArdAlarmpointsWell well = ardAlarmpointsWellMapper.selectArdAlarmpointsWellByWellId(ardAlarmStealelec.getDescribe());
                if(well!=null)
                {
                    if (well != null) {
                    ardAlarmStealelec.setLongitude(well.getLongitude());
                    ardAlarmStealelec.setLatitude(well.getLatitude());
                    ardAlarmStealelec.setDeptId(well.getDeptId());
                }
                ArdAlarmStealelec existe = ardAlarmStealelecMapper.selectByPrimaryKey(ardAlarmStealelec.getId());
                if(StringUtils.isNotNull(existe))
                {
                    if (StringUtils.isNotNull(existe)) {
                    return;
                }
                int aas = ardAlarmStealelecMapper.insert(ardAlarmStealelec);
                if(aas>0)
                {
                    if (aas > 0) {
                    log.info("stealelec入库成功:" +ardAlarmStealelec);
                }
                break;
            case "tube":
                ArdAlarmTube ardAlarmTube = JSONObject.parseObject(message, ArdAlarmTube.class);
                ardAlarmTube.setId(uuid);
                    ardAlarmTube.setId(simpleUUID);
                ArdTubesDetails atd = new ArdTubesDetails();
                atd.setReelNumber(ardAlarmTube.getTubeId());
                List<ArdTubesDetails> ardTubesDetails = ardTubesDetailsMapper.selectArdTubesDetailsList(atd);
@@ -169,10 +178,56 @@
                int aat = ardAlarmTubeMapper.insertArdAlarmTube(ardAlarmTube);
                if (aat > 0) {
                    log.info("tube入库成功:" + ardAlarmTube);
                        //查询所有大光电
                        ArdCameras ardCamera = new ArdCameras();
                        ardCamera.setGdtype("1");
                        List<ArdCameras> ardCamerasList = ardCamerasMapper.selectArdCamerasList(ardCamera);
                        //统计所有大光电可视范围内与报警点的距离
                        Map<String, Double> distanceMap = new HashMap<>();
                        for (ArdCameras camera : ardCamerasList) {
                            double distance = GisUtil.getDistance(ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude(), camera.getLongitude(), camera.getLatitude());
                            if (distance <= camera.getCamMaxVisibleDistance()) {
                                distanceMap.put(camera.getId(), distance);
                            }
                        }
                        if(distanceMap.size()<0)
                        {
                            return;
                        }
                        //获取距离字典中最近的一个相机ID
                        String minDistanceCameraId = ArdTool.getKeyByMinValue(distanceMap);
                        //引导光电
                        CameraCmd cmd = new CameraCmd();
                        cmd.setOperator("sys_tube_leak");
                        cmd.setCameraId(minDistanceCameraId);
                        cmd.setChannelNum(1);
                        cmd.setTargetPosition(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude()});
                        boolean guideRes = hikClientService.setTargetPosition(cmd);
                        if(guideRes) {
                            cmd.setEnable(true);
                            cmd.setRecordBucketName("record");
                            String time = new SimpleDateFormat("yyyyMMdd").format(new Date());
                            String recordName = minDistanceCameraId + "/" + time + "/" + simpleUUID + ".mp4";
                            cmd.setRecordObjectName(recordName);
                            hikClientService.recordToMinio(cmd);
                            Thread.sleep(30000);
                            cmd.setEnable(false);
                            cmd.setUploadMinio(true);
                            hikClientService.recordToMinio(cmd);
                            //更新录像
                            String url = MinioClientSingleton.domainUrl + "/" + cmd.getRecordBucketName() + "/" + recordName;
                            ardAlarmTube.setRecordUrl(url);
                            ardAlarmTubeMapper.updateArdAlarmTube(ardAlarmTube);
                        }
                }
                break;
        }
    }
        catch (Exception ex)
        {
            log.error("接收报警异常:"+ex.getMessage());
        }
    }
    /**
     * @描述 查询所有报警的当前数量
     * @参数 []