From 83411ad1277f8d4dfbc95aff2f15900150e84db3 Mon Sep 17 00:00:00 2001
From: 64850858 <648540858@qq.com>
Date: 星期一, 07 六月 2021 15:11:53 +0800
Subject: [PATCH] 设备信息增加最近注册时间和最近心跳时间,心跳超时时间变为可配置

---
 src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java               |   44 +++++++----
 web_src/src/components/DeviceList.vue                                                           |   30 ++++---
 src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java                                    |   33 +++++--
 src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java                                       |    1 
 src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java                                         |    6 +
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/NotifyRequestProcessor.java   |    4 
 src/main/resources/wvp.sqlite                                                                   |    0 
 src/main/resources/all-application.yml                                                          |    4 
 src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java                           |    4 
 src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java                           |    5 
 src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java                              |    9 ++
 src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java                       |   13 +-
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java |   28 ++++--
 sql/mysql.sql                                                                                   |    4 
 src/main/resources/application-dev.yml                                                          |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java  |   13 +-
 16 files changed, 130 insertions(+), 70 deletions(-)

diff --git a/sql/mysql.sql b/sql/mysql.sql
index 3f3b876..71e651a 100644
--- a/sql/mysql.sql
+++ b/sql/mysql.sql
@@ -12,9 +12,11 @@
     transport          varchar(50) null,
     streamMode         varchar(50) null,
     online             varchar(50) null,
-    registerTimeMillis int          null,
+    registerTime       varchar(50) null,
+    keepaliveTime      varchar(50) null,
     ip                 varchar(50) not null,
     port               int          not null,
+    expires            int          not null,
     hostAddress        varchar(50) not null
 );
 
diff --git a/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java b/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java
index 7b74990..2d92658 100644
--- a/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java
+++ b/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java
@@ -23,4 +23,5 @@
 		VManageBootstrap.context = SpringApplication.run(VManageBootstrap.class, args);
  
 	}
+
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
index 8af9956..6d8f45d 100644
--- a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
+++ b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
@@ -39,7 +39,9 @@
 	public static final String EVENT_ONLINE_REGISTER = "1";
 	
 	public static final String EVENT_ONLINE_KEEPLIVE = "2";
-	
+
+	public static final String EVENT_ONLINE_MESSAGE = "3";
+
 	public static final String EVENT_OUTLINE_UNREGISTER = "1";
 	
 	public static final String EVENT_OUTLINE_TIMEOUT = "2";
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java
index 32352c7..4fc28bc 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java
@@ -31,6 +31,9 @@
 	@Value("${sip.ptz.speed:50}")
 	Integer speed;
 
+	@Value("${sip.keepaliveTimeOut:180}")
+	Integer keepaliveTimeOut;
+
 	public String getMonitorIp() {
 		return monitorIp;
 	}
@@ -63,4 +66,7 @@
 		return speed;
 	}
 
+	public Integer getKeepaliveTimeOut() {
+		return keepaliveTimeOut;
+	}
 }
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 f587e75..a9185e0 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
@@ -66,18 +66,23 @@
 	/**
 	 * 娉ㄥ唽鏃堕棿
 	 */
-	private Long registerTimeMillis;
+	private String registerTime;
 
 
 	/**
 	 * 蹇冭烦鏃堕棿
 	 */
-	private Long KeepaliveTimeMillis;
+	private String keepaliveTime;
 
 	/**
 	 * 閫氶亾涓暟
 	 */
 	private int channelCount;
+
+	/**
+	 * 娉ㄥ唽鏈夋晥鏈�
+	 */
+	private int expires;
 
 	public String getDeviceId() {
 		return deviceId;
@@ -175,19 +180,27 @@
 		this.channelCount = channelCount;
 	}
 
