| | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.scheduling.annotation.Async; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.stream.Collectors; |
| | | |
| | | |
| | | /** |
| | | * @Description: 全局报警业务 |
| | |
| | | break; |
| | | case "radar": |
| | | //region 处理雷达报警 |
| | | // 开始时间 |
| | | long stime = System.currentTimeMillis(); |
| | | RadarAlarmData radarAlarmData = JSONObject.parseObject(message, RadarAlarmData.class); |
| | | List<ArdAlarmRadar> ardAlarmRadars = radarAlarmData.getArdAlarmRadars(); |
| | | for (ArdAlarmRadar ardAlarmRadar : ardAlarmRadars) { |
| | |
| | | ardAlarmRadar.setName(ardAlarmRadar.getName() + "(" + radarAlarmData.getRadarName() + ")");//报警点名称 |
| | | ardAlarmRadar.setCreateTime(new Date());//接收时间 |
| | | |
| | | String alarmType = ""; |
| | | switch (ardAlarmRadar.getAlarmType()) { |
| | | case "运动目标检测": |
| | | alarmType = "sys_radar_move"; |
| | | String alarmType = "sys_radar_move"; |
| | | break; |
| | | case "热源检测": |
| | | alarmType = "sys_radar_fire"; |
| | |
| | | } |
| | | break; |
| | | } |
| | | //入库 |
| | | ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar); |
| | | |
| | | } |
| | | //按兴趣点去重,然后按引导逻辑进行引导入队 |
| | | ardAlarmRadars = ardAlarmRadars.stream() |
| | | .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new java.util.TreeSet<>(java.util.Comparator.comparing(ArdAlarmRadar::getName))), ArrayList::new)); |
| | | for(ArdAlarmRadar ardAlarmRadar : ardAlarmRadars) |
| | | { |
| | | //遍历报警数据进行引导 |
| | | if (StringUtils.isNull(ardAlarmRadar.getLongitude()) || StringUtils.isNull(ardAlarmRadar.getLatitude())) { |
| | | //坐标为空不引导 |
| | | continue; |
| | | } |
| | | double[] coordinate = new double[]{ardAlarmRadar.getLongitude(), ardAlarmRadar.getLatitude()};//报警坐标 |
| | | |
| | | //从redis中取出当前报警点的5分钟内是否有引导 |
| | | ArdAlarmRadar AlarmRadar = redisCache.getCacheObject("global_alarm:" + ardAlarmRadar.getName());//从redis中取出最新引导的报警数据 |
| | | if (AlarmRadar == null) { |
| | |
| | | redisCache.setCacheObject("global_alarm:" + ardAlarmRadar.getName(), ardAlarmRadar, 5, TimeUnit.MINUTES);//引导数据写入redis |
| | | unGuideCountMap.put(ardAlarmRadar.getName(), 0); |
| | | //引导入队 |
| | | radarGuide(radarAlarmData.getRadarId(), alarmpointName, alarmType, ardAlarmRadar.getCreateTime(), coordinate); |
| | | radarGuide(radarAlarmData.getRadarId(), ardAlarmRadar.getName(), ardAlarmRadar.getAlarmType(), ardAlarmRadar.getCreateTime(), coordinate); |
| | | |
| | | } else { |
| | | //5分钟内redis中有数据,说明5分钟内有引导数据,获取当前报警点的未引导次数 |
| | |
| | | redisCache.setCacheObject("global_alarm:" + ardAlarmRadar.getName(), ardAlarmRadar, 5, TimeUnit.MINUTES); |
| | | count = 0; |
| | | //引导入队 |
| | | radarGuide(radarAlarmData.getRadarId(), alarmpointName, alarmType, ardAlarmRadar.getCreateTime(), coordinate); |
| | | radarGuide(radarAlarmData.getRadarId(), ardAlarmRadar.getName(), ardAlarmRadar.getAlarmType(), ardAlarmRadar.getCreateTime(), coordinate); |
| | | } else { |
| | | ardAlarmRadar.setGuideFlag(0); |
| | | count++; |
| | |
| | | count = 0; |
| | | } |
| | | unGuideCountMap.put(ardAlarmRadar.getName(), count); |
| | | //更新 |
| | | ardAlarmRadarMapper.updateArdAlarmRadar(ardAlarmRadar); |
| | | } |
| | | //入库 |
| | | ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar); |
| | | // 结束时间 |
| | | long etime = System.currentTimeMillis(); |
| | | // 计算执行时间 |
| | | log.debug("雷达报警处理时长:" + (etime - stime) + "毫秒"); |
| | | } |
| | | |
| | | //endregion |
| | | break; |
| | | case "external": |
| | |
| | | guideTask.setReceiveTime(fmt.format(receiveTime)); |
| | | //报警优先级(通过优先级字典) |
| | | String priority = DictUtils.getDictValue("cameras_priority", alarmType); |
| | | if(StringUtils.isEmpty(priority)) |
| | | { |
| | | if (StringUtils.isEmpty(priority)) { |
| | | log.debug("未匹配到优先级,请检查优先级字典配置"); |
| | | return; |
| | | } |