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 4704f7d88..8a3b2d824 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 @@ -1029,8 +1029,7 @@ public class JT1078Controller { @Operation(summary = "JT-查询终端音视频属性", security = @SecurityRequirement(name = JwtUtils.HEADER)) @Parameter(name = "phoneNumber", description = "设备手机号", required = true) @GetMapping("/media/attribute") - public JTMediaAttribute queryMediaAttribute(HttpServletRequest request, - @Parameter(required = true) String phoneNumber + public JTMediaAttribute queryMediaAttribute( @Parameter(required = true) String phoneNumber ) { return service.queryMediaAttribute(phoneNumber); } diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078TerminalController.java b/src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078TerminalController.java index eb8c665a7..584b64f97 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078TerminalController.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078TerminalController.java @@ -59,6 +59,8 @@ public class JT1078TerminalController { @PostMapping("/add") public void addDevice(JTDevice device){ assert device.getPhoneNumber() != null; + String phoneNumber = device.getPhoneNumber().replaceFirst("^0*", ""); + device.setPhoneNumber(phoneNumber); service.addDevice(device); } @Operation(summary = "删除设备", security = @SecurityRequirement(name = JwtUtils.HEADER)) diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/entity/Cmd.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/entity/Cmd.java index f57980b6b..d6c3a8e90 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/entity/Cmd.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/entity/Cmd.java @@ -1,12 +1,14 @@ package com.genersoft.iot.vmp.jt1078.proc.entity; import com.genersoft.iot.vmp.jt1078.proc.response.Rs; +import lombok.Data; /** * @author QingtaiJiang * @date 2023/4/27 18:23 * @email qingtaij@163.com */ +@Data public class Cmd { String phoneNumber; Long packageNo; @@ -25,46 +27,6 @@ public class Cmd { this.rs = builder.rs; } - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public Long getPackageNo() { - return packageNo; - } - - public void setPackageNo(Long packageNo) { - this.packageNo = packageNo; - } - - public String getMsgId() { - return msgId; - } - - public void setMsgId(String msgId) { - this.msgId = msgId; - } - - public String getRespId() { - return respId; - } - - public void setRespId(String respId) { - this.respId = respId; - } - - public Rs getRs() { - return rs; - } - - public void setRs(Rs rs) { - this.rs = rs; - } - public static class Builder { String phoneNumber; Long packageNo; diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0107.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0107.java index 730c1d106..1d76fa545 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0107.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0107.java @@ -23,18 +23,9 @@ import java.nio.charset.Charset; @MsgId(id = "0107") public class J0107 extends Re { - private final static Logger logger = LoggerFactory.getLogger(J0107.class); - - Integer respNo; - Integer paramLength; - @Override protected Rs decode0(ByteBuf buf, Header header, Session session) { -// respNo = buf.readUnsignedShort(); -// paramLength = (int) buf.readUnsignedByte(); -// if (paramLength <= 0) { -// return null; -// } + JTDeviceAttribute deviceAttribute = new JTDeviceAttribute(); deviceAttribute.setType(JTDeviceType.getInstance(buf.readUnsignedShort())); diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0801.java b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0801.java index 694a82b2b..850b825ef 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0801.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/proc/request/J0801.java @@ -33,20 +33,20 @@ public class J0801 extends Re { protected Rs decode0(ByteBuf buf, Header header, Session session) { JTMediaEventInfo mediaEventInfo = JTMediaEventInfo.decode(buf); log.info("[JT-多媒体数据上传]: {}", mediaEventInfo); - try { - if (mediaEventInfo.getMediaData() != null) { - File file = new File("/home/lin/source.jpg"); - if (file.exists()) { - file.delete(); - } - FileOutputStream fileOutputStream = new FileOutputStream(file); - fileOutputStream.write(mediaEventInfo.getMediaData()); - fileOutputStream.flush(); - fileOutputStream.close(); - } - }catch (Exception e) { - log.error("[JT-多媒体数据上传] 写入文件异常", e); - } +// try { +// if (mediaEventInfo.getMediaData() != null) { +// File file = new File("/home/lin/source.jpg"); +// if (file.exists()) { +// file.delete(); +// } +// FileOutputStream fileOutputStream = new FileOutputStream(file); +// fileOutputStream.write(mediaEventInfo.getMediaData()); +// fileOutputStream.flush(); +// fileOutputStream.close(); +// } +// }catch (Exception e) { +// log.error("[JT-多媒体数据上传] 写入文件异常", e); +// } SessionManager.INSTANCE.response(header.getPhoneNumber(), "0801", null, mediaEventInfo); return null; } 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 32486836e..34b3032bb 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 @@ -781,6 +781,8 @@ public class jt1078ServiceImpl implements Ijt1078Service { j8801.setCommand(shootingCommand); log.info("[JT-抓图] 设备编号: {}, 通道编号: {}", phoneNumber, channelId); + // 监听文件上传, 存在设备不回复抓图请求或者回复通用回复,导致缺少抓图编号,但是直接上传文件的,此处通过监听文件上传直接获取文件 + @SuppressWarnings("unchecked") List ids = (List) jt1078Template.shooting(phoneNumber, j8801, 300); log.info("[JT-抓图] 抓图编号: {}, 设备编号: {}, 通道编号: {}", ids.get(0), phoneNumber, channelId); diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/session/SessionManager.java b/src/main/java/com/genersoft/iot/vmp/jt1078/session/SessionManager.java index 555ea4379..48979f81e 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/session/SessionManager.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/session/SessionManager.java @@ -56,7 +56,7 @@ public enum SessionManager { * @param clientId 设备ID * @param newSession session */ - protected void put(Object clientId, Session newSession) { + void put(Object clientId, Session newSession) { sessionMap.put(clientId, newSession); } diff --git a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLRESTfulUtils.java b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLRESTfulUtils.java index b23c1adf6..ae16f8ab1 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/abl/ABLRESTfulUtils.java +++ b/src/main/java/com/genersoft/iot/vmp/media/abl/ABLRESTfulUtils.java @@ -322,7 +322,7 @@ public class ABLRESTfulUtils { // 3 XHB (一家公司的打包格式) 只支持视频,音频不能加入打包 // 4 、Jt1078(2016版本)码流接入 param.put("RtpPayloadDataType", 4); - param.put("jtt1078_version", "2016"); + param.put("jtt1078_version", "2019"); } if (port != null) { param.put("port", port); diff --git a/web/src/api/jtDevice.js b/web/src/api/jtDevice.js index f95a1b82b..6c33e085c 100644 --- a/web/src/api/jtDevice.js +++ b/web/src/api/jtDevice.js @@ -317,5 +317,14 @@ export function controlDoor({ phoneNumber, open}) { } }) } +export function queryMediaAttribute(phoneNumber) { + return request({ + method: 'get', + url: '/api/jt1078/media/attribute', + params: { + phoneNumber: phoneNumber + } + }) +} diff --git a/web/src/store/modules/jtDevice.js b/web/src/store/modules/jtDevice.js index b3333d628..5786b56f6 100644 --- a/web/src/store/modules/jtDevice.js +++ b/web/src/store/modules/jtDevice.js @@ -1,13 +1,35 @@ import { add, - addChannel, connection, controlDoor, controlPlayback, deleteDevice, factoryReset, - fillLight, getRecordTempUrl, linkDetection, - play, ptz, queryAttribute, - queryChannels, queryConfig, + addChannel, + connection, + controlDoor, + controlPlayback, + deleteDevice, + factoryReset, + fillLight, + getRecordTempUrl, + linkDetection, + play, + ptz, + queryAttribute, + queryChannels, + queryConfig, queryDeviceById, - queryDevices, queryDriverInfo, queryPosition, queryRecordList, reset, sendTextMessage, setConfig, startPlayback, - stopPlay, stopPlayback, telephoneCallback, update, - updateChannel, wiper + queryDevices, + queryDriverInfo, + queryMediaAttribute, + queryPosition, + queryRecordList, + reset, + sendTextMessage, + setConfig, + startPlayback, + stopPlay, + stopPlayback, + telephoneCallback, + update, + updateChannel, + wiper } from '@/api/jtDevice' const actions = { @@ -310,6 +332,16 @@ const actions = { reject(error) }) }) + }, + queryMediaAttribute({ commit }, phoneNumber) { + return new Promise((resolve, reject) => { + queryMediaAttribute(phoneNumber).then(response => { + const { data } = response + resolve(data) + }).catch(error => { + reject(error) + }) + }) } } diff --git a/web/src/views/jtDevice/channel/index.vue b/web/src/views/jtDevice/channel/index.vue index 502a84e59..0f380aa19 100755 --- a/web/src/views/jtDevice/channel/index.vue +++ b/web/src/views/jtDevice/channel/index.vue @@ -330,14 +330,16 @@ export default { // 文件下载地址 const baseUrl = window.baseUrl ? window.baseUrl : '' const fileUrl = ((process.env.NODE_ENV === 'development') ? process.env.VUE_APP_BASE_API : baseUrl) + `/api/jt1078/snap?phoneNumber=${this.device.phoneNumber}&channelId=${row.channelId}` - + let controller = new AbortController() + let signal = controller.signal // 设置请求头 const headers = new Headers() headers.append('access-token', this.$store.getters.token) // 设置授权头,替换YourAccessToken为实际的访问令牌 // 发起 请求 fetch(fileUrl, { method: 'GET', - headers: headers + headers: headers, + signal: signal }) .then(response => response.blob()) .then(blob => { @@ -353,6 +355,11 @@ export default { document.body.removeChild(link) }) .catch(error => console.error('下载失败:', error)) + + setTimeout(() => { + this.$message.error('等待截图超时', { closed: true }) + controller.abort('timeout') + }, 15000) } } } diff --git a/web/src/views/jtDevice/dialog/mediaAttribute.vue b/web/src/views/jtDevice/dialog/mediaAttribute.vue new file mode 100755 index 000000000..656a84821 --- /dev/null +++ b/web/src/views/jtDevice/dialog/mediaAttribute.vue @@ -0,0 +1,75 @@ + + + diff --git a/web/src/views/jtDevice/list.vue b/web/src/views/jtDevice/list.vue index 1b1872107..599b177d4 100755 --- a/web/src/views/jtDevice/list.vue +++ b/web/src/views/jtDevice/list.vue @@ -107,6 +107,8 @@ 终端参数 终端属性 + + 音视频属性 链路检测 @@ -151,6 +153,7 @@ + @@ -164,11 +167,12 @@ import telephoneCallback from './dialog/telephoneCallback.vue' import driverInfo from './dialog/driverInfo.vue' import connectionServer from './dialog/connectionServer.vue' import controlDoor from './dialog/controlDoor.vue' +import mediaAttribute from './dialog/mediaAttribute.vue' export default { name: 'App', components: { - deviceEdit, configInfo, attribute, position, textMsg, telephoneCallback, driverInfo, connectionServer, controlDoor + deviceEdit, configInfo, attribute, position, textMsg, telephoneCallback, driverInfo, connectionServer, controlDoor, mediaAttribute }, data() { return { @@ -287,6 +291,8 @@ export default { this.controlDoor(itemData) } else if (command === 'connection') { this.connection(itemData) + } else if (command === 'mediaAttribute') { + this.queryMediaAttribute(itemData) } else { this.$message.info('尚不支持') } @@ -361,6 +367,13 @@ export default { connection: function(itemData) { this.$refs.connectionServer.openDialog(itemData.phoneNumber) }, + queryMediaAttribute: function(itemData) { + this.$store.dispatch('jtDevice/queryMediaAttribute', itemData.phoneNumber) + .then((data) => { + this.$refs.mediaAttribute.openDialog(data) + }) + + }, controlDoor: function(itemData) { this.$refs.controlDoor.openDialog(itemData.phoneNumber) },