-	public Long getRegisterTimeMillis() {
-		return registerTimeMillis;
+	public String getRegisterTime() {
+		return registerTime;
 	}
 
-	public void setRegisterTimeMillis(Long registerTimeMillis) {
-		this.registerTimeMillis = registerTimeMillis;
+	public void setRegisterTime(String registerTime) {
+		this.registerTime = registerTime;
 	}
 
-	public Long getKeepaliveTimeMillis() {
-		return KeepaliveTimeMillis;
+	public String getKeepaliveTime() {
+		return keepaliveTime;
 	}
 
-	public void setKeepaliveTimeMillis(Long keepaliveTimeMillis) {
-		KeepaliveTimeMillis = keepaliveTimeMillis;
+	public void setKeepaliveTime(String keepaliveTime) {
+		this.keepaliveTime = keepaliveTime;
+	}
+
+	public int getExpires() {
+		return expires;
+	}
+
+	public void setExpires(int expires) {
+		this.expires = expires;
 	}
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java
index 58b03dd..0422962 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java
@@ -1,5 +1,6 @@
 package com.genersoft.iot.vmp.gb28181.event;
 
+import com.genersoft.iot.vmp.gb28181.bean.Device;
 import com.genersoft.iot.vmp.gb28181.event.platformKeepaliveExpire.PlatformKeepaliveExpireEvent;
 import com.genersoft.iot.vmp.gb28181.event.platformNotRegister.PlatformNotRegisterEvent;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,9 +23,9 @@
 	@Autowired
     private ApplicationEventPublisher applicationEventPublisher;
 	
-	public void onlineEventPublish(String deviceId, String from) {
+	public void onlineEventPublish(Device device, String from) {
 		OnlineEvent onEvent = new OnlineEvent(this);
-		onEvent.setDeviceId(deviceId);
+		onEvent.setDevice(device);
 		onEvent.setFrom(from);
         applicationEventPublisher.publishEvent(onEvent);
     }
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java
index e077cb9..1e01956 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java
@@ -1,5 +1,6 @@
 package com.genersoft.iot.vmp.gb28181.event.online;
 
+import com.genersoft.iot.vmp.gb28181.bean.Device;
 import org.springframework.context.ApplicationEvent;
 
 /**    
@@ -18,18 +19,18 @@
 		super(source);
 	}
 
-	private String deviceId;
+	private Device device;
 	
 	private String from;
 
-	public String getDeviceId() {
-		return deviceId;
+	public Device getDevice() {
+		return device;
 	}
 
-	public void setDeviceId(String deviceId) {
-		this.deviceId = deviceId;
+	public void setDevice(Device device) {
+		this.device = device;
 	}
-	
+
 	public String getFrom() {
 		return from;
 	}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
index b9bb5b1..acdf272 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
@@ -1,5 +1,7 @@
 package com.genersoft.iot.vmp.gb28181.event.online;
 
+import com.genersoft.iot.vmp.conf.SipConfig;
+import com.genersoft.iot.vmp.gb28181.bean.Device;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -9,6 +11,9 @@
 import com.genersoft.iot.vmp.common.VideoManagerConstants;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
 import com.genersoft.iot.vmp.utils.redis.RedisUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
 
 /**
  * @Description: 鍦ㄧ嚎浜嬩欢鐩戝惉鍣紝鐩戝惉鍒扮绾垮悗锛屼慨鏀硅澶囩鍦ㄧ嚎鐘舵�併�� 璁惧鍦ㄧ嚎鏈変袱涓潵婧愶細
@@ -28,39 +33,46 @@
 	@Autowired
     private RedisUtil redis;
 
+	@Autowired
+    private SipConfig sipConfig;
+
+	private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
 	@Override
 	public void onApplicationEvent(OnlineEvent event) {
 		
 		if (logger.isDebugEnabled()) {
-			logger.debug("璁惧涓婄嚎浜嬩欢瑙﹀彂锛宒eviceId锛�" + event.getDeviceId() + ",from:" + event.getFrom());
+			logger.debug("璁惧涓婄嚎浜嬩欢瑙﹀彂锛宒eviceId锛�" + event.getDevice().getDeviceId() + ",from:" + event.getFrom());
 		}
-		
-		String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + event.getDeviceId();
-		boolean needUpdateStorager = false;
+		Device device = event.getDevice();
+		String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + event.getDevice().getDeviceId();
 
 		switch (event.getFrom()) {
 		// 娉ㄥ唽鏃惰Е鍙戠殑鍦ㄧ嚎浜嬩欢锛屽厛鍦╮edis涓鍔犺秴鏃惰秴鏃剁洃鍚�
 		case VideoManagerConstants.EVENT_ONLINE_REGISTER:
-			// TODO 瓒呮椂鏃堕棿鏆傛椂鍐欐涓�180绉�
-			redis.set(key, event.getDeviceId(), 180);
-			needUpdateStorager = true;
+			// 瓒呮椂鏃堕棿
+			redis.set(key, event.getDevice().getDeviceId(), sipConfig.getKeepaliveTimeOut());
+			device.setRegisterTime(format.format(new Date(System.currentTimeMillis())));
 			break;
-		// 璁惧涓诲姩鍙戦�佸績璺宠Е鍙戠殑绂荤嚎浜嬩欢
+		// 璁惧涓诲姩鍙戦�佸績璺宠Е鍙戠殑鍦ㄧ嚎浜嬩欢
 		case VideoManagerConstants.EVENT_ONLINE_KEEPLIVE:
 			boolean exist = redis.hasKey(key);
 			// 鍏堝垽鏂槸鍚﹁繕瀛樺湪锛屽綋璁惧鍏堝績璺宠秴鏃跺悗鍙堝彂閫佸績璺虫椂锛宺edis娌℃湁鐩戝惉锛岄渶瑕佸鍔�
 			if (!exist) {
-				needUpdateStorager = true;
-				redis.set(key, event.getDeviceId(), 180);
+				redis.set(key, event.getDevice().getDeviceId(), sipConfig.getKeepaliveTimeOut());
 			} else {
-				redis.expire(key, 180);
+				redis.expire(key, sipConfig.getKeepaliveTimeOut());
 			}
+			device.setKeepaliveTime(format.format(new Date(System.currentTimeMillis())));
+			break;
+		// 璁惧涓诲姩鍙戦�佹秷鎭Е鍙戠殑鍦ㄧ嚎浜嬩欢
+		case VideoManagerConstants.EVENT_ONLINE_MESSAGE:
+
 			break;
 		}
-		
-		if (needUpdateStorager) {
-			// 澶勭悊绂荤嚎鐩戝惉
-			storager.online(event.getDeviceId());
-		}
+
+		device.setOnline(1);
+		// 澶勭悊涓婄嚎鐩戝惉
+		storager.updateDevice(device);
 	}
 }
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 114ffd4..1842efe 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
@@ -2,6 +2,7 @@
 
 import java.io.ByteArrayInputStream;
 import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 import javax.sip.address.SipURI;
@@ -226,7 +227,7 @@
 			String name = rootElement.getName();
 			Element deviceIdElement = rootElement.element("DeviceID");
 			String deviceId = deviceIdElement.getText();
-
+			Device device = storager.queryVideoDevice(deviceId);
 			if (name.equalsIgnoreCase("Query")) { // 鍖哄垎鏄疪esponse鈥斺�旀煡璇㈠搷搴旓紝杩樻槸Query鈥斺�旀煡璇㈣姹�
 				logger.info("鎺ユ敹鍒癉eviceStatus鏌ヨ娑堟伅");
 				FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
@@ -259,7 +260,7 @@
 					deferredResultHolder.invokeResult(msg);
 
 					if (offLineDetector.isOnline(deviceId)) {
-						publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
+						publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_MESSAGE);
 					} else {
 					}
 				}
@@ -452,6 +453,7 @@
 			String requestName = rootElement.getName();
 			Element deviceIdElement = rootElement.element("DeviceID");
 			String deviceId = deviceIdElement.getTextTrim().toString();
+			Device device = storager.queryVideoDevice(deviceId);
 			if (requestName.equals("Query")) {
 				logger.info("鎺ユ敹鍒癉eviceInfo鏌ヨ娑堟伅");
 				FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
@@ -468,7 +470,6 @@
 				}
 			} else {
 				logger.debug("鎺ユ敹鍒癉eviceInfo搴旂瓟娑堟伅");
-				Device device = storager.queryVideoDevice(deviceId);
 				if (device == null) {
 					return;
 				}
@@ -489,7 +490,7 @@
 				// 鍥炲200 OK
 				responseAck(evt);
 				if (offLineDetector.isOnline(deviceId)) {
-					publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
+					publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_MESSAGE);
 				}
 			}
 		} catch (DocumentException | SipException | InvalidArgumentException | ParseException e) {
@@ -669,7 +670,7 @@
 					// 鍥炲200 OK
 					responseAck(evt);
 					if (offLineDetector.isOnline(deviceId)) {
-						publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
+						publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_MESSAGE);
 					}
 				}
 			}
@@ -776,7 +777,7 @@
 				// 鍥炲200 OK
 				responseAck(evt);
 				if (offLineDetector.isOnline(deviceId)) {
-					publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
+					publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
 				} else {
 				}
 			}else {
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 897b6ab..2d669eb 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
@@ -216,13 +216,13 @@
 			Element rootElement = getRootElement(evt);
 			Element deviceIdElement = rootElement.element("DeviceID");
 			String deviceId = deviceIdElement.getText();
+			Device device = storager.queryVideoDevice(deviceId);
 			Element deviceListElement = rootElement.element("DeviceList");
 			if (deviceListElement == null) {
 				return;
 			}
 			Iterator<Element> deviceListIterator = deviceListElement.elementIterator();
 			if (deviceListIterator != null) {
-				Device device = storager.queryVideoDevice(deviceId);
 				if (device == null) {
 					return;
 				}
@@ -324,7 +324,7 @@
 				// 鍥炲200 OK
 				response200Ok(evt);
 				if (offLineDetector.isOnline(deviceId)) {
-					publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
+					publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_MESSAGE);
 				}
 			}
 		} catch (DocumentException | SipException | InvalidArgumentException | ParseException e) {
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 574f9c7..64be7ef 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
@@ -2,7 +2,10 @@
 
 import java.security.NoSuchAlgorithmException;
 import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
 import java.util.Calendar;
+import java.util.Date;
 import java.util.Locale;
 
 import javax.sip.InvalidArgumentException;
@@ -70,7 +73,11 @@
 			boolean passwordCorrect = false;
 			// 娉ㄥ唽鏍囧織  0锛氭湭鎼哄甫鎺堟潈澶存垨鑰呭瘑鐮侀敊璇�  1锛氭敞鍐屾垚鍔�   2锛氭敞閿�鎴愬姛
 			int registerFlag = 0;
-			Device device = null;
+			FromHeader fromHeader = (FromHeader) request.getHeader(FromHeader.NAME);
+			AddressImpl address = (AddressImpl) fromHeader.getAddress();
+			SipUri uri = (SipUri) address.getURI();
+			String deviceId = uri.getUser();
+			Device device = storager.queryVideoDevice(deviceId);
 			AuthorizationHeader authorhead = (AuthorizationHeader) request.getHeader(AuthorizationHeader.NAME); 
 			// 鏍¢獙瀵嗙爜鏄惁姝g‘
 			if (authorhead != null) {
@@ -103,13 +110,17 @@
 				response.addHeader(dateHeader);
 
 				ExpiresHeader expiresHeader = (ExpiresHeader) request.getHeader(Expires.NAME);
+				if (expiresHeader == null) {
+					response = getMessageFactory().createResponse(Response.BAD_REQUEST, request);
+					getServerTransaction(evt).sendResponse(response);
+					return;
+				}
 				// 娣诲姞Contact澶�
 				response.addHeader(request.getHeader(ContactHeader.NAME));
 				// 娣诲姞Expires澶�
 				response.addHeader(request.getExpires());
 				
 				// 鑾峰彇鍒伴�氫俊鍦板潃绛変俊鎭�
-				FromHeader fromHeader = (FromHeader) request.getHeader(FromHeader.NAME);
 				ViaHeader viaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);
 				String received = viaHeader.getReceived();
 				int rPort = viaHeader.getRPort();
@@ -119,10 +130,7 @@
 					rPort = viaHeader.getPort();
 				}
 				//
-				AddressImpl address = (AddressImpl) fromHeader.getAddress();
-				SipUri uri = (SipUri) address.getURI();
-				String deviceId = uri.getUser();
-				device = storager.queryVideoDevice(deviceId);
+
 				if (device == null) {
 					device = new Device();
 					device.setStreamMode("UDP");
@@ -132,11 +140,12 @@
 				device.setPort(rPort);
 				device.setHostAddress(received.concat(":").concat(String.valueOf(rPort)));
 				// 娉ㄩ攢鎴愬姛
-				if (expiresHeader != null && expiresHeader.getExpires() == 0) {
+				if (expiresHeader.getExpires() == 0) {
 					registerFlag = 2;
 				}
 				// 娉ㄥ唽鎴愬姛
 				else {
+					device.setExpires(expiresHeader.getExpires());
 					registerFlag = 1;
 					// 鍒ゆ柇TCP杩樻槸UDP
 					boolean isTcp = false;
@@ -154,10 +163,7 @@
 			// 涓嬪彂catelog鏌ヨ鐩綍
 			if (registerFlag == 1 ) {
 				logger.info("[{}] 娉ㄥ唽鎴愬姛! deviceId:" + device.getDeviceId(), requestAddress);
-				device.setRegisterTimeMillis(System.currentTimeMillis());
-				storager.updateDevice(device);
-				publisher.onlineEventPublish(device.getDeviceId(), VideoManagerConstants.EVENT_ONLINE_REGISTER);
-
+				publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_REGISTER);
 				// 閲嶆柊娉ㄥ唽鏇存柊璁惧鍜岄�氶亾锛屼互鍏嶈澶囨浛鎹㈡垨鏇存柊鍚庝俊鎭棤娉曟洿鏂�
 				handler.onRegister(device);
 			} else if (registerFlag == 2) {
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 bcc33de..d597f35 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
@@ -27,6 +27,9 @@
                 "ip," +
                 "port," +
                 "hostAddress," +
+                "expires," +
+                "registerTime," +
+                "keepaliveTime," +
                 "online" +
             ") VALUES (" +
                 "#{deviceId}," +
@@ -39,6 +42,9 @@
                 "#{ip}," +
                 "#{port}," +
                 "#{hostAddress}," +
+                "#{expires}," +
+                "#{registerTime}," +
+                "#{keepaliveTime}," +
                 "#{online}" +
             ")")
     int add(Device device);
@@ -56,6 +62,9 @@
                 "<if test=\"port != null\">, port=${port}</if>" +
                 "<if test=\"hostAddress != null\">, hostAddress='${hostAddress}'</if>" +
                 "<if test=\"online != null\">, online=${online}</if>" +
+                "<if test=\"registerTime != null\">, registerTime='${registerTime}'</if>" +
+                "<if test=\"keepaliveTime != null\">, keepaliveTime='${keepaliveTime}'</if>" +
+                "<if test=\"expires != null\">, expires=${expires}</if>" +
                 "WHERE deviceId='${deviceId}'"+
             " </script>"})
     int update(Device device);
diff --git a/src/main/resources/all-application.yml b/src/main/resources/all-application.yml
index 10667be..6923d97 100644
--- a/src/main/resources/all-application.yml
+++ b/src/main/resources/all-application.yml
@@ -63,8 +63,10 @@
     domain: 4401020049
     # [鍙�塢
     id: 44010200492000000001
-    # [鍙�塢 榛樿璁惧璁よ瘉瀵嗙爜锛屽悗缁墿灞曚娇鐢ㄨ澶囧崟鐙瘑鐮�
+    # [鍙�塢 榛樿璁惧璁よ瘉瀵嗙爜锛屽悗缁墿灞曚娇鐢ㄨ澶囧崟鐙瘑鐮�, 绉婚櫎瀵嗙爜灏嗕笉杩涜鏍¢獙
     password: admin123
+    # [鍙�塢 蹇冭烦瓒呮椂鏃堕棿锛� 寤鸿璁剧疆涓哄績璺冲懆鏈熺殑涓夊��
+    keepaliveTimeOut: 180
 
 #zlm鏈嶅姟鍣ㄩ厤缃�
 media:
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index b494769..b70bce4 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -39,7 +39,7 @@
     domain: 4401020049
     # [鍙�塢
     id: 44010200492000000001
-    # [鍙�塢 榛樿璁惧璁よ瘉瀵嗙爜锛屽悗缁墿灞曚娇鐢ㄨ澶囧崟鐙瘑鐮�
+    # [鍙�塢 榛樿璁惧璁よ瘉瀵嗙爜锛屽悗缁墿灞曚娇鐢ㄨ澶囧崟鐙瘑鐮�, 绉婚櫎瀵嗙爜灏嗕笉杩涜鏍¢獙
     password: admin123
 
 #zlm鏈嶅姟鍣ㄩ厤缃�
diff --git a/src/main/resources/wvp.sqlite b/src/main/resources/wvp.sqlite
index 5def77b..3131c0f 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 38a063e..e05855f 100644
--- a/web_src/src/components/DeviceList.vue
+++ b/web_src/src/components/DeviceList.vue
@@ -14,22 +14,16 @@
 				<!-- <devicePlayer ref="devicePlayer"></devicePlayer> -->
 				<!--璁惧鍒楄〃-->
 				<el-table :data="deviceList" border style="width: 100%" :height="winHeight">
-					<el-table-column prop="name" label="鍚嶇О" width="180" align="center">
+					<el-table-column prop="name" label="鍚嶇О"  align="center">
 					</el-table-column>
-					<el-table-column prop="deviceId" label="璁惧缂栧彿" width="240" align="center">
+					<el-table-column prop="deviceId" label="璁惧缂栧彿" width="180" align="center">
 					</el-table-column>
-					<el-table-column label="鍦板潃" width="180" align="center">
-						<template slot-scope="scope">
-							<div slot="reference" class="name-wrapper">
-								<el-tag size="medium">{{ scope.row.hostAddress }}</el-tag>
-							</div>
-						</template>
-					</el-table-column>
+
 					<el-table-column prop="manufacturer" label="鍘傚" align="center">
 					</el-table-column>
-					<el-table-column prop="model" label="鍥轰欢鐗堟湰" align="center">
+					<el-table-column prop="model" label="鍥轰欢鐗堟湰" align="center" width="120">
 					</el-table-column>
-					<el-table-column label="娴佷紶杈撴ā寮�" align="center" width="160">
+					<el-table-column label="娴佷紶杈撴ā寮�" align="center" width="120">
             <template slot-scope="scope">
               <el-select size="mini" @change="transportChange(scope.row)" v-model="scope.row.streamMode" placeholder="璇烽�夋嫨">
                 <el-option key="UDP" label="UDP" value="UDP"></el-option>
@@ -40,7 +34,7 @@
 					</el-table-column>
 					<el-table-column prop="channelCount" label="閫氶亾鏁�" align="center">
 					</el-table-column>
-					<el-table-column label="鐘舵��" width="80" align="center">
+					<el-table-column label="鐘舵��" width="120" align="center">
 						<template slot-scope="scope">
 							<div slot="reference" class="name-wrapper">
 								<el-tag size="medium" v-if="scope.row.online == 1">鍦ㄧ嚎</el-tag>
@@ -48,7 +42,17 @@
 							</div>
 						</template>
 					</el-table-column>
-
+          <el-table-column prop="keepaliveTime" label="鏈�杩戝績璺�" align="center" width="140">
+          </el-table-column>
+          <el-table-column prop="registerTime" label="鏈�杩戞敞鍐�" align="center" width="140">
+          </el-table-column>
+          <el-table-column label="鍦板潃" width="180" align="center">
+            <template slot-scope="scope">
+              <div slot="reference" class="name-wrapper">
+                <el-tag size="medium">{{ scope.row.hostAddress }}</el-tag>
+              </div>
+            </template>
+          </el-table-column>
 					<el-table-column label="鎿嶄綔" width="360" align="center" fixed="right">
 						<template slot-scope="scope">
 							<el-button size="mini" :ref="scope.row.deviceId + 'refbtn' "  v-if="scope.row.online!=0" icon="el-icon-refresh"  @click="refDevice(scope.row)">鍒锋柊</el-button>

--
Gitblit v1.8.0