diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..9283bff
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,9 @@
+FROM openjdk:8
+
+COPY door-1.0.jar /opt/door/door.jar
+
+EXPOSE 8080
+
+WORKDIR /opt/door
+
+CMD ["java" , "-jar", "door.jar"]
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index e073b25..2541be8 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4,25 +4,48 @@
     id 'org.jetbrains.kotlin.jvm'
     id 'org.jetbrains.kotlin.plugin.jpa'
     id 'org.jetbrains.kotlin.plugin.spring'
+    id 'com.palantir.docker' version '0.22.1'
 }
 
 apply plugin: 'io.spring.dependency-management'
 
 group = 'com.supwisdom'
-version = waterManagerVersion
+version = doorVersion
 sourceCompatibility = jdkVersion
 
 repositories {
     mavenCentral()
 }
 
-war {
+def startClass = 'com.supwisdom.dlpay.DoorApplicationKt'
+
+println("Build version: $version")
+repositories {
+    mavenCentral()
+}
+
+springBoot {
+    mainClassName = startClass
+}
+
+
+bootJar {
+    launchScript()
+    mainClassName = startClass
+}
+
+jar {
     manifest {
-        attributes('WaterManager-Version': rootProject.version)
-        writeTo(project.buildDir.toString() + "/classes/MATE-INF.MF")
+        attributes('Payapi-Version': version)
     }
 }
 
+docker {
+    name '172.28.201.70:5000/dali/door:' + version
+    println(jar.archivePath)
+    files jar.archivePath
+}
+
 dependencies {
     implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
     implementation 'org.springframework.boot:spring-boot-starter-data-redis'
@@ -60,6 +83,9 @@
     implementation 'cn.afterturn:easypoi-base:3.0.3'
 
 
+    implementation 'org.springframework.boot:spring-boot-autoconfigure:2.1.6.RELEASE'
+
+
     annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
 
     providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 3fa666b..e95d75d 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -20,4 +20,4 @@
 jwt.expiration=3600
 auth.password.bcrypt.seed=
 spring.jackson.serialization.fail-on-empty-beans=false
-server.port=8099
+server.port=10010
diff --git a/gradle.properties b/gradle.properties
index 9d1aa55..9ed40a0 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,4 +1,4 @@
 springbootVersion = 2.1.3.RELEASE
 kotlinVersion = 1.3.31
-waterManagerVersion = 1.0
+doorVersion = 1.0
 jdkVersion = 1.8
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index a10a9fb..39b7b24 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -16,5 +16,5 @@
         gradlePluginPortal()
     }
 }
