From 9e8cab609d32a5f2143a726a26437cc4d7b8c8da Mon Sep 17 00:00:00 2001
From: 648540858 <18010473990@163.com>
Date: 星期二, 10 八月 2021 15:42:15 +0800
Subject: [PATCH] 添加角色相关的接口,用户信息添加角色信息

---
 src/main/java/com/genersoft/iot/vmp/service/IRoleService.java                                   |   18 +
 src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java        |    2 
 src/main/java/com/genersoft/iot/vmp/storager/dao/RoleMapper.java                                |   35 ++
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java                 |   12 
 src/main/java/com/genersoft/iot/vmp/vmanager/log/LogController.java                             |   13 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java  |    6 
 src/main/resources/banner.txt                                                                   |    1 
 src/main/java/com/genersoft/iot/vmp/web/ApiController.java                                      |   16 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java          |   46 +-
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java |    6 
 sql/mysql.sql                                                                                   |   16 +
 src/main/java/com/genersoft/iot/vmp/storager/dao/UserMapper.java                                |   28 +
 src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java                    |   14 
 src/main/resources/application-dev.yml                                                          |    8 
 src/test/java/com/genersoft/iot/vmp/service/impl/UserServiceImplTest.java                       |   17 +
 src/test/java/com/genersoft/iot/vmp/service/impl/RoleServiceImplTest.java                       |   58 ++++
 src/main/java/com/genersoft/iot/vmp/storager/dao/dto/User.java                                  |   18 
 src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java                                         |   94 ++++--
 src/main/java/com/genersoft/iot/vmp/vmanager/user/RoleController.java                           |  101 +++++++
 src/main/resources/wvp.sqlite                                                                   |    0 
 src/main/resources/all-application.yml                                                          |   10 
 src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java                       |   47 +++
 src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java                                       |   12 
 src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java           |    8 
 src/main/java/com/genersoft/iot/vmp/storager/dao/dto/Role.java                                  |   50 +++
 src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java                           |   48 ++
 src/main/java/com/genersoft/iot/vmp/service/impl/RoleServerImpl.java                            |   41 +++
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java  |    2 
 src/main/java/com/genersoft/iot/vmp/conf/security/dto/LoginUser.java                            |    5 
 29 files changed, 598 insertions(+), 134 deletions(-)

diff --git a/sql/mysql.sql b/sql/mysql.sql
index 9a41b82..5524e32 100644
--- a/sql/mysql.sql
+++ b/sql/mysql.sql
@@ -227,12 +227,22 @@
     username    varchar(255) not null,
     password    varchar(255) not null,
     roleId      int          not null,
-    create_time varchar(50)  not null,
-    update_time varchar(50)  not null
+    createTime varchar(50)  not null,
+    updateTime varchar(50)  not null
 );
 
 create unique index user_username_uindex
     on user (username);
 
-insert into user (username, password, roleId, create_time, update_time) values ('admin', '21232f297a57a5a743894a0e4a801fc3', '0', '2021-04-13 14:14:57', '2021-04-13 14:14:57');
+insert into user (username, password, roleId, createTime, updateTime) values ('admin', '21232f297a57a5a743894a0e4a801fc3', '1', '2021-04-13 14:14:57', '2021-04-13 14:14:57');
+
+create table role (
+        id          int auto_increment
+              primary key,
+        name	TEXT NOT NULL,
+        authority	TEXT NOT NULL,
+        createTime varchar(50)  not null,
+        updateTime varchar(50)  not null
+);
+insert into role (id, name, authority, createTime, updateTime) values ('1', 'admin', '0', '2021-04-13 14:14:57', '2021-04-13 14:14:57');
 
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 8fc1ba8..709fe9c 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java
@@ -2,71 +2,101 @@
 
 
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
 
