From 186b00e9b308937397bd652e2b149cb799b087bd Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期三, 08 五月 2024 11:18:47 +0800 Subject: [PATCH] 支持下载多个云端录像的zip压缩包 --- src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java | 31 ++++ src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java | 229 +++++++++++++++++++++++++++++++++++++ src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java | 1 src/main/java/com/genersoft/iot/vmp/service/ICloudRecordService.java | 4 src/main/java/com/genersoft/iot/vmp/utils/DateUtil.java | 8 + src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java | 7 src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/bean/CloudRecordUrl.java | 32 +++++ pom.xml | 2 8 files changed, 302 insertions(+), 12 deletions(-) diff --git a/pom.xml b/pom.xml index 7ec73b8..df841d5 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ <groupId>com.genersoft</groupId> <artifactId>wvp-pro</artifactId> - <version>2.7.0</version> + <version>2.7.1</version> <name>web video platform</name> <description>鍥芥爣28181瑙嗛骞冲彴</description> <packaging>${project.packaging}</packaging> diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java index 3a9f5fb..dd30fea 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java @@ -168,6 +168,7 @@ // via ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>(); ViaHeader viaHeader = SipFactory.getInstance().createHeaderFactory().createViaHeader(sipLayer.getLocalIp(device.getLocalIp()), sipConfig.getPort(), device.getTransport(), SipUtils.getNewViaTag()); +// viaHeader.setRPort(); viaHeaders.add(viaHeader); //from SipURI fromSipURI = SipFactory.getInstance().createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain()); diff --git a/src/main/java/com/genersoft/iot/vmp/service/ICloudRecordService.java b/src/main/java/com/genersoft/iot/vmp/service/ICloudRecordService.java index c10313e..a6da615 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/ICloudRecordService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/ICloudRecordService.java @@ -18,7 +18,7 @@ /** * 鍒嗛〉鍥炲幓浜戠褰曞儚鍒楄〃 */ - PageInfo<CloudRecordItem> getList(int page, int count, String query, String app, String stream, String startTime, String endTime, List<MediaServerItem> mediaServerItems); + PageInfo<CloudRecordItem> getList(int page, int count, String query, String app, String stream, String startTime, String endTime, List<MediaServerItem> mediaServerItems, String callId); /** * 鏍规嵁hook娑堟伅澧炲姞涓�鏉¤褰� @@ -56,4 +56,6 @@ * 鑾峰彇鎾斁鍦板潃 */ DownloadFileInfo getPlayUrlPath(Integer recordId); + + List<CloudRecordItem> getAllList(String query, String app, String stream, String startTime, String endTime, List<MediaServerItem> mediaServerItems, String callId, List<Integer> ids); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java index a23252f..6e501e2 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/CloudRecordServiceImpl.java @@ -51,7 +51,7 @@ private VideoStreamSessionManager streamSession; @Override - public PageInfo<CloudRecordItem> getList(int page, int count, String query, String app, String stream, String startTime, String endTime, List<MediaServerItem> mediaServerItems) { + public PageInfo<CloudRecordItem> getList(int page, int count, String query, String app, String stream, String startTime, String endTime, List<MediaServerItem> mediaServerItems, String callId) { // 寮�濮嬫椂闂村拰缁撴潫鏃堕棿鍦ㄦ暟鎹簱涓兘鏄互绉掍负鍗曚綅鐨� Long startTimeStamp = null; Long endTimeStamp = null; @@ -71,7 +71,7 @@ } PageHelper.startPage(page, count); List<CloudRecordItem> all = cloudRecordServiceMapper.getList(query, app, stream, startTimeStamp, endTimeStamp, - null, mediaServerItems); + callId, mediaServerItems, null); return new PageInfo<>(all); } @@ -87,7 +87,7 @@ long startTimeStamp = startDate.atStartOfDay().toInstant(ZoneOffset.ofHours(8)).getEpochSecond(); long endTimeStamp = endDate.atStartOfDay().toInstant(ZoneOffset.ofHours(8)).getEpochSecond(); List<CloudRecordItem> cloudRecordItemList = cloudRecordServiceMapper.getList(null, app, stream, startTimeStamp, - endTimeStamp, null, mediaServerItems); + endTimeStamp, null, mediaServerItems, null); if (cloudRecordItemList.isEmpty()) { return new ArrayList<>(); } @@ -196,7 +196,7 @@ } List<CloudRecordItem> all = cloudRecordServiceMapper.getList(null, app, stream, startTimeStamp, endTimeStamp, - callId, mediaServerItems); + callId, mediaServerItems, null); if (all.isEmpty()) { throw new ControllerException(ErrorCode.ERROR100.getCode(), "鏈壘鍒板緟鏀惰棌鐨勮棰�"); } @@ -232,4 +232,27 @@ MediaServerItem mediaServerItem = mediaServerService.getOne(recordItem.getMediaServerId()); return CloudRecordUtils.getDownloadFilePath(mediaServerItem, filePath); } + + @Override + public List<CloudRecordItem> getAllList(String query, String app, String stream, String startTime, String endTime, List<MediaServerItem> mediaServerItems, String callId, List<Integer> ids) { + // 寮�濮嬫椂闂村拰缁撴潫鏃堕棿鍦ㄦ暟鎹簱涓兘鏄互绉掍负鍗曚綅鐨� + Long startTimeStamp = null; + Long endTimeStamp = null; + if (startTime != null ) { + if (!DateUtil.verification(startTime, DateUtil.formatter)) { + throw new ControllerException(ErrorCode.ERROR100.getCode(), "寮�濮嬫椂闂存牸寮忛敊璇紝姝g‘鏍煎紡涓猴細 " + DateUtil.formatter); + } + startTimeStamp = DateUtil.yyyy_MM_dd_HH_mm_ssToTimestampMs(startTime); + + } + if (endTime != null ) { + if (!DateUtil.verification(endTime, DateUtil.formatter)) { + throw new ControllerException(ErrorCode.ERROR100.getCode(), "缁撴潫鏃堕棿鏍煎紡閿欒锛屾纭牸寮忎负锛� " + DateUtil.formatter); + } + endTimeStamp = DateUtil.yyyy_MM_dd_HH_mm_ssToTimestampMs(endTime); + + } + return cloudRecordServiceMapper.getList(query, app, stream, startTimeStamp, endTimeStamp, + callId, mediaServerItems, ids); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java index 08f67ba..b446148 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/CloudRecordServiceMapper.java @@ -50,12 +50,15 @@ " <if test= 'mediaServerItemList != null ' > and media_server_id in " + " <foreach collection='mediaServerItemList' item='item' open='(' separator=',' close=')' > #{item.id}</foreach>" + " </if>" + + " <if test= 'ids != null ' > and id in " + + " <foreach collection='ids' item='item' open='(' separator=',' close=')' > #{item}</foreach>" + + " </if>" + " order by start_time DESC" + - " </script>") List<CloudRecordItem> getList(@Param("query") String query, @Param("app") String app, @Param("stream") String stream, @Param("startTimeStamp")Long startTimeStamp, @Param("endTimeStamp")Long endTimeStamp, - @Param("callId")String callId, List<MediaServerItem> mediaServerItemList); + @Param("callId")String callId, List<MediaServerItem> mediaServerItemList, + List<Integer> ids); @Select(" <script>" + diff --git a/src/main/java/com/genersoft/iot/vmp/utils/DateUtil.java b/src/main/java/com/genersoft/iot/vmp/utils/DateUtil.java index ddcbb21..f6f60d7 100755 --- a/src/main/java/com/genersoft/iot/vmp/utils/DateUtil.java +++ b/src/main/java/com/genersoft/iot/vmp/utils/DateUtil.java @@ -107,6 +107,14 @@ } /** + * 鏃堕棿鎴� 杞� yyyy_MM_dd_HH_mm_ss + */ + public static String timestampMsToUrlToyyyy_MM_dd_HH_mm_ss(long timestamp) { + Instant instant = Instant.ofEpochMilli(timestamp); + return urlFormatter.format(LocalDateTime.ofInstant(instant, ZoneId.of(zoneStr))); + } + + /** * yyyy_MM_dd_HH_mm_ss 杞椂闂存埑锛堟绉掞級 * * @param formatTime diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java index b37a3d9..d864c9a 100755 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java @@ -8,7 +8,9 @@ import com.genersoft.iot.vmp.service.IMediaServerService; import com.genersoft.iot.vmp.service.bean.CloudRecordItem; import com.genersoft.iot.vmp.service.bean.DownloadFileInfo; +import com.genersoft.iot.vmp.utils.DateUtil; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; +import com.genersoft.iot.vmp.vmanager.cloudRecord.bean.CloudRecordUrl; import com.github.pagehelper.PageInfo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -21,9 +23,15 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; @SuppressWarnings("rawtypes") @Tag(name = "浜戠褰曞儚鎺ュ彛") @@ -96,6 +104,7 @@ @Parameter(name = "startTime", description = "寮�濮嬫椂闂�(yyyy-MM-dd HH:mm:ss)", required = false) @Parameter(name = "endTime", description = "缁撴潫鏃堕棿(yyyy-MM-dd HH:mm:ss)", required = false) @Parameter(name = "mediaServerId", description = "娴佸獟浣揑D锛岀疆绌哄垯鏌ヨ鍏ㄩ儴娴佸獟浣�", required = false) + @Parameter(name = "callId", description = "姣忔褰曞儚鐨勫敮涓�鏍囪瘑锛岀疆绌哄垯鏌ヨ鍏ㄩ儴娴佸獟浣�", required = false) public PageInfo<CloudRecordItem> openRtpServer( @RequestParam(required = false) String query, @RequestParam(required = false) String app, @@ -104,11 +113,12 @@ @RequestParam int count, @RequestParam(required = false) String startTime, @RequestParam(required = false) String endTime, - @RequestParam(required = false) String mediaServerId + @RequestParam(required = false) String mediaServerId, + @RequestParam(required = false) String callId ) { - logger.info("[浜戠褰曞儚] 鏌ヨ app->{}, stream->{}, mediaServerId->{}, page->{}, count->{}, startTime->{}, endTime->{}", - app, stream, mediaServerId, page, count, startTime, endTime); + logger.info("[浜戠褰曞儚] 鏌ヨ app->{}, stream->{}, mediaServerId->{}, page->{}, count->{}, startTime->{}, endTime->{}, callId->{}", + app, stream, mediaServerId, page, count, startTime, endTime, callId); List<MediaServerItem> mediaServerItems; if (!ObjectUtils.isEmpty(mediaServerId)) { @@ -139,7 +149,10 @@ if (endTime != null && ObjectUtils.isEmpty(endTime.trim())) { endTime = null; } - return cloudRecordService.getList(page, count, query, app, stream, startTime, endTime, mediaServerItems); + if (callId != null && ObjectUtils.isEmpty(callId.trim())) { + callId = null; + } + return cloudRecordService.getList(page, count, query, app, stream, startTime, endTime, mediaServerItems, callId); } @ResponseBody @@ -265,4 +278,212 @@ ){ return cloudRecordService.getPlayUrlPath(recordId); } + + /************************* 浠ヤ笅杩欎簺鎺ュ彛鍙�傚悎wvp鍜寊lm閮ㄧ讲鍦ㄥ悓涓�鍙版湇鍔″櫒鐨勬儏鍐碉紝涓攚vp鍙湁涓�涓獄lm鑺傜偣鐨勬儏鍐� ***************************************/ + + /** + * 涓嬭浇鎸囧畾褰曞儚鏂囦欢鐨勫帇缂╁寘 + * @param query 妫�绱㈠唴瀹� + * @param app 搴旂敤鍚� + * @param stream 娴両D + * @param startTime 寮�濮嬫椂闂�(yyyy-MM-dd HH:mm:ss) + * @param endTime 缁撴潫鏃堕棿(yyyy-MM-dd HH:mm:ss) + * @param mediaServerId 娴佸獟浣揑D锛岀疆绌哄垯鏌ヨ鍏ㄩ儴娴佸獟浣� + * @param callId 姣忔褰曞儚鐨勫敮涓�鏍囪瘑锛岀疆绌哄垯鏌ヨ鍏ㄩ儴娴佸獟浣� + * @param ids 鎸囧畾鐨処d + */ + @ResponseBody + @GetMapping("/zip") + public void downloadZipFile( + HttpServletResponse response, + @RequestParam(required = false) String query, + @RequestParam(required = false) String app, + @RequestParam(required = false) String stream, + @RequestParam(required = false) String startTime, + @RequestParam(required = false) String endTime, + @RequestParam(required = false) String mediaServerId, + @RequestParam(required = false) String callId, + @RequestParam(required = false) List<Integer> ids + + ) { + logger.info("[涓嬭浇鎸囧畾褰曞儚鏂囦欢鐨勫帇缂╁寘] 鏌ヨ app->{}, stream->{}, mediaServerId->{}, startTime->{}, endTime->{}, callId->{}", + app, stream, mediaServerId, startTime, endTime, callId); + + List<MediaServerItem> mediaServerItems; + if (!ObjectUtils.isEmpty(mediaServerId)) { + mediaServerItems = new ArrayList<>(); + MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId); + if (mediaServerItem == null) { + throw new ControllerException(ErrorCode.ERROR100.getCode(), "鏈壘鍒版祦濯掍綋: " + mediaServerId); + } + mediaServerItems.add(mediaServerItem); + } else { + mediaServerItems = mediaServerService.getAll(); + } + if (mediaServerItems.isEmpty()) { + throw new ControllerException(ErrorCode.ERROR100.getCode(), "褰撳墠鏃犳祦濯掍綋"); + } + if (query != null && ObjectUtils.isEmpty(query.trim())) { + query = null; + } + if (app != null && ObjectUtils.isEmpty(app.trim())) { + app = null; + } + if (stream != null && ObjectUtils.isEmpty(stream.trim())) { + stream = null; + } + if (startTime != null && ObjectUtils.isEmpty(startTime.trim())) { + startTime = null; + } + if (endTime != null && ObjectUtils.isEmpty(endTime.trim())) { + endTime = null; + } + if (callId != null && ObjectUtils.isEmpty(callId.trim())) { + callId = null; + } + if (stream != null && callId != null) { + response.addHeader( "Content-Disposition", "attachment;filename=" + stream + "_" + callId + ".zip" ); + } + List<CloudRecordItem> cloudRecordItemList = cloudRecordService.getAllList(query, app, stream, startTime, endTime, mediaServerItems, callId, ids); + if (ObjectUtils.isEmpty(cloudRecordItemList)) { + return; + } + try { + ZipOutputStream zos = new ZipOutputStream(response.getOutputStream()); + for (CloudRecordItem cloudRecordItem : cloudRecordItemList) { + zos.putNextEntry(new ZipEntry(DateUtil.timestampMsToUrlToyyyy_MM_dd_HH_mm_ss(cloudRecordItem.getStartTime()) + ".mp4")); + File file = new File(cloudRecordItem.getFilePath()); + if (!file.exists() || file.isDirectory()) { + continue; + } + FileInputStream fis = new FileInputStream(cloudRecordItem.getFilePath()); + byte[] buf = new byte[2*1024]; + int len; + while ((len = fis.read(buf)) != -1){ + zos.write(buf, 0, len); + } + zos.closeEntry(); + fis.close(); + } + zos.close(); + } catch (IOException e) { + logger.error("[涓嬭浇鎸囧畾褰曞儚鏂囦欢鐨勫帇缂╁寘] 澶辫触锛� 鏌ヨ app->{}, stream->{}, mediaServerId->{}, startTime->{}, endTime->{}, callId->{}", + app, stream, mediaServerId, startTime, endTime, callId, e); + } + } + + /** + * + * @param query 妫�绱㈠唴瀹� + * @param app 搴旂敤鍚� + * @param stream 娴両D + * @param startTime 寮�濮嬫椂闂�(yyyy-MM-dd HH:mm:ss) + * @param endTime 缁撴潫鏃堕棿(yyyy-MM-dd HH:mm:ss) + * @param mediaServerId 娴佸獟浣揑D锛岀疆绌哄垯鏌ヨ鍏ㄩ儴娴佸獟浣� + * @param callId 姣忔褰曞儚鐨勫敮涓�鏍囪瘑锛岀疆绌哄垯鏌ヨ鍏ㄩ儴娴佸獟浣� + * @param remoteHost 鎷兼帴鎾斁鍦板潃鏃朵娇鐢ㄧ殑杩滅▼鍦板潃 + */ + @ResponseBody + @GetMapping("/list-url") + @Operation(summary = "鍒嗛〉鏌ヨ浜戠褰曞儚", security = @SecurityRequirement(name = JwtUtils.HEADER)) + @Parameter(name = "query", description = "妫�绱㈠唴瀹�", required = false) + @Parameter(name = "app", description = "搴旂敤鍚�", required = false) + @Parameter(name = "stream", description = "娴両D", required = false) + @Parameter(name = "page", description = "褰撳墠椤�", required = true) + @Parameter(name = "count", description = "姣忛〉鏌ヨ鏁伴噺", required = true) + @Parameter(name = "startTime", description = "寮�濮嬫椂闂�(yyyy-MM-dd HH:mm:ss)", required = false) + @Parameter(name = "endTime", description = "缁撴潫鏃堕棿(yyyy-MM-dd HH:mm:ss)", required = false) + @Parameter(name = "mediaServerId", description = "娴佸獟浣揑D锛岀疆绌哄垯鏌ヨ鍏ㄩ儴娴佸獟浣�", required = false) + @Parameter(name = "callId", description = "姣忔褰曞儚鐨勫敮涓�鏍囪瘑锛岀疆绌哄垯鏌ヨ鍏ㄩ儴娴佸獟浣�", required = false) + public PageInfo<CloudRecordUrl> getListWithUrl( + HttpServletRequest request, + @RequestParam(required = false) String query, + @RequestParam(required = false) String app, + @RequestParam(required = false) String stream, + @RequestParam int page, + @RequestParam int count, + @RequestParam(required = false) String startTime, + @RequestParam(required = false) String endTime, + @RequestParam(required = false) String mediaServerId, + @RequestParam(required = false) String callId, + @RequestParam(required = false) String remoteHost + + ) { + logger.info("[浜戠褰曞儚] 鏌ヨURL app->{}, stream->{}, mediaServerId->{}, page->{}, count->{}, startTime->{}, endTime->{}, callId->{}", + app, stream, mediaServerId, page, count, startTime, endTime, callId); + + List<MediaServerItem> mediaServerItems; + if (!ObjectUtils.isEmpty(mediaServerId)) { + mediaServerItems = new ArrayList<>(); + MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId); + if (mediaServerItem == null) { + throw new ControllerException(ErrorCode.ERROR100.getCode(), "鏈壘鍒版祦濯掍綋: " + mediaServerId); + } + mediaServerItems.add(mediaServerItem); + } else { + mediaServerItems = mediaServerService.getAll(); + } + if (mediaServerItems.isEmpty()) { + throw new ControllerException(ErrorCode.ERROR100.getCode(), "褰撳墠鏃犳祦濯掍綋"); + } + if (query != null && ObjectUtils.isEmpty(query.trim())) { + query = null; + } + if (app != null && ObjectUtils.isEmpty(app.trim())) { + app = null; + } + if (stream != null && ObjectUtils.isEmpty(stream.trim())) { + stream = null; + } + if (startTime != null && ObjectUtils.isEmpty(startTime.trim())) { + startTime = null; + } + if (endTime != null && ObjectUtils.isEmpty(endTime.trim())) { + endTime = null; + } + if (callId != null && ObjectUtils.isEmpty(callId.trim())) { + callId = null; + } + MediaServerItem mediaServerItem = mediaServerService.getDefaultMediaServer(); + if (mediaServerItem == null) { + throw new ControllerException(ErrorCode.ERROR100.getCode(), "鏈壘鍒版祦濯掍綋鑺傜偣"); + } + if (remoteHost == null) { + remoteHost = request.getScheme() + "://" + request.getLocalAddr() + ":" + + (request.getScheme().equals("https")? mediaServerItem.getHttpSSlPort() : mediaServerItem.getHttpPort()); + } + PageInfo<CloudRecordItem> cloudRecordItemPageInfo = cloudRecordService.getList(page, count, query, app, stream, startTime, endTime, mediaServerItems, callId); + PageInfo<CloudRecordUrl> cloudRecordUrlPageInfo = new PageInfo<>(); + if (!ObjectUtils.isEmpty(cloudRecordItemPageInfo)) { + cloudRecordUrlPageInfo.setPageNum(cloudRecordItemPageInfo.getPageNum()); + cloudRecordUrlPageInfo.setPageSize(cloudRecordItemPageInfo.getPageSize()); + cloudRecordUrlPageInfo.setSize(cloudRecordItemPageInfo.getSize()); + cloudRecordUrlPageInfo.setEndRow(cloudRecordItemPageInfo.getEndRow()); + cloudRecordUrlPageInfo.setStartRow(cloudRecordItemPageInfo.getStartRow()); + cloudRecordUrlPageInfo.setPages(cloudRecordItemPageInfo.getPages()); + cloudRecordUrlPageInfo.setPrePage(cloudRecordItemPageInfo.getPrePage()); + cloudRecordUrlPageInfo.setNextPage(cloudRecordItemPageInfo.getNextPage()); + cloudRecordUrlPageInfo.setIsFirstPage(cloudRecordItemPageInfo.isIsFirstPage()); + cloudRecordUrlPageInfo.setIsLastPage(cloudRecordItemPageInfo.isIsLastPage()); + cloudRecordUrlPageInfo.setHasPreviousPage(cloudRecordItemPageInfo.isHasPreviousPage()); + cloudRecordUrlPageInfo.setHasNextPage(cloudRecordItemPageInfo.isHasNextPage()); + cloudRecordUrlPageInfo.setNavigatePages(cloudRecordItemPageInfo.getNavigatePages()); + cloudRecordUrlPageInfo.setNavigateFirstPage(cloudRecordItemPageInfo.getNavigateFirstPage()); + cloudRecordUrlPageInfo.setNavigateLastPage(cloudRecordItemPageInfo.getNavigateLastPage()); + cloudRecordUrlPageInfo.setNavigatepageNums(cloudRecordItemPageInfo.getNavigatepageNums()); + cloudRecordUrlPageInfo.setTotal(cloudRecordItemPageInfo.getTotal()); + List<CloudRecordUrl> cloudRecordUrlList = new ArrayList<>(cloudRecordItemPageInfo.getList().size()); + List<CloudRecordItem> cloudRecordItemList = cloudRecordItemPageInfo.getList(); + for (CloudRecordItem cloudRecordItem : cloudRecordItemList) { + CloudRecordUrl cloudRecordUrl = new CloudRecordUrl(); + cloudRecordUrl.setId(cloudRecordItem.getId()); + cloudRecordUrl.setDownloadUrl(remoteHost + "/index/api/downloadFile?file_path=" + cloudRecordItem.getFilePath() + + "&save_name=" + cloudRecordItem.getStream() + "_" + cloudRecordItem.getCallId() + "_" + DateUtil.timestampMsToUrlToyyyy_MM_dd_HH_mm_ss(cloudRecordItem.getStartTime()) ); + cloudRecordUrl.setPlayUrl(remoteHost + "/index/api/downloadFile?file_path=" + cloudRecordItem.getFilePath()); + cloudRecordUrlList.add(cloudRecordUrl); + } + cloudRecordUrlPageInfo.setList(cloudRecordUrlList); + } + return cloudRecordUrlPageInfo; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/bean/CloudRecordUrl.java b/src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/bean/CloudRecordUrl.java new file mode 100644 index 0000000..20aa12b --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/bean/CloudRecordUrl.java @@ -0,0 +1,32 @@ +package com.genersoft.iot.vmp.vmanager.cloudRecord.bean; + +public class CloudRecordUrl { + + private String playUrl; + private String downloadUrl; + private int id; + + public String getPlayUrl() { + return playUrl; + } + + public void setPlayUrl(String playUrl) { + this.playUrl = playUrl; + } + + public String getDownloadUrl() { + return downloadUrl; + } + + public void setDownloadUrl(String downloadUrl) { + this.downloadUrl = downloadUrl; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } +} -- Gitblit v1.8.0