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