diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/LeavingApplication.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/LeavingApplication.java
new file mode 100644
index 0000000..68b4ccf
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/LeavingApplication.java
@@ -0,0 +1,17 @@
+package com.supwisdom.leaveschool.leaving;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+import com.supwisdom.infras.data.jpa.EnableInfrasDataJpa;
+
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+@SpringBootApplication
+@EnableInfrasDataJpa
+@EnableSwagger2
+public class LeavingApplication {
+	 public static void main(String[] args) {
+	    SpringApplication.run(LeavingApplication.class, args);
+	 }
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/config/FilterConfig.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/config/FilterConfig.java
new file mode 100644
index 0000000..dfd5712
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/config/FilterConfig.java
@@ -0,0 +1,14 @@
+package com.supwisdom.leaveschool.leaving.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+
+@Configuration
+public class FilterConfig extends WebMvcConfigurerAdapter{
+
+	 @Override
+	    public void addCorsMappings(CorsRegistry registry) {
+	        registry.addMapping("/**");
+	    }
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/config/Swagger2Config.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/config/Swagger2Config.java
new file mode 100644
index 0000000..d9fdefc
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/config/Swagger2Config.java
@@ -0,0 +1,41 @@
+package com.supwisdom.leaveschool.leaving.config;
+ 
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+ 
+/**
+ * @author xiehuibing
+ * @ClassName com.supwisdom.framework.config.Swgger2
+ * @Description
+ * @date 2018-07-23
+ */
+@Configuration
+public class Swagger2Config {
+ 
+	@Bean
+	public Docket createRestApi() {
+		return new Docket(DocumentationType.SWAGGER_2)
+				.apiInfo(apiInfo())
+				.select()
+				.apis(RequestHandlerSelectors.any())
+//				.apis(RequestHandlerSelectors.basePackage("org.supwisdom"))
+//				.paths(PathSelectors.any())
+				.paths(PathSelectors.ant("/api/**"))
+				.build();
+	}
+	
+	private ApiInfo apiInfo() {
+		return new ApiInfoBuilder()
+				.title("离校微服务系统API文档")
+				.description("restful风格，离校微服务系统API文档")
+//				.termsOfServiceUrl("http://127.0.0.1:8081/")
+				.version("1.0")
+				.build();
+	}
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1AuditNodeController.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1AuditNodeController.java
new file mode 100644
index 0000000..68a081a
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1AuditNodeController.java
@@ -0,0 +1,27 @@
+package com.supwisdom.leaveschool.leaving.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.leaveschool.common.controller.api.CrudApiController;
+import com.supwisdom.leaveschool.leaving.domain.AuditNode;
+import com.supwisdom.leaveschool.leaving.repository.AuditNodeRepository;
+
+@RestController
+@RequestMapping("/api/v1/leaving/audit_node")
+public class Api1AuditNodeController extends CrudApiController<AuditNode, AuditNodeRepository>{
+	
+	@Autowired
+	private AuditNodeRepository auditNodeRepository;
+	
+	@Override
+	protected AuditNodeRepository getRepository() {
+		return auditNodeRepository;
+	}
+	
+	
+	
+	
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1LeaveSchoolBatchController.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1LeaveSchoolBatchController.java
new file mode 100644
index 0000000..6a5ddeb
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1LeaveSchoolBatchController.java
@@ -0,0 +1,24 @@
+package com.supwisdom.leaveschool.leaving.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.leaveschool.common.controller.api.CrudApiController;
+import com.supwisdom.leaveschool.leaving.domain.LeaveSchoolBatch;
+import com.supwisdom.leaveschool.leaving.repository.LeaveSchoolBatchRepository;
+
+@RestController
+@RequestMapping("/api/v1/leaving/leave_school_batch")
+public class Api1LeaveSchoolBatchController extends CrudApiController<LeaveSchoolBatch, LeaveSchoolBatchRepository>{
+	
+	@Autowired
+	private LeaveSchoolBatchRepository leaveSchoolBatchRepository;
+	
+	@Override
+	protected LeaveSchoolBatchRepository getRepository() {
+		return leaveSchoolBatchRepository;
+	}
+	
+	
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1LeaveSchoolProcessAuditController.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1LeaveSchoolProcessAuditController.java
new file mode 100644
index 0000000..a2eb32a
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1LeaveSchoolProcessAuditController.java
@@ -0,0 +1,22 @@
+package com.supwisdom.leaveschool.leaving.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.leaveschool.common.controller.api.CrudApiController;
+import com.supwisdom.leaveschool.leaving.domain.LeaveSchoolProcessAudit;
+import com.supwisdom.leaveschool.leaving.repository.LeaveSchoolProcessAuditRepository;
+
+@RestController
+@RequestMapping("/api/v1/leaving/leave_school_pro_aud")
+public class Api1LeaveSchoolProcessAuditController  extends CrudApiController<LeaveSchoolProcessAudit,LeaveSchoolProcessAuditRepository>{
+	
+	@Autowired
+	private LeaveSchoolProcessAuditRepository leaveSchoolProcessAuditRepository;
+	@Override
+	protected LeaveSchoolProcessAuditRepository getRepository() {
+		return leaveSchoolProcessAuditRepository;
+	}
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1LeaveSchoolProcessAuditLogController.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1LeaveSchoolProcessAuditLogController.java
new file mode 100644
index 0000000..8507966
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1LeaveSchoolProcessAuditLogController.java
@@ -0,0 +1,23 @@
+package com.supwisdom.leaveschool.leaving.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.leaveschool.common.controller.api.CrudApiController;
+import com.supwisdom.leaveschool.leaving.domain.LeaveSchoolProcessAuditLog;
+import com.supwisdom.leaveschool.leaving.repository.LeaveSchoolProcessAuditLogRepository;
+
+@RestController
+@RequestMapping("/api/v1/leaving/leave_school_pro_log")
+public class Api1LeaveSchoolProcessAuditLogController extends CrudApiController<LeaveSchoolProcessAuditLog,LeaveSchoolProcessAuditLogRepository>{
+	
+	@Autowired
+	private LeaveSchoolProcessAuditLogRepository leaveSchoolProcessAuditLogRepository;
+	@Override
+	protected LeaveSchoolProcessAuditLogRepository getRepository() {
+		return leaveSchoolProcessAuditLogRepository;
+	}
+	
+	
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1LeaveSchoolProcessController.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1LeaveSchoolProcessController.java
new file mode 100644
index 0000000..951bc37
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1LeaveSchoolProcessController.java
@@ -0,0 +1,22 @@
+package com.supwisdom.leaveschool.leaving.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.leaveschool.common.controller.api.CrudApiController;
+import com.supwisdom.leaveschool.leaving.domain.LeaveSchoolProcess;
+import com.supwisdom.leaveschool.leaving.repository.LeaveSchoolProcessRepository;
+
+@RestController
+@RequestMapping("/api/v1/leaving/leave_school_pro")
+public class Api1LeaveSchoolProcessController extends CrudApiController<LeaveSchoolProcess, LeaveSchoolProcessRepository>{
+	
+	@Autowired
+	private LeaveSchoolProcessRepository leaveSchoolProcessRepository;
+	@Override
+	protected LeaveSchoolProcessRepository getRepository() {
+		return leaveSchoolProcessRepository;
+	}
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1LeaveSchoolProcessDependenceController.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1LeaveSchoolProcessDependenceController.java
new file mode 100644
index 0000000..2965fa9
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1LeaveSchoolProcessDependenceController.java
@@ -0,0 +1,21 @@
+package com.supwisdom.leaveschool.leaving.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.leaveschool.common.controller.api.CrudApiController;
+import com.supwisdom.leaveschool.leaving.domain.LeaveSchoolProcessDependence;
+import com.supwisdom.leaveschool.leaving.repository.LeaveSchoolProcessDependenceRepository;
+
+@RestController
+@RequestMapping("/api/v1/leaving/leave_school_pro_dep")
+public class Api1LeaveSchoolProcessDependenceController extends CrudApiController<LeaveSchoolProcessDependence,LeaveSchoolProcessDependenceRepository>{
+	@Autowired
+	private LeaveSchoolProcessDependenceRepository leaveSchoolProcessDependenceRepository;
+	@Override
+	protected LeaveSchoolProcessDependenceRepository getRepository() {
+		return leaveSchoolProcessDependenceRepository;
+	}
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1LeaveSchoolStudentController.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1LeaveSchoolStudentController.java
new file mode 100644
index 0000000..b66d9cb
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1LeaveSchoolStudentController.java
@@ -0,0 +1,22 @@
+package com.supwisdom.leaveschool.leaving.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.leaveschool.common.controller.api.CrudApiController;
+import com.supwisdom.leaveschool.leaving.domain.LeaveSchoolStudent;
+import com.supwisdom.leaveschool.leaving.repository.LeaveSchoolStudentRepository;
+
+@RestController
+@RequestMapping("/api/v1/leaving/leave_school_student")
+public class Api1LeaveSchoolStudentController extends CrudApiController<LeaveSchoolStudent,LeaveSchoolStudentRepository>{
+	
+	@Autowired
+	private LeaveSchoolStudentRepository leaveSchoolStudentRepository;
+	@Override
+	protected LeaveSchoolStudentRepository getRepository() {
+		return leaveSchoolStudentRepository;
+	}
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1NodeAuditorController.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1NodeAuditorController.java
new file mode 100644
index 0000000..d845e5e
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1NodeAuditorController.java
@@ -0,0 +1,22 @@
+package com.supwisdom.leaveschool.leaving.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.leaveschool.common.controller.api.CrudApiController;
+import com.supwisdom.leaveschool.leaving.domain.NodeAuditor;
+import com.supwisdom.leaveschool.leaving.repository.NodeAuditorRepository;
+
+@RestController
+@RequestMapping("/api/v1/leaving/node_auditor")
+public class Api1NodeAuditorController extends CrudApiController<NodeAuditor,NodeAuditorRepository>{
+	
+	@Autowired
+	private NodeAuditorRepository nodeAuditorRepository;
+	@Override
+	protected NodeAuditorRepository getRepository() {
+		return nodeAuditorRepository;
+	}
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1NodePrincipalController.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1NodePrincipalController.java
new file mode 100644
index 0000000..0d4a4c8
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/controller/Api1NodePrincipalController.java
@@ -0,0 +1,23 @@
+package com.supwisdom.leaveschool.leaving.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.leaveschool.common.controller.api.CrudApiController;
+import com.supwisdom.leaveschool.leaving.domain.NodePrincipal;
+import com.supwisdom.leaveschool.leaving.repository.NodePrincipalRepository;
+
+@RestController
+@RequestMapping("/api/v1/leaving/node_principal")
+public class Api1NodePrincipalController extends CrudApiController<NodePrincipal,NodePrincipalRepository>{
+	
+	
+	@Autowired
+	private NodePrincipalRepository nodePrincipalRepository;
+	@Override
+	protected NodePrincipalRepository getRepository() {
+		return nodePrincipalRepository;
+	}
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/AuditNode.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/AuditNode.java
new file mode 100644
index 0000000..4f5cf06
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/AuditNode.java
@@ -0,0 +1,146 @@
+package com.supwisdom.leaveschool.leaving.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+import com.supwisdom.leaveschool.leaving.domain.basicdata.Department;
+import com.supwisdom.leaveschool.leaving.domain.enums.AuditType;
+import com.supwisdom.leaveschool.leaving.domain.enums.DefaultAuditStatus;
+import com.supwisdom.leaveschool.leaving.domain.enums.Scope;
+
+/**
+ * 审核环节
+ * @ClassName AuditNode
+ * @Description 
+ * @Date 2018年8月22日 下午5:51:24
+ */
+@Entity
+@Table(name = "TB_L_AUDIT_NODE")
+@org.hibernate.annotations.Table(appliesTo = "TB_L_AUDIT_NODE",comment="审核环节")
+public class AuditNode extends ABaseDomain{
+
+	private static final long serialVersionUID = -5161071374602767825L;
+	/**
+	 * 名称
+	 */
+	@Column(name = "NAME",columnDefinition="varchar(150) not null comment '名称'")
+	private String name;
+	/**
+	 * 联系人
+	 */
+	@Column(name = "CONTACT",columnDefinition="varchar(120) comment '联系人'")
+	private String contact;
+	
+	/**
+	 * 所属部门
+	 */
+	@ManyToOne(targetEntity=Department.class)
+	@JoinColumn(name="DEPARTMENT_ID",columnDefinition="varchar(64) comment '所属部门id'")
+	private Department department;
+	
+	/**
+	 * 联系电话
+	 */
+	@Column(name = "PHONE_NUMBER",columnDefinition="varchar(20) comment '联系电话'")
+	private String phoneNumber;	
+	
+	/**
+	 * 范围控制（全校范围、院系范围、辅导员范围）
+	 */
+	@Column(name = "SCOPE",columnDefinition="varchar(20) not null comment '范围控制（全校范围、院系范围、辅导员范围）'")
+	private Scope scope;
+	
+	/**
+	 * 审核方式（手动、自动，默认手动）
+	 */
+	@Column(name = "AUDIT_TYPE",columnDefinition="varchar(20) not null comment '审核方式（手动、自动，默认手动）'")
+	private AuditType auditType;
+	
+	/**
+	 * 审核状态（待审核、审核通过、审核不通过 ，默认待审核）
+	 */
+	@Column(name = "DEFAULT_AUDIT_STATUS",columnDefinition="varchar(20) not null comment '审核状态（待审核、审核通过、审核不通过 ，默认待审核）'")
+	private DefaultAuditStatus defaultAuditStatus;
+	
+	/**
+	 * 审核环节职责
+	 */
+	@Column(name = "AUDIT_NODE_DUTY",columnDefinition="varchar(200) not null comment '审核环节职责'")
+	private String auditNodeDuty;
+	
+	/**
+	 * 审核环节地址
+	 */
+	@Column(name = "AUDIT_NODE_ADDRESS",columnDefinition="varchar(200) not null comment '审核环节地址'")
+	private String auditNodeAddress;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getContact() {
+		return contact;
+	}
+
+	public void setContact(String contact) {
+		this.contact = contact;
+	}
+
+	public String getPhoneNumber() {
+		return phoneNumber;
+	}
+
+	public void setPhoneNumber(String phoneNumber) {
+		this.phoneNumber = phoneNumber;
+	}
+
+	public Scope getScope() {
+		return scope;
+	}
+
+	public void setScope(Scope scope) {
+		this.scope = scope;
+	}
+
+	public AuditType getAuditType() {
+		return auditType;
+	}
+
+	public void setAuditType(AuditType auditType) {
+		this.auditType = auditType;
+	}
+
+	public DefaultAuditStatus getDefaultAuditStatus() {
+		return defaultAuditStatus;
+	}
+
+	public void setDefaultAuditStatus(DefaultAuditStatus defaultAuditStatus) {
+		this.defaultAuditStatus = defaultAuditStatus;
+	}
+
+	public String getAuditNodeDuty() {
+		return auditNodeDuty;
+	}
+
+	public void setAuditNodeDuty(String auditNodeDuty) {
+		this.auditNodeDuty = auditNodeDuty;
+	}
+
+	public String getAuditNodeAddress() {
+		return auditNodeAddress;
+	}
+
+	public void setAuditNodeAddress(String auditNodeAddress) {
+		this.auditNodeAddress = auditNodeAddress;
+	}
+	
+	
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/LeaveSchoolBatch.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/LeaveSchoolBatch.java
new file mode 100644
index 0000000..b6c85ee
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/LeaveSchoolBatch.java
@@ -0,0 +1,120 @@
+package com.supwisdom.leaveschool.leaving.domain;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+import com.supwisdom.leaveschool.leaving.domain.basicdata.Year;
+
+/**
+ * 离校批次
+ * @ClassName LeaveSchoolBatch
+ * @Description 
+ * @Author bin.zhang
+ * @Date 2018年8月24日 上午11:00:39
+ */
+@Entity
+@Table(name = "TB_L_LEAVE_SCH_BATCH")
+@org.hibernate.annotations.Table(appliesTo = "TB_L_LEAVE_SCH_BATCH",comment="离校批次")
+public class LeaveSchoolBatch extends ABaseDomain{
+
+	private static final long serialVersionUID = 2364597915787776233L;
+	
+	/**
+	 * 名称
+	 */
+	@Column(name = "NAME",columnDefinition="varchar(150) not null comment '名称'")
+	private String name;
+	
+	/**
+	 * 学年
+	 */
+	@ManyToOne(targetEntity=Year.class)
+	@JoinColumn(name="SCHOOL_YEAR_ID",columnDefinition="varchar(64) comment '学年ID'")
+	private Year schoolYear;
+	
+	/**
+	 * 是否开通
+	 */
+	@Column(name = "OPENED",columnDefinition="int(11) not null comment '是否开通'")
+	private Boolean opened;
+	
+	/**
+	 * 名单同步接口
+	 */
+	@Column(name = "ROSTER_SYNC_INTERFACE",columnDefinition="String(250)  comment '名单同步接口'")
+	private String rosterSyncInterface;
+	
+	/**
+	 * 开始日期（yyyy-MM-dd）
+	 */
+	@Column(name = "START_DATE",columnDefinition="datetime(20)  comment '开始日期（yyyy-MM-dd）'")
+	private Date startDate;
+	
+	/**
+	 * 结束日期（yyyy-MM-dd）
+	 */
+	@Column(name = "END_DATE",columnDefinition="datetime(20)  comment '结束日期（yyyy-MM-dd）'")
+	private Date endDate;
+	/**
+	 * 离校流程
+	 */
+	@ManyToMany
+	@JoinTable(
+			name="TB_L_LEAVE_BATCH_PROCESS",
+			joinColumns=@JoinColumn(name="BATCH_ID",columnDefinition="varchar(64) not null comment '离校批次ID' "),
+			inverseJoinColumns=@JoinColumn(name="PROCESS_ID",columnDefinition="varchar(64) not null comment '离校流程ID' "))
+	private List<LeaveSchoolProcess> leaveProcList;
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public Year getSchoolYear() {
+		return schoolYear;
+	}
+	public void setSchoolYear(Year schoolYear) {
+		this.schoolYear = schoolYear;
+	}
+	public Boolean getOpened() {
+		return opened;
+	}
+	public void setOpened(Boolean opened) {
+		this.opened = opened;
+	}
+	public String getRosterSyncInterface() {
+		return rosterSyncInterface;
+	}
+	public void setRosterSyncInterface(String rosterSyncInterface) {
+		this.rosterSyncInterface = rosterSyncInterface;
+	}
+	public Date getStartDate() {
+		return startDate;
+	}
+	public void setStartDate(Date startDate) {
+		this.startDate = startDate;
+	}
+	public Date getEndDate() {
+		return endDate;
+	}
+	public void setEndDate(Date endDate) {
+		this.endDate = endDate;
+	}
+	public List<LeaveSchoolProcess> getLeaveProcList() {
+		return leaveProcList;
+	}
+	public void setLeaveProcList(List<LeaveSchoolProcess> leaveProcList) {
+		this.leaveProcList = leaveProcList;
+	}
+	
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/LeaveSchoolProcess.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/LeaveSchoolProcess.java
new file mode 100644
index 0000000..b4054c2
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/LeaveSchoolProcess.java
@@ -0,0 +1,104 @@
+package com.supwisdom.leaveschool.leaving.domain;
+
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+
+/**
+ * 离校流程
+ * @ClassName LeaveSchoolProcess
+ * @Description 
+ * @Date 2018年8月23日 下午4:44:37
+ */
+@Entity
+@Table(name = "TB_L_LEAVE_SCH_PRO")
+@org.hibernate.annotations.Table(appliesTo = "TB_L_LEAVE_SCH_PRO",comment="离校流程")
+public class LeaveSchoolProcess extends ABaseDomain{
+
+	private static final long serialVersionUID = -9083509054917728942L;
+	/**
+	 * 离校批次
+	 */
+	@ManyToOne(targetEntity=LeaveSchoolBatch.class)
+	@JoinColumn(name="LEAVE_SCH_BATCH_ID",columnDefinition="varchar(64) comment '离校批次id'")
+	private LeaveSchoolBatch leaveSchoolBatch;
+	
+	/**
+	 * 审核环节
+	 */
+	@ManyToOne(targetEntity=AuditNode.class)
+	@JoinColumn(name="AUDIT_NODE_ID",columnDefinition="varchar(64) comment '审核环节id'")
+	private AuditNode auditNode;
+	
+	/**
+	 * 是否必办部门
+	 */
+	@Column(name = "NEEDED_DEPARTMENT",columnDefinition="int(11) comment '是否必办部门'")
+	private Boolean neededDepartment;
+	
+	/**
+	 * 显示顺序
+	 */
+	@Column(name = "ORDER_NUM",columnDefinition="int(11) comment '显示顺序'")
+	private Integer orderNum;
+	
+	/**
+	 * 依赖流程
+	 */
+	@ManyToMany
+	@JoinTable(
+			name="TB_L_LEAVE_PROCESS_DEPENDENCE",
+			joinColumns=@JoinColumn(name="PROCESS_ID",columnDefinition="varchar(64) not null comment '离校流程ID' "),
+			inverseJoinColumns=@JoinColumn(name="DEPENDENCE_ID",columnDefinition="varchar(64) not null comment '离校流程依赖ID' "))  
+	private List<LeaveSchoolProcessDependence> dependencyProcList;
+
+	public LeaveSchoolBatch getLeaveSchoolBatch() {
+		return leaveSchoolBatch;
+	}
+
+	public void setLeaveSchoolBatch(LeaveSchoolBatch leaveSchoolBatch) {
+		this.leaveSchoolBatch = leaveSchoolBatch;
+	}
+
+	public AuditNode getAuditNode() {
+		return auditNode;
+	}
+
+	public void setAuditNode(AuditNode auditNode) {
+		this.auditNode = auditNode;
+	}
+
+	public Boolean getNeededDepartment() {
+		return neededDepartment;
+	}
+
+	public void setNeededDepartment(Boolean neededDepartment) {
+		this.neededDepartment = neededDepartment;
+	}
+
+	public Integer getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(Integer orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	public List<LeaveSchoolProcessDependence> getDependencyProcList() {
+		return dependencyProcList;
+	}
+
+	public void setDependencyProcList(List<LeaveSchoolProcessDependence> dependencyProcList) {
+		this.dependencyProcList = dependencyProcList;
+	}
+	
+	
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/LeaveSchoolProcessAudit.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/LeaveSchoolProcessAudit.java
new file mode 100644
index 0000000..81a3980
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/LeaveSchoolProcessAudit.java
@@ -0,0 +1,97 @@
+package com.supwisdom.leaveschool.leaving.domain;
+
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+import com.supwisdom.leaveschool.leaving.domain.enums.DefaultAuditStatus;
+
+/**
+ * 离校流程审核
+ * @ClassName LeaveSchoolProcessAudit
+ * @Description 
+ * @Date 2018年8月24日 上午11:30:23
+ */
+@Entity
+@Table(name = "TB_L_LEAVE_SCH_PRO_AUDIT")
+@org.hibernate.annotations.Table(appliesTo = "TB_L_LEAVE_SCH_PRO_AUDIT",comment="离校流程审核")
+public class LeaveSchoolProcessAudit extends ABaseDomain{
+
+	private static final long serialVersionUID = -4024020065386281861L;
+	
+	/**
+	 * 离校批次
+	 */
+	@ManyToOne(targetEntity=LeaveSchoolBatch.class)
+	@JoinColumn(name="LEAVE_SCH_BATCH_ID",columnDefinition="varchar(64) comment '离校批次id'")
+	private LeaveSchoolBatch leaveSchoolBatch;
+	
+	/**
+	 * 离校学生
+	 */
+	@ManyToOne(targetEntity=LeaveSchoolStudent.class)
+	@JoinColumn(name="LEAVE_SCH_STUDENT_ID",columnDefinition="varchar(64) comment '离校学生id'")
+	private LeaveSchoolStudent leaveSchoolStudent;
+	
+	/**
+	 * 离校流程
+	 */
+	@ManyToOne(targetEntity=LeaveSchoolProcess.class)
+	@JoinColumn(name="LEAVE_SCH_PRO_ID",columnDefinition="varchar(64) comment '离校流程id'") 
+	private LeaveSchoolProcess leaveSchoolProcess;
+	
+	/**
+	 * 审核状态（待审核、审核通过、审核不通过 ，默认待审核）
+	 */
+	@Column(name = "AUDIT_STATUS",columnDefinition="varchar(20) not null comment '审核状态（待审核、审核通过、审核不通过 ，默认待审核）'")
+	private DefaultAuditStatus auditResult;
+	
+	/**
+	 * 离校流程审核日志
+	 */
+	@ManyToMany
+	@JoinTable(
+			name="TB_L_LEAVE_AUDIT_LOG",
+			joinColumns=@JoinColumn(name="AUDIT_ID",columnDefinition="varchar(64) not null comment '离校流程审核ID' "),
+			inverseJoinColumns=@JoinColumn(name="LOG_ID",columnDefinition="varchar(64) not null comment '离校流程审核日志ID' "))
+	private List<LeaveSchoolProcessAuditLog> leaveProcAuditLogList;
+	
+	public LeaveSchoolBatch getLeaveSchoolBatch() {
+		return leaveSchoolBatch;
+	}
+	public void setLeaveSchoolBatch(LeaveSchoolBatch leaveSchoolBatch) {
+		this.leaveSchoolBatch = leaveSchoolBatch;
+	}
+	public LeaveSchoolStudent getLeaveSchoolStudent() {
+		return leaveSchoolStudent;
+	}
+	public void setLeaveSchoolStudent(LeaveSchoolStudent leaveSchoolStudent) {
+		this.leaveSchoolStudent = leaveSchoolStudent;
+	}
+	public LeaveSchoolProcess getLeaveSchoolProcess() {
+		return leaveSchoolProcess;
+	}
+	public void setLeaveSchoolProcess(LeaveSchoolProcess leaveSchoolProcess) {
+		this.leaveSchoolProcess = leaveSchoolProcess;
+	}
+	public DefaultAuditStatus getAuditResult() {
+		return auditResult;
+	}
+	public void setAuditResult(DefaultAuditStatus auditResult) {
+		this.auditResult = auditResult;
+	}
+	public List<LeaveSchoolProcessAuditLog> getLeaveProcAuditLogList() {
+		return leaveProcAuditLogList;
+	}
+	public void setLeaveProcAuditLogList(List<LeaveSchoolProcessAuditLog> leaveProcAuditLogList) {
+		this.leaveProcAuditLogList = leaveProcAuditLogList;
+	}
+		
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/LeaveSchoolProcessAuditLog.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/LeaveSchoolProcessAuditLog.java
new file mode 100644
index 0000000..e888798
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/LeaveSchoolProcessAuditLog.java
@@ -0,0 +1,69 @@
+package com.supwisdom.leaveschool.leaving.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+import com.supwisdom.leaveschool.leaving.domain.enums.DefaultAuditStatus;
+
+/**
+ * 离校流程审核日志
+ * @ClassName LeaveSchoolProcessAudit
+ * @Description 
+ * @Date 2018年8月24日 上午11:30:23
+ */
+@Entity
+@Table(name = "TB_L_LEAVE_SCH_PRO_AUDIT_LOG")
+@org.hibernate.annotations.Table(appliesTo = "TB_L_LEAVE_SCH_PRO_AUDIT_LOG",comment="离校流程审核日志")
+public class LeaveSchoolProcessAuditLog extends ABaseDomain{
+
+	private static final long serialVersionUID = 2354394216859313512L;
+	/**
+	 * 离校流程审核
+	 */
+	@ManyToOne(targetEntity=LeaveSchoolProcessAudit.class)
+	@JoinColumn(name="LEAVE_SCH_PRO_AUDIT_ID",columnDefinition="varchar(64) comment '离校流程审核id'")
+	private LeaveSchoolProcessAudit leaveSchoolProcessAudit;
+	
+	/**
+	 * 审核状态（待审核、审核通过、审核不通过 ，默认待审核）
+	 */
+	@Column(name = "AUDIT_STATUS",columnDefinition="varchar(20) not null comment '审核状态（待审核、审核通过、审核不通过 ，默认待审核）'")
+	private DefaultAuditStatus auditResult;
+	
+	/**
+	 * 审核意见
+	 */
+	@Column(name = "AUDIT_OPTION",columnDefinition="varchar(400) not null comment '审核意见'")
+	private String auditOption;
+
+	public LeaveSchoolProcessAudit getLeaveSchoolProcessAudit() {
+		return leaveSchoolProcessAudit;
+	}
+
+	public void setLeaveSchoolProcessAudit(LeaveSchoolProcessAudit leaveSchoolProcessAudit) {
+		this.leaveSchoolProcessAudit = leaveSchoolProcessAudit;
+	}
+
+	public DefaultAuditStatus getAuditResult() {
+		return auditResult;
+	}
+
+	public void setAuditResult(DefaultAuditStatus auditResult) {
+		this.auditResult = auditResult;
+	}
+
+	public String getAuditOption() {
+		return auditOption;
+	}
+
+	public void setAuditOption(String auditOption) {
+		this.auditOption = auditOption;
+	}
+	
+	
+	
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/LeaveSchoolProcessDependence.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/LeaveSchoolProcessDependence.java
new file mode 100644
index 0000000..eb4f8c3
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/LeaveSchoolProcessDependence.java
@@ -0,0 +1,56 @@
+package com.supwisdom.leaveschool.leaving.domain;
+
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+
+/**
+ * 离校流程依赖
+ * @ClassName LeaveSchoolProcessDependence
+ * @Description 
+ * @Date 2018年8月23日 下午4:38:01
+ */
+@Entity
+@Table(name = "TB_L_LEAVE_SCH_PRO_DEPEN")
+@org.hibernate.annotations.Table(appliesTo = "TB_L_LEAVE_SCH_PRO_DEPEN",comment="离校流程依赖")
+public class LeaveSchoolProcessDependence extends ABaseDomain{
+
+	private static final long serialVersionUID = 4245172195569868171L;
+	
+	
+	/**
+	 * 离校流程
+	 */
+	@ManyToOne(targetEntity=LeaveSchoolProcess.class)
+	@JoinColumn(name="LEAVE_SCH_PRO_ID",columnDefinition="varchar(64) comment '离校流程id'") 
+	private LeaveSchoolProcess leaveSchoolProcess;
+	
+	/**
+	 * 审核环节
+	 */
+	@ManyToOne(targetEntity=AuditNode.class)
+	@JoinColumn(name="AUDIT_NODE_ID",columnDefinition="varchar(64) comment '审核环节id'") 
+	private AuditNode auditNode;
+
+	public LeaveSchoolProcess getLeaveSchoolProcess() {
+		return leaveSchoolProcess;
+	}
+
+	public void setLeaveSchoolProcess(LeaveSchoolProcess leaveSchoolProcess) {
+		this.leaveSchoolProcess = leaveSchoolProcess;
+	}
+
+	public AuditNode getAuditNode() {
+		return auditNode;
+	}
+
+	public void setAuditNode(AuditNode auditNode) {
+		this.auditNode = auditNode;
+	}
+	
+	
+	
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/LeaveSchoolStudent.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/LeaveSchoolStudent.java
new file mode 100644
index 0000000..4727aaf
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/LeaveSchoolStudent.java
@@ -0,0 +1,211 @@
+package com.supwisdom.leaveschool.leaving.domain;
+
+import java.util.List;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+import com.supwisdom.leaveschool.leaving.domain.basicdata.Classes;
+import com.supwisdom.leaveschool.leaving.domain.basicdata.Department;
+import com.supwisdom.leaveschool.leaving.domain.basicdata.Dictionary;
+import com.supwisdom.leaveschool.leaving.domain.basicdata.Major;
+
+/**
+ * 离校名单
+ * @ClassName LeaveSchoolProcessAudit
+ * @Description 
+ * @Date 2018年8月24日 上午11:30:23
+ */
+@Entity
+@Table(name = "TB_L_LEAVE_SCH_STUDENT")
+@org.hibernate.annotations.Table(appliesTo = "TB_L_LEAVE_SCH_STUDENT",comment="离校名单")
+public class LeaveSchoolStudent  extends ABaseDomain{
+
+	private static final long serialVersionUID = -5582206124251696329L;
+	/**
+	 * 学号
+	 */
+	@Column(name = "STUDNET_NUMBER",columnDefinition="varchar(50) not null comment '学号'")
+	private String studentNumber;
+	
+	/**
+	 * 姓名
+	 */
+	@Column(name = "NAME",columnDefinition="varchar(150) not null comment '姓名'")
+	private String name;
+	
+	/**
+	 * 院系
+	 */
+	@ManyToOne(targetEntity=Department.class)
+	@JoinColumn(name="DEPARTMENT_ID",columnDefinition="varchar(64) comment '院系id'")
+	private Department department;
+	
+	/**
+	 * 专业
+	 */
+	@ManyToOne(targetEntity=Department.class)
+	@JoinColumn(name="MAJOR_ID",columnDefinition="varchar(64) comment '专业id'")
+	private Major major;
+	
+	/**
+	 * 班级
+	 */
+	@ManyToOne(targetEntity=Department.class)
+	@JoinColumn(name="CLAZZ_ID",columnDefinition="varchar(64) comment '班级id'")
+	private Classes clazz;
+	
+	/**
+	 * 学生类别
+	 */
+	@ManyToOne(targetEntity=Department.class)
+	@JoinColumn(name="STUDENT_TYPE_ID",columnDefinition="varchar(64) comment '学生类别'")
+	private Dictionary studentType;
+	
+	/**
+	 * 离校批次
+	 */
+	@ManyToOne(targetEntity=LeaveSchoolBatch.class)
+	@JoinColumn(name="LEAVE_SCH_BATCH_ID",columnDefinition="varchar(64) comment '离校批次id'")
+	private LeaveSchoolBatch leaveSchoolBatch;
+	
+	/**
+	 * 离校类型
+	 */
+	@ManyToOne(targetEntity=Department.class)
+	@JoinColumn(name="LEAVE_SCHOOL_TYPE_ID",columnDefinition="varchar(64) comment '离校类型'")
+	private Dictionary leaveSchoolType;
+	
+	/**
+	 * 毕业年份（yyyy）
+	 */
+	@Column(name = "GRADUATE_YEAR",columnDefinition="varchar(10)  comment '毕业年份（yyyy）'")
+	private String graduateYear;
+	
+	
+	/**
+	 * 毕业月份（MM）
+	 */
+	@Column(name = "GRADUATE_MONTH",columnDefinition="varchar(10)  comment '毕业月份（MM）'")
+	private String graduateMonth;
+	
+	
+	/**
+	 * 是否准予离校
+	 */
+	@Column(name = "ALLOWED_LEAVE",columnDefinition="int(11) comment '是否准予离校'")
+	private Boolean allowedLeave;
+	
+	/**
+	 * 离校流程审核
+	 */
+	@ManyToMany
+	@JoinTable(
+			name="TB_L_LEAVE_STUDENT_AUDIT",
+			joinColumns=@JoinColumn(name="STUDENT_ID",columnDefinition="varchar(64) not null comment '离校名单ID' "),
+			inverseJoinColumns=@JoinColumn(name="AUDIT_ID",columnDefinition="varchar(64) not null comment '离校流程审核ID' "))
+	private List<LeaveSchoolProcessAudit> leaveProcAuditList;
+
+	public String getStudentNumber() {
+		return studentNumber;
+	}
+
+	public void setStudentNumber(String studentNumber) {
+		this.studentNumber = studentNumber;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Department getDepartment() {
+		return department;
+	}
+
+	public void setDepartment(Department department) {
+		this.department = department;
+	}
+
+	public Major getMajor() {
+		return major;
+	}
+
+	public void setMajor(Major major) {
+		this.major = major;
+	}
+
+	public Classes getClazz() {
+		return clazz;
+	}
+
+	public void setClazz(Classes clazz) {
+		this.clazz = clazz;
+	}
+
+	public Dictionary getStudentType() {
+		return studentType;
+	}
+
+	public void setStudentType(Dictionary studentType) {
+		this.studentType = studentType;
+	}
+
+	public LeaveSchoolBatch getLeaveSchoolBatch() {
+		return leaveSchoolBatch;
+	}
+
+	public void setLeaveSchoolBatch(LeaveSchoolBatch leaveSchoolBatch) {
+		this.leaveSchoolBatch = leaveSchoolBatch;
+	}
+
+	public Dictionary getLeaveSchoolType() {
+		return leaveSchoolType;
+	}
+
+	public void setLeaveSchoolType(Dictionary leaveSchoolType) {
+		this.leaveSchoolType = leaveSchoolType;
+	}
+
+	public String getGraduateYear() {
+		return graduateYear;
+	}
+
+	public void setGraduateYear(String graduateYear) {
+		this.graduateYear = graduateYear;
+	}
+
+	public String getGraduateMonth() {
+		return graduateMonth;
+	}
+
+	public void setGraduateMonth(String graduateMonth) {
+		this.graduateMonth = graduateMonth;
+	}
+
+	public Boolean getAllowedLeave() {
+		return allowedLeave;
+	}
+
+	public void setAllowedLeave(Boolean allowedLeave) {
+		this.allowedLeave = allowedLeave;
+	}
+
+	public List<LeaveSchoolProcessAudit> getLeaveProcAuditList() {
+		return leaveProcAuditList;
+	}
+
+	public void setLeaveProcAuditList(List<LeaveSchoolProcessAudit> leaveProcAuditList) {
+		this.leaveProcAuditList = leaveProcAuditList;
+	}
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/NodeAuditor.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/NodeAuditor.java
new file mode 100644
index 0000000..192a2c4
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/NodeAuditor.java
@@ -0,0 +1,55 @@
+package com.supwisdom.leaveschool.leaving.domain;
+
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+import com.supwisdom.leaveschool.leaving.domain.user.User;
+
+/**
+ * 环节审核人
+ * @ClassName NodeAuditor
+ * @Description 
+ * @Date 2018年8月22日 下午5:38:12
+ */
+@Entity
+@Table(name = "TB_L_NODE_AUDITOR")
+@org.hibernate.annotations.Table(appliesTo = "TB_L_NODE_AUDITOR",comment="环节审核人")
+public class NodeAuditor extends ABaseDomain{
+	private static final long serialVersionUID = 2999878870051537615L;
+	
+	/**
+	 * 审核环节
+	 */
+	@ManyToOne(targetEntity=AuditNode.class)
+	@JoinColumn(name="AUDIT_NODE_ID",columnDefinition="varchar(64) comment '审核环节id'")
+	private AuditNode auditNode;
+	
+	/**
+	 * 审核人
+	 */
+	@ManyToOne(targetEntity=User.class)
+	@JoinColumn(name="USER_ID",columnDefinition="varchar(64) comment '审核人id'")
+	private User user;
+
+	public AuditNode getAuditNode() {
+		return auditNode;
+	}
+
+	public void setAuditNode(AuditNode auditNode) {
+		this.auditNode = auditNode;
+	}
+
+	public User getUser() {
+		return user;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+	
+	
+	
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/NodePrincipal.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/NodePrincipal.java
new file mode 100644
index 0000000..8fa8835
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/NodePrincipal.java
@@ -0,0 +1,55 @@
+package com.supwisdom.leaveschool.leaving.domain;
+
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+import com.supwisdom.leaveschool.leaving.domain.user.User;
+
+/**
+ * 环节负责人
+ * @ClassName NodePrincipal
+ * @Description 
+ * @Date 2018年8月23日 下午2:59:28
+ */
+@Entity
+@Table(name = "TB_L_NODE_PRINCIPAL")
+@org.hibernate.annotations.Table(appliesTo = "TB_L_NODE_PRINCIPAL",comment="环节负责人")
+public class NodePrincipal extends ABaseDomain{
+	
+	private static final long serialVersionUID = -2106626549746006135L;
+	
+	/**
+	 * 审核环节
+	 */
+	@ManyToOne(targetEntity=AuditNode.class)
+	@JoinColumn(name="AUDIT_NODE_ID",columnDefinition="varchar(64) comment '审核环节id'")
+	private AuditNode auditNode;
+	
+	/**
+	 * 审核人
+	 */
+	@ManyToOne(targetEntity=User.class)
+	@JoinColumn(name="USER_ID",columnDefinition="varchar(64) comment '审核人id'")
+	private User user;
+
+	public AuditNode getAuditNode() { 
+		return auditNode;
+	}
+
+	public void setAuditNode(AuditNode auditNode) {
+		this.auditNode = auditNode;
+	}
+
+	public User getUser() {
+		return user;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+	
+	
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/basicdata/Classes.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/basicdata/Classes.java
new file mode 100644
index 0000000..0b7facc
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/basicdata/Classes.java
@@ -0,0 +1,111 @@
+package com.supwisdom.leaveschool.leaving.domain.basicdata;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+/**
+ * 班级
+ * @author Administrator
+ *
+ */
+@Entity
+@Table(name = "TB_B_CLASSES")
+@org.hibernate.annotations.Table(appliesTo = "TB_B_CLASSES",comment="班级表")
+public class Classes extends ABaseDomain{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 5374908332162700935L;
+	
+	  /**
+	   * 班级代码
+	   */
+	  @Column(name = "CODE", unique = true,columnDefinition="varchar(120) not null comment '班级代码'")
+	  private String code;
+	  
+	  /**
+	   * 班级名称
+	   */
+	  @Column(name = "NAME", columnDefinition="varchar(120) not null comment '班级名称'")
+	  private String name;
+	  /**
+	   * 所在院系
+	   */
+	  @JoinColumn(name = "DEPARTMENT_ID",columnDefinition="varchar(100) not null comment '所在院系,引用字典类型表id'")
+	  @ManyToOne(targetEntity = Department.class)
+	  private Department department;
+	  
+	  /**
+	   * 所在院系
+	   */
+	  @JoinColumn(name = "MAJOR_ID",columnDefinition="varchar(100) not null comment '所在专业,引用专业表id'")
+	  @ManyToOne(targetEntity = Major.class)
+	  private Major major;
+	  /**
+	   * 年级
+	   */
+	  @Column(name = "YEAR", unique = true,columnDefinition="varchar(120) not null comment '年级（yyyy）'")
+	  private String year;
+	  
+	  /**
+	   * 是否可用
+	   * 1 可用，0 不可用，默认：1
+	   */
+	  @Column(name = "ENABLED",columnDefinition="int(11) default 1 comment '是否可用'")
+	  private boolean enabled = true;
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Department getDepartment() {
+		return department;
+	}
+
+	public void setDepartment(Department department) {
+		this.department = department;
+	}
+
+	public Major getMajor() {
+		return major;
+	}
+
+	public void setMajor(Major major) {
+		this.major = major;
+	}
+
+	public String getYear() {
+		return year;
+	}
+
+	public void setYear(String year) {
+		this.year = year;
+	}
+
+	public boolean isEnabled() {
+		return enabled;
+	}
+
+	public void setEnabled(boolean enabled) {
+		this.enabled = enabled;
+	}
+	  
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/basicdata/Department.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/basicdata/Department.java
new file mode 100644
index 0000000..06566b7
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/basicdata/Department.java
@@ -0,0 +1,98 @@
+package com.supwisdom.leaveschool.leaving.domain.basicdata;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+
+/**
+ * 部门院系
+ * @author Administrator
+ *
+ */
+@Entity
+@Table(name = "TB_B_DEPARTMENT")
+@org.hibernate.annotations.Table(appliesTo = "TB_B_DEPARTMENT",comment="部门院系表")
+public class Department extends ABaseDomain{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 4683990621975103576L;
+	
+	/**
+	   * 单位代码
+	   */
+	  @Column(name = "CODE", unique = true,columnDefinition="varchar(120) not null comment '单位代码'")
+	  private String code;
+	  
+	  /**
+	   * 单位简称
+	   */
+	  @Column(name = "NAME",columnDefinition="varchar(200) not null comment '单位简称'")
+	  private String name;
+	  /**
+	   * 单位英文名称
+	   */
+	  @Column(name = "EN_NAME",columnDefinition="varchar(200) not null comment '单位英文名称'")
+	  private String enName;
+	  /**
+	   * 排序
+	   */
+	  @Column(name = "SORT",columnDefinition="int(11) comment '排序'")
+	  private int sort;
+	  /**
+	   * 是否可用
+	   * 1 可用，0 不可用，默认：1
+	   */
+	  @Column(name = "ENABLED",columnDefinition="int(11) default 1 comment '是否可用'")
+	  private boolean enabled = true;
+	  /**
+	   * 类别码
+	   */
+//	  @Column(name = "CLASS_CODE")
+	  @JoinColumn(name = "CLASS_CODE",columnDefinition="varchar(100) not null comment '类别码,引用字典类型表id'")
+	  @ManyToOne(targetEntity = Dictionary.class)
+	  private Dictionary classCode;
+	public String getCode() {
+		return code;
+	}
+	public void setCode(String code) {
+		this.code = code;
+	}
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public String getEnName() {
+		return enName;
+	}
+	public void setEnName(String enName) {
+		this.enName = enName;
+	}
+	public int getSort() {
+		return sort;
+	}
+	public void setSort(int sort) {
+		this.sort = sort;
+	}
+	public boolean isEnabled() {
+		return enabled;
+	}
+	public void setEnabled(boolean enabled) {
+		this.enabled = enabled;
+	}
+	public Dictionary getClassCode() {
+		return classCode;
+	}
+	public void setClassCode(Dictionary classCode) {
+		this.classCode = classCode;
+	}
+	
+	  
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/basicdata/Dictionary.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/basicdata/Dictionary.java
new file mode 100644
index 0000000..9725122
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/basicdata/Dictionary.java
@@ -0,0 +1,99 @@
+package com.supwisdom.leaveschool.leaving.domain.basicdata;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+
+/**
+ * 字典类
+ * @author Administrator
+ *
+ */
+@Entity
+@Table(name = "TB_B_DICTIONARY")
+public class Dictionary extends ABaseDomain {
+
+ 
+
+  /**
+	 * 
+	 */
+	private static final long serialVersionUID = -7355785282419690119L;
+
+	/**
+	   * 类型码
+	   */
+	  @Column(name = "CODE", unique = true)
+	  private String code;
+	  
+	  /**
+	   * 名称
+	   */
+	  @Column(name = "NAME")
+	  private String name;
+	
+	  /**
+	   * 是否可用
+	   * 1 可用，0 不可用，默认：1
+	   */
+	  @Column(name = "ENABLED")
+	  private boolean enabled = true;
+	  
+	  /**
+	   * 排序
+	   */
+	  @Column(name = "SORT")
+	  private Integer sort;
+	  
+	  /**
+	   * 字典表类型
+	   */
+	  @Column(name = "TB_B_DICTIONARY_TYPE_ID")
+	  private DictionaryType dictionaryType;
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public boolean isEnabled() {
+		return enabled;
+	}
+
+	public void setEnabled(boolean enabled) {
+		this.enabled = enabled;
+	}
+
+	public Integer getSort() {
+		return sort;
+	}
+
+	public void setSort(Integer sort) {
+		this.sort = sort;
+	}
+
+	public DictionaryType getDictionaryType() {
+		return dictionaryType;
+	}
+
+	public void setDictionaryType(DictionaryType dictionaryType) {
+		this.dictionaryType = dictionaryType;
+	}
+	
+	  
+  
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/basicdata/DictionaryType.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/basicdata/DictionaryType.java
new file mode 100644
index 0000000..ad61c84
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/basicdata/DictionaryType.java
@@ -0,0 +1,69 @@
+package com.supwisdom.leaveschool.leaving.domain.basicdata;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+
+/**
+ * 字典类型表
+ * @author Administrator
+ *
+ */
+@Entity
+@Table(name = "TB_B_DICTIONARY_TYPE")
+public class DictionaryType extends ABaseDomain {
+
+ 
+
+  /**
+	 * 
+	 */
+	private static final long serialVersionUID = -7355785282419690119L;
+
+	/**
+	   * 类型码
+	   */
+	  @Column(name = "CODE", unique = true)
+	  private String code;
+	  
+	  /**
+	   * 名称
+	   */
+	  @Column(name = "NAME")
+	  private String name;
+	
+	  /**
+	   * 是否可用，1 可用，0 不可用，默认：1
+	   */
+	  @Column(name = "ENABLED")
+	  private boolean enabled = true;
+	
+	public String getCode() {
+		return code;
+	}
+	
+	public void setCode(String code) {
+		this.code = code;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public boolean isEnabled() {
+		return enabled;
+	}
+	
+	public void setEnabled(boolean enabled) {
+		this.enabled = enabled;
+	}
+  
+  
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/basicdata/Major.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/basicdata/Major.java
new file mode 100644
index 0000000..119c2ae
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/basicdata/Major.java
@@ -0,0 +1,84 @@
+package com.supwisdom.leaveschool.leaving.domain.basicdata;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+/**
+ * 专业
+ * @author Administrator
+ *
+ */
+@Entity
+@Table(name = "TB_B_MAJOR")
+@org.hibernate.annotations.Table(appliesTo = "TB_B_MAJOR",comment="专业表")
+public class Major  extends ABaseDomain{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -6675237976684553494L;
+	
+	/**
+	   * 专业代码
+	   */
+	  @Column(name = "CODE", unique = true,columnDefinition="varchar(120) not null comment '专业代码'")
+	  private String code;
+	  
+	  /**
+	   * 所在院系
+	   */
+	  @JoinColumn(name = "DEPARTMENT_ID",columnDefinition="varchar(100) not null comment '所在院系,引用字典类型表id'")
+	  @ManyToOne(targetEntity = Department.class)
+	  private Department department;
+	  
+	  /**
+	   * 是否可用
+	   * 1 可用，0 不可用，默认：1
+	   */
+	  @Column(name = "ENABLED",columnDefinition="int(11) default 1 comment '是否可用'")
+	  private boolean enabled = true;
+	  
+	  /**
+	   * 所属国标专业
+	   */
+	  @Column(name = "GB_MAJOR", columnDefinition="varchar(200) comment '所属国标专业'")
+	  private String gbMajor;
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public Department getDepartment() {
+		return department;
+	}
+
+	public void setDepartment(Department department) {
+		this.department = department;
+	}
+
+	public boolean isEnabled() {
+		return enabled;
+	}
+
+	public void setEnabled(boolean enabled) {
+		this.enabled = enabled;
+	}
+
+	public String getGbMajor() {
+		return gbMajor;
+	}
+
+	public void setGbMajor(String gbMajor) {
+		this.gbMajor = gbMajor;
+	}
+	  
+	  
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/basicdata/Year.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/basicdata/Year.java
new file mode 100644
index 0000000..ca1a52b
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/basicdata/Year.java
@@ -0,0 +1,52 @@
+package com.supwisdom.leaveschool.leaving.domain.basicdata;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+
+/**
+ * 学年
+ * @author Administrator
+ *
+ */
+@Entity
+@Table(name = "TB_B_YEAR")
+@org.hibernate.annotations.Table(appliesTo = "TB_B_YEAR",comment="学年表")
+public class Year  extends ABaseDomain{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -1433208605775844971L;
+	
+	/**
+	   * 学年代码
+	   */
+	  @Column(name = "CODE", unique = true,columnDefinition="varchar(120) not null comment '学年代码'")
+	  private String code;
+	  
+	  /**
+	   * 学年名称
+	   */
+	  @Column(name = "NAME",columnDefinition="varchar(200) not null comment '学年名称'")
+	  private String name;
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	  
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/enums/AuditType.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/enums/AuditType.java
new file mode 100644
index 0000000..3b23977
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/enums/AuditType.java
@@ -0,0 +1,30 @@
+package com.supwisdom.leaveschool.leaving.domain.enums;
+
+/**
+ * 审核方式（手动、自动，默认手动）
+ * @ClassName AuditType
+ * @Description 
+ * @Date 2018年8月23日 下午4:16:34
+ */
+public enum AuditType{
+	
+	MANUAL("手动"), AUTO("自动");  
+	
+	private String value;
+
+	private AuditType(String value) {
+		this.value = value;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+	
+	
+	
+	
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/enums/DefaultAuditStatus.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/enums/DefaultAuditStatus.java
new file mode 100644
index 0000000..4f35161
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/enums/DefaultAuditStatus.java
@@ -0,0 +1,24 @@
+package com.supwisdom.leaveschool.leaving.domain.enums;
+
+/**
+ * 默认审核状态（待审核、审核通过、审核不通过 ，默认待审核）
+ * @ClassName DefaultAuditStatus
+ * @Description 
+ * @Date 2018年8月23日 下午4:28:38
+ */
+public enum DefaultAuditStatus {
+	
+	TO_BE_AUDITED("待审核"), APPROVED("审核通过"), NOT_PASSED("审核不通过");  
+	
+	private String value;
+	private DefaultAuditStatus( String value) {
+		this.value = value;
+	}
+	public String getValue() {
+		return value;
+	}
+	public void setValue(String value) {
+		this.value = value;
+	}
+	
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/enums/Scope.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/enums/Scope.java
new file mode 100644
index 0000000..a84da3c
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/enums/Scope.java
@@ -0,0 +1,25 @@
+package com.supwisdom.leaveschool.leaving.domain.enums;
+
+/**
+ * 范围控制（全校范围、院系范围、辅导员范围）
+ * @ClassName Scope
+ * @Description 
+ * @Date 2018年8月23日 下午3:06:15
+ */
+public enum Scope {
+	
+	SCHOOL("全校范围"), DEPARTMENT("院系范围"), INSTRUCTOR("辅导员范围");  
+	
+	private String value;
+	
+	private Scope( String value) {
+		this.value = value;
+	}
+	public String getValue() {
+		return value;
+	}
+	public void setValue(String value) {
+		this.value = value;
+	}
+	
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/user/User.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/user/User.java
new file mode 100644
index 0000000..3cbe718
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/domain/user/User.java
@@ -0,0 +1,150 @@
+package com.supwisdom.leaveschool.leaving.domain.user;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+
+@Entity
+@Table(name = "TB_U_USER")
+public class User extends ABaseDomain {
+  private static final long serialVersionUID = 7955624268022038897L;
+
+  /**
+   * 用户名
+   */
+  @Column(name = "USERNAME", unique = true)
+  private String username;
+  
+  /**
+   * 密码
+   */
+  @Column(name = "PASSWORD")
+  private String password;
+
+  /**
+   * 是否可用，1 可用，0 不可用，默认：1
+   */
+  @Column(name = "ENABLED")
+  private Boolean enabled;
+  /**
+   * 账号未过期，1 未过期，0 过期，默认：1
+   */
+  @Column(name = "ACCOUNT_NON_EXPIRED")
+  private Boolean accountNonExpired;
+  /**
+   * 账号未锁定，1 未锁定，0 锁定，默认：1
+   */
+  @Column(name = "ACCOUNT_NON_LOCKED")
+  private Boolean accountNonLocked;
+  /**
+   * 密码未过期，1 未过期，0 过期，默认：1
+   */
+  @Column(name = "CREDENTIALS_NON_EXPIRED")
+  private Boolean credentialsNonExpired;
+
+  /**
+   * 姓名
+   */
+  @Column(name = "NAME")
+  private String name;
+  
+  /**
+   * 状态（1 启用，0 停用）
+   */
+  @Column(name = "STATUS")
+  private String status;
+
+  /**
+   * 登录手机
+   */
+  @Column(name = "MOBILE")
+  private String mobile;
+  /**
+   * 登录邮箱
+   */
+  @Column(name = "EMAIL")
+  private String email;
+
+  public String getUsername() {
+    return username;
+  }
+
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public Boolean getEnabled() {
+    return enabled;
+  }
+
+  public void setEnabled(Boolean enabled) {
+    this.enabled = enabled;
+  }
+
+  public Boolean getAccountNonExpired() {
+    return accountNonExpired;
+  }
+
+  public void setAccountNonExpired(Boolean accountNonExpired) {
+    this.accountNonExpired = accountNonExpired;
+  }
+
+  public Boolean getAccountNonLocked() {
+    return accountNonLocked;
+  }
+
+  public void setAccountNonLocked(Boolean accountNonLocked) {
+    this.accountNonLocked = accountNonLocked;
+  }
+
+  public Boolean getCredentialsNonExpired() {
+    return credentialsNonExpired;
+  }
+
+  public void setCredentialsNonExpired(Boolean credentialsNonExpired) {
+    this.credentialsNonExpired = credentialsNonExpired;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+  public String getMobile() {
+    return mobile;
+  }
+
+  public void setMobile(String mobile) {
+    this.mobile = mobile;
+  }
+
+  public String getEmail() {
+    return email;
+  }
+
+  public void setEmail(String email) {
+    this.email = email;
+  }
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/AuditNodeRepository.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/AuditNodeRepository.java
new file mode 100644
index 0000000..32e81c5
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/AuditNodeRepository.java
@@ -0,0 +1,11 @@
+package com.supwisdom.leaveschool.leaving.repository;
+
+import org.springframework.stereotype.Repository;
+
+import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
+import com.supwisdom.leaveschool.leaving.domain.AuditNode;
+
+@Repository
+public interface AuditNodeRepository extends BaseJpaRepository<AuditNode>{
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/LeaveSchoolBatchRepository.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/LeaveSchoolBatchRepository.java
new file mode 100644
index 0000000..e0658a0
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/LeaveSchoolBatchRepository.java
@@ -0,0 +1,11 @@
+package com.supwisdom.leaveschool.leaving.repository;
+
+import org.springframework.stereotype.Repository;
+
+import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
+import com.supwisdom.leaveschool.leaving.domain.LeaveSchoolBatch;
+
+@Repository
+public interface LeaveSchoolBatchRepository extends BaseJpaRepository<LeaveSchoolBatch>{
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/LeaveSchoolProcessAuditLogRepository.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/LeaveSchoolProcessAuditLogRepository.java
new file mode 100644
index 0000000..421ce0c
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/LeaveSchoolProcessAuditLogRepository.java
@@ -0,0 +1,11 @@
+package com.supwisdom.leaveschool.leaving.repository;
+
+import org.springframework.stereotype.Repository;
+
+import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
+import com.supwisdom.leaveschool.leaving.domain.LeaveSchoolProcessAuditLog;
+
+@Repository
+public interface LeaveSchoolProcessAuditLogRepository extends BaseJpaRepository<LeaveSchoolProcessAuditLog>{
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/LeaveSchoolProcessAuditRepository.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/LeaveSchoolProcessAuditRepository.java
new file mode 100644
index 0000000..a047f73
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/LeaveSchoolProcessAuditRepository.java
@@ -0,0 +1,11 @@
+package com.supwisdom.leaveschool.leaving.repository;
+
+import org.springframework.stereotype.Repository;
+
+import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
+import com.supwisdom.leaveschool.leaving.domain.LeaveSchoolProcessAudit;
+
+@Repository
+public interface LeaveSchoolProcessAuditRepository  extends BaseJpaRepository<LeaveSchoolProcessAudit>{
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/LeaveSchoolProcessDependenceRepository.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/LeaveSchoolProcessDependenceRepository.java
new file mode 100644
index 0000000..685e814
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/LeaveSchoolProcessDependenceRepository.java
@@ -0,0 +1,11 @@
+package com.supwisdom.leaveschool.leaving.repository;
+
+import org.springframework.stereotype.Repository;
+
+import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
+import com.supwisdom.leaveschool.leaving.domain.LeaveSchoolProcessDependence;
+
+@Repository
+public interface LeaveSchoolProcessDependenceRepository extends BaseJpaRepository<LeaveSchoolProcessDependence>{
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/LeaveSchoolProcessRepository.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/LeaveSchoolProcessRepository.java
new file mode 100644
index 0000000..b378b33
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/LeaveSchoolProcessRepository.java
@@ -0,0 +1,11 @@
+package com.supwisdom.leaveschool.leaving.repository;
+
+import org.springframework.stereotype.Repository;
+
+import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
+import com.supwisdom.leaveschool.leaving.domain.LeaveSchoolProcess;
+
+@Repository
+public interface LeaveSchoolProcessRepository extends BaseJpaRepository<LeaveSchoolProcess> {
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/LeaveSchoolStudentRepository.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/LeaveSchoolStudentRepository.java
new file mode 100644
index 0000000..ff48a86
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/LeaveSchoolStudentRepository.java
@@ -0,0 +1,11 @@
+package com.supwisdom.leaveschool.leaving.repository;
+
+import org.springframework.stereotype.Repository;
+
+import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
+import com.supwisdom.leaveschool.leaving.domain.LeaveSchoolStudent;
+
+@Repository
+public interface LeaveSchoolStudentRepository extends BaseJpaRepository<LeaveSchoolStudent>{
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/NodeAuditorRepository.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/NodeAuditorRepository.java
new file mode 100644
index 0000000..951a458
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/NodeAuditorRepository.java
@@ -0,0 +1,11 @@
+package com.supwisdom.leaveschool.leaving.repository;
+
+import org.springframework.stereotype.Repository;
+
+import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
+import com.supwisdom.leaveschool.leaving.domain.NodeAuditor;
+
+@Repository
+public interface NodeAuditorRepository extends BaseJpaRepository<NodeAuditor>{
+	
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/NodePrincipalRepository.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/NodePrincipalRepository.java
new file mode 100644
index 0000000..0676064
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/NodePrincipalRepository.java
@@ -0,0 +1,13 @@
+package com.supwisdom.leaveschool.leaving.repository;
+
+import org.springframework.stereotype.Repository;
+
+import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
+import com.supwisdom.leaveschool.leaving.domain.NodePrincipal;
+
+@Repository
+public interface NodePrincipalRepository extends BaseJpaRepository<NodePrincipal>{
+	
+	
+	
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/basedata/ClassesRepository.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/basedata/ClassesRepository.java
new file mode 100644
index 0000000..f18ef70
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/basedata/ClassesRepository.java
@@ -0,0 +1,11 @@
+package com.supwisdom.leaveschool.leaving.repository.basedata;
+
+import org.springframework.stereotype.Repository;
+
+import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
+import com.supwisdom.leaveschool.leaving.domain.basicdata.Classes;
+
+@Repository
+public interface ClassesRepository extends BaseJpaRepository<Classes>{
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/basedata/DepartmentRepository.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/basedata/DepartmentRepository.java
new file mode 100644
index 0000000..d761c4c
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/basedata/DepartmentRepository.java
@@ -0,0 +1,11 @@
+package com.supwisdom.leaveschool.leaving.repository.basedata;
+
+import org.springframework.stereotype.Repository;
+
+import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
+import com.supwisdom.leaveschool.leaving.domain.basicdata.Department;
+
+@Repository
+public interface DepartmentRepository extends BaseJpaRepository<Department>{
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/basedata/DictionaryRepository.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/basedata/DictionaryRepository.java
new file mode 100644
index 0000000..a1d11e3
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/basedata/DictionaryRepository.java
@@ -0,0 +1,11 @@
+package com.supwisdom.leaveschool.leaving.repository.basedata;
+
+import org.springframework.stereotype.Repository;
+
+import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
+import com.supwisdom.leaveschool.leaving.domain.basicdata.Dictionary;
+
+@Repository
+public interface DictionaryRepository  extends BaseJpaRepository<Dictionary>{
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/basedata/DictionaryTypeRepository.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/basedata/DictionaryTypeRepository.java
new file mode 100644
index 0000000..e765ee7
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/basedata/DictionaryTypeRepository.java
@@ -0,0 +1,12 @@
+package com.supwisdom.leaveschool.leaving.repository.basedata;
+
+import org.springframework.stereotype.Repository;
+
+import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
+import com.supwisdom.leaveschool.leaving.domain.basicdata.DictionaryType;
+
+@Repository
+public interface DictionaryTypeRepository extends BaseJpaRepository<DictionaryType> {
+  
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/basedata/MajorRepository.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/basedata/MajorRepository.java
new file mode 100644
index 0000000..dd4b766
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/basedata/MajorRepository.java
@@ -0,0 +1,11 @@
+package com.supwisdom.leaveschool.leaving.repository.basedata;
+
+import org.springframework.stereotype.Repository;
+
+import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
+import com.supwisdom.leaveschool.leaving.domain.basicdata.Major;
+
+@Repository
+public interface MajorRepository extends BaseJpaRepository<Major>{
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/basedata/YearRepository.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/basedata/YearRepository.java
new file mode 100644
index 0000000..3119cf9
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/basedata/YearRepository.java
@@ -0,0 +1,11 @@
+package com.supwisdom.leaveschool.leaving.repository.basedata;
+
+import org.springframework.stereotype.Repository;
+
+import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
+import com.supwisdom.leaveschool.leaving.domain.basicdata.Year;
+
+@Repository
+public interface YearRepository extends BaseJpaRepository<Year>{
+
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/user/UserRepository.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/user/UserRepository.java
new file mode 100644
index 0000000..e74f935
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/user/UserRepository.java
@@ -0,0 +1,100 @@
+package com.supwisdom.leaveschool.leaving.repository.user;
+
+import java.util.Map;
+import java.util.Optional;
+
+import org.springframework.data.domain.Example;
+import org.springframework.data.domain.ExampleMatcher;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Repository;
+
+import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
+import com.supwisdom.leaveschool.common.util.MapBeanUtils;
+import com.supwisdom.leaveschool.leaving.domain.user.User;
+
+@Repository
+public interface UserRepository extends BaseJpaRepository<User> {
+  
+  public default Page<User> selectPageList(int pageIndex, int pageSize, Map<String, Object> mapBean) {
+    User probe = new User();
+    if (mapBean != null) {
+      probe.setUsername(MapBeanUtils.getString(mapBean, "username"));
+      probe.setName(MapBeanUtils.getString(mapBean, "name"));
+      probe.setStatus(MapBeanUtils.getString(mapBean, "status"));
+    }
+    
+    ExampleMatcher matcher = ExampleMatcher.matching()
+        .withMatcher("username", ExampleMatcher.GenericPropertyMatchers.contains())
+        .withMatcher("name", ExampleMatcher.GenericPropertyMatchers.contains())
+        .withMatcher("status", ExampleMatcher.GenericPropertyMatchers.exact());
+    
+    PageRequest pageRequest = PageRequest.of(pageIndex, pageSize);
+    Example<User> example = Example.of(probe, matcher);
+    
+    Page<User> page = this.findAll(example, pageRequest);
+    
+    return page;
+  }
+  
+  /*
+  public default User selectById(String id) {
+    
+    try {
+      Optional<User> entity = this.findById(id);
+      
+      return entity.get();
+    } catch(RuntimeException e) {
+      System.out.println("RuntimeException:"+e.getMessage());
+    } catch(Exception e) {
+      System.out.println("Exception:"+e.getMessage());
+    }
+    
+    return null;
+  }
+  
+  public default User insert(User entity) {
+    
+    if (entity.getCompanyId() == null || entity.getCompanyId().isEmpty()) {
+      entity.setCompanyId("1");
+    }
+    
+    entity.setDeleted(false);
+    //entity.setAddAccount(AuthUtil.getRemoteUser());
+    entity.setAddTime(Calendar.getInstance().getTime());
+    
+    User e = this.save(entity);
+    
+    return e;
+  }
+  
+  public default User update(User entity) {
+    
+    //entity.setEditAccount(AuthUtil.getRemoteUser());
+    entity.setEditTime(Calendar.getInstance().getTime());
+    
+    User e = this.save(entity);
+    
+    return e;
+  }
+  */
+  
+  public default User selectByUsername(String username) {
+    User probe = new User();
+    probe.setUsername(username);
+    
+    ExampleMatcher matcher = ExampleMatcher.matching()
+        .withMatcher("username", ExampleMatcher.GenericPropertyMatchers.exact());
+    
+    Example<User> example = Example.of(probe, matcher);
+    
+    Optional<User> u = this.findOne(example);
+    
+    if (u.isPresent()) {
+      return u.get();
+    }
+    
+    return null;
+  }
+
+}
diff --git a/leaveschool/leaving/src/main/resources/application.yml b/leaveschool/leaving/src/main/resources/application.yml
index bbe7cef..266cf99 100644
--- a/leaveschool/leaving/src/main/resources/application.yml
+++ b/leaveschool/leaving/src/main/resources/application.yml
@@ -12,17 +12,18 @@
 
 spring:
   application:
-    name: sample-user
+    name: leaving
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://172.50.10.15:3306/lixiao?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull
-    username: lixiao
-    password: lixiao@1234
+    url: jdbc:mysql://172.50.10.15:3306/leave_school?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull
+    username: leave_school
+    password: 111111
   jpa:
     hibernate:
-      ddl-auto: none
+      ddl-auto: update
       naming:
         physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
+    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
     show-sql: true
 
 infras:
