From 5e8a7ce21e35b2c4d7faeede04e60b3537db2f3c Mon Sep 17 00:00:00 2001
From: 648540858 <18010473990@163.com>
Date: 星期一, 13 九月 2021 16:08:40 +0800
Subject: [PATCH] 添加utf-8解析设备信息
---
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java | 3
web_src/src/components/DeviceList.vue | 21 +++
src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java | 28 +++++
src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java | 14 ++
web_src/src/components/dialog/deviceEdit.vue | 117 +++++++++++++++++++++++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java | 2
sql/mysql.sql | 3
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java | 28 +++++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/NotifyRequestProcessor.java | 11 +
src/main/resources/wvp.sqlite | 0
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | 33 +++++-
11 files changed, 244 insertions(+), 16 deletions(-)
diff --git a/sql/mysql.sql b/sql/mysql.sql
index 5524e32..90393e6 100644
--- a/sql/mysql.sql
+++ b/sql/mysql.sql
@@ -23,7 +23,8 @@
updateTime varchar(50) not null,
port int not null,
expires int not null,
- hostAddress varchar(50) not null
+ hostAddress varchar(50) not null,
+ charset varchar(50) not null
);
create table device_channel
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java
index 6fe63cc..01b0a12 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java
@@ -1,5 +1,7 @@
package com.genersoft.iot.vmp.gb28181.auth;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -14,13 +16,17 @@
@Component
public class RegisterLogicHandler {
+ private Logger logger = LoggerFactory.getLogger(RegisterLogicHandler.class);
+
@Autowired
private SIPCommander cmder;
public void onRegister(Device device) {
- // TODO 鍚庣画澶勭悊锛屽彧鏈夌涓�娆℃敞鍐屾椂璋冪敤鏌ヨ璁惧淇℃伅锛屽闇�鏇存柊璋冪敤鏇存柊API鎺ュ彛
- cmder.deviceInfoQuery(device);
-
- cmder.catalogQuery(device, null);
+ // 鍙湁绗竴娆℃敞鍐屾椂璋冪敤鏌ヨ璁惧淇℃伅锛屽闇�鏇存柊璋冪敤鏇存柊API鎺ュ彛
+ if (device.isFirsRegister()) {
+ logger.info("[{}] 棣栨娉ㄥ唽锛屾煡璇㈣澶囦俊鎭互鍙婇�氶亾淇℃伅", device.getDeviceId());
+ cmder.deviceInfoQuery(device);
+ cmder.catalogQuery(device, null);
+ }
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java
index cf939cf..bfbf547 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java
@@ -99,6 +99,18 @@
*/
private String mediaServerId;
+ /**
+ * 棣栨娉ㄥ唽
+ */
+ private boolean firsRegister;
+
+ /**
+ * 瀛楃闆�, 鏀寔 utf-8 涓� gb2312
+ */
+ private String charset ;
+
+
+
public String getDeviceId() {
return deviceId;
}
@@ -242,4 +254,20 @@
public void setMediaServerId(String mediaServerId) {
this.mediaServerId = mediaServerId;
}
+
+ public boolean isFirsRegister() {
+ return firsRegister;
+ }
+
+ public void setFirsRegister(boolean firsRegister) {
+ this.firsRegister = firsRegister;
+ }
+
+ public String getCharset() {
+ return charset;
+ }
+
+ public void setCharset(String charset) {
+ this.charset = charset;
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
index db5f05b..6f38e56 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
@@ -172,6 +172,7 @@
String deviceId = deviceIdElement.getTextTrim().toString();
Device device = storager.queryVideoDevice(deviceId);
if (device != null) {
+ rootElement = getRootElement(evt, device.getCharset());
if (!StringUtils.isEmpty(device.getName())) {
mobilePosition.setDeviceName(device.getName());
}
@@ -449,8 +450,11 @@
Element rootElement = getRootElement(evt);
String requestName = rootElement.getName();
Element deviceIdElement = rootElement.element("DeviceID");
- String deviceId = deviceIdElement.getTextTrim().toString();
+ String deviceId = deviceIdElement.getTextTrim();
Device device = storager.queryVideoDevice(deviceId);
+ if (device != null ) {
+ rootElement = getRootElement(evt, device.getCharset());
+ }
if (requestName.equals("Query")) {
logger.info("鎺ユ敹鍒癉eviceInfo鏌ヨ娑堟伅");
FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
@@ -470,7 +474,9 @@
if (device == null) {
return;
}
+
device.setName(XmlUtil.getText(rootElement, "DeviceName"));
+
device.setManufacturer(XmlUtil.getText(rootElement, "Manufacturer"));
device.setModel(XmlUtil.getText(rootElement, "Model"));
device.setFirmware(XmlUtil.getText(rootElement, "Firmware"));
@@ -569,12 +575,14 @@
} else {
+ Device device = storager.queryVideoDevice(deviceId);
+ if (device == null) {
+ return;
+ }
+ deviceListElement = getRootElement(evt, device.getCharset()).element("DeviceList");
Iterator<Element> deviceListIterator = deviceListElement.elementIterator();
if (deviceListIterator != null) {
- Device device = storager.queryVideoDevice(deviceId);
- if (device == null) {
- return;
- }
+
// 閬嶅巻DeviceList
while (deviceListIterator.hasNext()) {
Element itemDevice = deviceListIterator.next();
@@ -692,6 +700,9 @@
Device device = storager.queryVideoDevice(deviceId);
if (device == null) {
return;
+ }
+ if (device.getCharset() != null) {
+ rootElement = getRootElement(evt, device.getCharset());
}
if (rootElement.getName().equals("Notify")) { // 澶勭悊鎶ヨ閫氱煡
@@ -816,6 +827,10 @@
Element rootElement = getRootElement(evt);
Element deviceIdElement = rootElement.element("DeviceID");
String deviceId = deviceIdElement.getText().toString();
+ Device device = storager.queryVideoDevice(deviceId);
+ if (device != null ) {
+ rootElement = getRootElement(evt, device.getCharset());
+ }
recordInfo.setDeviceId(deviceId);
recordInfo.setName(XmlUtil.getText(rootElement, "Name"));
if (XmlUtil.getText(rootElement, "SumNum")== null || XmlUtil.getText(rootElement, "SumNum") =="") {
@@ -1009,9 +1024,15 @@
}
private Element getRootElement(RequestEvent evt) throws DocumentException {
+
+ return getRootElement(evt, "gb2312");
+ }
+
+ private Element getRootElement(RequestEvent evt, String charset) throws DocumentException {
+ if (charset == null) charset = "gb2312";
Request request = evt.getRequest();
SAXReader reader = new SAXReader();
- reader.setEncoding("gbk");
+ reader.setEncoding(charset);
Document xml = reader.read(new ByteArrayInputStream(request.getRawContent()));
return xml.getRootElement();
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/NotifyRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/NotifyRequestProcessor.java
index b1c4922..4c17769 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/NotifyRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/NotifyRequestProcessor.java
@@ -156,6 +156,7 @@
if (device == null) {
return;
}
+ rootElement = getRootElement(evt, device.getCharset());
DeviceAlarm deviceAlarm = new DeviceAlarm();
deviceAlarm.setDeviceId(deviceId);
deviceAlarm.setAlarmPriority(XmlUtil.getText(rootElement, "AlarmPriority"));
@@ -218,6 +219,9 @@
Element deviceIdElement = rootElement.element("DeviceID");
String deviceId = deviceIdElement.getText();
Device device = storager.queryVideoDevice(deviceId);
+ if (device != null ) {
+ rootElement = getRootElement(evt, device.getCharset());
+ }
Element deviceListElement = rootElement.element("DeviceList");
if (deviceListElement == null) {
return;
@@ -347,11 +351,14 @@
serverTransaction.sendResponse(response);
if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete();
}
-
private Element getRootElement(RequestEvent evt) throws DocumentException {
+ return getRootElement(evt, "gb2312");
+ }
+ private Element getRootElement(RequestEvent evt, String charset) throws DocumentException {
+ if (charset == null) charset = "gb2312";
Request request = evt.getRequest();
SAXReader reader = new SAXReader();
- reader.setEncoding("gbk");
+ reader.setEncoding(charset);
Document xml = reader.read(new ByteArrayInputStream(request.getRawContent()));
return xml.getRootElement();
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java
index 4034d57..68299f2 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java
@@ -134,7 +134,9 @@
if (device == null) {
device = new Device();
device.setStreamMode("UDP");
+ device.setCharset("gb2312");
device.setDeviceId(deviceId);
+ device.setFirsRegister(true);
}
device.setIp(received);
device.setPort(rPort);
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
index c70eda3..68ad28d 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
@@ -32,6 +32,7 @@
"keepaliveTime," +
"createTime," +
"updateTime," +
+ "charset," +
"online" +
") VALUES (" +
"#{deviceId}," +
@@ -49,6 +50,7 @@
"#{keepaliveTime}," +
"#{createTime}," +
"#{updateTime}," +
+ "#{charset}," +
"#{online}" +
")")
int add(Device device);
@@ -69,6 +71,7 @@
"<if test=\"registerTime != null\">, registerTime='${registerTime}'</if>" +
"<if test=\"keepaliveTime != null\">, keepaliveTime='${keepaliveTime}'</if>" +
"<if test=\"expires != null\">, expires=${expires}</if>" +
+ "<if test=\"charset != null\">, charset='${charset}'</if>" +
"WHERE deviceId='${deviceId}'"+
" </script>"})
int update(Device device);
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
index 02894cc..cb08ba3 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
@@ -3,6 +3,7 @@
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
+import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.*;
import org.slf4j.Logger;
@@ -22,6 +23,7 @@
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
import javax.sip.message.Response;
+import java.io.UnsupportedEncodingException;
@Api(tags = "鍥芥爣璁惧鏌ヨ", value = "鍥芥爣璁惧鏌ヨ")
@SuppressWarnings("rawtypes")
@@ -274,6 +276,32 @@
}
/**
+ * 鏇存柊璁惧淇℃伅
+ * @param device 璁惧淇℃伅
+ * @return
+ */
+ @ApiOperation("鏇存柊璁惧淇℃伅")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "device", value = "璁惧淇℃伅", required = true, dataTypeClass = Device.class)
+ })
+ @PostMapping("/device/update/")
+ public ResponseEntity<WVPResult<String>> updateDevice(Device device){
+
+ if (device != null && device.getDeviceId() != null) {
+ Device deviceInStore = storager.queryVideoDevice(device.getDeviceId());
+ if (!StringUtils.isEmpty(device.getName())) deviceInStore.setName(device.getName());
+ if (!StringUtils.isEmpty(device.getCharset())) deviceInStore.setCharset(device.getCharset());
+ if (!StringUtils.isEmpty(device.getMediaServerId())) deviceInStore.setMediaServerId(device.getMediaServerId());
+ storager.updateDevice(deviceInStore);
+ cmder.deviceInfoQuery(deviceInStore);
+ }
+ WVPResult<String> result = new WVPResult<>();
+ result.setCode(0);
+ result.setMsg("success");
+ return new ResponseEntity<>(result,HttpStatus.OK);
+ }
+
+ /**
* 璁惧鐘舵�佹煡璇㈣姹侫PI鎺ュ彛
*
* @param deviceId 璁惧id
diff --git a/src/main/resources/wvp.sqlite b/src/main/resources/wvp.sqlite
index 228a96a..b95368d 100644
--- a/src/main/resources/wvp.sqlite
+++ b/src/main/resources/wvp.sqlite
Binary files differ
diff --git a/web_src/src/components/DeviceList.vue b/web_src/src/components/DeviceList.vue
index 8a21211..7644a96 100644
--- a/web_src/src/components/DeviceList.vue
+++ b/web_src/src/components/DeviceList.vue
@@ -60,7 +60,7 @@
<el-button-group>
<el-button size="mini" icon="el-icon-video-camera-solid" v-bind:disabled="scope.row.online==0" type="primary" @click="showChannelList(scope.row)">閫氶亾</el-button>
<el-button size="mini" icon="el-icon-location" v-bind:disabled="scope.row.online==0" type="primary" @click="showDevicePosition(scope.row)">瀹氫綅</el-button>
- <el-button size="mini" icon="el-icon-s-tools" v-bind:disabled="scope.row.online==0" type="primary">鎺у埗</el-button>
+ <el-button size="mini" icon="el-icon-delete" type="primary" @click="edit(scope.row)">缂栬緫</el-button>
<el-button size="mini" icon="el-icon-delete" type="danger" v-if="scope.row.online==0" @click="deleteDevice(scope.row)">鍒犻櫎</el-button>
</el-button-group>
</template>
@@ -76,7 +76,7 @@
layout="total, sizes, prev, pager, next"
:total="total">
</el-pagination>
-
+ <deviceEdit ref="deviceEdit" ></deviceEdit>
</el-main>
</el-container>
</div>
@@ -84,10 +84,12 @@
<script>
import uiHeader from './UiHeader.vue'
+ import deviceEdit from './dialog/deviceEdit.vue'
export default {
name: 'app',
components: {
- uiHeader
+ uiHeader,
+ deviceEdit
},
data() {
return {
@@ -239,6 +241,19 @@
}).catch(function(e) {
});
+ },
+ edit: function (row) {
+ console.log(row);
+ this.$refs.deviceEdit.openDialog(row, ()=>{
+ this.$refs.deviceEdit.close();
+ this.$message({
+ showClose: true,
+ message: "璁惧淇敼鎴愬姛锛岄�氶亾瀛楃闆嗗皢鍦ㄤ笅娆℃洿鏂扮敓鏁�",
+ type: "success",
+ });
+ setTimeout(this.getDeviceList, 200)
+
+ })
}
}
diff --git a/web_src/src/components/dialog/deviceEdit.vue b/web_src/src/components/dialog/deviceEdit.vue
new file mode 100644
index 0000000..464de02
--- /dev/null
+++ b/web_src/src/components/dialog/deviceEdit.vue
@@ -0,0 +1,117 @@
+<template>
+ <div id="deviceEdit" v-loading="isLoging">
+ <el-dialog
+ title="璁惧缂栬緫"
+ width="40%"
+ top="2rem"
+ :close-on-click-modal="false"
+ :visible.sync="showDialog"
+ :destroy-on-close="true"
+ @close="close()"
+ >
+ <div id="shared" style="margin-top: 1rem;margin-right: 100px;">
+ <el-form ref="form" :rules="rules" :model="form" label-width="140px" >
+ <el-form-item label="璁惧缂栧彿" >
+ <el-input v-model="form.deviceId" disabled></el-input>
+ </el-form-item>
+
+ <el-form-item label="璁惧鍚嶇О" prop="name">
+ <el-input v-model="form.name" clearable></el-input>
+ </el-form-item>
+<!-- <el-form-item label="娴佸獟浣揑D" prop="mediaServerId">-->
+<!-- <el-select v-model="form.mediaServerId" style="float: left; width: 100%" >-->
+<!-- <el-option key="auto" label="鑷姩璐熻浇鏈�灏�" value="null"></el-option>-->
+<!-- <el-option-->
+<!-- v-for="item in mediaServerList"-->
+<!-- :key="item.id"-->
+<!-- :label="item.id"-->
+<!-- :value="item.id">-->
+<!-- </el-option>-->
+<!-- </el-select>-->
+<!-- </el-form-item>-->
+
+ <el-form-item label="瀛楃闆�" prop="charset" >
+ <el-select v-model="form.charset" style="float: left; width: 100%" >
+ <el-option key="GB2312" label="GB2312" value="gb2312"></el-option>
+ <el-option key="UTF-8" label="UTF-8" value="utf-8"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item>
+ <div style="float: right;">
+ <el-button type="primary" @click="onSubmit" >纭</el-button>
+ <el-button @click="close">鍙栨秷</el-button>
+ </div>
+
+ </el-form-item>
+ </el-form>
+ </div>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import MediaServer from '../service/MediaServer'
+export default {
+ name: "deviceEdit",
+ props: {},
+ computed: {},
+ created() {},
+ data() {
+ return {
+ listChangeCallback: null,
+ showDialog: false,
+ isLoging: false,
+ hostNames:[],
+ mediaServerList: [], // 婊呬綋鑺傜偣鍒楄〃
+ mediaServerObj : new MediaServer(),
+ form: {},
+ rules: {
+ name: [{ required: true, message: "璇疯緭鍏ュ悕绉�", trigger: "blur" }]
+ },
+ };
+ },
+ methods: {
+ openDialog: function (row, callback) {
+ console.log(row)
+ this.showDialog = true;
+ this.listChangeCallback = callback;
+ if (row != null) {
+ this.form = row;
+ }
+ this.getMediaServerList();
+ },
+ getMediaServerList: function (){
+ let that = this;
+ that.mediaServerObj.getMediaServerList((data)=>{
+ that.mediaServerList = data.data;
+ })
+ },
+ onSubmit: function () {
+ console.log("onSubmit");
+ console.log(this.form);
+ this.$axios({
+ method: 'post',
+ url:`/api/device/query/device/update/`,
+ params: this.form
+ }).then((res) => {
+ console.log(res.data)
+ if (res.data.code == 0) {
+ this.listChangeCallback()
+ }else {
+ this.$message({
+ showClose: true,
+ message: res.data.msg,
+ type: "error",
+ });
+ }
+ }).catch(function (error) {
+ console.log(error);
+ });
+ },
+ close: function () {
+ this.showDialog = false;
+ this.$refs.form.resetFields();
+ },
+ },
+};
+</script>
--
Gitblit v1.8.0