-rootProject.name = 'watermanager'
+rootProject.name = 'door'
 
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoorcardlst.java b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoorcardlst.java
new file mode 100644
index 0000000..a0ef5fd
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoorcardlst.java
@@ -0,0 +1,249 @@
+package com.supwisdom.dlpay.mainservice.domain;
+
+import javax.persistence.*;
+
+/**
+ * TDoorcardlst entity. @author MyEclipse Persistence Tools
+ */
+@Entity
+@Table(name = "T_DOORCARDLST")
+public class TDoorcardlst implements java.io.Serializable {
+
+	// Fields
+
+	private TDoorcardlstId id;
+	private Integer custid;
+	private Integer cardno;
+	private String stuempno;
+	private String custname;
+	private String buildingid;
+	private String buildingname;
+	private String closedate;
+	private String cardphyid;
+	private String operflag;
+	private String operid;
+	private String syncstatus;
+	private String synctime;
+	private String updatetime;
+	private String reason;
+	private Integer conferenceid;
+	private String usetype;
+	private Integer version;
+	private String regionid;
+
+	// Constructors
+
+	/** default constructor */
+	public TDoorcardlst() {
+	}
+
+	public String getReason() {
+		return reason;
+	}
+
+	public void setReason(String reason) {
+		this.reason = reason;
+	}
+
+	/** minimal constructor */
+	public TDoorcardlst(TDoorcardlstId id) {
+		this.id = id;
+	}
+
+	public TDoorcardlst(TDoorcardlstId id, Integer custid, Integer cardno, String stuempno, String custname, String buildingid, String buildingname, String closedate, String cardphyid, String operflag, String operid, String syncstatus, String synctime, String updatetime, String reason, Integer conferenceid, String usetype, Integer version, String regionid) {
+		this.id = id;
+		this.custid = custid;
+		this.cardno = cardno;
+		this.stuempno = stuempno;
+		this.custname = custname;
+		this.buildingid = buildingid;
+		this.buildingname = buildingname;
+		this.closedate = closedate;
+		this.cardphyid = cardphyid;
+		this.operflag = operflag;
+		this.operid = operid;
+		this.syncstatus = syncstatus;
+		this.synctime = synctime;
+		this.updatetime = updatetime;
+		this.reason = reason;
+		this.conferenceid = conferenceid;
+		this.usetype = usetype;
+		this.version = version;
+		this.regionid = regionid;
+	}
+
+	/** full constructor */
+
+
+	// Property accessors
+	@EmbeddedId
+	@AttributeOverrides({
+			@AttributeOverride(name = "listid", column = @Column(name = "LISTID", nullable = false, precision = 12, scale = 0)),
+			@AttributeOverride(name = "factoryid", column = @Column(name = "FACTORYID", nullable = false, length = 9)),
+			@AttributeOverride(name = "deviceid", column = @Column(name = "DEVICEID", nullable = false, length = 32)) })
+	public TDoorcardlstId getId() {
+		return this.id;
+	}
+
+	public void setId(TDoorcardlstId id) {
+		this.id = id;
+	}
+
+	@Column(name = "CUSTID", precision = 9, scale = 0)
+	public Integer getCustid() {
+		return this.custid;
+	}
+
+	public void setCustid(Integer custid) {
+		this.custid = custid;
+	}
+
+	@Column(name = "CARDNO", precision = 9, scale = 0)
+	public Integer getCardno() {
+		return this.cardno;
+	}
+
+	public void setCardno(Integer cardno) {
+		this.cardno = cardno;
+	}
+
+	@Column(name = "STUEMPNO", length = 24)
+	public String getStuempno() {
+		return this.stuempno;
+	}
+
+	public void setStuempno(String stuempno) {
+		this.stuempno = stuempno;
+	}
+
+	@Column(name = "CUSTNAME", length = 120)
+	public String getCustname() {
+		return this.custname;
+	}
+
+	public void setCustname(String custname) {
+		this.custname = custname;
+	}
+
+
+
+	@Column(name = "CLOSEDATE", length = 8)
+	public String getClosedate() {
+		return this.closedate;
+	}
+
+	public void setClosedate(String closedate) {
+		this.closedate = closedate;
+	}
+
+	@Column(name = "CARDPHYID", length = 16)
+	public String getCardphyid() {
+		return this.cardphyid;
+	}
+
+	public void setCardphyid(String cardphyid) {
+		this.cardphyid = cardphyid;
+	}
+
+	@Column(name = "OPERFLAG", length = 1)
+	public String getOperflag() {
+		return this.operflag;
+	}
+
+	public void setOperflag(String operflag) {
+		this.operflag = operflag;
+	}
+
+	@Column(name = "OPERID", length = 32)
+	public String getOperid() {
+		return this.operid;
+	}
+
+	public void setOperid(String operid) {
+		this.operid = operid;
+	}
+
+	@Column(name = "SYNCSTATUS", length = 1)
+	public String getSyncstatus() {
+		return this.syncstatus;
+	}
+
+	public void setSyncstatus(String syncstatus) {
+		this.syncstatus = syncstatus;
+	}
+
+	@Column(name = "SYNCTIME", length = 30)
+	public String getSynctime() {
+		return this.synctime;
+	}
+
+	public void setSynctime(String synctime) {
+		this.synctime = synctime;
+	}
+
+	@Column(name = "UPDATETIME", length = 30)
+	public String getUpdatetime() {
+		return this.updatetime;
+	}
+
+	public void setUpdatetime(String updatetime) {
+		this.updatetime = updatetime;
+	}
+
+
+
+	@Column(name = "conferenceid", length = 8)
+	public Integer getConferenceid() {
+		return conferenceid;
+	}
+
+	public void setConferenceid(Integer conferenceid) {
+		this.conferenceid = conferenceid;
+	}
+
+	@Column(name = "usetype", length = 8)
+	public String getUsetype() {
+		return usetype;
+	}
+
+	public void setUsetype(String usetype) {
+		this.usetype = usetype;
+	}
+
+	@Column(name = "version", precision = 9, scale = 0)
+	public Integer getVersion() {
+		return version;
+	}
+
+	public void setVersion(Integer version) {
+		this.version = version;
+	}
+
+
+	@Column(name = "BUILDINGID",length = 32)
+	public String getBuildingid() {
+		return buildingid;
+	}
+
+	public void setBuildingid(String buildingid) {
+		this.buildingid = buildingid;
+	}
+
+	@Column(name = "BUILDINGNAME")
+	public String getBuildingname() {
+		return buildingname;
+	}
+
+	public void setBuildingname(String buildingname) {
+		this.buildingname = buildingname;
+	}
+
+	@Column(name = "REGIONID",length = 32)
+	public String getRegionid() {
+		return regionid;
+	}
+
+	public void setRegionid(String regionid) {
+		this.regionid = regionid;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoorcardlstId.java b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoorcardlstId.java
new file mode 100644
index 0000000..27f35a6
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoorcardlstId.java
@@ -0,0 +1,92 @@
+package com.supwisdom.dlpay.mainservice.domain;
+
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+@Embeddable
+public class TDoorcardlstId implements java.io.Serializable {
+
+	// Fields
+
+	private Long listid;
+	private String factoryid;
+	private String deviceid;
+
+	// Constructors
+
+	/** default constructor */
+	public TDoorcardlstId() {
+	}
+
+	/** full constructor */
+	public TDoorcardlstId(Long listid, String factoryid, String deviceid) {
+		this.listid = listid;
+		this.factoryid = factoryid;
+		this.deviceid = deviceid;
+	}
+
+	// Property accessors
+
+	@Column(name = "LISTID", nullable = false, precision = 12, scale = 0)
+	public Long getListid() {
+		return this.listid;
+	}
+
+	public void setListid(Long listid) {
+		this.listid = listid;
+	}
+
+	@Column(name = "FACTORYID", nullable = false, length = 9)
+	public String getFactoryid() {
+		return this.factoryid;
+	}
+
+	public void setFactoryid(String factoryid) {
+		this.factoryid = factoryid;
+	}
+
+	@Column(name = "DEVICEID", nullable = false, length = 32)
+	public String getDeviceid() {
+		return this.deviceid;
+	}
+
+	public void setDeviceid(String deviceid) {
+		this.deviceid = deviceid;
+	}
+
+	public boolean equals(Object other) {
+		if ((this == other))
+			return true;
+		if ((other == null))
+			return false;
+		if (!(other instanceof TDoorcardlstId))
+			return false;
+		TDoorcardlstId castOther = (TDoorcardlstId) other;
+
+		return ((this.getListid() == castOther.getListid()) || (this
+				.getListid() != null && castOther.getListid() != null && this
+				.getListid().equals(castOther.getListid())))
+				&& ((this.getFactoryid() == castOther.getFactoryid()) || (this
+						.getFactoryid() != null
+						&& castOther.getFactoryid() != null && this
+						.getFactoryid().equals(castOther.getFactoryid())))
+				&& ((this.getDeviceid() == castOther.getDeviceid()) || (this
+						.getDeviceid() != null
+						&& castOther.getDeviceid() != null && this
+						.getDeviceid().equals(castOther.getDeviceid())));
+	}
+
+	public int hashCode() {
+		int result = 17;
+
+		result = 37 * result
+				+ (getListid() == null ? 0 : this.getListid().hashCode());
+		result = 37 * result
+				+ (getFactoryid() == null ? 0 : this.getFactoryid().hashCode());
+		result = 37 * result
+				+ (getDeviceid() == null ? 0 : this.getDeviceid().hashCode());
+		return result;
+	}
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoordev.java b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoordev.java
new file mode 100644
index 0000000..1e880c1
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoordev.java
@@ -0,0 +1,117 @@
+package com.supwisdom.dlpay.mainservice.domain;
+
+import javax.persistence.*;
+
+/**
+ * TDoordev entity. @author MyEclipse Persistence Tools
+ */
+@Entity
+@Table(name = "T_DOORDEV")
+public class TDoordev implements java.io.Serializable {
+
+    // Fields
+
+    private TDoordevId id;
+    private String doorname;
+    private String lastupdtime;
+    private String devdesc;
+    private String updatetime;
+    private String status;
+    private String usetype;
+
+    // Constructors
+
+    /**
+     * default constructor
+     */
+    public TDoordev() {
+    }
+
+    /**
+     * minimal constructor
+     */
+    public TDoordev(TDoordevId id) {
+        this.id = id;
+    }
+
+    /**
+     * full constructor
+     */
+    public TDoordev(TDoordevId id, String doorname, String lastupdtime,
+                    String devdesc, String updatetime, String status, String usetype) {
+        this.id = id;
+        this.doorname = doorname;
+        this.lastupdtime = lastupdtime;
+        this.devdesc = devdesc;
+        this.updatetime = updatetime;
+        this.status = status;
+        this.usetype = usetype;
+    }
+
+    // Property accessors
+    @EmbeddedId
+    @AttributeOverrides({
+            @AttributeOverride(name = "factoryid", column = @Column(name = "FACTORYID", nullable = false, length = 9)),
+            @AttributeOverride(name = "doorid", column = @Column(name = "DOORID", nullable = false, length = 32))})
+    public TDoordevId getId() {
+        return this.id;
+    }
+
+    public void setId(TDoordevId id) {
+        this.id = id;
+    }
+
+    @Column(name = "DOORNAME", length = 300)
+    public String getDoorname() {
+        return this.doorname;
+    }
+
+    public void setDoorname(String doorname) {
+        this.doorname = doorname;
+    }
+
+    @Column(name = "LASTUPDTIME", length = 14)
+    public String getLastupdtime() {
+        return this.lastupdtime;
+    }
+
+    public void setLastupdtime(String lastupdtime) {
+        this.lastupdtime = lastupdtime;
+    }
+
+    @Column(name = "DEVDESC", length = 300)
+    public String getDevdesc() {
+        return this.devdesc;
+    }
+
+    public void setDevdesc(String devdesc) {
+        this.devdesc = devdesc;
+    }
+
+    @Column(name = "UPDATETIME", length = 30)
+    public String getUpdatetime() {
+        return this.updatetime;
+    }
+
+    public void setUpdatetime(String updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    @Column(name = "STATUS", length = 1)
+    public String getStatus() {
+        return this.status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    @Column(name = "USETYPE", length = 6)
+    public String getUsetype() {
+        return this.usetype;
+    }
+
+    public void setUsetype(String usetype) {
+        this.usetype = usetype;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoordevId.java b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoordevId.java
new file mode 100644
index 0000000..8f68785
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoordevId.java
@@ -0,0 +1,76 @@
+package com.supwisdom.dlpay.mainservice.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * TDoordevId entity. @author MyEclipse Persistence Tools
+ */
+@Embeddable
+public class TDoordevId implements java.io.Serializable {
+
+	// Fields
+
+	private String factoryid;
+	private String doorid;
+
+	// Constructors
+
+	/** default constructor */
+	public TDoordevId() {
+	}
+
+	/** full constructor */
+	public TDoordevId(String factoryid, String doorid) {
+		this.factoryid = factoryid;
+		this.doorid = doorid;
+	}
+
+	// Property accessors
+
+	@Column(name = "FACTORYID", nullable = false, length = 9)
+	public String getFactoryid() {
+		return this.factoryid;
+	}
+
+	public void setFactoryid(String factoryid) {
+		this.factoryid = factoryid;
+	}
+
+	@Column(name = "DOORID", nullable = false, length = 32)
+	public String getDoorid() {
+		return this.doorid;
+	}
+
+	public void setDoorid(String doorid) {
+		this.doorid = doorid;
+	}
+
+	public boolean equals(Object other) {
+		if ((this == other))
+			return true;
+		if ((other == null))
+			return false;
+		if (!(other instanceof TDoordevId))
+			return false;
+		TDoordevId castOther = (TDoordevId) other;
+
+		return ((this.getFactoryid() == castOther.getFactoryid()) || (this
+				.getFactoryid() != null && castOther.getFactoryid() != null && this
+				.getFactoryid().equals(castOther.getFactoryid())))
+				&& ((this.getDoorid() == castOther.getDoorid()) || (this
+						.getDoorid() != null && castOther.getDoorid() != null && this
+						.getDoorid().equals(castOther.getDoorid())));
+	}
+
+	public int hashCode() {
+		int result = 17;
+
+		result = 37 * result
+				+ (getFactoryid() == null ? 0 : this.getFactoryid().hashCode());
+		result = 37 * result
+				+ (getDoorid() == null ? 0 : this.getDoorid().hashCode());
+		return result;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoordtl.java b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoordtl.java
new file mode 100644
index 0000000..38269ec
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoordtl.java
@@ -0,0 +1,237 @@
+package com.supwisdom.dlpay.mainservice.domain;
+
+import javax.persistence.*;
+
+/**
+ * TDoordtl entity. @author MyEclipse Persistence Tools
+ */
+@Entity
+@Table(name = "T_DOORDTL")
+public class TDoordtl implements java.io.Serializable {
+
+	// Fields
+
+	private TDoordtlId id;
+	private String transtime;
+	private String coldate;
+	private String coltime;
+	private Integer cardno;
+	private String cardphyid;
+	private String stuempno;
+	private Integer custid;
+	private String custname;
+	private String status;
+	private String dtldesc;
+	private String updatetime;
+	private String devtype;
+	private String regionid;
+	private String buildingid;
+	private String direction;
+	private String directiondesc;
+	private String posid;
+
+	// Constructors
+
+	/** default constructor */
+	public TDoordtl() {
+	}
+
+	/** minimal constructor */
+	public TDoordtl(TDoordtlId id) {
+		this.id = id;
+	}
+
+	public TDoordtl(TDoordtlId id, String transtime, String coldate, String coltime, Integer cardno, String cardphyid, String stuempno, Integer custid, String custname, String status, String dtldesc, String updatetime, String devtype, String regionid, String buildingid, String direction, String directiondesc, String posid) {
+		this.id = id;
+		this.transtime = transtime;
+		this.coldate = coldate;
+		this.coltime = coltime;
+		this.cardno = cardno;
+		this.cardphyid = cardphyid;
+		this.stuempno = stuempno;
+		this.custid = custid;
+		this.custname = custname;
+		this.status = status;
+		this.dtldesc = dtldesc;
+		this.updatetime = updatetime;
+		this.devtype = devtype;
+		this.regionid = regionid;
+		this.buildingid = buildingid;
+		this.direction = direction;
+		this.directiondesc = directiondesc;
+		this.posid = posid;
+	}
+
+	/** full constructor */
+
+
+	// Property accessors
+	@EmbeddedId
+	@AttributeOverrides({
+			@AttributeOverride(name = "transdate", column = @Column(name = "TRANSDATE", nullable = false, length = 8)),
+			@AttributeOverride(name = "factoryid", column = @Column(name = "FACTORYID", nullable = false, length = 8)),
+			@AttributeOverride(name = "doorid", column = @Column(name = "DOORID", nullable = false, length = 32)),
+			@AttributeOverride(name = "doorseqno", column = @Column(name = "DOORSEQNO", nullable = false, length = 32)) })
+	public TDoordtlId getId() {
+		return this.id;
+	}
+
+	public void setId(TDoordtlId id) {
+		this.id = id;
+	}
+
+	@Column(name = "TRANSTIME", length = 6)
+	public String getTranstime() {
+		return this.transtime;
+	}
+
+	public void setTranstime(String transtime) {
+		this.transtime = transtime;
+	}
+
+	@Column(name = "COLDATE", length = 8)
+	public String getColdate() {
+		return this.coldate;
+	}
+
+	public void setColdate(String coldate) {
+		this.coldate = coldate;
+	}
+
+	@Column(name = "COLTIME", length = 6)
+	public String getColtime() {
+		return this.coltime;
+	}
+
+	public void setColtime(String coltime) {
+		this.coltime = coltime;
+	}
+
+	@Column(name = "CARDNO", precision = 9, scale = 0)
+	public Integer getCardno() {
+		return this.cardno;
+	}
+
+	public void setCardno(Integer cardno) {
+		this.cardno = cardno;
+	}
+
+	@Column(name = "CARDPHYID", length = 16)
+	public String getCardphyid() {
+		return this.cardphyid;
+	}
+
+	public void setCardphyid(String cardphyid) {
+		this.cardphyid = cardphyid;
+	}
+
+	@Column(name = "STUEMPNO", length = 24)
+	public String getStuempno() {
+		return this.stuempno;
+	}
+
+	public void setStuempno(String stuempno) {
+		this.stuempno = stuempno;
+	}
+
+	@Column(name = "CUSTID", precision = 9, scale = 0)
+	public Integer getCustid() {
+		return this.custid;
+	}
+
+	public void setCustid(Integer custid) {
+		this.custid = custid;
+	}
+
+	@Column(name = "CUSTNAME", length = 60)
+	public String getCustname() {
+		return this.custname;
+	}
+
+	public void setCustname(String custname) {
+		this.custname = custname;
+	}
+
+	@Column(name = "STATUS", length = 8)
+	public String getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	@Column(name = "DTLDESC", length = 300)
+	public String getDtldesc() {
+		return this.dtldesc;
+	}
+
+	public void setDtldesc(String dtldesc) {
+		this.dtldesc = dtldesc;
+	}
+
+	@Column(name = "UPDATETIME", length = 30)
+	public String getUpdatetime() {
+		return this.updatetime;
+	}
+
+	public void setUpdatetime(String updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	@Column(name = "DEVTYPE", length = 30)
+	public String getDevtype() {
+		return this.devtype;
+	}
+
+	public void setDevtype(String devtype) {
+		this.devtype = devtype;
+	}
+
+	@Column(name="REGIONID",length = 32)
+	public String getRegionid() {
+		return regionid;
+	}
+
+	public void setRegionid(String regionid) {
+		this.regionid = regionid;
+	}
+
+	@Column(name = "BUILDINGID",length = 32)
+	public String getBuildingid() {
+		return buildingid;
+	}
+
+	public void setBuildingid(String buildingid) {
+		this.buildingid = buildingid;
+	}
+
+	@Column(name = "DIRECTION",length = 8)
+	public String getDirection() {
+		return direction;
+	}
+
+	public void setDirection(String direction) {
+		this.direction = direction;
+	}
+
+	@Column(name = "DIRECTIONDESC")
+	public String getDirectiondesc() {
+		return directiondesc;
+	}
+
+	public void setDirectiondesc(String directiondesc) {
+		this.directiondesc = directiondesc;
+	}
+
+	@Column(name = "POSID", length = 100)
+
+	public String getPosid() {
+		return this.posid;
+	}
+
+	public void setPosid(String posid) {
+		this.posid = posid;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoordtlId.java b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoordtlId.java
new file mode 100644
index 0000000..72677ab
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoordtlId.java
@@ -0,0 +1,111 @@
+package com.supwisdom.dlpay.mainservice.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * TDoordtlId entity. @author MyEclipse Persistence Tools
+ */
+@Embeddable
+public class TDoordtlId implements java.io.Serializable {
+
+	// Fields
+
+	private String transdate;
+	private String factoryid;
+	private String doorid;
+	private String doorseqno;
+
+	// Constructors
+
+	/** default constructor */
+	public TDoordtlId() {
+	}
+
+	/** full constructor */
+	public TDoordtlId(String transdate, String factoryid, String doorid,
+                      String doorseqno) {
+		this.transdate = transdate;
+		this.factoryid = factoryid;
+		this.doorid = doorid;
+		this.doorseqno = doorseqno;
+	}
+
+	// Property accessors
+
+	@Column(name = "TRANSDATE", nullable = false, length = 8)
+	public String getTransdate() {
+		return this.transdate;
+	}
+
+	public void setTransdate(String transdate) {
+		this.transdate = transdate;
+	}
+
+	@Column(name = "FACTORYID", nullable = false, length = 8)
+	public String getFactoryid() {
+		return this.factoryid;
+	}
+
+	public void setFactoryid(String factoryid) {
+		this.factoryid = factoryid;
+	}
+
+	@Column(name = "DOORID", nullable = false, length = 32)
+	public String getDoorid() {
+		return this.doorid;
+	}
+
+	public void setDoorid(String doorid) {
+		this.doorid = doorid;
+	}
+
+	@Column(name = "DOORSEQNO", nullable = false, length = 32)
+	public String getDoorseqno() {
+		return this.doorseqno;
+	}
+
+	public void setDoorseqno(String doorseqno) {
+		this.doorseqno = doorseqno;
+	}
+
+	public boolean equals(Object other) {
+		if ((this == other))
+			return true;
+		if ((other == null))
+			return false;
+		if (!(other instanceof TDoordtlId))
+			return false;
+		TDoordtlId castOther = (TDoordtlId) other;
+
+		return ((this.getTransdate() == castOther.getTransdate()) || (this
+				.getTransdate() != null && castOther.getTransdate() != null && this
+				.getTransdate().equals(castOther.getTransdate())))
+				&& ((this.getFactoryid() == castOther.getFactoryid()) || (this
+						.getFactoryid() != null
+						&& castOther.getFactoryid() != null && this
+						.getFactoryid().equals(castOther.getFactoryid())))
+				&& ((this.getDoorid() == castOther.getDoorid()) || (this
+						.getDoorid() != null && castOther.getDoorid() != null && this
+						.getDoorid().equals(castOther.getDoorid())))
+				&& ((this.getDoorseqno() == castOther.getDoorseqno()) || (this
+						.getDoorseqno() != null
+						&& castOther.getDoorseqno() != null && this
+						.getDoorseqno().equals(castOther.getDoorseqno())));
+	}
+
+	public int hashCode() {
+		int result = 17;
+
+		result = 37 * result
+				+ (getTransdate() == null ? 0 : this.getTransdate().hashCode());
+		result = 37 * result
+				+ (getFactoryid() == null ? 0 : this.getFactoryid().hashCode());
+		result = 37 * result
+				+ (getDoorid() == null ? 0 : this.getDoorid().hashCode());
+		result = 37 * result
+				+ (getDoorseqno() == null ? 0 : this.getDoorseqno().hashCode());
+		return result;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/domain/TRtnresult.java b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TRtnresult.java
new file mode 100644
index 0000000..272765f
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TRtnresult.java
@@ -0,0 +1,146 @@
+package com.supwisdom.dlpay.mainservice.domain;
+
+import javax.persistence.*;
+
+/**
+ * TRtnresult entity. @author MyEclipse Persistence Tools
+ */
+@Entity
+@Table(name = "T_RTNRESULT")
+public class TRtnresult implements java.io.Serializable {
+
+	// Fields
+
+	private TRtnresultId id;
+	private String factoryid;
+	private String cardphyid;
+	private String operflag;
+	private String retcode;
+	private String retmsg;
+	private String updatetime;
+	private Integer custid;
+	private Long cardno;
+	private String stuempno;
+
+	// Constructors
+
+	/** default constructor */
+	public TRtnresult() {
+	}
+
+	/** minimal constructor */
+	public TRtnresult(TRtnresultId id) {
+		this.id = id;
+	}
+
+	/** full constructor */
+	public TRtnresult(TRtnresultId id, String factoryid, String cardphyid,
+                      String operflag, String retcode, String retmsg, String updatetime,
+                      Integer custid, Long cardno, String stuempno) {
+		this.id = id;
+		this.factoryid = factoryid;
+		this.cardphyid = cardphyid;
+		this.operflag = operflag;
+		this.retcode = retcode;
+		this.retmsg = retmsg;
+		this.updatetime = updatetime;
+		this.custid = custid;
+		this.cardno = cardno;
+		this.stuempno = stuempno;
+	}
+
+	// Property accessors
+	@EmbeddedId
+	@AttributeOverrides({
+			@AttributeOverride(name = "listid", column = @Column(name = "LISTID", nullable = false, precision = 12, scale = 0)),
+			@AttributeOverride(name = "deviceid", column = @Column(name = "DEVICEID", nullable = false, length = 32)) })
+	public TRtnresultId getId() {
+		return this.id;
+	}
+
+	public void setId(TRtnresultId id) {
+		this.id = id;
+	}
+
+	@Column(name = "FACTORYID", length = 9)
+	public String getFactoryid() {
+		return this.factoryid;
+	}
+
+	public void setFactoryid(String factoryid) {
+		this.factoryid = factoryid;
+	}
+
+	@Column(name = "CARDPHYID", length = 16)
+	public String getCardphyid() {
+		return this.cardphyid;
+	}
+
+	public void setCardphyid(String cardphyid) {
+		this.cardphyid = cardphyid;
+	}
+
+	@Column(name = "OPERFLAG", length = 1)
+	public String getOperflag() {
+		return this.operflag;
+	}
+
+	public void setOperflag(String operflag) {
+		this.operflag = operflag;
+	}
+
+	@Column(name = "RETCODE", length = 1)
+	public String getRetcode() {
+		return this.retcode;
+	}
+
+	public void setRetcode(String retcode) {
+		this.retcode = retcode;
+	}
+
+	@Column(name = "RETMSG", length = 300)
+	public String getRetmsg() {
+		return this.retmsg;
+	}
+
+	public void setRetmsg(String retmsg) {
+		this.retmsg = retmsg;
+	}
+
+	@Column(name = "UPDATETIME", length = 30)
+	public String getUpdatetime() {
+		return this.updatetime;
+	}
+
+	public void setUpdatetime(String updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	@Column(name = "CUSTID", precision = 9, scale = 0)
+	public Integer getCustid() {
+		return this.custid;
+	}
+
+	public void setCustid(Integer custid) {
+		this.custid = custid;
+	}
+
+	@Column(name = "CARDNO", precision = 12, scale = 0)
+	public Long getCardno() {
+		return this.cardno;
+	}
+
+	public void setCardno(Long cardno) {
+		this.cardno = cardno;
+	}
+
+	@Column(name = "STUEMPNO", length = 24)
+	public String getStuempno() {
+		return this.stuempno;
+	}
+
+	public void setStuempno(String stuempno) {
+		this.stuempno = stuempno;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/domain/TRtnresultId.java b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TRtnresultId.java
new file mode 100644
index 0000000..57667ab
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TRtnresultId.java
@@ -0,0 +1,77 @@
+package com.supwisdom.dlpay.mainservice.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+
+/**
+ * TRtnresultId entity. @author MyEclipse Persistence Tools
+ */
+@Embeddable
+public class TRtnresultId implements java.io.Serializable {
+
+	// Fields
+
+	private Long listid;
+	private String deviceid;
+
+	// Constructors
+
+	/** default constructor */
+	public TRtnresultId() {
+	}
+
+	/** full constructor */
+	public TRtnresultId(Long listid, String deviceid) {
+		this.listid = listid;
+		this.deviceid = deviceid;
+	}
+
+	// Property accessors
+
+	@Column(name = "LISTID", nullable = false, precision = 12, scale = 0)
+	public Long getListid() {
+		return this.listid;
+	}
+
+	public void setListid(Long listid) {
+		this.listid = listid;
+	}
+
+	@Column(name = "DEVICEID", nullable = false, length = 32)
+	public String getDeviceid() {
+		return this.deviceid;
+	}
+
+	public void setDeviceid(String deviceid) {
+		this.deviceid = deviceid;
+	}
+
+	public boolean equals(Object other) {
+		if ((this == other))
+			return true;
+		if ((other == null))
+			return false;
+		if (!(other instanceof TRtnresultId))
+			return false;
+		TRtnresultId castOther = (TRtnresultId) other;
+
+		return ((this.getListid() == castOther.getListid()) || (this
+				.getListid() != null && castOther.getListid() != null && this
+				.getListid().equals(castOther.getListid())))
+				&& ((this.getDeviceid() == castOther.getDeviceid()) || (this
+						.getDeviceid() != null
+						&& castOther.getDeviceid() != null && this
+						.getDeviceid().equals(castOther.getDeviceid())));
+	}
+
+	public int hashCode() {
+		int result = 17;
+
+		result = 37 * result
+				+ (getListid() == null ? 0 : this.getListid().hashCode());
+		result = 37 * result
+				+ (getDeviceid() == null ? 0 : this.getDeviceid().hashCode());
+		return result;
+	}
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java b/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java
index 3cfbe05..f339ef6 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java
@@ -284,7 +284,7 @@
                 devAdd.setBuildingname(buiding.getBuildingname());
                 devAdd.setRegionid(postData.getRegionid());
                 devAdd.setOperflag("A");
-                devAdd.setSyncflag("N");
+                devAdd.setSyncflag("S");
                 devAdd.setUpdtime(DateUtil.getNow());
                 devAdd.setSynctime(DateUtil.getNow());
                 devAdd.setUsetype(postData.getUsetype());
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java
index e2b7f1c..3699289 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java
@@ -300,7 +300,8 @@
     @Transactional
     @Override
     public TNcDevice getDevInfoByDevid(int devid) {
-        String sql = "select t.deviceid,t.devno,t.devname,t.fdevid,t.devtype," +
+        String sql = "select t.deviceid,t.devno,t.devname,t.fdevid,t.devtype,t.ip," +
+                "t.operflag,t.syncflag,t.synctime,t.updtime,t.buildingid,t.buildingname,t.regionid," +
                 " t.usetype,dev.devphyid from t_nc_device t left join t_nc_device" +
                 " dev on t.fdevid=dev.deviceid where t.deviceid=?1";
         Query query = entityManager.createNativeQuery(sql, TNcDevice.class);
@@ -317,7 +318,7 @@
     public boolean delDevById(int devid) {
         boolean flag=false;
         try {
-            String sql = "delete T_Nc_Device where deviceid=?1";
+            String sql = "delete from T_Nc_Device where deviceid=?1";
             Query query = entityManager.createNativeQuery(sql);
             query.setParameter(1, devid);
             query.executeUpdate();
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java b/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
index 3d063fb..dfec0c4 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
@@ -285,12 +285,12 @@
         try{
             boolean flag = managerService.deleteOperatorById(operid);
             if (flag==false){
-                message="删除区域失败!";
+                message="删除操作员失败!";
             }
 
         }catch (Exception e){
             e.printStackTrace();
-            message="删除区域出错!";
+            message="删除操作员出错!";
         }
         map.put("message", message);
         return map;
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/impl/BuildingDaoImpl.java b/src/main/java/com/supwisdom/dlpay/system/dao/impl/BuildingDaoImpl.java
index ded91f9..9a75308 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/impl/BuildingDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/impl/BuildingDaoImpl.java
@@ -174,7 +174,7 @@
     public boolean updateBuildingFlag(String buildingid) {
         boolean flag = false;
         try {
-            String sql = "update t_building set flag = 'D' where buildingid = ?1 ";
+            String sql = "update t_building set flag = 'D',UPDTIME=to_char(current_timestamp, 'YYYYMMDDHH24MISS') where buildingid = ?1 ";
             Query query = entityManager.createNativeQuery(sql);
             query.setParameter(1, buildingid);
             query.executeUpdate();
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/impl/ManagerDaoImpl.java b/src/main/java/com/supwisdom/dlpay/system/dao/impl/ManagerDaoImpl.java
index 5c2b501..feb8578 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/impl/ManagerDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/impl/ManagerDaoImpl.java
@@ -99,14 +99,15 @@
     public boolean updateOperatorStatusById(String operid) {
         boolean flag = false;
         try {
-            String sql = "update tb_operator set status = 'closed' where operid = :operid";
+            String sql = "update tb_operator set status = 'closed' where operid = ?1";
             Query query = entityManager.createNativeQuery(sql);
+            query.setParameter(1, operid);
             query.executeUpdate();
             flag=true;
         }catch (Exception e){
             e.printStackTrace();
         }
-        return false;
+        return flag;
     }
 
     @Transactional
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/impl/RegionDaoImpl.java b/src/main/java/com/supwisdom/dlpay/system/dao/impl/RegionDaoImpl.java
index 05ba7a9..0c6c4b3 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/impl/RegionDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/impl/RegionDaoImpl.java
@@ -108,7 +108,7 @@
         if (!StringUtil.isEmpty(regionname)){
             sql += " and tmp.regionname like :regionname";
         }
-        sql += ") order by level";
+        sql += ") ";
         Query query = entityManager.createNativeQuery(sql);
         query.setParameter("regionid" , regionid);
         if(!StringUtil.isEmpty(regionname)){
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 86d2885..9924c65 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -3,6 +3,8 @@
 spring.jpa.show-sql=true
 spring.datasource.hikari.connection-timeout=60000
 spring.datasource.hikari.maximum-pool-size=5
+spring.datasource.continue-on-error=true
+spring.datasource.initialization-mode=always
 spring.jpa.hibernate.ddl-auto=update
 
 spring.flyway.locations=classpath:db/migration
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
new file mode 100644
index 0000000..1f115ef
--- /dev/null
+++ b/src/main/resources/data.sql
@@ -0,0 +1,131 @@
+-- ----------------------------
+-- Records of t_dictionary(dicttype,dicttypename,dictval,dictcaption)
+-- ----------------------------
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (4, '厂商名称', 'XKP', '新开普');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (5, '操作员状态', '0', '正常');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (5, '操作员状态', '1', '注销');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (2, '操作标志', 'A', '增加');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (2, '操作标志', 'U', '换卡');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (2, '操作标志', 'D', '删除');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (2, '操作标志', 'L', '挂失');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (2, '操作标志', 'C', '注销');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (1, 'operator', 'S', '系统管理员');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (3, '同步状态', '0', '未同步');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (3, '同步状态', '1', '同步');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (8, '设备类型', 'C', '控制器');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (8, '设备类型', 'R', '读头');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (9, '平台IP,发送请求用', 'http://localhost:8080/door', '平台IP地址');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (14, '正常刷卡状态', '17', '正常刷卡状态');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (15, '检测无流水设备时间段', '3', '单位:天');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (16, '设备使用类别', 'MJ', '门禁');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (17, '刷卡不通过重下名单', '1', '1打开,0关闭');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (20, '流水状态', '21', '复位');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (20, '流水状态', '18', '企图开门');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (20, '流水状态', '17', '正常开门');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (20, '流水状态', '20', '按键开门');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (20, '流水状态', '19', '异常开门');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (22, '海康平台地址', 'IP', 'http://172.28.201.105');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (1, 'operator', 'H', '区域管理员');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (1, 'operator', 'P', '超级管理员');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (6, '区域级别', '1', '一级');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (6, '区域级别', '2', '二级');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (6, '区域级别', '3', '三级');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (1, 'operator', 'L', '物业管理员');
+INSERT INTO t_dictionary(dicttype,dicttypename,dictval,dictcaption) VALUES (13, '抓拍服务地址', 'http://172.28.43.158:8088/door', '抓拍服务地址');
+
+-- ----------------------------
+-- Records of t_keys
+-- ----------------------------
+INSERT INTO "t_keys"(factoryid,keyval,ip,factoryname,queueflag) VALUES ('XKP', '618441D41CCE47DBCFD9BED6E5FF64E6', 'http://localhost:8099/door', '新开普', '10000000');
+
+-- ----------------------------
+-- Records of t_timedeventqueue
+-- ----------------------------
+INSERT INTO t_timedeventqueue(timedeventqueue_id,event_type,event_name,queue_time,scheduled_time,recurring_event,object_id,crontrigger,analysistime,removeable,isenable) VALUES (1, 1, '自动分析任务', NULL, NULL, 2, -1, '0 0/2 * * * ?', '20190221170800', 1, 0);
+INSERT INTO t_timedeventqueue(timedeventqueue_id,event_type,event_name,queue_time,scheduled_time,recurring_event,object_id,crontrigger,analysistime,removeable,isenable) VALUES (2, 2, '名单删除任务', NULL, NULL, 2, -1, '0 0/1 * * * ?', '20190221170902', 1, 0);
+INSERT INTO t_timedeventqueue(timedeventqueue_id,event_type,event_name,queue_time,scheduled_time,recurring_event,object_id,crontrigger,analysistime,removeable,isenable) VALUES (3, 3, '换卡同步任务', NULL, NULL, 2, -1, '0/50 * * * * ?', '20190221170951', 1, 0);
+INSERT INTO t_timedeventqueue(timedeventqueue_id,event_type,event_name,queue_time,scheduled_time,recurring_event,object_id,crontrigger,analysistime,removeable,isenable) VALUES (4, 4, '销户同步任务', NULL, NULL, 2, -1, '0/90 * * * * ?', '20190221170901', 1, 0);
+INSERT INTO t_timedeventqueue(timedeventqueue_id,event_type,event_name,queue_time,scheduled_time,recurring_event,object_id,crontrigger,analysistime,removeable,isenable) VALUES (6, 6, '发卡分析任务', NULL, NULL, 2, -1, '0 0/4 * * * ?', '20190221100930', 1, 1);
+INSERT INTO t_timedeventqueue(timedeventqueue_id,event_type,event_name,queue_time,scheduled_time,recurring_event,object_id,crontrigger,analysistime,removeable,isenable) VALUES (9, 9, '挂失卡任务', NULL, NULL, 2, -1, '0/20 * * * * ?', '20190221170940', 1, 0);
+INSERT INTO t_timedeventqueue(timedeventqueue_id,event_type,event_name,queue_time,scheduled_time,recurring_event,object_id,crontrigger,analysistime,removeable,isenable) VALUES (10, 10, '解挂卡任务', NULL, NULL, 2, -1, '0/40 * * * * ?', '20190221170940', 1, 0);
+INSERT INTO t_timedeventqueue(timedeventqueue_id,event_type,event_name,queue_time,scheduled_time,recurring_event,object_id,crontrigger,analysistime,removeable,isenable) VALUES (11, 11, '新开普终端信息采集', NULL, NULL, 2, -1, '0 0/1 * * * ?', '20190516171300', 1, 1);
+INSERT INTO t_timedeventqueue(timedeventqueue_id,event_type,event_name,queue_time,scheduled_time,recurring_event,object_id,crontrigger,analysistime,removeable,isenable) VALUES (12, 12, '同步客户信息到缓存', NULL, NULL, 2, -1, '0 0 0/13 * * ?', '20190516170001', 1, 1);
+INSERT INTO t_timedeventqueue(timedeventqueue_id,event_type,event_name,queue_time,scheduled_time,recurring_event,object_id,crontrigger,analysistime,removeable,isenable) VALUES (0, 0, '自动分析cardver表', NULL, NULL, 2, -1, '0 0/2 * * * ?', '20190606152801', 1, 1);
+INSERT INTO t_timedeventqueue(timedeventqueue_id,event_type,event_name,queue_time,scheduled_time,recurring_event,object_id,crontrigger,analysistime,removeable,isenable) VALUES (7, 7, '新开普设备时间段同步', NULL, NULL, 2, -1, '0 0/2 * * * ?', '20190606152801', 1, 1);
+INSERT INTO t_timedeventqueue(timedeventqueue_id,event_type,event_name,queue_time,scheduled_time,recurring_event,object_id,crontrigger,analysistime,removeable,isenable) VALUES (5, 5, '下发卡名单', NULL, NULL, 2, -1, '0/50 * * * * ?', '20190606152900', 1, 1);
+INSERT INTO t_timedeventqueue(timedeventqueue_id,event_type,event_name,queue_time,scheduled_time,recurring_event,object_id,crontrigger,analysistime,removeable,isenable) VALUES (8, 8, '新开普信息返回平台', NULL, NULL, 2, -1, '0/30 * * * * ?', '20190606152901', 1, 1);
+
+-- ----------------------------
+-- Records of tb_apiclient
+-- ----------------------------
+INSERT INTO "tb_apiclient"(appid,roles,secret,status) VALUES ('100001', 'ROLE_THIRD_ADMIN', 'oUw2NmA09ficiVWD4TUQLDOkPyzQa3VzbjjsW0B2qTk=', 'normal');
+
+-- ----------------------------
+-- Records of tb_oper_role
+-- ----------------------------
+INSERT INTO tb_oper_role(id,operid,roleid) VALUES ('1', '0000', 'abcdefghijklmnopqrstuvwxyz012345');
+
+-- ----------------------------
+-- Records of tb_function
+-- ----------------------------
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (1, NULL, 0, NULL, 'layui-icon-home', '#', '主页', 1, -1);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (2, NULL, 1, NULL, 'layui-icon-home', '/home/console', '控制台', 2, 1);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (3, NULL, 0, NULL, 'layui-icon-set', '#', '系统中心', 10, -1);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (5, NULL, 1, NULL, 'layui-icon-set', '/role/index', '角色管理', 12, 3);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (7, NULL, 1, NULL, 'layui-icon-engine', '/ncmgr/devindex', '设备管理', 21, 6);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (8, NULL, 1, NULL, 'layui-icon-engine', '/ncmgr/timeindex', '时间段管理', 22, 6);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (9, NULL, 1, NULL, 'layui-icon-engine', '/ncmgr/timegrpindex', '时间组管理', 23, 6);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (10, NULL, 1, NULL, 'layui-icon-engine', '/ncmgr/weektimeindex', '时间周管理', 24, 6);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (11, NULL, 1, NULL, 'layui-icon-engine', '/ncmgr/devweek', '设备时间周管理', 25, 6);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (12, NULL, 0, NULL, 'layui-icon-app', '#', '集控中心', 30, -1);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (13, NULL, 1, NULL, 'layui-icon-app', '/system/dictionary', '数据字典管理', 31, 12);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (14, NULL, 1, NULL, 'layui-icon-app', '/system/queue', '任务调度管理', 32, 12);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (6, NULL, 0, NULL, 'layui-icon-engine', '#', '门控中心', 20, -1);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (15, NULL, 0, NULL, 'layui-icon-username', '#', '人员中心', 40, -1);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (18, NULL, 0, NULL, 'layui-icon-chart-screen', '#', '数据中心', 50, -1);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (20, NULL, 1, NULL, 'layui-icon-chart-screen', '/query/tdoorstream', '流水信息查询', 52, 18);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (19, NULL, 1, NULL, 'layui-icon-chart-screen', '/doorlistMgr/searchDoorlist', '设备名单查询', 51, 18);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (16, NULL, 1, NULL, 'layui-icon-username', '/doorlistMgr/downDoorList', '下发门禁名单', 41, 15);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (17, NULL, 1, NULL, 'layui-icon-username', '/doorlistMgr/deleteDoorList', '删除门禁名单', 42, 15);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (21, NULL, 1, NULL, 'layui-icon-username', '/function/index', '功能管理', 13, 3);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (22, NULL, 1, NULL, 'layui-icon-app', '/system/regionindex', '区域管理', 33, 12);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (23, NULL, 1, NULL, 'layui-icon-app', '/system/buildingindex', '楼栋管理', 34, 12);
+INSERT INTO tb_function(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (24, NULL, 1, NULL, 'layui-icon-set', '/operator/operatorindex', '操作员维护', 13, 3);
+
+-- ----------------------------
+-- Records of tb_operator
+-- ----------------------------
+INSERT INTO tb_operator(operid,closedate,email,mobile,opendate,opercode,opername,operpwd,opertype,sex,status,foperid,regionid,realname) VALUES ('0000', '20500101', NULL, NULL, '20190101', 'system', '系统管理员', '$2a$10$Ex9xp11.vCaD8D0a7ahiUOKqDij1TcCUBwRAmrqXeDvAkmzLibn4.', 'S', NULL, 'normal', NULL, NULL, '系统');
+
+-- ----------------------------
+-- Records of tb_region
+-- ----------------------------
+INSERT INTO tb_region(regionid,address,level,parentid,regionname,remarks,parentname,flag) VALUES ('0', NULL, 0, '-1', '根区域', NULL, NULL, 1);
+
+-- ----------------------------
+-- Records of tb_role
+-- ----------------------------
+INSERT INTO tb_role(roleid,createtime,editflag,lastsaved,rolecode,roledesc,rolename) VALUES ('abcdefghijklmnopqrstuvwxyz012345', '20190101000000', 0, NULL, 'ROLE_ADMIN', '超级管理员', '超级管理员');
+
+-- ----------------------------
+-- Records of tb_role_function
+-- ----------------------------
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23800000', 1, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23840001', 2, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23850002', 3, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23850006', 24, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23860007', 12, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23860008', 13, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee2386000a', 22, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee2386000b', 23, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee2387000c', 6, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee2387000d', 7, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee2387000e', 8, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee2387000f', 9, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23880010', 10, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23880011', 11, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23880012', 15, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23880015', 18, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890016', 20, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23890017', 19, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
+INSERT INTO tb_role_function(id,functionid,permissions,roleid) VALUES ('297eec826b97ecf8016b97ee23850004', 5, NULL, 'abcdefghijklmnopqrstuvwxyz012345');
\ No newline at end of file
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html
index ab98769..ef30db3 100755
--- a/src/main/resources/templates/index.html
+++ b/src/main/resources/templates/index.html
@@ -78,7 +78,7 @@
                     <dd ay-unselect><a lay-href="/operator/userinfor">基本资料</a></dd>
                     <dd ay-unselect><a lay-href="/operator/setpwd">修改密码</a></dd>
                     <hr>
-                    <dd layadmin-event="logout" style="text-align: center;" ><a href="/logout">退出</a></dd>
+                    <dd layadmin-event="logout" style="text-align: center;" ><a href="/door/logout">退出</a></dd>
                 </dl>
             </li>
             <li class="layui-nav-item" lay-unselect>
diff --git a/src/main/resources/templates/system/dictionary.html b/src/main/resources/templates/system/dictionary.html
index 22c6740..4ddfb43 100644
--- a/src/main/resources/templates/system/dictionary.html
+++ b/src/main/resources/templates/system/dictionary.html
@@ -264,7 +264,7 @@
         $.ajax({
             type: "get",
             dataType: "json",
-            url: encodeURI("[[@{/system/saveDictionary?&dicttype=}]]"+dict.dicttype
+            url: encodeURI("[[@{/system/saveDictionary?dicttype=}]]"+dict.dicttype
                 +"&dicttypename="+dict.dicttypename+"&dictval="+dict.dictval+"&dictcaption="+dict.dictcaption),
 
             success: function (data) {
@@ -287,7 +287,7 @@
         $.ajax({
             type: "get",
             dataType: "json",
-            url: encodeURI("[[@{/system/updateDictionary?&dicttype=}]]"+dict.dicttype
+            url: encodeURI("[[@{/system/updateDictionary?dicttype=}]]"+dict.dicttype
                 +"&dicttypename="+dict.dicttypename+"&dictval="+dict.dictval+"&dictcaption="+dict.dictcaption
                 +"&oriengaltype="+oriengal[0]+"&oriengalval="+oriengal[1]),
 
@@ -312,7 +312,7 @@
         $.ajax({
             type: "get",
             dataType: "json",
-            url: encodeURI("[[@{/system/saveDictionary?&dicttype=}]]"+dict.dicttype
+            url: encodeURI("[[@{/system/saveDictionary?dicttype=}]]"+dict.dicttype
                 +"&dicttypename="+dict.dicttypename+"&dictval="+dict.dictval+"&dictcaption="+dict.dictcaption),
 
             success: function (data) {
diff --git a/src/main/resources/templates/system/operator.html b/src/main/resources/templates/system/operator.html
index def792d..04c3623 100644
--- a/src/main/resources/templates/system/operator.html
+++ b/src/main/resources/templates/system/operator.html
@@ -436,7 +436,6 @@
                 var _that = this;
                 var token=$("meta[name='_csrf_token']").attr("value");
                 var operid = this.operBuildingDiaform.operid;
-                alert(operid)
                 $.ajax({
                     type: "POST",
                     url: "[[@{/system/saveOperBuildingBind?operid=}]]" + operid,
diff --git a/src/test/kotlin/com/supwisdom/dlpay/DlpayApplicationTests.kt b/src/test/kotlin/com/supwisdom/dlpay/DlpayApplicationTests.kt
deleted file mode 100644
index c8b875f..0000000
--- a/src/test/kotlin/com/supwisdom/dlpay/DlpayApplicationTests.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.supwisdom.dlpay
-
-import org.junit.runner.RunWith
-import org.springframework.boot.test.context.SpringBootTest
-import org.springframework.test.context.junit4.SpringRunner
-
-@RunWith(SpringRunner::class)
-@SpringBootTest
-abstract class DlpayApplicationTests{
-
-}
diff --git a/src/test/kotlin/com/supwisdom/dlpay/MvcBaseTest.kt b/src/test/kotlin/com/supwisdom/dlpay/MvcBaseTest.kt
deleted file mode 100644
index 62a56a3..0000000
--- a/src/test/kotlin/com/supwisdom/dlpay/MvcBaseTest.kt
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.supwisdom.dlpay
-
-import com.google.gson.Gson
-import org.junit.runner.RunWith
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc
-import org.springframework.boot.test.context.SpringBootTest
-import org.springframework.test.context.junit4.SpringRunner
-import org.springframework.test.web.servlet.MockMvc
-
-/**
- * mvc 基础测试类
- * 放置基础方法，如认证信息等
- */
-@RunWith(SpringRunner::class)
-@SpringBootTest
-@AutoConfigureMockMvc
-abstract class MvcBaseTest{
-    @Autowired
-    protected lateinit var mvc: MockMvc
-    val gson = Gson()
-}
\ No newline at end of file
diff --git a/src/test/kotlin/com/supwisdom/dlpay/controller/ApiControllerTest.kt b/src/test/kotlin/com/supwisdom/dlpay/controller/ApiControllerTest.kt
deleted file mode 100644
index 0899c9a..0000000
--- a/src/test/kotlin/com/supwisdom/dlpay/controller/ApiControllerTest.kt
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.supwisdom.dlpay.controller
-
-import com.supwisdom.dlpay.MvcBaseTest
-import org.junit.Test
-import org.springframework.http.MediaType
-import org.springframework.test.web.servlet.request.MockMvcRequestBuilders
-import org.springframework.test.web.servlet.result.MockMvcResultHandlers
-import org.springframework.test.web.servlet.result.MockMvcResultMatchers
-
-/**
- * Created by shuwei on 2019/4/16.
- */
-class ApiControllerTest : MvcBaseTest() {
-    @Test
-    fun testYktPay() {
-        //TODO prepare data
-        val stuempno="10000097"
-        val ret = mvc.perform(MockMvcRequestBuilders.post("/ykt/payinit").content("")
-                .contentType(MediaType.APPLICATION_JSON))
-                .andExpect(MockMvcResultMatchers.status().isOk)
-                .andDo(MockMvcResultHandlers.print())
-                .andReturn()
-    }
-}
\ No newline at end of file
diff --git a/src/test/kotlin/com/supwisdom/dlpay/controller/security_controller_test.kt b/src/test/kotlin/com/supwisdom/dlpay/controller/security_controller_test.kt
deleted file mode 100644
index 1fc45dd..0000000
--- a/src/test/kotlin/com/supwisdom/dlpay/controller/security_controller_test.kt
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.supwisdom.dlpay.controller
-
-import com.supwisdom.dlpay.MvcBaseTest
-import com.supwisdom.dlpay.framework.core.JwtConfig
-import com.supwisdom.dlpay.framework.util.HmacUtil
-import io.restassured.RestAssured
-import io.restassured.RestAssured.*
-import io.restassured.http.ContentType
-import io.restassured.path.json.JsonPath.from
-import org.hamcrest.MatcherAssert.assertThat
-import org.hamcrest.Matchers.*
-import org.junit.Before
-import org.junit.Test
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.boot.test.context.SpringBootTest
-import org.springframework.boot.web.server.LocalServerPort
-import org.springframework.test.context.ActiveProfiles
-import java.text.SimpleDateFormat
-import java.util.*
-
-@ActiveProfiles("devel-pg-local")
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
-class SecurityControllerTest : MvcBaseTest() {
-//    val appid = "100001"
-//    val appsecret = "oUw2NmA09ficiVWD4TUQLDOkPyzQa3VzbjjsW0B2qTk="
-//
-//    @LocalServerPort
-//    private var port: Int = 0
-//
-//    @Autowired
-//    lateinit var jwtConfig: JwtConfig
-//
-//    @Before
-//    fun setUp() {
-//        RestAssured.port = port
-//    }
-//
-//    fun getJwt(id: String, secret: String): String {
-//        val token = given().param("appid", id)
-//                .`when`()
-//                .get("/api/auth/gettoken")
-//                .then()
-//                .contentType(ContentType.JSON)
-//                .statusCode(200)
-//                .body("token", notNullValue())
-//                .extract().path<String>("token")
-//
-//        val tokenCrypt = HmacUtil.HMACSHA256(token, secret)
-//
-//        return given().param("appid", id)
-//                .param("secret", tokenCrypt)
-//                .`when`()
-//                .get("/api/auth/authentication")
-//                .then()
-//                .statusCode(200)
-//                .contentType(ContentType.JSON)
-//                .body("jwt", notNullValue())
-//                .extract().response().let {
-//                    val exp = it.path<String>("expiredAt").run {
-//                        SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(this)
-//                    }
-//                    val now = Calendar.getInstance()
-//                    assertThat(now.time, lessThanOrEqualTo(exp))
-//                    it.path<String>("jwt")
-//                }
-//    }
-//
-//    @Test
-//    fun testGetJwt() {
-//        getJwt(appid, appsecret)
-//    }
-//
-//    @Test
-//    fun testGetJwtClient() {
-//        val clientid = "000030450"
-//        val response = given().param("appid", appid)
-//                .`when`()
-//                .get("/api/auth/gettoken/$clientid")
-//                .then()
-//                .statusCode(200)
-//                .body("token", notNullValue())
-//                .extract()
-//
-//        val token = from(response.body().asString()).getString("token")
-//        val secret = HmacUtil.HMACSHA256(token, appsecret)
-//
-//        given().param("appid", appid)
-//                .param("secret", secret)
-//                .`when`()
-//                .get("/api/auth/authentication/$clientid")
-//                .then()
-//                .statusCode(200)
-//                .body("jwt", notNullValue())
-//    }
-//
-//    @Test
-//    fun testJwtRefresh() {
-//        getJwt(appid, appsecret).also { jwt ->
-//            given().header(jwtConfig.header, "${jwtConfig.tokenHeader}$jwt")
-//                    .`when`()
-//                    .get("/api/auth/refresh")
-//                    .then()
-//                    .statusCode(200)
-//                    .body("jwt", notNullValue())
-//        }
-//    }
-//
-//    @Test
-//    fun testAuthencationFail() {
-//        given().param("appid", appid)
-//                .`when`()
-//                .get("/api/auth/gettoken")
-//                .then()
-//                .body("token", notNullValue())
-//                .extract()
-//                .path<String>("token").also { token ->
-//                    given().param("appid", appid)
-//                            .param("secret", token)
-//                            .`when`()
-//                            .get("/api/auth/authentication")
-//                            .then()
-//                            .statusCode(401)
-//                }
-//    }
-
-}
\ No newline at end of file
diff --git a/src/test/kotlin/com/supwisdom/dlpay/password_test.kt b/src/test/kotlin/com/supwisdom/dlpay/password_test.kt
deleted file mode 100644
index a89d759..0000000
--- a/src/test/kotlin/com/supwisdom/dlpay/password_test.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.supwisdom.dlpay
-
-import org.junit.Test
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
-import org.springframework.security.crypto.password.DelegatingPasswordEncoder
-import org.springframework.security.crypto.password.PasswordEncoder
-import org.springframework.security.crypto.password.Pbkdf2PasswordEncoder
-import org.springframework.security.crypto.scrypt.SCryptPasswordEncoder
-import java.util.*
-
-
-class PasswordTest {
-    private fun encodePassword(pswd: String) {
-        val encoders = HashMap<String, PasswordEncoder>()
-        encoders["bcrypt"] = BCryptPasswordEncoder()
-        encoders["pbkdf2"] = Pbkdf2PasswordEncoder()
-        encoders["scrypt"] = SCryptPasswordEncoder()
-        val passwordEncoder = DelegatingPasswordEncoder("bcrypt", encoders)
-        println(passwordEncoder.encode(pswd))
-
-    }
-
-    @Test
-    fun testPassword() {
-        encodePassword("123456")
-    }
-}
\ No newline at end of file
