From b763bec6327ba18c6f416a4d61219748c24d975f Mon Sep 17 00:00:00 2001 From: GUO <1923636941@qq.com> Date: Thu, 25 May 2023 20:52:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E7=BA=BF=E7=A8=8B=E6=8F=90=E9=AB=98?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E9=A2=84=E8=A7=88url=E7=9A=84=E9=80=9F?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/zhgd/xmgl/async/AsyncCommon.java | 31 ++++++++++++++++--- .../video/controller/VideoItemController.java | 3 +- .../video/service/IVideoItemService.java | 3 +- .../service/impl/VideoItemServiceImpl.java | 25 ++++++++------- 4 files changed, 45 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/async/AsyncCommon.java b/src/main/java/com/zhgd/xmgl/async/AsyncCommon.java index 007a53207..95d4d6a58 100644 --- a/src/main/java/com/zhgd/xmgl/async/AsyncCommon.java +++ b/src/main/java/com/zhgd/xmgl/async/AsyncCommon.java @@ -2,25 +2,29 @@ package com.zhgd.xmgl.async; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.zhgd.jeecg.common.mybatis.EntityMap; import com.zhgd.mqtt.bean.PushPayload; import com.zhgd.mqtt.server.IMqttSender; import com.zhgd.xmgl.modules.basicdata.entity.CompanyConfig; import com.zhgd.xmgl.modules.basicdata.entity.SystemUser; import com.zhgd.xmgl.modules.basicdata.mapper.SystemUserMapper; import com.zhgd.xmgl.modules.basicdata.service.ICompanyConfigService; +import com.zhgd.xmgl.modules.project.entity.ProjectVideoConfig; import com.zhgd.xmgl.modules.project.service.IProjectService; import com.zhgd.xmgl.push.service.UniPushService; +import com.zhgd.xmgl.util.HikVideoUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.AsyncResult; import org.springframework.stereotype.Component; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Future; import java.util.stream.Collectors; /** @@ -334,4 +338,23 @@ public class AsyncCommon { String kdTopic = scope + userId; mqttPushClient.sendToMqtt(kdTopic, pushMessage.toString()); } + + @Async("asyncExecutor") + public Future> getPlayUrlAsync(ProjectVideoConfig videoConfig, EntityMap entityMap) { + String serialNumber = MapUtils.getString(entityMap, "serialNumber"); + if (StringUtils.isNotEmpty(serialNumber)) { + String url = HikVideoUtil.callPostApiGetPreviewURL(serialNumber, "hls", null, videoConfig.getAccount(), + videoConfig.getPassword(), videoConfig.getAppId(), videoConfig.getAppSecret()); + if (StringUtils.isNotEmpty(url)) { + HashMap map = new HashMap<>(); + map.put("url", url); + map.putAll(entityMap); + Future> future = new AsyncResult<>(map); + return future; + } + } + return null; + } + + } diff --git a/src/main/java/com/zhgd/xmgl/modules/video/controller/VideoItemController.java b/src/main/java/com/zhgd/xmgl/modules/video/controller/VideoItemController.java index 826e663ec..40ca71ec3 100644 --- a/src/main/java/com/zhgd/xmgl/modules/video/controller/VideoItemController.java +++ b/src/main/java/com/zhgd/xmgl/modules/video/controller/VideoItemController.java @@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; +import java.util.concurrent.ExecutionException; /** @@ -281,7 +282,7 @@ public class VideoItemController { @ApiOperation(value = "根据项目sn查询监控点预览取流URL列表(海康)", httpMethod = "GET") @ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "query", required = true, dataType = "String") @GetMapping("/getPlayUrlFromHikvision") - public Result> getPlayUrlFromHikvision(String projectSn) { + public Result> getPlayUrlFromHikvision(String projectSn) throws ExecutionException, InterruptedException { return Result.success(videoItemService.getPlayUrlFromHikvision(projectSn)); } } diff --git a/src/main/java/com/zhgd/xmgl/modules/video/service/IVideoItemService.java b/src/main/java/com/zhgd/xmgl/modules/video/service/IVideoItemService.java index 345059e6d..b75fde10c 100644 --- a/src/main/java/com/zhgd/xmgl/modules/video/service/IVideoItemService.java +++ b/src/main/java/com/zhgd/xmgl/modules/video/service/IVideoItemService.java @@ -7,6 +7,7 @@ import com.zhgd.xmgl.modules.video.entity.VideoItem; import java.util.List; import java.util.Map; +import java.util.concurrent.ExecutionException; /** * @Description: 视频设备列表 @@ -66,5 +67,5 @@ public interface IVideoItemService extends IService { List viListAndTenAlarm(String projectSn); - Map getPlayUrlFromHikvision(String projectSn); + Map getPlayUrlFromHikvision(String projectSn) throws ExecutionException, InterruptedException; } diff --git a/src/main/java/com/zhgd/xmgl/modules/video/service/impl/VideoItemServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/video/service/impl/VideoItemServiceImpl.java index 60ecfc9f5..0d8d6bbd5 100644 --- a/src/main/java/com/zhgd/xmgl/modules/video/service/impl/VideoItemServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/video/service/impl/VideoItemServiceImpl.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zhgd.jeecg.common.execption.OpenAlertException; import com.zhgd.jeecg.common.mybatis.EntityMap; +import com.zhgd.xmgl.async.AsyncCommon; import com.zhgd.xmgl.modules.basicdata.entity.DictionariesRecord; import com.zhgd.xmgl.modules.basicdata.mapper.DictionariesRecordMapper; import com.zhgd.xmgl.modules.basicdata.service.ICompanyService; @@ -29,6 +30,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; /** * @Description: 视频设备列表 @@ -40,6 +43,8 @@ import java.util.*; @Transactional(rollbackFor = Exception.class) @Slf4j public class VideoItemServiceImpl extends ServiceImpl implements IVideoItemService { + @Autowired + private AsyncCommon asyncCommon; @Autowired private VideoItemMapper videoItemMapper; @Autowired @@ -534,7 +539,7 @@ public class VideoItemServiceImpl extends ServiceImpl getPlayUrlFromHikvision(String projectSn) { + public Map getPlayUrlFromHikvision(String projectSn) throws ExecutionException, InterruptedException { HashMap paramMap = new HashMap<>(); paramMap.put("projectSn", projectSn); ProjectVideoConfig videoConfig = getEnableProjectVideoConfigByProjectSn(paramMap); @@ -542,19 +547,17 @@ public class VideoItemServiceImpl extends ServiceImpl rsMap = new HashMap<>(); List> urlMaps = new ArrayList<>(); rsMap.put("urlMaps", urlMaps); + List>> futures = new ArrayList<>(); for (EntityMap entityMap : videoList) { - String serialNumber = MapUtils.getString(entityMap, "serialNumber"); - if (StringUtils.isNotEmpty(serialNumber)) { - String url = HikVideoUtil.callPostApiGetPreviewURL(serialNumber, "hls", null, videoConfig.getAccount(), - videoConfig.getPassword(), videoConfig.getAppId(), videoConfig.getAppSecret()); - if (StringUtils.isNotEmpty(url)) { - HashMap map = new HashMap<>(); - map.put("url", url); - map.putAll(entityMap); - urlMaps.add(map); - } + futures.add(asyncCommon.getPlayUrlAsync(videoConfig, entityMap)); + } + for (Future> future : futures) { + HashMap map = future.get(); + if (map != null) { + urlMaps.add(map); } } return rsMap; } + }