[1078] 增加抓图
This commit is contained in:
@@ -155,7 +155,6 @@ public class VirtualFtpFile implements FtpFile {
|
||||
|
||||
@Override
|
||||
public OutputStream createOutputStream(long offset) throws IOException {
|
||||
System.out.println("createOutputStream++++");
|
||||
return outputStream;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,9 @@ package com.genersoft.iot.vmp.jt1078.bean;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@Schema(description = "多媒体事件信息")
|
||||
public class JTMediaEventInfo {
|
||||
|
||||
@@ -21,6 +23,10 @@ public class JTMediaEventInfo {
|
||||
@Schema(description = "通道 ID")
|
||||
private int channelId;
|
||||
|
||||
@Schema(description = "媒体数据")
|
||||
private byte[] mediaData;
|
||||
|
||||
|
||||
public static JTMediaEventInfo decode(ByteBuf buf) {
|
||||
JTMediaEventInfo jtMediaEventInfo = new JTMediaEventInfo();
|
||||
jtMediaEventInfo.setId(buf.readUnsignedInt());
|
||||
@@ -28,49 +34,14 @@ public class JTMediaEventInfo {
|
||||
jtMediaEventInfo.setCode(buf.readUnsignedByte());
|
||||
jtMediaEventInfo.setEventCode(buf.readUnsignedByte());
|
||||
jtMediaEventInfo.setChannelId(buf.readUnsignedByte());
|
||||
|
||||
byte[] bytes = new byte[buf.readableBytes()];
|
||||
buf.readBytes(bytes);
|
||||
jtMediaEventInfo.setMediaData(bytes);
|
||||
|
||||
return jtMediaEventInfo;
|
||||
}
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(int type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public int getEventCode() {
|
||||
return eventCode;
|
||||
}
|
||||
|
||||
public void setEventCode(int eventCode) {
|
||||
this.eventCode = eventCode;
|
||||
}
|
||||
|
||||
public int getChannelId() {
|
||||
return channelId;
|
||||
}
|
||||
|
||||
public void setChannelId(int channelId) {
|
||||
this.channelId = channelId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "JTMediaEventInfo{" +
|
||||
@@ -79,6 +50,7 @@ public class JTMediaEventInfo {
|
||||
", code=" + code +
|
||||
", eventCode=" + eventCode +
|
||||
", channelId=" + channelId +
|
||||
", fileSize=" + mediaData.length +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ public enum MultiPacketManager {
|
||||
*/
|
||||
public ByteBuf add(MultiPacket packet) {
|
||||
String key = packet.getHeader().getMsgId() + "/" + packet.getHeader().getPhoneNumber();
|
||||
logger.debug("分包消息: \n{}", packet);
|
||||
logger.info("分包消息: \n{}", packet);
|
||||
List<MultiPacket> multiPackets = packetMap.computeIfAbsent(key, k -> new ArrayList<>(packet.getCount()));
|
||||
multiPackets.add(packet);
|
||||
packetTimeMap.put(key, System.currentTimeMillis());
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.context.request.async.DeferredResult;
|
||||
@@ -74,7 +75,7 @@ public class JT1078Controller {
|
||||
@Autowired
|
||||
private ThreadPoolTaskExecutor taskExecutor;
|
||||
|
||||
@Operation(summary = "1078-开始点播", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-开始点播", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@Parameter(name = "channelId", description = "通道编号, 一般为从1开始的数字", required = true)
|
||||
@Parameter(name = "type", description = "类型:0:音视频,1:视频,3:音频", required = true)
|
||||
@@ -125,7 +126,7 @@ public class JT1078Controller {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-结束点播", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-结束点播", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
||||
@GetMapping("/live/stop")
|
||||
@@ -135,7 +136,7 @@ public class JT1078Controller {
|
||||
jt1078PlayService.stopPlay(phoneNumber, channelId);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-语音对讲", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-语音对讲", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
||||
@Parameter(name = "app", description = "推流应用名", required = true)
|
||||
@@ -189,7 +190,7 @@ public class JT1078Controller {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-结束对讲", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-结束对讲", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
||||
@GetMapping("/talk/stop")
|
||||
@@ -200,7 +201,7 @@ public class JT1078Controller {
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "1078-暂停点播", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-暂停点播", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
||||
@GetMapping("/live/pause")
|
||||
@@ -210,7 +211,7 @@ public class JT1078Controller {
|
||||
jt1078PlayService.pausePlay(phoneNumber, channelId);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-继续点播", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-继续点播", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
||||
@GetMapping("/live/continue")
|
||||
@@ -221,7 +222,7 @@ public class JT1078Controller {
|
||||
jt1078PlayService.continueLivePlay(phoneNumber, channelId);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-切换码流类型", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-切换码流类型", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
||||
@Parameter(name = "streamType", description = "0:主码流; 1:子码流", required = true)
|
||||
@@ -233,7 +234,7 @@ public class JT1078Controller {
|
||||
service.changeStreamType(phoneNumber, channelId, streamType);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-录像-查询资源列表", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-录像-查询资源列表", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
||||
@Parameter(name = "startTime", description = "开始时间,格式: yyyy-MM-dd HH:mm:ss", required = true)
|
||||
@@ -252,7 +253,7 @@ public class JT1078Controller {
|
||||
return WVPResult.success(recordList);
|
||||
}
|
||||
}
|
||||
@Operation(summary = "1078-录像-开始回放", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-录像-开始回放", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
||||
@Parameter(name = "startTime", description = "开始时间,格式: yyyy-MM-dd HH:mm:ss", required = true)
|
||||
@@ -310,7 +311,7 @@ public class JT1078Controller {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-录像-回放控制", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-录像-回放控制", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
||||
@Parameter(name = "command", description = "0:开始回放; 1:暂停回放; 2:结束回放; 3:快进回放; 4:关键帧快退回放; 5:拖动回放; 6:关键帧播放", required = true)
|
||||
@@ -327,7 +328,7 @@ public class JT1078Controller {
|
||||
jt1078PlayService.playbackControl(phoneNumber, channelId, command, playbackSpeed,time);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-录像-结束回放", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-录像-结束回放", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
||||
@GetMapping("/playback/stop")
|
||||
@@ -337,67 +338,7 @@ public class JT1078Controller {
|
||||
jt1078PlayService.stopPlayback(phoneNumber, channelId);
|
||||
}
|
||||
|
||||
// @Operation(summary = "1078-录像-下载", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
// @Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
// @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 = "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<Void> recordDownload(HttpServletRequest request,
|
||||
// HttpServletResponse response,
|
||||
// @Parameter(required = true) String phoneNumber,
|
||||
// @Parameter(required = true) Integer channelId,
|
||||
// @Parameter(required = true) String startTime,
|
||||
// @Parameter(required = true) String endTime,
|
||||
// @Parameter(required = false) Integer alarmSign,
|
||||
// @Parameter(required = false) Integer mediaType,
|
||||
// @Parameter(required = false) Integer streamType,
|
||||
// @Parameter(required = false) Integer storageType
|
||||
//
|
||||
// ) throws IOException {
|
||||
// log.info("[JT-录像] 下载,设备:{}, 通道: {}, 开始时间: {}, 结束时间: {},报警标志: {}, 音视频类型: {}, 码流类型: {},存储器类型: {}, ",
|
||||
// phoneNumber, channelId, startTime, endTime, alarmSign, mediaType, streamType, storageType);
|
||||
// if (!ftpSetting.getEnable()) {
|
||||
// throw new ControllerException(ErrorCode.ERROR100.getCode(), "未启用ftp服务,无法下载录像");
|
||||
// }
|
||||
// DeferredResult<Void> 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, alarmSign, mediaType, streamType, storageType, outputStream, wvpResult -> {
|
||||
// String filePath = "ftp" + wvpResult.getData();
|
||||
// File file = new File(filePath);
|
||||
// if (!file.exists()) {
|
||||
// log.warn("[下载录像] 收到通知时未找到录像文件: {}", filePath);
|
||||
// return;
|
||||
// }
|
||||
// try {
|
||||
// final InputStream in = Files.newInputStream(file.toPath());
|
||||
// IOUtils.copy(in, outputStream);
|
||||
// outputStream.flush();
|
||||
// in.close();
|
||||
// } catch (IOException e) {
|
||||
// log.warn("[下载录像] 读取文件异常: {}", filePath, e);
|
||||
// return;
|
||||
// } finally {
|
||||
// try {
|
||||
// outputStream.close();
|
||||
// result.setResult(null);
|
||||
// } catch (IOException ignored) {
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
// return result;
|
||||
// }
|
||||
|
||||
|
||||
@Operation(summary = "1078-录像-获取下载地址", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-录像-获取下载地址", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
||||
@Parameter(name = "startTime", description = "开始时间,格式: yyyy-MM-dd HH:mm:ss", required = true)
|
||||
@@ -426,7 +367,7 @@ public class JT1078Controller {
|
||||
return service.getRecordTempUrl(phoneNumber, channelId, startTime, endTime, alarmSign, mediaType, streamType, storageType);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-录像-下载", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-录像-下载", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "path", description = "临时下载路径", required = true)
|
||||
@GetMapping("/playback/download")
|
||||
public void download(HttpServletRequest request, HttpServletResponse response, @Parameter(required = true) String path) throws IOException {
|
||||
@@ -437,11 +378,12 @@ public class JT1078Controller {
|
||||
ServletOutputStream outputStream = response.getOutputStream();
|
||||
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
|
||||
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(path + ".mp4", "UTF-8"));
|
||||
// response.setContentLength(394983300);
|
||||
response.setStatus(HttpServletResponse.SC_OK);
|
||||
service.recordDownload(path, outputStream);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-云台控制", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-云台控制", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
||||
@Parameter(name = "command", description = "控制指令,允许值: left, right, up, down, zoomin, zoomout, irisin, irisout, focusnear, focusfar, stop", required = true)
|
||||
@@ -453,7 +395,7 @@ public class JT1078Controller {
|
||||
service.ptzControl(phoneNumber, channelId, command, speed);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-补光灯开关", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-补光灯开关", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
||||
@Parameter(name = "command", description = "控制指令,允许值: on off", required = true)
|
||||
@@ -464,7 +406,7 @@ public class JT1078Controller {
|
||||
service.supplementaryLight(phoneNumber, channelId, command);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-雨刷开关", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-雨刷开关", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
||||
@Parameter(name = "command", description = "控制指令,允许值: on off", required = true)
|
||||
@@ -475,7 +417,7 @@ public class JT1078Controller {
|
||||
service.wiper(phoneNumber, channelId, command);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-查询终端参数", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-查询终端参数", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@GetMapping("/config")
|
||||
public JTDeviceConfig config(String phoneNumber, String[] params){
|
||||
@@ -484,7 +426,7 @@ public class JT1078Controller {
|
||||
return service.queryConfig(phoneNumber, params, null);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-设置终端参数", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-设置终端参数", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@Parameter(name = "config", description = "终端参数", required = true)
|
||||
@PostMapping("/set-config")
|
||||
@@ -503,7 +445,7 @@ public class JT1078Controller {
|
||||
service.connectionControl(control.getPhoneNumber(), control.getControl());
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-终端控制-复位", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-终端控制-复位", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@PostMapping("/control/reset")
|
||||
public void resetControl(String phoneNumber){
|
||||
@@ -512,7 +454,7 @@ public class JT1078Controller {
|
||||
service.resetControl(phoneNumber);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-终端控制-恢复出厂设置", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-终端控制-恢复出厂设置", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@PostMapping("/control/factory-reset")
|
||||
public void factoryResetControl(String phoneNumber){
|
||||
@@ -521,7 +463,7 @@ public class JT1078Controller {
|
||||
service.factoryResetControl(phoneNumber);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-查询终端属性", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-查询终端属性", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@GetMapping("/attribute")
|
||||
public JTDeviceAttribute attribute(String phoneNumber){
|
||||
@@ -530,7 +472,7 @@ public class JT1078Controller {
|
||||
return service.attribute(phoneNumber);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-查询位置信息", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-查询位置信息", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@GetMapping("/position-info")
|
||||
public JTPositionBaseInfo queryPositionInfo(String phoneNumber){
|
||||
@@ -539,7 +481,7 @@ public class JT1078Controller {
|
||||
return service.queryPositionInfo(phoneNumber);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-临时位置跟踪控制", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-临时位置跟踪控制", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@Parameter(name = "timeInterval", description = "时间间隔,单位为秒,时间间隔为0 时停止跟踪,停止跟踪无需带后继字段", required = true)
|
||||
@Parameter(name = "validityPeriod", description = "位置跟踪有效期, 单位为秒,终端在接收到位置跟踪控制消息后,在有效期截止时间之前依据消息中的时间间隔发送位置汇报", required = true)
|
||||
@@ -550,7 +492,7 @@ public class JT1078Controller {
|
||||
service.tempPositionTrackingControl(phoneNumber, timeInterval, validityPeriod);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-人工确认报警消息", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-人工确认报警消息", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@Parameter(name = "timeInterval", description = "时间间隔,单位为秒,时间间隔为0 时停止跟踪,停止跟踪无需带后继字段", required = true)
|
||||
@Parameter(name = "validityPeriod", description = "位置跟踪有效期, 单位为秒,终端在接收到位置跟踪控制消息后,在有效期截止时间之前依据消息中的时间间隔发送位置汇报", required = true)
|
||||
@@ -561,7 +503,7 @@ public class JT1078Controller {
|
||||
service.confirmationAlarmMessage(param.getPhoneNumber(), param.getAlarmPackageNo(), param.getAlarmMessageType());
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-链路检测", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-链路检测", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@GetMapping("/link-detection")
|
||||
public WVPResult<Integer> linkDetection(String phoneNumber){
|
||||
@@ -577,7 +519,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-文本信息下发", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-文本信息下发", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "textMessageParam", description = "文本信息下发参数", required = true)
|
||||
@PostMapping("/text-msg")
|
||||
public WVPResult<Integer> textMessage(@RequestBody TextMessageParam textMessageParam){
|
||||
@@ -593,7 +535,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-电话回拨", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-电话回拨", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@Parameter(name = "sign", description = "标志: 0:普通通话,1:监听", required = true)
|
||||
@Parameter(name = "destPhoneNumber", description = "回拨电话号码", required = true)
|
||||
@@ -611,7 +553,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-设置电话本", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-设置电话本", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "setPhoneBookParam", description = "设置电话本参数", required = true)
|
||||
@PostMapping("/set-phone-book")
|
||||
public WVPResult<Integer> setPhoneBook(@RequestBody SetPhoneBookParam setPhoneBookParam){
|
||||
@@ -627,7 +569,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-车门控制", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-车门控制", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@Parameter(name = "open", description = "开启车门", required = true)
|
||||
@GetMapping("/control/door")
|
||||
@@ -643,7 +585,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-更新圆形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-更新圆形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "areaParam", description = "设置区域参数", required = true)
|
||||
@PostMapping("/area/circle/update")
|
||||
public WVPResult<Integer> updateAreaForCircle(@RequestBody SetAreaParam areaParam){
|
||||
@@ -659,7 +601,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-追加圆形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-追加圆形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "areaParam", description = "设置区域参数", required = true)
|
||||
@PostMapping("/area/circle/add")
|
||||
public WVPResult<Integer> addAreaForCircle(@RequestBody SetAreaParam areaParam){
|
||||
@@ -675,7 +617,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-修改圆形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-修改圆形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "areaParam", description = "设置区域参数", required = true)
|
||||
@PostMapping("/area/circle/edit")
|
||||
public WVPResult<Integer> editAreaForCircle(@RequestBody SetAreaParam areaParam){
|
||||
@@ -691,7 +633,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-删除圆形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-删除圆形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@Parameter(name = "ids", description = "待删除圆形区域的id,例如1,2,3", required = true)
|
||||
@GetMapping("/area/circle/delete")
|
||||
@@ -708,7 +650,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-查询圆形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-查询圆形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@GetMapping("/area/circle/query")
|
||||
public WVPResult<List<JTAreaOrRoute>> queryAreaForCircle(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){
|
||||
@@ -723,7 +665,7 @@ public class JT1078Controller {
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "1078-更新矩形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-更新矩形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "areaParam", description = "设置区域参数", required = true)
|
||||
@PostMapping("/area/rectangle/update")
|
||||
public WVPResult<Integer> updateAreaForRectangle(@RequestBody SetAreaParam areaParam){
|
||||
@@ -739,7 +681,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-追加矩形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-追加矩形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "areaParam", description = "设置区域参数", required = true)
|
||||
@PostMapping("/area/rectangle/add")
|
||||
public WVPResult<Integer> addAreaForRectangle(@RequestBody SetAreaParam areaParam){
|
||||
@@ -755,7 +697,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-修改矩形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-修改矩形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "areaParam", description = "设置区域参数", required = true)
|
||||
@PostMapping("/area/rectangle/edit")
|
||||
public WVPResult<Integer> editAreaForRectangle(@RequestBody SetAreaParam areaParam){
|
||||
@@ -771,7 +713,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-删除矩形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-删除矩形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@Parameter(name = "ids", description = "待删除圆形区域的id,例如1,2,3", required = true)
|
||||
@GetMapping("/area/rectangle/delete")
|
||||
@@ -788,7 +730,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-查询矩形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-查询矩形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@GetMapping("/area/rectangle/query")
|
||||
public WVPResult<List<JTAreaOrRoute>> queryAreaForRectangle(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){
|
||||
@@ -802,7 +744,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-设置多边形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-设置多边形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "areaParam", description = "设置区域参数", required = true)
|
||||
@PostMapping("/area/polygon/set")
|
||||
public WVPResult<Integer> setAreaForPolygon(@RequestBody SetAreaParam areaParam){
|
||||
@@ -818,7 +760,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-删除多边形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-删除多边形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@Parameter(name = "ids", description = "待删除圆形区域的id,例如1,2,3", required = true)
|
||||
@GetMapping("/area/polygon/delete")
|
||||
@@ -835,7 +777,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-查询多边形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-查询多边形区域", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@GetMapping("/area/polygon/query")
|
||||
public WVPResult<List<JTAreaOrRoute>> queryAreaForPolygon(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){
|
||||
@@ -849,7 +791,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-设置路线", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-设置路线", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "areaParam", description = "设置区域参数", required = true)
|
||||
@PostMapping("/route/set")
|
||||
public WVPResult<Integer> setRoute(@RequestBody SetAreaParam areaParam){
|
||||
@@ -865,7 +807,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-删除路线", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-删除路线", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@Parameter(name = "ids", description = "待删除圆形区域的id,例如1,2,3", required = true)
|
||||
@GetMapping("/route/delete")
|
||||
@@ -882,7 +824,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-查询路线", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-查询路线", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@GetMapping("/route/query")
|
||||
public WVPResult<List<JTAreaOrRoute>> queryRoute(String phoneNumber, @RequestParam(value = "ids", required = false) List<Long> ids){
|
||||
@@ -898,7 +840,7 @@ public class JT1078Controller {
|
||||
|
||||
// TODO 待实现 行驶记录数据采集命令 行驶记录数据上传 行驶记录参数下传命令 电子运单上报 CAN总线数据上传
|
||||
|
||||
@Operation(summary = "1078-上报驾驶员身份信息请求", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-上报驾驶员身份信息请求", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@GetMapping("/driver-information")
|
||||
public WVPResult<JTDriverInformation> queryDriverInformation(String phoneNumber){
|
||||
@@ -912,7 +854,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-摄像头立即拍摄命令", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-摄像头立即拍摄命令", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@PostMapping("/shooting")
|
||||
public WVPResult<List<Long>> shooting(@RequestBody ShootingParam param){
|
||||
@@ -926,7 +868,25 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-存储多媒体数据检索", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-抓图", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
|
||||
@Parameter(name = "channelId", description = "通道编号", required = true)
|
||||
@PostMapping("/snap")
|
||||
public void snap(HttpServletResponse response, String phoneNumber, Integer channelId){
|
||||
|
||||
log.info("[JT-抓图] 设备编号: {}, 通道编号: {}", phoneNumber, channelId );
|
||||
Assert.notNull(channelId, "缺少通道编号");
|
||||
try {
|
||||
ServletOutputStream outputStream = response.getOutputStream();
|
||||
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
|
||||
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(phoneNumber + "_" + channelId + ".jpg", "UTF-8"));
|
||||
service.snap(phoneNumber, channelId, outputStream);
|
||||
}catch (Exception e) {
|
||||
throw new ControllerException(ErrorCode.ERROR100.getCode(), e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "JT-存储多媒体数据检索", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "param", description = "存储多媒体数据参数", required = true)
|
||||
@PostMapping("/media-data-info")
|
||||
public WVPResult<List<JTMediaDataInfo>> queryMediaData(@RequestBody QueryMediaDataParam param){
|
||||
@@ -940,7 +900,7 @@ public class JT1078Controller {
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-存储多媒体数据上传命令", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-存储多媒体数据上传命令", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "param", description = "存储多媒体数据参数", required = true)
|
||||
@PostMapping("/media-data-upload")
|
||||
public DeferredResult<WVPResult<List<String>>> updateMediaData(@RequestBody QueryMediaDataParam param){
|
||||
@@ -1006,7 +966,7 @@ public class JT1078Controller {
|
||||
return deferredResult;
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-开始录音", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-开始录音", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@Parameter(name = "time", description = "录音时间,单位为秒(s) ,0 表示一直录音", required = false)
|
||||
@Parameter(name = "save", description = "0:实时上传;1:保存", required = false)
|
||||
@@ -1030,7 +990,7 @@ public class JT1078Controller {
|
||||
service.record(phoneNumber, 1, time, save, samplingRate);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-停止录音", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-停止录音", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@Parameter(name = "time", description = "录音时间,单位为秒(s) ,0 表示一直录音", required = false)
|
||||
@Parameter(name = "save", description = "0:实时上传;1:保存", required = false)
|
||||
@@ -1054,7 +1014,7 @@ public class JT1078Controller {
|
||||
service.record(phoneNumber, 0, time, save, samplingRate);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-查询终端音视频属性", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-查询终端音视频属性", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
|
||||
@GetMapping("/media/attribute")
|
||||
public JTMediaAttribute queryMediaAttribute(HttpServletRequest request,
|
||||
|
||||
@@ -33,7 +33,7 @@ public class JT1078TerminalController {
|
||||
@Autowired
|
||||
UserSetting userSetting;
|
||||
|
||||
@Operation(summary = "1078-分页查询部标设备", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-分页查询部标设备", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "page", description = "当前页", required = true)
|
||||
@Parameter(name = "count", description = "每页查询数量", required = true)
|
||||
@Parameter(name = "query", description = "查询内容")
|
||||
@@ -54,7 +54,7 @@ public class JT1078TerminalController {
|
||||
service.updateDevice(device);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-新增设备", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-新增设备", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "device", description = "设备", required = true)
|
||||
@PostMapping("/add")
|
||||
public void addDevice(JTDevice device){
|
||||
@@ -76,7 +76,7 @@ public class JT1078TerminalController {
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "1078-查询部标通道", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-查询部标通道", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "page", description = "当前页", required = true)
|
||||
@Parameter(name = "count", description = "每页查询数量", required = true)
|
||||
@Parameter(name = "deviceId", description = "设备ID", required = true)
|
||||
@@ -89,7 +89,7 @@ public class JT1078TerminalController {
|
||||
return service.getChannelList(page, count, deviceId, query);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-查询单个部标通道", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-查询单个部标通道", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "id", description = "通道数据库ID", required = true)
|
||||
@GetMapping("/channel/one")
|
||||
public JTChannel getChannel(Integer id) {
|
||||
@@ -97,7 +97,7 @@ public class JT1078TerminalController {
|
||||
return service.getChannelByDbId(id);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-更新通道", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-更新通道", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "channel", description = "通道", required = true)
|
||||
@PostMapping("/channel/update")
|
||||
public void updateChannel(@RequestBody JTChannel channel){
|
||||
@@ -106,7 +106,7 @@ public class JT1078TerminalController {
|
||||
service.updateChannel(channel);
|
||||
}
|
||||
|
||||
@Operation(summary = "1078-新增通道", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-新增通道", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "channel", description = "通道", required = true)
|
||||
@PostMapping("/channel/add")
|
||||
public JTChannel addChannel(@RequestBody JTChannel channel){
|
||||
@@ -115,7 +115,7 @@ public class JT1078TerminalController {
|
||||
service.addChannel(channel);
|
||||
return channel;
|
||||
}
|
||||
@Operation(summary = "1078-删除通道", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Operation(summary = "JT-删除通道", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
@Parameter(name = "id", description = "通道的数据库ID", required = true)
|
||||
@DeleteMapping("/channel/delete")
|
||||
public void deleteChannel(Integer id){
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.genersoft.iot.vmp.jt1078.event;
|
||||
|
||||
import com.genersoft.iot.vmp.jt1078.bean.JTMediaEventInfo;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
|
||||
public class MediaFileUploadEvent extends ApplicationEvent {
|
||||
|
||||
public MediaFileUploadEvent(Object source) {
|
||||
super(source);
|
||||
}
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private JTMediaEventInfo mediaEventInfo;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private byte[] bytes;
|
||||
}
|
||||
@@ -27,48 +27,17 @@ public class J0801 extends Re {
|
||||
|
||||
private final static Logger log = LoggerFactory.getLogger(J0801.class);
|
||||
|
||||
private JTMediaEventInfo mediaEventInfo;
|
||||
private JTPositionBaseInfo positionBaseInfo;
|
||||
|
||||
@Override
|
||||
protected Rs decode0(ByteBuf buf, Header header, Session session) {
|
||||
mediaEventInfo = JTMediaEventInfo.decode(buf);
|
||||
JTMediaEventInfo mediaEventInfo = JTMediaEventInfo.decode(buf);
|
||||
ByteBuf byteBuf = buf.readSlice(28);
|
||||
positionBaseInfo = JTPositionBaseInfo.decode(byteBuf);
|
||||
String fileName = "mediaEvent/" + mediaEventInfo.getId() + ".";
|
||||
File mediaEventFile = new File("mediaEvent");
|
||||
if (!mediaEventFile.exists()) {
|
||||
mediaEventFile.mkdirs();
|
||||
}
|
||||
switch (mediaEventInfo.getCode()){
|
||||
case 0:
|
||||
fileName += "jpg";
|
||||
break;
|
||||
case 1:
|
||||
fileName += "tif";
|
||||
break;
|
||||
case 2:
|
||||
fileName += "mp3";
|
||||
break;
|
||||
case 3:
|
||||
fileName += "wav";
|
||||
break;
|
||||
case 4:
|
||||
fileName += "wmv";
|
||||
break;
|
||||
}
|
||||
try {
|
||||
File file = new File(fileName);
|
||||
file.deleteOnExit();
|
||||
file.createNewFile();
|
||||
FileOutputStream fileOutputStream = new FileOutputStream(file);
|
||||
byte[] bytes = new byte[buf.readableBytes()];
|
||||
buf.readBytes(bytes);
|
||||
fileOutputStream.write(bytes);
|
||||
fileOutputStream.close();
|
||||
} catch (IOException e) {
|
||||
log.info("[JT-多媒体数据上传] 写入文件失败", e);
|
||||
}
|
||||
log.info("[JT-多媒体数据上传]: {}", mediaEventInfo);
|
||||
SessionManager.INSTANCE.response(header.getPhoneNumber(), "0801", null, mediaEventInfo);
|
||||
return null;
|
||||
|
||||
@@ -18,6 +18,7 @@ public class J0A00 extends Re {
|
||||
/**
|
||||
* 透传消息类型, 0x00: GNSS 模块详细定位数据, 0X0B: 道路运输证 IC卡信息, 0X41: 串口1 透传, 0X42: 串口2 透传, 0XF0 ~ 0XFF: 用户自定义透传
|
||||
*/
|
||||
|
||||
private Integer type;
|
||||
|
||||
/**
|
||||
|
||||
@@ -122,4 +122,7 @@ public interface Ijt1078Service {
|
||||
String getRecordTempUrl(String phoneNumber, Integer channelId, String startTime, String endTime, Integer alarmSign, Integer mediaType, Integer streamType, Integer storageType);
|
||||
|
||||
void recordDownload(String filePath, ServletOutputStream outputStream);
|
||||
|
||||
void snap(String phoneNumber, int channelId, ServletOutputStream outputStream);
|
||||
|
||||
}
|
||||
|
||||
@@ -5,22 +5,18 @@ import com.genersoft.iot.vmp.common.StreamInfo;
|
||||
import com.genersoft.iot.vmp.common.VideoManagerConstants;
|
||||
import com.genersoft.iot.vmp.conf.DynamicTask;
|
||||
import com.genersoft.iot.vmp.conf.ftpServer.FtpFileSystemFactory;
|
||||
import com.genersoft.iot.vmp.conf.ftpServer.FtpFileSystemView;
|
||||
import com.genersoft.iot.vmp.conf.ftpServer.FtpSetting;
|
||||
import com.genersoft.iot.vmp.conf.UserSetting;
|
||||
import com.genersoft.iot.vmp.conf.exception.ControllerException;
|
||||
import com.genersoft.iot.vmp.gb28181.event.sip.MessageEvent;
|
||||
import com.genersoft.iot.vmp.gb28181.service.IGbChannelService;
|
||||
import com.genersoft.iot.vmp.gb28181.task.deviceStatus.DeviceStatusTask;
|
||||
import com.genersoft.iot.vmp.jt1078.bean.*;
|
||||
import com.genersoft.iot.vmp.jt1078.bean.common.ConfigAttribute;
|
||||
import com.genersoft.iot.vmp.jt1078.cmd.JT1078Template;
|
||||
import com.genersoft.iot.vmp.jt1078.dao.JTChannelMapper;
|
||||
import com.genersoft.iot.vmp.jt1078.dao.JTTerminalMapper;
|
||||
import com.genersoft.iot.vmp.jt1078.event.FtpUploadEvent;
|
||||
import com.genersoft.iot.vmp.jt1078.proc.response.*;
|
||||
import com.genersoft.iot.vmp.jt1078.service.Ijt1078Service;
|
||||
import com.genersoft.iot.vmp.jt1078.session.DownloadManager;
|
||||
import com.genersoft.iot.vmp.jt1078.session.FtpDownloadManager;
|
||||
import com.genersoft.iot.vmp.media.event.media.MediaArrivalEvent;
|
||||
import com.genersoft.iot.vmp.media.event.media.MediaDepartureEvent;
|
||||
import com.genersoft.iot.vmp.utils.DateUtil;
|
||||
@@ -38,15 +34,13 @@ import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.web.context.request.async.DeferredResult;
|
||||
|
||||
import javax.servlet.ServletOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.DelayQueue;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.SynchronousQueue;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
@@ -80,7 +74,7 @@ public class jt1078ServiceImpl implements Ijt1078Service {
|
||||
private FtpFileSystemFactory fileSystemFactory;
|
||||
|
||||
@Autowired
|
||||
private DownloadManager downloadManager;
|
||||
private FtpDownloadManager downloadManager;
|
||||
|
||||
/**
|
||||
* 流到来的处理
|
||||
@@ -694,7 +688,7 @@ public class jt1078ServiceImpl implements Ijt1078Service {
|
||||
|
||||
log.info("[JT-录像] 下载,设备:{}, 通道: {}, 开始时间: {}, 结束时间: {},等待上传文件路径: {} ",
|
||||
phoneNumber, channelId, startTime, endTime, filePath);
|
||||
// 发送停止命令
|
||||
// 文件上传指令
|
||||
J9206 j9206 = new J9206();
|
||||
j9206.setChannelId(channelId);
|
||||
j9206.setStartTime(DateUtil.yyyy_MM_dd_HH_mm_ssTo1078(startTime));
|
||||
@@ -732,4 +726,44 @@ public class jt1078ServiceImpl implements Ijt1078Service {
|
||||
fileSystemFactory.removeOutputStream(filePath);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void snap(String phoneNumber, int channelId, ServletOutputStream outputStream) {
|
||||
J8801 j8801 = new J8801();
|
||||
|
||||
JTShootingCommand shootingCommand = new JTShootingCommand();
|
||||
shootingCommand.setChanelId(channelId);
|
||||
shootingCommand.setCommand(1);
|
||||
shootingCommand.setTime(0);
|
||||
shootingCommand.setSave(0);
|
||||
shootingCommand.setResolvingPower(0xff);
|
||||
shootingCommand.setQuality(1);
|
||||
shootingCommand.setBrightness(125);
|
||||
shootingCommand.setContrastRatio(60);
|
||||
shootingCommand.setSaturation(60);
|
||||
shootingCommand.setChroma(125);
|
||||
|
||||
j8801.setCommand(shootingCommand);
|
||||
log.info("[JT-抓图] 设备编号: {}, 通道编号: {}", phoneNumber, channelId);
|
||||
@SuppressWarnings("unchecked")
|
||||
List<Long> ids = (List<Long>) jt1078Template.shooting(phoneNumber, j8801, 300);
|
||||
log.info("[JT-抓图] 抓图编号: {}, 设备编号: {}, 通道编号: {}", ids.get(0), phoneNumber, channelId);
|
||||
J8805 j8805 = new J8805();
|
||||
j8805.setMediaId(ids.get(0));
|
||||
j8805.setDelete(1);
|
||||
log.info("[JT-抓图] 请求上传图片,抓图编号: {}, 设备编号: {}, 通道编号: {}", ids.get(0), phoneNumber, channelId);
|
||||
JTMediaEventInfo mediaEventInfo = (JTMediaEventInfo)jt1078Template.uploadMediaDataForSingle(phoneNumber, j8805, 300);
|
||||
if (mediaEventInfo == null) {
|
||||
log.info("[]");
|
||||
throw new ControllerException(ErrorCode.ERROR100.getCode(), ErrorCode.ERROR100.getMsg());
|
||||
}
|
||||
log.info("[JT-抓图] 图片上传完成,抓图编号: {}, 设备编号: {}, 通道编号: {}", ids.get(0), phoneNumber, channelId);
|
||||
try {
|
||||
outputStream.write(mediaEventInfo.getMediaData());
|
||||
} catch (IOException e) {
|
||||
log.info("[JT-抓图] 数据写入异常,抓图编号: {}, 设备编号: {}, 通道编号: {}", ids.get(0), phoneNumber, channelId, e);
|
||||
throw new ControllerException(ErrorCode.ERROR100.getCode(), "数据写入异常");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
package com.genersoft.iot.vmp.jt1078.session;
|
||||
|
||||
import com.genersoft.iot.vmp.common.CommonCallback;
|
||||
import com.genersoft.iot.vmp.jt1078.bean.JTRecordDownloadCatch;
|
||||
import com.genersoft.iot.vmp.jt1078.event.FtpUploadEvent;
|
||||
import com.genersoft.iot.vmp.jt1078.proc.response.J9206;
|
||||
import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
|
||||
import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
@@ -19,7 +16,7 @@ import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class DownloadManager {
|
||||
public class FtpDownloadManager {
|
||||
|
||||
private final Map<String, JTRecordDownloadCatch> downloadCatchMap = new ConcurrentHashMap<>();
|
||||
private final DelayQueue<JTRecordDownloadCatch> downloadCatchQueue = new DelayQueue<>();
|
||||
@@ -92,8 +92,10 @@
|
||||
设备录像</el-dropdown-item>
|
||||
<el-dropdown-item command="cloudRecords" :disabled="device == null || device.online === 0">
|
||||
云端录像</el-dropdown-item>
|
||||
<!-- <el-dropdown-item command="shooting" v-bind:disabled="device == null || device.online === 0" >-->
|
||||
<!-- 立即拍摄</el-dropdown-item>-->
|
||||
<el-dropdown-item command="shooting" v-bind:disabled="device == null || device.online === 0" >
|
||||
抓图</el-dropdown-item>
|
||||
<el-dropdown-item command="searchData" v-bind:disabled="device == null || device.online === 0" >
|
||||
数据检索</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
@@ -114,6 +116,7 @@
|
||||
</div>
|
||||
<devicePlayer ref="devicePlayer" />
|
||||
<channelEdit v-if="jtChannel" ref="channelEdit" :jt-channel="jtChannel" :close-edit="closeEdit" />
|
||||
<shooting ref="shooting" />
|
||||
|
||||
</div>
|
||||
</template>
|
||||
@@ -121,12 +124,14 @@
|
||||
<script>
|
||||
import devicePlayer from '../jtDevicePlayer.vue'
|
||||
import channelEdit from './edit.vue'
|
||||
import shooting from './shooting.vue'
|
||||
|
||||
export default {
|
||||
name: 'ChannelList',
|
||||
components: {
|
||||
channelEdit,
|
||||
devicePlayer
|
||||
devicePlayer,
|
||||
shooting
|
||||
},
|
||||
props: {
|
||||
deviceId: {
|
||||
@@ -240,6 +245,8 @@ export default {
|
||||
this.queryRecords(itemData)
|
||||
} else if (command === 'cloudRecords') {
|
||||
this.queryCloudRecords(itemData)
|
||||
} else if (command === 'shooting') {
|
||||
this.shooting(itemData)
|
||||
} else {
|
||||
this.$message.info('尚不支持')
|
||||
}
|
||||
@@ -315,6 +322,12 @@ export default {
|
||||
// 编辑
|
||||
closeEdit(row) {
|
||||
this.jtChannel = null
|
||||
},
|
||||
// 编辑
|
||||
shooting(row) {
|
||||
const baseUrl = window.baseUrl
|
||||
let dev = (process.env.NODE_ENV === 'development' ? process.env.VUE_APP_BASE_API : baseUrl)
|
||||
window.open(`${dev}/api/jt1078/snap?phoneNumber=${this.deviceId}&channelId=${row.channelId}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -498,39 +498,6 @@ export default {
|
||||
}).finally(() => {
|
||||
loading.close()
|
||||
})
|
||||
|
||||
|
||||
|
||||
// const baseUrl = window.baseUrl ? window.baseUrl : ''
|
||||
// const downloadFileUrl = ((process.env.NODE_ENV === 'development') ? process.env.VUE_APP_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}&access-token=${this.$store.getters.token}`
|
||||
// const x = new XMLHttpRequest()
|
||||
// x.open('GET', downloadFileUrl, true)
|
||||
// x.responseType = 'blob'
|
||||
// x.onload = (e) => {
|
||||
// const url = window.URL.createObjectURL(x.response)
|
||||
// const a = document.createElement('a')
|
||||
// a.href = url
|
||||
// a.download = this.phoneNumber + '-' + this.channelId + '.mp4'
|
||||
// a.click()
|
||||
// loading.close()
|
||||
// }
|
||||
// x.ontimeout = (e) => {
|
||||
// loading.close()
|
||||
// this.$message.error({
|
||||
// showClose: true,
|
||||
// message: '加载超时'
|
||||
// })
|
||||
// }
|
||||
// x.onerror = (e) => {
|
||||
// loading.close()
|
||||
// this.$message.error({
|
||||
// showClose: true,
|
||||
// message: e.error
|
||||
// })
|
||||
// }
|
||||
// x.send()
|
||||
},
|
||||
getFileShowName(item) {
|
||||
return moment(item.startTime).format('HH:mm:ss') + '-' + moment(item.endTime).format('HH:mm:ss')
|
||||
|
||||
Reference in New Issue
Block a user