-@Configuration("sipConfig")
+@Component
+@ConfigurationProperties(prefix = "sip", ignoreInvalidFields = true)
 public class SipConfig {
 
-	@Value("${sip.ip}")
-	private String sipIp;
+	private String ip;
 
 	/**
-	 * 榛樿浣跨敤sip.ip
+	 * 榛樿浣跨敤 0.0.0.0
 	 */
-	@Value("${sip.monitor-ip:0.0.0.0}")
-	private String monitorIp;
+	private String monitorIp = "0.0.0.0";
 
-	@Value("${sip.port}")
-	private Integer sipPort;
+	private Integer port;
 
-	@Value("${sip.domain}")
-	private String sipDomain;
+	private String domain;
 
-	@Value("${sip.id}")
-	private String sipId;
+	private String id;
 
-	@Value("${sip.password}")
-	private String sipPassword;
+	private String password;
 	
-	@Value("${sip.ptz.speed:50}")
-	Integer speed;
+	Integer ptzSpeed = 50;
 
-	@Value("${sip.keepalive-timeout:180}")
-	Integer keepaliveTimeOut;
+	Integer keepaliveTimeOut = 180;
 
-	@Value("${sip.register-time-interval:60}")
-	Integer registerTimeInterval;
+	Integer registerTimeInterval = 60;
+
+	public void setIp(String ip) {
+		this.ip = ip;
+	}
+
+	public void setMonitorIp(String monitorIp) {
+		this.monitorIp = monitorIp;
+	}
+
+	public void setPort(Integer port) {
+		this.port = port;
+	}
+
+	public void setDomain(String domain) {
+		this.domain = domain;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public void setPtzSpeed(Integer ptzSpeed) {
+		this.ptzSpeed = ptzSpeed;
+	}
+
+	public void setKeepaliveTimeOut(Integer keepaliveTimeOut) {
+		this.keepaliveTimeOut = keepaliveTimeOut;
+	}
+
+	public void setRegisterTimeInterval(Integer registerTimeInterval) {
+		this.registerTimeInterval = registerTimeInterval;
+	}
 
 	public String getMonitorIp() {
 		return monitorIp;
 	}
 
-	public String getSipIp() {
-		return sipIp;
+	public String getIp() {
+		return ip;
 	}
 
 
-	public Integer getSipPort() {
-		return sipPort;
+	public Integer getPort() {
+		return port;
 	}
 
 
-	public String getSipDomain() {
-		return sipDomain;
+	public String getDomain() {
+		return domain;
 	}
 
 
-	public String getSipId() {
-		return sipId;
+	public String getId() {
+		return id;
 	}
 
-	public String getSipPassword() {
-		return sipPassword;
+	public String getPassword() {
+		return password;
 	}
 
 
-	public Integer getSpeed() {
-		return speed;
+	public Integer getPtzSpeed() {
+		return ptzSpeed;
 	}
 
 	public Integer getKeepaliveTimeOut() {
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java b/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java
index d4e25e3..800c4cb 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java
@@ -28,8 +28,8 @@
         response.setHeader("Access-Control-Allow-Headers", "token, Accept, Origin, X-Requested-With, Content-Type, Last-Modified");
         response.setHeader("Content-type", "application/json;charset=UTF-8");
         JSONObject jsonObject = new JSONObject();
-        jsonObject.put("msg", e.getMessage());
         jsonObject.put("code", "-1");
+        jsonObject.put("msg", "璇风櫥褰曞悗閲嶆柊璇锋眰");
         response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
         try {
             response.getWriter().print(jsonObject.toJSONString());
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/dto/LoginUser.java b/src/main/java/com/genersoft/iot/vmp/conf/security/dto/LoginUser.java
index 93680fd..45e03bc 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/dto/LoginUser.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/security/dto/LoginUser.java
@@ -1,5 +1,6 @@
 package com.genersoft.iot.vmp.conf.security.dto;
 
+import com.genersoft.iot.vmp.storager.dao.dto.Role;
 import com.genersoft.iot.vmp.storager.dao.dto.User;
 import org.springframework.security.core.CredentialsContainer;
 import org.springframework.security.core.GrantedAuthority;
@@ -93,8 +94,8 @@
         return user.getId();
     }
 
-    public int getRoleId() {
-        return user.getRoleId();
+    public Role getRole() {
+        return user.getRole();
     }
 
 
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
index e71ac05..fb1aae2 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
@@ -93,15 +93,15 @@
 		ListeningPoint tcpListeningPoint = null;
 		SipProviderImpl tcpSipProvider  = null;
 		try {
-			tcpListeningPoint = sipStack.createListeningPoint(sipConfig.getMonitorIp(), sipConfig.getSipPort(), "TCP");
+			tcpListeningPoint = sipStack.createListeningPoint(sipConfig.getMonitorIp(), sipConfig.getPort(), "TCP");
 			tcpSipProvider = (SipProviderImpl)sipStack.createSipProvider(tcpListeningPoint);
 			tcpSipProvider.addSipListener(this);
-			logger.info("Sip Server TCP 鍚姩鎴愬姛 port {" + sipConfig.getMonitorIp() + ":" + sipConfig.getSipPort() + "}");
+			logger.info("Sip Server TCP 鍚姩鎴愬姛 port {" + sipConfig.getMonitorIp() + ":" + sipConfig.getPort() + "}");
 		} catch (TransportNotSupportedException e) {
 			e.printStackTrace();
 		} catch (InvalidArgumentException e) {
 			logger.error("鏃犳硶浣跨敤 [ {}:{} ]浣滀负SIP[ TCP ]鏈嶅姟锛屽彲鎺掓煡: 1. sip.monitor-ip 鏄惁涓烘湰鏈虹綉鍗P; 2. sip.port 鏄惁宸茶鍗犵敤"
-					, sipConfig.getMonitorIp(), sipConfig.getSipPort());
+					, sipConfig.getMonitorIp(), sipConfig.getPort());
 		} catch (TooManyListenersException e) {
 			e.printStackTrace();
 		} catch (ObjectInUseException e) {
@@ -116,7 +116,7 @@
 		ListeningPoint udpListeningPoint = null;
 		SipProviderImpl udpSipProvider = null;
 		try {
-			udpListeningPoint = sipStack.createListeningPoint(sipConfig.getMonitorIp(), sipConfig.getSipPort(), "UDP");
+			udpListeningPoint = sipStack.createListeningPoint(sipConfig.getMonitorIp(), sipConfig.getPort(), "UDP");
 			udpSipProvider = (SipProviderImpl)sipStack.createSipProvider(udpListeningPoint);
 			udpSipProvider.addSipListener(this);
 //			udpSipProvider.setAutomaticDialogSupportEnabled(false);
@@ -124,13 +124,13 @@
 			e.printStackTrace();
 		} catch (InvalidArgumentException e) {
 			logger.error("鏃犳硶浣跨敤 [ {}:{} ]浣滀负SIP[ UDP ]鏈嶅姟锛屽彲鎺掓煡: 1. sip.monitor-ip 鏄惁涓烘湰鏈虹綉鍗P; 2. sip.port 鏄惁宸茶鍗犵敤"
-					, sipConfig.getMonitorIp(), sipConfig.getSipPort());
+					, sipConfig.getMonitorIp(), sipConfig.getPort());
 		} catch (TooManyListenersException e) {
 			e.printStackTrace();
 		} catch (ObjectInUseException e) {
 			e.printStackTrace();
 		}
-		logger.info("Sip Server UDP 鍚姩鎴愬姛 port [" + sipConfig.getMonitorIp() + ":" + sipConfig.getSipPort() + "]");
+		logger.info("Sip Server UDP 鍚姩鎴愬姛 port [" + sipConfig.getMonitorIp() + ":" + sipConfig.getPort() + "]");
 		return udpSipProvider;
 	}
 
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
index de63fa9..4ed942c 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
@@ -39,13 +39,13 @@
 		SipURI requestURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerIP() + ":" + parentPlatform.getServerPort());
 		// via
 		ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
-		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getSipIp(), sipConfig.getSipPort(),
+		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(),
 				parentPlatform.getTransport(), viaTag);
 		viaHeader.setRPort();
 		viaHeaders.add(viaHeader);
 		// from
 		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getDeviceGBId(),
-				sipConfig.getSipIp() + ":" + sipConfig.getSipPort());
+				sipConfig.getIp() + ":" + sipConfig.getPort());
 		Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
 		FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
 		// to
@@ -75,7 +75,7 @@
 
 	public Request createRegisterRequest(@NotNull ParentPlatform platform, long CSeq, String fromTag, String viaTag, CallIdHeader callIdHeader) throws ParseException, InvalidArgumentException, PeerUnavailableException {
 		Request request = null;
-		String sipAddress = sipConfig.getSipIp() + ":" + sipConfig.getSipPort();
+		String sipAddress = sipConfig.getIp() + ":" + sipConfig.getPort();
 		//璇锋眰琛�
 		SipURI requestLine = sipFactory.createAddressFactory().createSipURI(platform.getServerGBId(),
 				platform.getServerIP() + ":" + platform.getServerPort());
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
index 691bc42..160b850 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
@@ -37,16 +37,16 @@
 		SipURI requestURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
 		// via
 		ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
-		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getSipIp(), sipConfig.getSipPort(), device.getTransport(), viaTag);
+		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(), device.getTransport(), viaTag);
 		viaHeader.setRPort();
 		viaHeaders.add(viaHeader);
 		// from
-		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getSipId(),
-				sipConfig.getSipIp() + ":" + sipConfig.getSipPort());
+		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(),
+				sipConfig.getIp() + ":" + sipConfig.getPort());
 		Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
 		FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
 		// to
-		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), sipConfig.getSipDomain());
+		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), sipConfig.getDomain());
 		Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
 		ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, toTag);
 
@@ -68,16 +68,16 @@
 		SipURI requestLine = sipFactory.createAddressFactory().createSipURI(channelId, device.getHostAddress());
 		//via
 		ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
-		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getSipIp(), sipConfig.getSipPort(), device.getTransport(), viaTag);
+		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(), device.getTransport(), viaTag);
 		viaHeader.setRPort();
 		viaHeaders.add(viaHeader);
 
 		//from
-		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getSipId(),sipConfig.getSipDomain());
+		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain());
 		Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
 		FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag); //蹇呴』瑕佹湁鏍囪锛屽惁鍒欐棤娉曞垱寤轰細璇濓紝鏃犳硶鍥炲簲ack
 		//to
-		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId,sipConfig.getSipDomain()); 
+		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId,sipConfig.getDomain()); 
 		Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
 		ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,null);
 		
@@ -88,11 +88,11 @@
 		CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(1L, Request.INVITE);
 		request = sipFactory.createMessageFactory().createRequest(requestLine, Request.INVITE, callIdHeader, cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
 		
-		Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getSipId(), sipConfig.getSipIp()+":"+sipConfig.getSipPort()));
-		// Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getSipId(), device.getHost().getIp()+":"+device.getHost().getPort()));
+		Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
+		// Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), device.getHost().getIp()+":"+device.getHost().getPort()));
 		request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
 		// Subject
-		SubjectHeader subjectHeader = sipFactory.createHeaderFactory().createSubjectHeader(String.format("%s:%s,%s:%s", channelId, ssrc, sipConfig.getSipId(), 0));
+		SubjectHeader subjectHeader = sipFactory.createHeaderFactory().createSubjectHeader(String.format("%s:%s,%s:%s", channelId, ssrc, sipConfig.getId(), 0));
 		request.addHeader(subjectHeader);
 		ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("APPLICATION", "SDP");
 		request.setContent(content, contentTypeHeader);
@@ -109,11 +109,11 @@
 		viaHeader.setRPort();
 		viaHeaders.add(viaHeader);
 		//from
-		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getSipId(),sipConfig.getSipDomain());
+		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain());
 		Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
 		FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag); //蹇呴』瑕佹湁鏍囪锛屽惁鍒欐棤娉曞垱寤轰細璇濓紝鏃犳硶鍥炲簲ack
 		//to
-		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId,sipConfig.getSipDomain()); 
+		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId,sipConfig.getDomain()); 
 		Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
 		ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,null);
 		
@@ -124,8 +124,8 @@
 		CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(1L, Request.INVITE);
 		request = sipFactory.createMessageFactory().createRequest(requestLine, Request.INVITE, callIdHeader, cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
 		
-		Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getSipId(), sipConfig.getSipIp()+":"+sipConfig.getSipPort()));
-		// Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getSipId(), device.getHost().getIp()+":"+device.getHost().getPort()));
+		Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
+		// Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), device.getHost().getIp()+":"+device.getHost().getPort()));
 		request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
 		
 		ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("APPLICATION", "SDP");
@@ -139,14 +139,14 @@
 		SipURI requestLine = sipFactory.createAddressFactory().createSipURI(channelId, device.getHostAddress());
 		// via
 		ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
-		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getSipIp(), sipConfig.getSipPort(), device.getTransport(), viaTag);
+		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(), device.getTransport(), viaTag);
 		viaHeaders.add(viaHeader);
 		//from
-		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getSipId(),sipConfig.getSipDomain());
+		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain());
 		Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
 		FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag); //蹇呴』瑕佹湁鏍囪锛屽惁鍒欐棤娉曞垱寤轰細璇濓紝鏃犳硶鍥炲簲ack
 		//to
-		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId,sipConfig.getSipDomain());
+		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId,sipConfig.getDomain());
 		Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
 		ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,toTag);
 
@@ -158,7 +158,7 @@
 		CallIdHeader callIdHeader = sipFactory.createHeaderFactory().createCallIdHeader(callId);
 		request = sipFactory.createMessageFactory().createRequest(requestLine, Request.BYE, callIdHeader, cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
 
-		Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getSipId(), sipConfig.getSipIp()+":"+sipConfig.getSipPort()));
+		Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
 
 		return request;
 	}
@@ -169,17 +169,17 @@
 		SipURI requestURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
 		// via
 		ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
-		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getSipIp(), sipConfig.getSipPort(),
+		ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(),
 				device.getTransport(), viaTag);
 		viaHeader.setRPort();
 		viaHeaders.add(viaHeader);
 		// from
-		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getSipId(),
-				sipConfig.getSipIp() + ":" + sipConfig.getSipPort());
+		SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(sipConfig.getId(),
+				sipConfig.getIp() + ":" + sipConfig.getPort());
 		Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
 		FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
 		// to
-		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), sipConfig.getSipDomain());
+		SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), sipConfig.getDomain());
 		Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
 		ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, toTag);
 
@@ -192,7 +192,7 @@
 				toHeader, viaHeaders, maxForwards);
 
 
