From f564ff0aba73715c8a6ff899f0fd7474d117767c Mon Sep 17 00:00:00 2001 From: panlinlin <648540858@qq.com> Date: Mon, 10 Jun 2024 00:33:55 +0800 Subject: [PATCH] =?UTF-8?q?1078-=E6=94=AF=E6=8C=81=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=BD=95=E5=83=8FFTP=E6=96=B9=E5=BC=8F=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jt1078/controller/JT1078Controller.java | 20 ++++--- .../iot/vmp/jt1078/proc/request/J1205.java | 14 ++--- .../iot/vmp/jt1078/proc/response/J9206.java | 14 +++-- .../vmp/jt1078/service/Ijt1078Service.java | 2 +- .../service/impl/jt1078ServiceImpl.java | 16 +++-- web_src/src/components/JTRecordDetail.vue | 60 +++++-------------- 6 files changed, 56 insertions(+), 70 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078Controller.java b/src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078Controller.java index a02ab8b91..f0e8ee352 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078Controller.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078Controller.java @@ -354,8 +354,10 @@ public class JT1078Controller { @Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true) @Parameter(name = "startTime", description = "开始时间,格式: yyyy-MM-dd HH:mm:ss", required = true) @Parameter(name = "endTime", description = "结束时间,格式: yyyy-MM-dd HH:mm:ss", required = true) - @Parameter(name = "type", description = "0.音视频 1.音频 2.视频 3.视频或音视频", required = true) - @Parameter(name = "rate", description = "0.所有码流 1.主码流 2.子码流(如果此通道只传输音频,此字段置0)", required = true) + @Parameter(name = "alarmSign", description = "报警标志", required = true) + @Parameter(name = "mediaType", description = "音视频资源类型: 0.音视频 1.音频 2.视频 3.视频或音视频", required = true) + @Parameter(name = "streamType", description = "码流类型:0.所有码流 1.主码流 2.子码流(如果此通道只传输音频,此字段置0)", required = true) + @Parameter(name = "storageType", description = "存储器类型", required = true) @GetMapping("/playback/download") public DeferredResult recordDownload(HttpServletRequest request, HttpServletResponse response, @@ -363,21 +365,23 @@ public class JT1078Controller { @Parameter(required = true) Integer channelId, @Parameter(required = true) String startTime, @Parameter(required = true) String endTime, - @Parameter(required = false) Integer type, - @Parameter(required = false) Integer rate + @Parameter(required = false) Integer alarmSign, + @Parameter(required = false) Integer mediaType, + @Parameter(required = false) Integer streamType, + @Parameter(required = false) Integer storageType ) throws IOException { - logger.info("[1078-录像] 下载,设备:{}, 通道: {}, 开始时间: {}, 结束时间: {}, 音视频类型: {}, 码流类型: {}, ", - phoneNumber, channelId, startTime, endTime, type, rate); + logger.info("[1078-录像] 下载,设备:{}, 通道: {}, 开始时间: {}, 结束时间: {},报警标志: {}, 音视频类型: {}, 码流类型: {},存储器类型: {}, ", + phoneNumber, channelId, startTime, endTime, alarmSign, mediaType, streamType, storageType); if (!ftpSetting.getEnable()) { throw new ControllerException(ErrorCode.ERROR100.getCode(), "未启用ftp服务,无法下载录像"); } - DeferredResult result = new DeferredResult<>(); + DeferredResult result = new DeferredResult<>(600000L); ServletOutputStream outputStream = response.getOutputStream(); response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(phoneNumber + "_" + channelId + ".mp4", "UTF-8")); response.setStatus(HttpServletResponse.SC_OK); - service.recordDownload(phoneNumber, channelId, startTime, endTime, type, rate, (code, msg, data) -> { + service.recordDownload(phoneNumber, channelId, startTime, endTime, alarmSign, mediaType, streamType, storageType, (code, msg, data) -> { String filePath = "ftp" + data; File file = new File(filePath); if (!file.exists()) { diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J1205.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J1205.java index 09769de0f..fb300de3b 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J1205.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J1205.java @@ -40,7 +40,7 @@ public class J1205 extends Re { item.setStartTime(DateUtil.jt1078Toyyyy_MM_dd_HH_mm_ss(startTime)); String endTime = ByteBufUtil.hexDump(buf.readSlice(6)); item.setEndTime(DateUtil.jt1078Toyyyy_MM_dd_HH_mm_ss(endTime)); - item.setWarn(buf.readLong()); + item.setAlarmSign(buf.readLong()); item.setMediaType(buf.readUnsignedByte()); item.setStreamType(buf.readUnsignedByte()); item.setStorageType(buf.readUnsignedByte()); @@ -89,7 +89,7 @@ public class J1205 extends Re { private String endTime; // 报警标志 - private long warn; + private long alarmSign; // 音视频资源类型 private int mediaType; @@ -127,12 +127,12 @@ public class J1205 extends Re { this.endTime = endTime; } - public long getWarn() { - return warn; + public long getAlarmSign() { + return alarmSign; } - public void setWarn(long warn) { - this.warn = warn; + public void setAlarmSign(long alarmSign) { + this.alarmSign = alarmSign; } public int getMediaType() { @@ -173,7 +173,7 @@ public class J1205 extends Re { "channelId=" + channelId + ", startTime='" + startTime + '\'' + ", endTime='" + endTime + '\'' + - ", warn=" + warn + + ", warn=" + alarmSign + ", mediaType=" + mediaType + ", streamType=" + streamType + ", storageType=" + storageType + diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9206.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9206.java index c41d5965e..c7e6afcfa 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9206.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/response/J9206.java @@ -34,7 +34,7 @@ public class J9206 extends Rs { private String endTime; // 报警标志 - private final int warnType = 0; + private int alarmSign = 0; // 音视频资源类型:0.音视频 1.音频 2.视频 3.视频或音视频 private int mediaType; @@ -71,7 +71,7 @@ public class J9206 extends Rs { buffer.writeByte(channelId); buffer.writeBytes(ByteBufUtil.decodeHexDump(startTime)); buffer.writeBytes(ByteBufUtil.decodeHexDump(endTime)); - buffer.writeLong(warnType); + buffer.writeLong(alarmSign); buffer.writeByte(mediaType); buffer.writeByte(streamType); buffer.writeByte(storageType); @@ -144,8 +144,8 @@ public class J9206 extends Rs { this.endTime = endTime; } - public int getWarnType() { - return warnType; + public int getAlarmSign() { + return alarmSign; } public int getMediaType() { @@ -180,6 +180,10 @@ public class J9206 extends Rs { this.taskConditions = taskConditions; } + public void setAlarmSign(int alarmSign) { + this.alarmSign = alarmSign; + } + @Override public String toString() { return "J9206{" + @@ -191,7 +195,7 @@ public class J9206 extends Rs { ", channelId=" + channelId + ", startTime='" + startTime + '\'' + ", endTime='" + endTime + '\'' + - ", warnType=" + warnType + + ", warnType=" + alarmSign + ", mediaType=" + mediaType + ", streamType=" + streamType + ", storageType=" + storageType + diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/service/Ijt1078Service.java b/src/main/java/com/genersoft/iot/vmp/jt1078/service/Ijt1078Service.java index d7a2da0ef..368284755 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/service/Ijt1078Service.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/service/Ijt1078Service.java @@ -118,7 +118,7 @@ public interface Ijt1078Service { void playbackControl(String phoneNumber, Integer channelId, Integer command, Integer playbackSpeed, String time); - void recordDownload(String phoneNumber, Integer channelId, String startTime, String endTime, Integer type, Integer rate, GeneralCallback fileCallback); + void recordDownload(String phoneNumber, Integer channelId, String startTime, String endTime, Integer alarmSign, Integer mediaType, Integer streamType, Integer storageType, GeneralCallback fileCallback); PageInfo getChannelList(int page, int count, int deviceId, String query); diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java index b9010756d..ba7b3e7f6 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java @@ -470,7 +470,7 @@ public class jt1078ServiceImpl implements Ijt1078Service { } @Override - public void recordDownload(String phoneNumber, Integer channelId, String startTime, String endTime, Integer type, Integer rate, GeneralCallback fileCallback) { + public void recordDownload(String phoneNumber, Integer channelId, String startTime, String endTime, Integer alarmSign, Integer mediaType, Integer streamType, Integer storageType, GeneralCallback fileCallback) { String filePath = UUID.randomUUID().toString(); fileUploadMap.put(filePath, fileCallback); dynamicTask.startDelay(filePath, ()->{ @@ -489,11 +489,17 @@ public class jt1078ServiceImpl implements Ijt1078Service { j92026.setPassword(ftpSetting.getPassword()); j92026.setPath(filePath); - if (type != null) { - j92026.setMediaType(type); + if (mediaType != null) { + j92026.setMediaType(mediaType); } - if (rate != null) { - j92026.setStreamType(rate); + if (streamType != null) { + j92026.setStreamType(streamType); + } + if (storageType != null) { + j92026.setStorageType(storageType); + } + if (alarmSign != null) { + j92026.setAlarmSign(alarmSign); } jt1078Template.fileUpload(phoneNumber, j92026, 7200); } diff --git a/web_src/src/components/JTRecordDetail.vue b/web_src/src/components/JTRecordDetail.vue index 2bb777bd5..57397126d 100755 --- a/web_src/src/components/JTRecordDetail.vue +++ b/web_src/src/components/JTRecordDetail.vue @@ -101,7 +101,6 @@ - @@ -110,12 +109,11 @@ import uiHeader from '../layout/UiHeader.vue' import player from './common/jessibuca.vue' import moment from 'moment' - import recordDownload from './dialog/recordDownload.vue' import JTDeviceService from "./service/JTDeviceService"; export default { name: 'app', components: { - uiHeader, player,recordDownload + uiHeader, player }, data() { return { @@ -320,48 +318,22 @@ this.control(command[0], command[1]) }, downloadRecord: function (row) { - if (!row) { - let startTimeStr = moment(new Date(this.chooseDate + " 00:00:00").getTime() + this.playTime[0]*1000).format("YYYY-MM-DD HH:mm:ss"); - let endTimeStr = moment(new Date(this.chooseDate + " 00:00:00").getTime() + this.playTime[1]*1000).format("YYYY-MM-DD HH:mm:ss"); - console.log(startTimeStr); - console.log(endTimeStr); - row = { - startTime: startTimeStr, - endTime: endTimeStr - } - } - if (this.streamId !== "") { - this.stopPlayRecord(()=> { - this.streamId = ""; - this.downloadRecord(row); - }) - }else { - this.$axios({ - method: 'get', - url: '/api/jt1078/playback/start/', - params: { - phoneNumber: this.phoneNumber, - channelId: this.channelId, - startTime: this.startTime, - endTime: this.endTime, - type: 0, - rate: 0, - playbackType: 0, - playbackSpeed: 0 - } - }).then( (res)=> { - if (res.data.code === 0) { - let streamInfo = res.data.data; - this.$refs.recordDownload.openDialog(this.deviceId, this.channelId, streamInfo.app, streamInfo.stream, streamInfo.mediaServerId); - }else { - this.$message({ - showClose: true, - message: res.data.msg, - type: "error", - }); - } - }); + let baseUrl = window.baseUrl ? window.baseUrl : ""; + let downloadFile = ((process.env.NODE_ENV === 'development') ? process.env.BASE_API : baseUrl) + + `/api/jt1078/playback/download?phoneNumber=${this.phoneNumber}&channelId=${this.channelId}&startTime=${row.startTime}&endTime=${row.endTime}`+ + `&alarmSign=${row.alarmSign}&mediaType=${row.mediaType}&streamType=${row.streamType}&storageType=${row.storageType}` + console.log(downloadFile) + let x = new XMLHttpRequest(); + x.open("GET", downloadFile, true); + x.responseType = 'blob'; + x.onload=(e)=> { + let url = window.URL.createObjectURL(x.response) + let a = document.createElement('a'); + a.href = url + a.download = this.phoneNumber + "-" + this.channelId + ".mp4"; + a.click() } + x.send(); }, stopDownloadRecord: function (callback) { this.$refs["recordVideoPlayer"].pause();