From 2c89fae49a7655105b4e9e0138155485e6ba83b2 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期四, 23 五月 2024 17:32:15 +0800 Subject: [PATCH] Merge branch 'refs/heads/2.7.1' --- src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java | 229 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 225 insertions(+), 4 deletions(-) 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 da8bbc8..e55534d 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.media.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<MediaServer> 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; + } } -- Gitblit v1.8.0