-		Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getSipId(), sipConfig.getSipIp()+":"+sipConfig.getSipPort()));
+		Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
 		request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
 
 		// Expires
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
index 7947ad9..cec64cc 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -105,7 +105,7 @@
 	 */
 	@Override
 	public boolean ptzdirectCmd(Device device, String channelId, int leftRight, int upDown) {
-		return ptzCmd(device, channelId, leftRight, upDown, 0, sipConfig.getSpeed(), 0);
+		return ptzCmd(device, channelId, leftRight, upDown, 0, sipConfig.getPtzSpeed(), 0);
 	}
 
 	/**
@@ -131,7 +131,7 @@
 	 */  
 	@Override
 	public boolean ptzZoomCmd(Device device, String channelId, int inOut) {
-		return ptzCmd(device, channelId, 0, 0, inOut, 0, sipConfig.getSpeed());
+		return ptzCmd(device, channelId, 0, 0, inOut, 0, sipConfig.getPtzSpeed());
 	}
 
 	/**
@@ -468,7 +468,7 @@
 
 			StringBuffer content = new StringBuffer(200);
 	        content.append("v=0\r\n");
-	        content.append("o="+sipConfig.getSipId()+" 0 0 IN IP4 "+sipConfig.getSipIp()+"\r\n");
+	        content.append("o="+sipConfig.getId()+" 0 0 IN IP4 "+sipConfig.getIp()+"\r\n");
 	        content.append("s=Playback\r\n");
 	        content.append("u="+channelId+":0\r\n");
 	        content.append("c=IN IP4 "+mediaServerItem.getSdpIp()+"\r\n");
@@ -575,7 +575,7 @@
 
 			StringBuffer content = new StringBuffer(200);
 	        content.append("v=0\r\n");
-	        content.append("o="+sipConfig.getSipId()+" 0 0 IN IP4 "+sipConfig.getSipIp()+"\r\n");
+	        content.append("o="+sipConfig.getId()+" 0 0 IN IP4 "+sipConfig.getIp()+"\r\n");
 	        content.append("s=Download\r\n");
 	        content.append("u="+channelId+":0\r\n");
 	        content.append("c=IN IP4 "+mediaServerItem.getSdpIp()+"\r\n");
@@ -749,7 +749,7 @@
 			broadcastXml.append("<Notify>\r\n");
 			broadcastXml.append("<CmdType>Broadcast</CmdType>\r\n");
 			broadcastXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			broadcastXml.append("<SourceID>" + sipConfig.getSipId() + "</SourceID>\r\n");
+			broadcastXml.append("<SourceID>" + sipConfig.getId() + "</SourceID>\r\n");
 			broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n");
 			broadcastXml.append("</Notify>\r\n");
 			
@@ -774,7 +774,7 @@
 			broadcastXml.append("<Notify>\r\n");
 			broadcastXml.append("<CmdType>Broadcast</CmdType>\r\n");
 			broadcastXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
-			broadcastXml.append("<SourceID>" + sipConfig.getSipId() + "</SourceID>\r\n");
+			broadcastXml.append("<SourceID>" + sipConfig.getId() + "</SourceID>\r\n");
 			broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n");
 			broadcastXml.append("</Notify>\r\n");
 			
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 bd7bfd5..db5f05b 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
@@ -550,7 +550,7 @@
 							deviceChannel.setStatus(gbStream.isStatus()?1:0);
 //							deviceChannel.setParentId(parentPlatform.getDeviceGBId());
 							deviceChannel.setRegisterWay(1);
-							deviceChannel.setCivilCode(cmder.getSipConfig().getSipDomain());
+							deviceChannel.setCivilCode(cmder.getSipConfig().getDomain());
 							deviceChannel.setModel("live");
 							deviceChannel.setOwner("wvp-pro");
 //							deviceChannel.setAddress("test");
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 e5f76ae..064d023 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
@@ -79,9 +79,9 @@
 			// 鏍¢獙瀵嗙爜鏄惁姝g‘
 			if (authorhead != null) {
 				passwordCorrect = new DigestServerAuthenticationHelper().doAuthenticatePlainTextPassword(request,
-						sipConfig.getSipPassword());
+						sipConfig.getPassword());
 			}
-			if (StringUtils.isEmpty(sipConfig.getSipPassword())){
+			if (StringUtils.isEmpty(sipConfig.getPassword())){
 				passwordCorrect = true;
 			}
 
@@ -94,7 +94,7 @@
 					logger.info("[{}] 瀵嗙爜閿欒 鍥炲401", requestAddress);
 				}
 				response = getMessageFactory().createResponse(Response.UNAUTHORIZED, request);
-				new DigestServerAuthenticationHelper().generateChallenge(getHeaderFactory(), response, sipConfig.getSipDomain());
+				new DigestServerAuthenticationHelper().generateChallenge(getHeaderFactory(), response, sipConfig.getDomain());
 			}else {
 				if (!passwordCorrect){
 					// 娉ㄥ唽澶辫触
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IRoleService.java b/src/main/java/com/genersoft/iot/vmp/service/IRoleService.java
new file mode 100644
index 0000000..d207c6a
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/service/IRoleService.java
@@ -0,0 +1,18 @@
+package com.genersoft.iot.vmp.service;
+
+import com.genersoft.iot.vmp.storager.dao.dto.Role;
+
+import java.util.List;
+
+public interface IRoleService {
+
+    Role getRoleById(int id);
+
+    int add(Role role);
+
+    int delete(int id);
+
+    List<Role> getAll();
+
+    int update(Role role);
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
index d928d87..3af007d 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
@@ -83,7 +83,7 @@
         for (MediaServerItem mediaServerItem : mediaServerItemList) {
             // 鏇存柊
             if (mediaServerItem.getSsrcConfig() == null) {
-                SsrcConfig ssrcConfig = new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getSipDomain());
+                SsrcConfig ssrcConfig = new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain());
                 mediaServerItem.setSsrcConfig(ssrcConfig);
                 redisUtil.set(VideoManagerConstants.MEDIA_SERVER_PREFIX + mediaServerItem.getId(), mediaServerItem);
             }
@@ -145,7 +145,7 @@
      */
     @Override
     public void clearRTPServer(MediaServerItem mediaServerItem) {
-        mediaServerItem.setSsrcConfig(new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getSipDomain()));
+        mediaServerItem.setSsrcConfig(new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain()));
         redisUtil.zAdd(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX, mediaServerItem.getId(), 0);
     }
 
@@ -162,7 +162,7 @@
                     new SsrcConfig(
                             mediaServerItemInDataBase.getId(),
                             null,
-                            sipConfig.getSipDomain()
+                            sipConfig.getDomain()
                     )
             );
         }
@@ -264,12 +264,12 @@
                 if (serverItemInRedis != null) {
                     serverItemFromConfig.setSsrcConfig(serverItemInRedis.getSsrcConfig());
                 }else {
-                    serverItemFromConfig.setSsrcConfig(new SsrcConfig(serverItemFromConfig.getId(), null, sipConfig.getSipDomain()));
+                    serverItemFromConfig.setSsrcConfig(new SsrcConfig(serverItemFromConfig.getId(), null, sipConfig.getDomain()));
                 }
                 redisUtil.set(key, serverItemFromConfig);
             }else {
                 String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + serverItemFromConfig.getId();
-                serverItemFromConfig.setSsrcConfig(new SsrcConfig(serverItemFromConfig.getId(), null, sipConfig.getSipDomain()));
+                serverItemFromConfig.setSsrcConfig(new SsrcConfig(serverItemFromConfig.getId(), null, sipConfig.getDomain()));
                 redisUtil.set(key, serverItemFromConfig);
                 mediaServerMapper.add(serverItemFromConfig);
             }
