From 26cf85ea3c2150ebe3be32f92e7418f41688d836 Mon Sep 17 00:00:00 2001 From: guo Date: Fri, 14 Jul 2023 17:19:21 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=91=E6=8E=A7=E5=9C=A8=E7=BA=BF=E7=8A=B6?= =?UTF-8?q?=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/zhgd/xmgl/task/VideoTask.java | 110 +++++++++--------- .../java/com/zhgd/xmgl/util/HikVideoUtil.java | 43 +++++++ 2 files changed, 95 insertions(+), 58 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/task/VideoTask.java b/src/main/java/com/zhgd/xmgl/task/VideoTask.java index 25751cd52..b1ab14f25 100644 --- a/src/main/java/com/zhgd/xmgl/task/VideoTask.java +++ b/src/main/java/com/zhgd/xmgl/task/VideoTask.java @@ -8,8 +8,6 @@ import com.zhgd.xmgl.modules.project.mapper.ProjectVideoConfigMapper; import com.zhgd.xmgl.modules.video.entity.VideoItem; import com.zhgd.xmgl.modules.video.mapper.VideoItemMapper; import com.zhgd.xmgl.util.HikVideoUtil; -import com.zhgd.xmgl.util.PingUtil; -import com.zhgd.xmgl.util.VideoUtils; import com.zhgd.xmgl.util.YsVideoUtil; import lombok.extern.log4j.Log4j; import net.javacrumbs.shedlock.core.SchedulerLock; @@ -23,7 +21,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.logging.Logger; /** * @program: wisdomSite @@ -45,51 +42,49 @@ public class VideoTask { @Value("${serverUrl}") private String serverUrl; - @SchedulerLock(name = "updateVideoState", lockAtMostFor = 1000*60*60, lockAtLeastFor = 1000*60*5) - @Scheduled(cron = "0 0 */3 * * ?") + @SchedulerLock(name = "updateVideoState", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5) + @Scheduled(cron = "0 0 */1 * * ?") // @Scheduled(cron = "*/50 * * * * ?") - public void updateVideoState(){ - try{ - QueryWrapper queryWrapper=new QueryWrapper<>(); - queryWrapper.lambda().eq(ProjectVideoConfig::getIsEnable,1); - List list= projectVideoConfigMapper.selectList(queryWrapper); - if(list!=null&&list.size()>0){ - for (ProjectVideoConfig videoConfig:list){ + public void updateVideoState() { + try { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(ProjectVideoConfig::getIsEnable, 1); + List list = projectVideoConfigMapper.selectList(queryWrapper); + if (list != null && list.size() > 0) { + for (ProjectVideoConfig videoConfig : list) { updateProjectVideo(videoConfig); } } - }catch (Exception e){ + } catch (Exception e) { //e.printStackTrace(); log.info(e.getMessage()); } } - private void updateProjectVideo(ProjectVideoConfig videoConfig){ - try{ - QueryWrapper queryWrapper=new QueryWrapper<>(); - queryWrapper.lambda().eq(VideoItem::getVideoId,videoConfig.getId()); - List list=videoItemMapper.selectList(queryWrapper); - if(list!=null&&list.size()>0){ - if(videoConfig.getVideoType()==1){ - String accessToken= YsVideoUtil.getToken(videoConfig.getAppId(),videoConfig.getAppSecret()); - for(VideoItem videoItem:list){ - Integer state=YsVideoUtil.getVideoStatus(videoConfig.getAppId(),videoConfig.getAppSecret(),videoItem.getSerialNumber(),accessToken); + private void updateProjectVideo(ProjectVideoConfig videoConfig) { + try { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(VideoItem::getVideoId, videoConfig.getId()); + List list = videoItemMapper.selectList(queryWrapper); + if (list != null && list.size() > 0) { + if (videoConfig.getVideoType() == 1) { + String accessToken = YsVideoUtil.getToken(videoConfig.getAppId(), videoConfig.getAppSecret()); + for (VideoItem videoItem : list) { + Integer state = YsVideoUtil.getVideoStatus(videoConfig.getAppId(), videoConfig.getAppSecret(), videoItem.getSerialNumber(), accessToken); videoItem.setDeviceState(state); videoItemMapper.updateById(videoItem); } - }else if(videoConfig.getVideoType()==2){ + } else if (videoConfig.getVideoType() == 2) { - }else if(videoConfig.getVideoType()==3){ - if(StringUtils.isNotEmpty(videoConfig.getAccount())&&StringUtils.isNotEmpty(videoConfig.getPassword()) - &&StringUtils.isNotEmpty(videoConfig.getAppId())&&StringUtils.isNotEmpty(videoConfig.getAppSecret())){ - for(VideoItem videoItem:list){ - if(StringUtils.isNotEmpty(videoItem.getSerialNumber())) { - String url = HikVideoUtil.callPostApiGetPreviewURL(videoItem.getSerialNumber(), "hls", null, videoConfig.getAccount(), + } else if (videoConfig.getVideoType() == 3) { + if (StringUtils.isNotEmpty(videoConfig.getAccount()) && StringUtils.isNotEmpty(videoConfig.getPassword()) + && StringUtils.isNotEmpty(videoConfig.getAppId()) && StringUtils.isNotEmpty(videoConfig.getAppSecret())) { + for (VideoItem videoItem : list) { + if (StringUtils.isNotEmpty(videoItem.getSerialNumber())) { + Boolean online = HikVideoUtil.callPostApiOnlineStatus(videoItem.getSerialNumber(), videoConfig.getAccount(), videoConfig.getPassword(), videoConfig.getAppId(), videoConfig.getAppSecret()); - if (StringUtils.isNotEmpty(url)) { - boolean status = PingUtil.pingUrl(url); -// boolean status= VideoUtils.getVideoOnlineSate(url); - if (status) { + if (online != null) { + if (online) { videoItem.setDeviceState(1); } else { videoItem.setDeviceState(2); @@ -100,40 +95,40 @@ public class VideoTask { } } } - }else{ - QueryWrapper qu=new QueryWrapper<>(); - qu.lambda().eq(VideoItem::getVideoId,videoConfig.getId()); - VideoItem item=new VideoItem(); + } else { + QueryWrapper qu = new QueryWrapper<>(); + qu.lambda().eq(VideoItem::getVideoId, videoConfig.getId()); + VideoItem item = new VideoItem(); item.setDeviceState(2); item.setVideoId(videoConfig.getId()); - videoItemMapper.update(item,qu); + videoItemMapper.update(item, qu); } } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } } - private void sendVideoData(VideoItem videoItem,ProjectVideoConfig videoConfig){ - List> list=new ArrayList<>(); - Map video=new HashMap<>(); - video.put("appId",videoConfig.getAppId()); - video.put("appSecret",videoConfig.getAppSecret()); - video.put("ip",videoConfig.getAccount()); - video.put("port",videoConfig.getPassword()); - video.put("serialNumber",videoItem.getSerialNumber()); + private void sendVideoData(VideoItem videoItem, ProjectVideoConfig videoConfig) { + List> list = new ArrayList<>(); + Map video = new HashMap<>(); + video.put("appId", videoConfig.getAppId()); + video.put("appSecret", videoConfig.getAppSecret()); + video.put("ip", videoConfig.getAccount()); + video.put("port", videoConfig.getPassword()); + video.put("serialNumber", videoItem.getSerialNumber()); list.add(video); - List alarmIdList=new ArrayList<>(); + List alarmIdList = new ArrayList<>(); alarmIdList.add(videoItem.getItemId()); - Map object=new HashMap<>(); - object.put("projectSn",videoConfig.getProjectSn()); - object.put("videoList",list); - object.put("dataId",alarmIdList); - object.put("resultUrl",serverUrl+"/xmgl/api/saveVideoAnalysisResult"); - object.put("type",2); + Map object = new HashMap<>(); + object.put("projectSn", videoConfig.getProjectSn()); + object.put("videoList", list); + object.put("dataId", alarmIdList); + object.put("resultUrl", serverUrl + "/xmgl/api/saveVideoAnalysisResult"); + object.put("type", 2); log.info(JSONUtil.toJsonStr(object)); - if(StringUtils.isNotEmpty(videoAnalysisUrl)){ - asyncEnvironment.sendVideoAnalysisData(videoAnalysisUrl,object); + if (StringUtils.isNotEmpty(videoAnalysisUrl)) { + asyncEnvironment.sendVideoAnalysisData(videoAnalysisUrl, object); } } @@ -151,5 +146,4 @@ public class VideoTask { }*/ - } diff --git a/src/main/java/com/zhgd/xmgl/util/HikVideoUtil.java b/src/main/java/com/zhgd/xmgl/util/HikVideoUtil.java index 579640971..f3d48452d 100644 --- a/src/main/java/com/zhgd/xmgl/util/HikVideoUtil.java +++ b/src/main/java/com/zhgd/xmgl/util/HikVideoUtil.java @@ -2,6 +2,7 @@ package com.zhgd.xmgl.util; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.hikvision.artemis.sdk.Client; import com.hikvision.artemis.sdk.Request; @@ -72,6 +73,48 @@ public class HikVideoUtil { return url; } + /** + * 根据条件获取监控点在线状态接口 + */ + public static Boolean callPostApiOnlineStatus(String cameraIndexCode, String Ip, String port, String appke, String appSecret) { + final String getCamsApi = ARTEMIS_PATH + "/api/nms/v1/online/camera/get"; + Map paramMap = new HashMap();// post请求Form表单参数 + paramMap.put("indexCodes", Arrays.asList(cameraIndexCode)); + String body = JSON.toJSON(paramMap).toString(); + Map path = new HashMap(2) { + { + put("https://", getCamsApi); + } + }; + String host = Ip + ":" + port; + String result = doPostStringArtemis(host, path, body, null, null, "application/json", appke, appSecret); + log.info("callPostApiOnlineStatus:{}", result); + if (result != null && result.length() > 0) { + try { + JSONObject json = JSONObject.parseObject(result); + if ("0".equals((String) json.get("code"))) { + JSONArray arr = (JSONArray) ((JSONObject) json.get("data")).get("list"); + if (arr.size() == 0) { + return null; + } + JSONObject one = (JSONObject) arr.get(0); + Object online = one.get("online"); + if (online == null) { + return null; + } + Integer o = Integer.valueOf(online.toString()); + return o.equals(1); + } + } catch (NumberFormatException e) { + e.printStackTrace(); + return null; + } + } else { + throw new OpenAlertException(MessageUtil.get("failErr")); + } + return null; + } + public static String setSubscriptionByEvent(String backUrl, String Ip, String port, String appke, String appSecret, Integer[] eventTypes) { String message = null; final String getCamsApi = ARTEMIS_PATH + "/api/eventService/v1/eventSubscriptionByEventTypes";