|  |  |  | 
|---|
|  |  |  | import com.ruoyi.alarm.radar.service.IArdAlarmRadarPumpService; | 
|---|
|  |  |  | import com.ruoyi.alarm.tube.domain.ArdAlarmTube; | 
|---|
|  |  |  | import com.ruoyi.alarm.tube.service.IArdAlarmTubeService; | 
|---|
|  |  |  | import com.ruoyi.common.constant.CacheConstants; | 
|---|
|  |  |  | import com.ruoyi.common.core.redis.RedisCache; | 
|---|
|  |  |  | import com.ruoyi.common.utils.StringUtils; | 
|---|
|  |  |  | import com.ruoyi.common.utils.spring.SpringUtils; | 
|---|
|  |  |  | import com.ruoyi.device.camera.domain.ArdCameras; | 
|---|
|  |  |  | import com.ruoyi.device.camera.domain.CameraCmd; | 
|---|
|  |  |  | import com.ruoyi.device.camera.service.ICameraSdkService; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | import org.springframework.scheduling.annotation.Async; | 
|---|
|  |  |  | import org.springframework.stereotype.Component; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import javax.annotation.Resource; | 
|---|
|  |  |  | import java.time.Duration; | 
|---|
|  |  |  | import java.time.Instant; | 
|---|
|  |  |  | import java.util.HashMap; | 
|---|
|  |  |  | 
|---|
|  |  |  | @Slf4j(topic = "guideQueue") | 
|---|
|  |  |  | @Component | 
|---|
|  |  |  | public class QueueHandler { | 
|---|
|  |  |  | @Resource | 
|---|
|  |  |  | private RedisCache redisCache; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 引导任务入队 | 
|---|
|  |  |  | * 刘苏义 | 
|---|
|  |  |  | 
|---|
|  |  |  | /*通过相机ID获取引导队列,并将引导任务加入队列*/ | 
|---|
|  |  |  | PriorityBlockingQueue<GuideTask> guideTaskQueue = GuidePriorityQueue.cameraQueueMap.get(cameraId); | 
|---|
|  |  |  | if (StringUtils.isNull(guideTaskQueue)) { | 
|---|
|  |  |  | log.info("相机未登录,没有队列,无法入队引导"); | 
|---|
|  |  |  | log.debug("相机未登录,没有队列,无法入队引导"); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | log.debug("新任务入队:" + task.getAlarmId()); | 
|---|
|  |  |  | 
|---|
|  |  |  | //    newThread.start(); | 
|---|
|  |  |  | //} | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Async("guideExecutor") | 
|---|
|  |  |  | public void process(String cameraId) { | 
|---|
|  |  |  | log.debug("CameraId:【" + cameraId + "】引导队列处理器启动成功"); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void processTask(GuideTask guideTask) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | String url=""; | 
|---|
|  |  |  | if (!IsEnableGuide(guideTask.getCameraId())) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String url = ""; | 
|---|
|  |  |  | CameraCmd cmd = new CameraCmd(); | 
|---|
|  |  |  | cmd.setCameraId(guideTask.getCameraId()); | 
|---|
|  |  |  | cmd.setChanNo(guideTask.getChanNum()); | 
|---|
|  |  |  | cmd.setChanNo(guideTask.getChanNo()); | 
|---|
|  |  |  | cmd.setTargetPosition(guideTask.getTargetPosition()); | 
|---|
|  |  |  | cmd.setOperator(guideTask.getAlarmType()); | 
|---|
|  |  |  | cmd.setExpired(30); | 
|---|
|  |  |  | cmd.setRecordBucketName("record"); | 
|---|
|  |  |  | Map<String, Double> ptzMap = new HashMap<>(); | 
|---|
|  |  |  | ptzMap.put("p", guideTask.getGuidePTZ().getP()); | 
|---|
|  |  |  | ptzMap.put("t", guideTask.getGuidePTZ().getT()); | 
|---|
|  |  |  | ptzMap.put("z", guideTask.getGuidePTZ().getZ()); | 
|---|
|  |  |  | cmd.setPtzMap(ptzMap); | 
|---|
|  |  |  | if (guideTask.getRecordSn().equals(1)) { | 
|---|
|  |  |  | cmd.setRecordObjectName("alarm_" + guideTask.getAlarmId() + "_1"); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | cmd.setRecordObjectName("alarm_" + guideTask.getAlarmId() + "_2"); | 
|---|
|  |  |  | switch (guideTask.getChanNo()) { | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | ptzMap.put("p", guideTask.getGuidePTZ().getP1()); | 
|---|
|  |  |  | ptzMap.put("t", guideTask.getGuidePTZ().getT1()); | 
|---|
|  |  |  | ptzMap.put("z", guideTask.getGuidePTZ().getZ1()); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 2: | 
|---|
|  |  |  | ptzMap.put("p", guideTask.getGuidePTZ().getP2()); | 
|---|
|  |  |  | ptzMap.put("t", guideTask.getGuidePTZ().getT2()); | 
|---|
|  |  |  | ptzMap.put("z", guideTask.getGuidePTZ().getZ2()); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | cmd.setPtzMap(ptzMap); | 
|---|
|  |  |  | cmd.setRecordObjectName("alarm_" + guideTask.getAlarmId()); | 
|---|
|  |  |  | ICameraSdkService cameraSdkService = SpringUtils.getBean(ICameraSdkService.class); | 
|---|
|  |  |  | log.debug("开始引导"); | 
|---|
|  |  |  | boolean guideRes = false; | 
|---|
|  |  |  | 
|---|
|  |  |  | Instant currentTime = Instant.now(); | 
|---|
|  |  |  | long elapsedSeconds = Duration.between(startTime, currentTime).getSeconds(); | 
|---|
|  |  |  | if (elapsedSeconds >= 30) { | 
|---|
|  |  |  | recordFlag = false; | 
|---|
|  |  |  | recordFlag = false;//达到30秒录像停止 | 
|---|
|  |  |  | url = cameraSdkService.recordStopToMinio(cmd);//停止录像返回url | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!IsEnableGuide(guideTask.getCameraId())) { | 
|---|
|  |  |  | recordFlag = false;//相机关闭引导录像停止 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //判断队列中第一条数据的优先级是否大于当前数据的优先级 | 
|---|
|  |  |  | PriorityBlockingQueue<GuideTask> guideTasks = GuidePriorityQueue.cameraQueueMap.get(guideTask.getCameraId()); | 
|---|
|  |  |  | 
|---|
|  |  |  | GuideTask firstTask = guideTasks.peek(); | 
|---|
|  |  |  | if (firstTask.getPriority() > guideTask.getPriority()) { | 
|---|
|  |  |  | recordFlag = false;//录像停止 | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | case "sys_radar_move": | 
|---|
|  |  |  | ArdAlarmRadarMove ardAlarmRadarMove = new ArdAlarmRadarMove(); | 
|---|
|  |  |  | ardAlarmRadarMove.setId(guideTask.getAlarmId()); | 
|---|
|  |  |  | if (guideTask.getRecordSn().equals(1)) { | 
|---|
|  |  |  | ardAlarmRadarMove.setRecordUrl1(url); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | ardAlarmRadarMove.setRecordUrl2(url); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ardAlarmRadarMove.setRecordUrl(url); | 
|---|
|  |  |  | IArdAlarmRadarMoveService ardAlarmRadarMoveService = SpringUtils.getBean(IArdAlarmRadarMoveService.class); | 
|---|
|  |  |  | ardAlarmRadarMoveService.updateArdAlarmRadarMove(ardAlarmRadarMove); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case "sys_radar_fire": | 
|---|
|  |  |  | ArdAlarmRadarFire ardAlarmRadarFire = new ArdAlarmRadarFire(); | 
|---|
|  |  |  | ardAlarmRadarFire.setId(guideTask.getAlarmId()); | 
|---|
|  |  |  | if (guideTask.getRecordSn().equals(1)) { | 
|---|
|  |  |  | ardAlarmRadarFire.setRecordUrl1(url); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | ardAlarmRadarFire.setRecordUrl2(url); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ardAlarmRadarFire.setRecordUrl(url); | 
|---|
|  |  |  | IArdAlarmRadarFireService ardAlarmRadarFireService = SpringUtils.getBean(IArdAlarmRadarFireService.class); | 
|---|
|  |  |  | ardAlarmRadarFireService.updateArdAlarmRadarFire(ardAlarmRadarFire); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case "sys_radar_pump": | 
|---|
|  |  |  | ArdAlarmRadarPump ardAlarmRadarPump = new ArdAlarmRadarPump(); | 
|---|
|  |  |  | ardAlarmRadarPump.setId(guideTask.getAlarmId()); | 
|---|
|  |  |  | if (guideTask.getRecordSn().equals(1)) { | 
|---|
|  |  |  | ardAlarmRadarPump.setRecordUrl1(url); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | ardAlarmRadarPump.setRecordUrl2(url); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ardAlarmRadarPump.setRecordUrl(url); | 
|---|
|  |  |  | IArdAlarmRadarPumpService ardAlarmRadarPumpService = SpringUtils.getBean(IArdAlarmRadarPumpService.class); | 
|---|
|  |  |  | ardAlarmRadarPumpService.updateArdAlarmRadarPump(ardAlarmRadarPump); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | 
|---|
|  |  |  | log.info("线程任务异常:" + ex.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 光电是否开启报警引导功能 | 
|---|
|  |  |  | * 刘苏义 | 
|---|
|  |  |  | * 2023/7/7 14:03 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private Boolean IsEnableGuide(String cameraId) { | 
|---|
|  |  |  | boolean enabled = false; | 
|---|
|  |  |  | ArdCameras ardCameras = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); | 
|---|
|  |  |  | if (ardCameras != null) { | 
|---|
|  |  |  | if (ardCameras.getCamAlarmGuideEnable().equals(1)) { | 
|---|
|  |  |  | enabled = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return enabled; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|