@@ -279,11 +279,11 @@
             String now = this.format.format(System.currentTimeMillis());
             if (serverItem == null){
                     // 涓�涓柊鐨剒lm鎺ュ叆wvp
-                    serverItem = new MediaServerItem(zlmServerConfig, sipConfig.getSipIp());
+                    serverItem = new MediaServerItem(zlmServerConfig, sipConfig.getIp());
                     serverItem.setCreateTime(now);
                     serverItem.setUpdateTime(now);
                 String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + serverItem.getId();
-                serverItem.setSsrcConfig(new SsrcConfig(serverItem.getId(), null, sipConfig.getSipDomain()));
+                serverItem.setSsrcConfig(new SsrcConfig(serverItem.getId(), null, sipConfig.getDomain()));
                 redisUtil.set(key, serverItem);
                 // 瀛樺叆鏁版嵁搴�
                 mediaServerMapper.add(serverItem);
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/RoleServerImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/RoleServerImpl.java
new file mode 100644
index 0000000..d31bbce
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/RoleServerImpl.java
@@ -0,0 +1,41 @@
+package com.genersoft.iot.vmp.service.impl;
+
+import com.genersoft.iot.vmp.service.IRoleService;
+import com.genersoft.iot.vmp.storager.dao.RoleMapper;
+import com.genersoft.iot.vmp.storager.dao.dto.Role;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class RoleServerImpl implements IRoleService {
+
+    @Autowired
+    private RoleMapper roleMapper;
+
+    @Override
+    public Role getRoleById(int id) {
+        return roleMapper.selectById(id);
+    }
+
+    @Override
+    public int add(Role role) {
+        return roleMapper.add(role);
+    }
+
+    @Override
+    public int delete(int id) {
+        return roleMapper.delete(id);
+    }
+
+    @Override
+    public List<Role> getAll() {
+        return roleMapper.selectAll();
+    }
+
+    @Override
+    public int update(Role role) {
+        return roleMapper.update(role);
+    }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/RoleMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/RoleMapper.java
new file mode 100644
index 0000000..be20a69
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/RoleMapper.java
@@ -0,0 +1,35 @@
+package com.genersoft.iot.vmp.storager.dao;
+
+import com.genersoft.iot.vmp.storager.dao.dto.Role;
+import com.genersoft.iot.vmp.storager.dao.dto.User;
+import org.apache.ibatis.annotations.*;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface RoleMapper {
+
+    @Insert("INSERT INTO role (name, authority, createTime, updateTime) VALUES" +
+            "('${name}', '${authority}', '${createTime}', '${updateTime}')")
+    int add(Role role);
+
+    @Update(value = {" <script>" +
+            "UPDATE role " +
+            "SET updateTime='${updateTime}' " +
+            "<if test=\"name != null\">, name='${name}'</if>" +
+            "<if test=\"authority != null\">, authority='${authority}'</if>" +
+            "WHERE id != 1 and id=#{id}" +
+            " </script>"})
+    int update(Role role);
+
+    @Delete("DELETE FROM role WHERE  id != 1 and id=#{id}")
+    int delete(int id);
+
+    @Select("select * FROM role WHERE id=#{id}")
+    Role selectById(int id);
+
+    @Select("select * FROM role")
+    List<Role> selectAll();
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/UserMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/UserMapper.java
index e217632..7eb71e6 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/UserMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/UserMapper.java
@@ -10,32 +10,42 @@
 @Repository
 public interface UserMapper {
 
-    @Insert("INSERT INTO user (username, password, roleId, create_time, update_time) VALUES" +
-            "('${username}', '${password}', '${roleId}', '${createTime}', '${updateTime}')")
+    @Insert("INSERT INTO user (username, password, roleId, createTime, updateTime) VALUES" +
+            "('${username}', '${password}', '${role.id}', '${createTime}', '${updateTime}')")
     int add(User user);
 
     @Update(value = {" <script>" +
             "UPDATE user " +
-            "SET update_time='${updateTime}' " +
-            "<if test=\"roleId != null\">, roleId='${roleId}'</if>" +
+            "SET updateTime='${updateTime}' " +
+            "<if test=\"role != null\">, roleId='${role.id}'</if>" +
             "<if test=\"password != null\">, password='${password}'</if>" +
             "<if test=\"username != null\">, username='${username}'</if>" +
             "WHERE id=#{id}" +
             " </script>"})
     int update(User user);
 
-    @Delete("DELETE FROM user WHERE id=#{id}")
+    @Delete("DELETE FROM user WHERE id != 1 and id=#{id}")
     int delete(int id);
 
-    @Select("select * FROM user WHERE username=#{username} AND password=#{password}")
+    @Select("select user.*, role.id roleID, role.name roleName, role.authority roleAuthority , role.createTime roleCreateTime , role.updateTime roleUpdateTime FROM user, role WHERE user.roleId=role.id and user.username=#{username} AND user.password=#{password}")
+    @Results(id = "roleMap", value = {
+            @Result(column = "roleID", property = "role.id"),
+            @Result(column = "roleName", property = "role.name"),
+            @Result(column = "roleAuthority", property = "role.authority"),
+            @Result(column = "roleCreateTime", property = "role.createTime"),
+            @Result(column = "roleUpdateTime", property = "role.updateTime")
+    })
     User select(String username, String password);
 
-    @Select("select * FROM user WHERE id=#{id}")
+    @Select("select user.*, role.id roleID, role.name roleName, role.authority roleAuthority, role.createTime roleCreateTime , role.updateTime roleUpdateTime FROM user, role WHERE user.roleId=role.id and user.id=#{id}")
+    @ResultMap(value="roleMap")
     User selectById(int id);
 
-    @Select("select * FROM user WHERE username=#{username}")
+    @Select("select user.*, role.id roleID, role.name roleName, role.authority roleAuthority, role.createTime roleCreateTime , role.updateTime roleUpdateTime FROM user, role WHERE user.roleId=role.id and username=#{username}")
+    @ResultMap(value="roleMap")
     User getUserByUsername(String username);
 
-    @Select("select * FROM user")
+    @Select("select user.*, role.id roleID, role.name roleName, role.authority roleAuthority, role.createTime roleCreateTime , role.updateTime roleUpdateTime FROM user, role WHERE user.roleId=role.id")
+    @ResultMap(value="roleMap")
     List<User> selectAll();
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/Role.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/Role.java
new file mode 100644
index 0000000..44631f8
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/Role.java
@@ -0,0 +1,50 @@
+package com.genersoft.iot.vmp.storager.dao.dto;
+
+public class Role {
+
+    private int id;
+    private String name;
+    private String authority;
+    private String createTime;
+    private String updateTime;
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getAuthority() {
+        return authority;
+    }
+
+    public void setAuthority(String authority) {
+        this.authority = authority;
+    }
+
+    public String getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(String createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(String updateTime) {
+        this.updateTime = updateTime;
+    }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/User.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/User.java
index b4a0289..950a8ca 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/User.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/dto/User.java
@@ -7,7 +7,7 @@
     private String password;
     private String createTime;
     private String updateTime;
-    private int roleId;
+    private Role role;
 
     public int getId() {
         return id;
@@ -41,14 +41,6 @@
         this.createTime = createTime;
     }
 
-    public int getRoleId() {
-        return roleId;
-    }
-
-    public void setRoleId(int roleId) {
-        this.roleId = roleId;
-    }
-
     public String getUpdateTime() {
         return updateTime;
     }
@@ -56,4 +48,12 @@
     public void setUpdateTime(String updateTime) {
         this.updateTime = updateTime;
     }
+
+    public Role getRole() {
+        return role;
+    }
+
+    public void setRole(Role role) {
+        this.role = role;
+    }
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
index 84431dd..1a0a9b7 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
@@ -52,10 +52,10 @@
     @GetMapping("/server_config")
     public ResponseEntity<JSONObject> serverConfig() {
         JSONObject result = new JSONObject();
-        result.put("deviceIp", sipConfig.getSipIp());
-        result.put("devicePort", sipConfig.getSipPort());
-        result.put("username", sipConfig.getSipId());
-        result.put("password", sipConfig.getSipPassword());
+        result.put("deviceIp", sipConfig.getIp());
+        result.put("devicePort", sipConfig.getPort());
+        result.put("username", sipConfig.getId());
+        result.put("password", sipConfig.getPassword());
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/log/LogController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/log/LogController.java
index 6dfb569..650dbe0 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/log/LogController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/log/LogController.java
@@ -1,5 +1,7 @@
 package com.genersoft.iot.vmp.vmanager.log;
 
+import com.genersoft.iot.vmp.conf.UserSetup;
+import com.genersoft.iot.vmp.media.zlm.ZLMRunner;
 import com.genersoft.iot.vmp.service.ILogService;
 import com.genersoft.iot.vmp.storager.dao.dto.LogDto;
 import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
@@ -8,6 +10,8 @@
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
@@ -23,8 +27,13 @@
 @RequestMapping("/api/log")
 public class LogController {
 
+    private final static Logger logger = LoggerFactory.getLogger(LogController.class);
+
     @Autowired
     private ILogService logService;
+
+    @Autowired
+    private UserSetup userSetup;
 
     private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
@@ -60,7 +69,9 @@
         if (StringUtils.isEmpty(query)) query = null;
         if (StringUtils.isEmpty(startTime)) startTime = null;
         if (StringUtils.isEmpty(endTime)) endTime = null;
-
+        if (!userSetup.getLogInDatebase()) {
+            logger.warn("鑷姩璁板綍鏃ュ織鍔熻兘宸插叧闂紝鏌ヨ缁撴灉鍙兘涓嶅畬鏁淬��");
+        }
 
         try {
             if (startTime != null)  format.parse(startTime);
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java
index 4b7adc6..3bfa595 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java
@@ -1,7 +1,11 @@
 package com.genersoft.iot.vmp.vmanager.server;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.genersoft.iot.vmp.VManageBootstrap;
 import com.genersoft.iot.vmp.common.VersionPo;
+import com.genersoft.iot.vmp.conf.SipConfig;
+import com.genersoft.iot.vmp.conf.UserSetup;
 import com.genersoft.iot.vmp.conf.VersionInfo;
 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
 import com.genersoft.iot.vmp.service.IMediaServerService;
@@ -9,9 +13,13 @@
 import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
 import gov.nist.javax.sip.SipStackImpl;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.sip.ListeningPoint;
@@ -35,6 +43,15 @@
 
     @Autowired
     VersionInfo versionInfo;
+
+    @Autowired
+    SipConfig sipConfig;
+
+    @Autowired
+    UserSetup userSetup;
+
+    @Value("${server.port}")
+    private int serverPort;
 
 
     @ApiOperation("娴佸獟浣撴湇鍔″垪琛�")
@@ -113,4 +130,34 @@
         result.setData(versionInfo.getVersion());
         return result;
     }
+
+    @ApiOperation("閰嶇疆淇℃伅")
+    @GetMapping(value = "/config")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name="type", value = "閰嶇疆绫诲瀷锛坰ip, base锛�", dataTypeClass = String.class),
+    })
+    @ResponseBody
+    public WVPResult<JSONObject> getVersion(String type){
+        WVPResult<JSONObject> result = new WVPResult<>();
+        result.setCode(0);
+        result.setMsg("success");
+
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("server.port", serverPort);
+        if (StringUtils.isEmpty(type)) {
+            jsonObject.put("sip", JSON.toJSON(sipConfig));
+            jsonObject.put("base", JSON.toJSON(userSetup));
+        }else {
+            switch (type){
+                case "sip":
+                    jsonObject.put("sip", sipConfig);
+                    break;
+                case "base":
+                    jsonObject.put("base", userSetup);
+                    break;
+            }
+        }
+        result.setData(jsonObject);
+        return result;
+    }
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/user/RoleController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/user/RoleController.java
new file mode 100644
index 0000000..6a75e1d
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/user/RoleController.java
@@ -0,0 +1,101 @@
+package com.genersoft.iot.vmp.vmanager.user;
+
+import com.genersoft.iot.vmp.conf.security.SecurityUtils;
+import com.genersoft.iot.vmp.service.IRoleService;
+import com.genersoft.iot.vmp.service.IUserService;
+import com.genersoft.iot.vmp.storager.dao.dto.Role;
+import com.genersoft.iot.vmp.storager.dao.dto.User;
+import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.util.DigestUtils;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.SimpleDateFormat;
+import java.util.List;
+
+@Api(tags = "瑙掕壊绠$悊")
+@CrossOrigin
+@RestController
+@RequestMapping("/api/role")
+public class RoleController {
+
+    @Autowired
+    private IRoleService roleService;
+
+    private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+    @ApiOperation("娣诲姞瑙掕壊")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "name", required = true, value = "瑙掕壊鍚�", dataTypeClass = String.class),
+            @ApiImplicitParam(name = "authority", required = true, value = "鏉冮檺锛堣嚜琛屽畾涔夊唴瀹癸紝鐩墠鏈娇鐢級", dataTypeClass = String.class),
+    })
+    @PostMapping("/add")
+    public ResponseEntity<WVPResult<Integer>> add(@RequestParam String name,
+                                                  @RequestParam(required = false) String authority){
+        WVPResult<Integer> result = new WVPResult<>();
+        // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛id
+        int currenRoleId = SecurityUtils.getUserInfo().getRole().getId();
+        if (currenRoleId != 1) {
+            // 鍙敤瑙掕壊id涓�1鎵嶅彲浠ュ垹闄ゅ拰娣诲姞鐢ㄦ埛
+            result.setCode(-1);
+            result.setMsg("鐢ㄦ埛鏃犳潈闄�");
+            return new ResponseEntity<>(result, HttpStatus.FORBIDDEN);
+        }
+
+        Role role = new Role();
+        role.setName(name);
+        role.setAuthority(authority);
+        role.setCreateTime(format.format(System.currentTimeMillis()));
+        role.setUpdateTime(format.format(System.currentTimeMillis()));
+
+        int addResult = roleService.add(role);
+
+        result.setCode(addResult > 0 ? 0 : -1);
+        result.setMsg(addResult > 0 ? "success" : "fail");
+        result.setData(addResult);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation("鍒犻櫎瑙掕壊")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", required = true, value = "鐢ㄦ埛Id", dataTypeClass = Integer.class),
+    })
+    @DeleteMapping("/delete")
+    public ResponseEntity<WVPResult<String>> delete(@RequestParam Integer id){
+        // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛id
+        int currenRoleId = SecurityUtils.getUserInfo().getRole().getId();
+        WVPResult<String> result = new WVPResult<>();
+        if (currenRoleId != 1) {
+            // 鍙敤瑙掕壊id涓�0鎵嶅彲浠ュ垹闄ゅ拰娣诲姞鐢ㄦ埛
+            result.setCode(-1);
+            result.setMsg("鐢ㄦ埛鏃犳潈闄�");
+            return new ResponseEntity<>(result, HttpStatus.FORBIDDEN);
+        }
+        int deleteResult = roleService.delete(id);
+
+        result.setCode(deleteResult>0? 0 : -1);
+        result.setMsg(deleteResult>0? "success" : "fail");
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation("鏌ヨ瑙掕壊")
+    @ApiImplicitParams({})
+    @GetMapping("/all")
+    public ResponseEntity<WVPResult<List<Role>>> all(){
+        // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛id
+        List<Role> allRoles = roleService.getAll();
+        WVPResult<List<Role>> result = new WVPResult<>();
+        result.setCode(0);
+        result.setMsg("success");
+        result.setData(allRoles);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java
index 6e4c416..756fecd 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java
@@ -2,7 +2,9 @@
 
 import com.genersoft.iot.vmp.conf.security.SecurityUtils;
 import com.genersoft.iot.vmp.conf.security.dto.LoginUser;
+import com.genersoft.iot.vmp.service.IRoleService;
 import com.genersoft.iot.vmp.service.IUserService;
+import com.genersoft.iot.vmp.storager.dao.dto.Role;
 import com.genersoft.iot.vmp.storager.dao.dto.User;
 import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
 import io.swagger.annotations.Api;
@@ -14,6 +16,7 @@
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.util.DigestUtils;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.security.sasl.AuthenticationException;
@@ -31,6 +34,9 @@
 
     @Autowired
     private IUserService userService;
+
+    @Autowired
+    private IRoleService roleService;
 
     private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
@@ -97,21 +103,38 @@
     @PostMapping("/add")
     public ResponseEntity<WVPResult<Integer>> add(@RequestParam String username,
                                                  @RequestParam String password,
-                                                 @RequestParam int roleId){
+                                                 @RequestParam Integer roleId){
+        WVPResult<Integer> result = new WVPResult<>();
+        if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password) || roleId == null) {
+            result.setCode(-1);
+            result.setMsg("鍙傛暟涓嶅彲涓虹┖");
+            return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST);
+        }
         // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛id
-        int currenRoleId = SecurityUtils.getUserInfo().getRoleId();
-        if (currenRoleId != 0) {
-            // 鍙敤瑙掕壊id涓�0鎵嶅彲浠ュ垹闄ゅ拰娣诲姞鐢ㄦ埛
-            return new ResponseEntity<>(null, HttpStatus.FORBIDDEN);
+        int currenRoleId = SecurityUtils.getUserInfo().getRole().getId();
+        if (currenRoleId != 1) {
+            // 鍙敤瑙掕壊id涓�1鎵嶅彲浠ュ垹闄ゅ拰娣诲姞鐢ㄦ埛
+            result.setCode(-1);
+            result.setMsg("鐢ㄦ埛鏃犳潈闄�");
+            return new ResponseEntity<>(result, HttpStatus.FORBIDDEN);
         }
         User user = new User();
         user.setUsername(username);
         user.setPassword(DigestUtils.md5DigestAsHex(password.getBytes()));
-        user.setRoleId(roleId);
+
+        Role role = roleService.getRoleById(roleId);
+
+        if (role == null) {
+            result.setCode(-1);
+            result.setMsg("roleId is not found");
+            // 瑙掕壊涓嶅瓨鍦�
+            return new ResponseEntity<>(result, HttpStatus.OK);
+        }
+        user.setRole(role);
         user.setCreateTime(format.format(System.currentTimeMillis()));
         user.setUpdateTime(format.format(System.currentTimeMillis()));
         int addResult = userService.addUser(user);
-        WVPResult<Integer> result = new WVPResult<>();
+
         result.setCode(addResult > 0 ? 0 : -1);
         result.setMsg(addResult > 0 ? "success" : "fail");
         result.setData(addResult);
@@ -125,13 +148,16 @@
     @DeleteMapping("/delete")
     public ResponseEntity<WVPResult<String>> delete(@RequestParam Integer id){
         // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛id
-        int currenRoleId = SecurityUtils.getUserInfo().getRoleId();
-        if (currenRoleId != 0) {
+        int currenRoleId = SecurityUtils.getUserInfo().getRole().getId();
+        WVPResult<String> result = new WVPResult<>();
+        if (currenRoleId != 1) {
             // 鍙敤瑙掕壊id涓�0鎵嶅彲浠ュ垹闄ゅ拰娣诲姞鐢ㄦ埛
-            return new ResponseEntity<>(null, HttpStatus.FORBIDDEN);
+            result.setCode(-1);
+            result.setMsg("鐢ㄦ埛鏃犳潈闄�");
+            return new ResponseEntity<>(result, HttpStatus.FORBIDDEN);
         }
         int deleteResult = userService.deleteUser(id);
-        WVPResult<String> result = new WVPResult<>();
+
         result.setCode(deleteResult>0? 0 : -1);
         result.setMsg(deleteResult>0? "success" : "fail");
         return new ResponseEntity<>(result, HttpStatus.OK);
diff --git a/src/main/java/com/genersoft/iot/vmp/web/ApiController.java b/src/main/java/com/genersoft/iot/vmp/web/ApiController.java
index 8035810..cafa40c 100644
--- a/src/main/java/com/genersoft/iot/vmp/web/ApiController.java
+++ b/src/main/java/com/genersoft/iot/vmp/web/ApiController.java
@@ -38,10 +38,10 @@
         result.put("ServerTime","2020-09-02 17锛�11");
         result.put("StartUpTime","2020-09-02 17锛�11");
         result.put("Server","");
-        result.put("SIPSerial", sipConfig.getSipId());
-        result.put("SIPRealm", sipConfig.getSipDomain());
-        result.put("SIPHost", sipConfig.getSipIp());
-        result.put("SIPPort", sipConfig.getSipPort());
+        result.put("SIPSerial", sipConfig.getId());
+        result.put("SIPRealm", sipConfig.getDomain());
+        result.put("SIPHost", sipConfig.getIp());
+        result.put("SIPPort", sipConfig.getPort());
         result.put("ChannelCount","1000");
         result.put("VersionType","");
         result.put("LogoMiniText","");
@@ -65,10 +65,10 @@
 //        result.put("ServerTime","2020-09-02 17锛�11");
 //        result.put("StartUpTime","2020-09-02 17锛�11");
 //        result.put("Server","");
-//        result.put("SIPSerial", sipConfig.getSipId());
-//        result.put("SIPRealm", sipConfig.getSipDomain());
-//        result.put("SIPHost", sipConfig.getSipIp());
-//        result.put("SIPPort", sipConfig.getSipPort());
+//        result.put("SIPSerial", sipConfig.getId());
+//        result.put("SIPRealm", sipConfig.getDomain());
+//        result.put("SIPHost", sipConfig.getIp());
+//        result.put("SIPPort", sipConfig.getPort());
 //        result.put("ChannelCount","1000");
 //        result.put("VersionType","");
 //        result.put("LogoMiniText","");
diff --git a/src/main/resources/all-application.yml b/src/main/resources/all-application.yml
index 140ef0a..856d6c5 100644
--- a/src/main/resources/all-application.yml
+++ b/src/main/resources/all-application.yml
@@ -76,6 +76,8 @@
     keepalive-timeout: 180
     # [鍙�塢 鍥芥爣绾ц仈娉ㄥ唽澶辫触锛屽啀娆″彂璧锋敞鍐岀殑鏃堕棿闂撮殧銆� 榛樿60绉�
     register-time-interval: 60
+    # [鍙�塢 浜戝彴鎺у埗閫熷害
+    ptz-speed: 50
     # TODO [鍙�塢 鏀跺埌蹇冭烦鍚庤嚜鍔ㄤ笂绾匡紝 閲嶅惎鏈嶅姟鍚庝細灏嗘墍鏈夎澶囩疆涓虹绾匡紝榛樿false锛岀瓑寰呮敞鍐屽悗涓婄嚎銆傝缃负true鍒欐敹鍒板績璺宠缃负涓婄嚎銆�
     # keepalliveToOnline: false
 
@@ -155,4 +157,10 @@
 
 # 鍦ㄧ嚎鏂囨。锛� swagger-ui锛堢敓浜х幆澧冨缓璁叧闂級
 swagger-ui:
-    enabled: true
\ No newline at end of file
+    enabled: true
+
+# 鐗堟湰淇℃伅锛� 涓嶉渶淇敼
+version:
+    version: "@project.version@"
+    description: "@project.description@"
+    artifact-id: "@project.artifactId@"
\ No newline at end of file
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index f0cb8f8..3d25098 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -85,4 +85,10 @@
 
 # 鍦ㄧ嚎鏂囨。锛� swagger-ui锛堢敓浜х幆澧冨缓璁叧闂級
 swagger-ui:
-    enabled: true
\ No newline at end of file
+    enabled: true
+
+# 鐗堟湰淇℃伅锛� 涓嶉渶淇敼
+version:
+    version: "@project.version@"
+    description: "@project.description@"
+    artifact-id: "@project.artifactId@"
\ No newline at end of file
diff --git a/src/main/resources/banner.txt b/src/main/resources/banner.txt
index 5cf57a5..0c7250d 100644
--- a/src/main/resources/banner.txt
+++ b/src/main/resources/banner.txt
@@ -6,3 +6,4 @@
    \ \____________\ \__/ /     \ \__\                  \ \__\    \ \__\\ _\\ \_______\
     \|____________|\|__|/       \|__|                   \|__|     \|__|\|__|\|_______|
 
+鐗堟湰锛�${version.version}
\ No newline at end of file
diff --git a/src/main/resources/wvp.sqlite b/src/main/resources/wvp.sqlite
index 908d585..228a96a 100644
--- a/src/main/resources/wvp.sqlite
+++ b/src/main/resources/wvp.sqlite
Binary files differ
diff --git a/src/test/java/com/genersoft/iot/vmp/service/impl/RoleServiceImplTest.java b/src/test/java/com/genersoft/iot/vmp/service/impl/RoleServiceImplTest.java
new file mode 100644
index 0000000..20209f2
--- /dev/null
+++ b/src/test/java/com/genersoft/iot/vmp/service/impl/RoleServiceImplTest.java
@@ -0,0 +1,58 @@
+package com.genersoft.iot.vmp.service.impl;
+
+import com.genersoft.iot.vmp.service.IRoleService;
+import com.genersoft.iot.vmp.service.IUserService;
+import com.genersoft.iot.vmp.storager.dao.dto.Role;
+import com.genersoft.iot.vmp.storager.dao.dto.User;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.List;
+
+
+@SpringBootTest
+@RunWith(SpringRunner.class)
+class RoleServiceImplTest {
+
+    @Resource
+    private IRoleService roleService;
+
+    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    @org.junit.jupiter.api.Test
+    void getAllUser() {
+        List<Role> all = roleService.getAll();
+        Role roleById = roleService.getRoleById(1);
+        System.out.println();
+
+    }
+
+
+    @org.junit.jupiter.api.Test
+    void add() {
+        for (int i = 0; i < 10; i++) {
+            Role role = new Role();
+            role.setName("test+" + i);
+            role.setAuthority("adadadda");
+            role.setCreateTime(format.format(System.currentTimeMillis()));
+            role.setUpdateTime(format.format(System.currentTimeMillis()));
+            roleService.add(role);
+        }
+    }
+
+    @org.junit.jupiter.api.Test
+    void delete() {
+        roleService.delete(20);
+    }
+
+    @org.junit.jupiter.api.Test
+    void update() {
+        Role role = new Role();
+        role.setId(21);
+        role.setName("TTTTTT");
+        role.setAuthority("adadadda");
+        roleService.update(role);
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/com/genersoft/iot/vmp/service/impl/UserServiceImplTest.java b/src/test/java/com/genersoft/iot/vmp/service/impl/UserServiceImplTest.java
index eea7f04..9e3c672 100644
--- a/src/test/java/com/genersoft/iot/vmp/service/impl/UserServiceImplTest.java
+++ b/src/test/java/com/genersoft/iot/vmp/service/impl/UserServiceImplTest.java
@@ -3,6 +3,7 @@
 import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm;
 import com.genersoft.iot.vmp.service.IDeviceAlarmService;
 import com.genersoft.iot.vmp.service.IUserService;
+import com.genersoft.iot.vmp.storager.dao.dto.Role;
 import com.genersoft.iot.vmp.storager.dao.dto.User;
 import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -11,6 +12,7 @@
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.List;
 
 
 @SpringBootTest
@@ -24,7 +26,11 @@
 
     @org.junit.jupiter.api.Test
     void getAllUser() {
+        List<User> allUsers = userService.getAllUsers();
         System.out.println(userService.getAllUsers().size());
+        User admin = userService.getUser("admin", "21232f297a57a5a743894a0e4a801fc3");
+        User admin1 = userService.getUserByUsername("admin");
+        System.out.println(12);
     }
 
 
@@ -34,7 +40,10 @@
             User user = new User();
             user.setUsername("admin_" + i);
             user.setPassword("admin_password_" + i);
-            user.setRoleId((int)(Math.random()*4 + 1));
+
+            Role role = new Role();
+            role.setId(1);
+            user.setRole(role);
             user.setCreateTime(format.format(System.currentTimeMillis()));
             user.setUpdateTime(format.format(System.currentTimeMillis()));
             userService.addUser(user);
@@ -49,10 +58,12 @@
     @org.junit.jupiter.api.Test
     void update() {
         User user = new User();
-        user.setId(1003);
+        user.setId(11);
         user.setUsername("update" );
         user.setPassword("update");
-        user.setRoleId((int)(Math.random()*4 + 1));
+        Role role = new Role();
+        role.setId(2);
+        user.setRole(role);
         user.setUpdateTime(format.format(System.currentTimeMillis()));
         userService.updateUsers(user);
     }

--
Gitblit v1.8.0