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
index dfd5712..53dffa2 100644
--- 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
@@ -4,6 +4,7 @@
 import org.springframework.web.servlet.config.annotation.CorsRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 
+@SuppressWarnings("deprecation")
 @Configuration
 public class FilterConfig extends WebMvcConfigurerAdapter{
 
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
index 15c1c7d..fe86559 100644
--- 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
@@ -1,5 +1,7 @@
 package com.supwisdom.leaveschool.leaving.controller;
 
+import java.util.List;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.util.MimeTypeUtils;
@@ -8,10 +10,10 @@
 import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestController;
 
-import com.supwisdom.leaveschool.common.controller.api.CrudApiController;
 import com.supwisdom.leaveschool.common.model.PagerRequestModel;
 import com.supwisdom.leaveschool.common.model.PagerResponseModel;
 import com.supwisdom.leaveschool.leaving.domain.AuditNode;
+import com.supwisdom.leaveschool.leaving.repository.AuditNode1Repository;
 import com.supwisdom.leaveschool.leaving.repository.AuditNodeRepository;
 
 import io.swagger.annotations.ApiImplicitParam;
@@ -20,15 +22,12 @@
 
 @RestController
 @RequestMapping("/api/v1/leaving/audit_node")
-public class Api1AuditNodeController extends CrudApiController<AuditNode, AuditNodeRepository>{
+public class Api1AuditNodeController{
 	
 	@Autowired
 	private AuditNodeRepository auditNodeRepository;
-	
-	@Override
-	protected AuditNodeRepository getRepository() {
-		return auditNodeRepository;
-	}
+	@Autowired
+	private AuditNode1Repository auditNode1Repository;
 	
 	@GetMapping(path = "/getById",produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
 	@ResponseStatus(value = HttpStatus.OK)
@@ -50,19 +49,28 @@
 	
 	@GetMapping(path = "/pageList",produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
 	@ResponseStatus(value = HttpStatus.OK)
-	@ApiOperation(value="根据查询条件获取审核环节列表",notes="注意问题点")
+	@ApiOperation(value="根据查询条件获取审核环节分页列表",notes="注意问题点")
 	@ApiImplicitParams({
 		@ApiImplicitParam(name = "pageIndex", value = "当前第页数，默认0，为第一页", dataType = "integer",required = true,  paramType = "query", defaultValue = "0"),
 		@ApiImplicitParam(name = "pageSize", value = "每页条数，默认20", dataType = "integer",required = true,  paramType = "query", defaultValue = "20"),
 		@ApiImplicitParam(name = "name", value = "审核环节名称", dataType = "string",required = false,  paramType = "query", defaultValue = ""),
 		@ApiImplicitParam(name = "auditType", value = "审核方式", dataType = "string",required = false,  paramType = "query", defaultValue = "")
 	})
-	public PagerResponseModel<AuditNode> list(String name,String auditType, PagerRequestModel pagerRequestModel){
-		
-		
+	public PagerResponseModel<AuditNode> pageList(String name,String auditType, PagerRequestModel pagerRequestModel){
 		return null;
 	}
 	
+	@GetMapping(path = "/list",produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+	@ResponseStatus(value = HttpStatus.OK)
+	@ApiOperation(value="根据查询条件获取审核环节List",notes="注意问题点")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "name", value = "审核环节名称", dataType = "string",required = false,  paramType = "query", defaultValue = ""),
+		@ApiImplicitParam(name = "auditType", value = "审核方式", dataType = "string",required = false,  paramType = "query", defaultValue = "")
+	})
+	public List<AuditNode> list(String name,String auditType, PagerRequestModel pagerRequestModel){
+		return auditNode1Repository.getList(null);
+	}
+	
 	
 	
 	
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/AuditNode1Repository.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/AuditNode1Repository.java
new file mode 100644
index 0000000..a7371f6
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/AuditNode1Repository.java
@@ -0,0 +1,27 @@
+package com.supwisdom.leaveschool.leaving.repository;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+
+import org.springframework.data.jpa.repository.support.SimpleJpaRepository;
+import org.springframework.stereotype.Component;
+
+import com.supwisdom.leaveschool.leaving.domain.AuditNode;
+
+@Component
+public class AuditNode1Repository extends SimpleJpaRepository<AuditNode, String>{
+	
+	private EntityManager entityManager;
+	
+	public AuditNode1Repository(Class<AuditNode> domainClass, EntityManager em) {
+		super(domainClass, em);
+		this.entityManager = em;
+	}
+	
+	public List<AuditNode>  getList(String id) {
+		List<AuditNode> list = entityManager.createNativeQuery("select * from TB_L_AUDIT_NODE").getResultList();
+		return list;
+	}
+
+}
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
index 32e81c5..a859026 100644
--- 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
@@ -1,5 +1,8 @@
 package com.supwisdom.leaveschool.leaving.repository;
 
+import java.util.List;
+
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
 import com.supwisdom.leaveschool.common.repository.BaseJpaRepository;
@@ -7,5 +10,8 @@
 
 @Repository
 public interface AuditNodeRepository extends BaseJpaRepository<AuditNode>{
-
+	
+	
+	@Query()
+	public List<AuditNode> getList();
 }
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/viewModel/AuditNodeModel.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/viewModel/AuditNodeModel.java
new file mode 100644
index 0000000..a02b990
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/viewModel/AuditNodeModel.java
@@ -0,0 +1,111 @@
+package com.supwisdom.leaveschool.leaving.viewModel;
+
+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;
+import com.supwisdom.leaveschool.leaving.viewModel.common.BaseModel;
+
+public class AuditNodeModel extends BaseModel{
+
+	private static final long serialVersionUID = 4394536154933574896L;
+	
+	/**
+	 * 名称
+	 */
+	private String name;
+	/**
+	 * 联系人
+	 */
+	private String contact;
+	
+	/**
+	 * 所属部门
+	 */
+	private Department department;
+	
+	/**
+	 * 联系电话
+	 */
+	private String phoneNumber;	
+	
+	/**
+	 * 范围控制（全校范围、院系范围、辅导员范围）
+	 */
+	private Scope scope;
+	
+	/**
+	 * 审核方式（手动、自动，默认手动）
+	 */
+	private AuditType auditType;
+	
+	/**
+	 * 审核状态（待审核、审核通过、审核不通过 ，默认待审核）
+	 */
+	private DefaultAuditStatus defaultAuditStatus;
+	
+	/**
+	 * 审核环节职责
+	 */
+	private String auditNodeDuty;
+	
+	/**
+	 * 审核环节地址
+	 */
+	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 Department getDepartment() {
+		return department;
+	}
+	public void setDepartment(Department department) {
+		this.department = department;
+	}
+	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/viewModel/common/BaseModel.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/viewModel/common/BaseModel.java
new file mode 100644
index 0000000..00644d9
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/viewModel/common/BaseModel.java
@@ -0,0 +1,43 @@
+package com.supwisdom.leaveschool.leaving.viewModel.common;
+
+import java.io.Serializable;
+
+public class BaseModel  implements Serializable {
+	
+	private static final long serialVersionUID = -466583573597500155L;
+
+	private String id;
+	/**
+	 * 是否删除  0：有效  1：删除  默认有效
+	 */
+	private Boolean deleted = false;
+	/**
+	 * 操作人用户名
+	 */
+	private String operatorUaseName;
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public Boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(Boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public String getOperatorUaseName() {
+		return operatorUaseName;
+	}
+
+	public void setOperatorUaseName(String operatorUaseName) {
+		this.operatorUaseName = operatorUaseName;
+	}
+	
+}
diff --git a/leaveschool/leaving/src/main/resources/db/leave_school.sql b/leaveschool/leaving/src/main/resources/db/leave_school.sql
new file mode 100644
index 0000000..077c029
--- /dev/null
+++ b/leaveschool/leaving/src/main/resources/db/leave_school.sql
@@ -0,0 +1,443 @@
+/*
+Navicat MySQL Data Transfer
+
+Source Server         : 180.166.150.114
+Source Server Version : 50640
+Source Host           : 180.166.150.114:9512
+Source Database       : leave_school
+
+Target Server Type    : MYSQL
+Target Server Version : 50640
+File Encoding         : 65001
+
+Date: 2018-08-29 14:06:26
+*/
+
+SET FOREIGN_KEY_CHECKS=0;
+
+-- ----------------------------
+-- Table structure for tb_b_classes
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_b_classes`;
+CREATE TABLE `tb_b_classes` (
+  `ID` varchar(255) COLLATE utf8_bin NOT NULL,
+  `ADD_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人',
+  `ADD_TIME` datetime DEFAULT NULL COMMENT '创建时间',
+  `COMPANY_ID` varchar(200) COLLATE utf8_bin DEFAULT NULL,
+  `DELETE_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '删除人',
+  `DELETE_TIME` datetime DEFAULT NULL COMMENT '删除时间',
+  `DELETED` int(1) DEFAULT '1' COMMENT '是否删除  0：有效  1：删除',
+  `EDIT_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人',
+  `EDIT_TIME` datetime DEFAULT NULL COMMENT '修改时间',
+  `CODE` varchar(120) COLLATE utf8_bin NOT NULL COMMENT '班级代码',
+  `ENABLED` int(11) DEFAULT '1' COMMENT '是否可用',
+  `NAME` varchar(120) COLLATE utf8_bin NOT NULL COMMENT '班级名称',
+  `YEAR` varchar(120) COLLATE utf8_bin NOT NULL COMMENT '年级（yyyy）',
+  `DEPARTMENT_ID` varchar(100) COLLATE utf8_bin NOT NULL COMMENT '所在院系,引用字典类型表id',
+  `MAJOR_ID` varchar(100) COLLATE utf8_bin NOT NULL COMMENT '所在专业,引用专业表id',
+  PRIMARY KEY (`ID`),
+  UNIQUE KEY `UK_aqmo5w1r2s7davfgemc3h4axn` (`CODE`),
+  UNIQUE KEY `UK_c5v6yi0lxjc8k6nhls8uecixa` (`YEAR`),
+  KEY `FK1auavp3s3m4okk6nu5ra0tnpm` (`DEPARTMENT_ID`),
+  KEY `FKjr0gsjf99maynvyupwi7wvgti` (`MAJOR_ID`),
+  CONSTRAINT `FK1auavp3s3m4okk6nu5ra0tnpm` FOREIGN KEY (`DEPARTMENT_ID`) REFERENCES `tb_b_department` (`ID`),
+  CONSTRAINT `FKjr0gsjf99maynvyupwi7wvgti` FOREIGN KEY (`MAJOR_ID`) REFERENCES `tb_b_major` (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='班级表';
+
+-- ----------------------------
+-- Table structure for tb_b_department
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_b_department`;
+CREATE TABLE `tb_b_department` (
+  `ID` varchar(255) COLLATE utf8_bin NOT NULL,
+  `ADD_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人',
+  `ADD_TIME` datetime DEFAULT NULL COMMENT '创建时间',
+  `COMPANY_ID` varchar(200) COLLATE utf8_bin DEFAULT NULL,
+  `DELETE_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '删除人',
+  `DELETE_TIME` datetime DEFAULT NULL COMMENT '删除时间',
+  `DELETED` int(1) DEFAULT '1' COMMENT '是否删除  0：有效  1：删除',
+  `EDIT_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人',
+  `EDIT_TIME` datetime DEFAULT NULL COMMENT '修改时间',
+  `CODE` varchar(120) COLLATE utf8_bin NOT NULL COMMENT '单位代码',
+  `EN_NAME` varchar(200) COLLATE utf8_bin NOT NULL COMMENT '单位英文名称',
+  `ENABLED` int(11) DEFAULT '1' COMMENT '是否可用',
+  `NAME` varchar(200) COLLATE utf8_bin NOT NULL COMMENT '单位简称',
+  `SORT` int(11) DEFAULT NULL COMMENT '排序',
+  `CLASS_CODE` varchar(100) COLLATE utf8_bin NOT NULL COMMENT '类别码,引用字典类型表id',
+  PRIMARY KEY (`ID`),
+  UNIQUE KEY `UK_k1ayr1evmn7vp2t97x9o2kdih` (`CODE`),
+  KEY `FKk7pvj4yi40cl0pvfu00jjto6` (`CLASS_CODE`),
+  CONSTRAINT `FKk7pvj4yi40cl0pvfu00jjto6` FOREIGN KEY (`CLASS_CODE`) REFERENCES `tb_b_dictionary` (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='部门院系表';
+
+-- ----------------------------
+-- Table structure for tb_b_dictionary
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_b_dictionary`;
+CREATE TABLE `tb_b_dictionary` (
+  `ID` varchar(255) COLLATE utf8_bin NOT NULL,
+  `ADD_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人',
+  `ADD_TIME` datetime DEFAULT NULL COMMENT '创建时间',
+  `COMPANY_ID` varchar(200) COLLATE utf8_bin DEFAULT NULL,
+  `DELETE_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '删除人',
+  `DELETE_TIME` datetime DEFAULT NULL COMMENT '删除时间',
+  `DELETED` int(1) DEFAULT '1' COMMENT '是否删除  0：有效  1：删除',
+  `EDIT_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人',
+  `EDIT_TIME` datetime DEFAULT NULL COMMENT '修改时间',
+  `CODE` varchar(120) COLLATE utf8_bin NOT NULL COMMENT '字典代码',
+  `TB_B_DICTIONARY_TYPE_ID` tinyblob,
+  `ENABLED` int(11) DEFAULT '1' COMMENT '是否可用',
+  `NAME` varchar(200) COLLATE utf8_bin NOT NULL COMMENT '名称',
+  `SORT` int(11) DEFAULT NULL COMMENT '排序',
+  PRIMARY KEY (`ID`),
+  UNIQUE KEY `UK_q80b6qny1fja7wg6wyudyechm` (`CODE`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='字典表';
+
+-- ----------------------------
+-- Table structure for tb_b_dictionary_type
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_b_dictionary_type`;
+CREATE TABLE `tb_b_dictionary_type` (
+  `ID` varchar(255) COLLATE utf8_bin NOT NULL,
+  `CODE` varchar(120) COLLATE utf8_bin NOT NULL COMMENT '类型码',
+  `NAME` varchar(200) COLLATE utf8_bin NOT NULL COMMENT '名称',
+  `SORT` int(11) DEFAULT NULL COMMENT '排序',
+  `ENABLED` int(11) DEFAULT '1' COMMENT '是否可用',
+  `ADD_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人',
+  `ADD_TIME` datetime DEFAULT NULL COMMENT '创建时间',
+  `COMPANY_ID` varchar(200) COLLATE utf8_bin DEFAULT NULL,
+  `DELETE_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '删除人',
+  `DELETE_TIME` datetime DEFAULT NULL COMMENT '删除时间',
+  `DELETED` int(1) DEFAULT '1' COMMENT '是否删除  0：有效  1：删除',
+  `EDIT_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人',
+  `EDIT_TIME` datetime DEFAULT NULL COMMENT '修改时间',
+  PRIMARY KEY (`ID`),
+  UNIQUE KEY `UK_tbbcrrq6sxlu20h5618hrd51r` (`CODE`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='字典类型表';
+
+-- ----------------------------
+-- Table structure for tb_b_major
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_b_major`;
+CREATE TABLE `tb_b_major` (
+  `ID` varchar(255) COLLATE utf8_bin NOT NULL,
+  `ADD_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人',
+  `ADD_TIME` datetime DEFAULT NULL COMMENT '创建时间',
+  `COMPANY_ID` varchar(200) COLLATE utf8_bin DEFAULT NULL,
+  `DELETE_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '删除人',
+  `DELETE_TIME` datetime DEFAULT NULL COMMENT '删除时间',
+  `DELETED` int(1) DEFAULT '1' COMMENT '是否删除  0：有效  1：删除',
+  `EDIT_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人',
+  `EDIT_TIME` datetime DEFAULT NULL COMMENT '修改时间',
+  `CODE` varchar(120) COLLATE utf8_bin NOT NULL COMMENT '专业代码',
+  `ENABLED` int(11) DEFAULT '1' COMMENT '是否可用',
+  `GB_MAJOR` varchar(200) COLLATE utf8_bin DEFAULT NULL COMMENT '所属国标专业',
+  `DEPARTMENT_ID` varchar(100) COLLATE utf8_bin NOT NULL COMMENT '所在院系,引用字典类型表id',
+  PRIMARY KEY (`ID`),
+  UNIQUE KEY `UK_b0m1172bkbvr9lf3krdueb545` (`CODE`),
+  KEY `FKgf8aht9hqgj65q62wnlcnws7i` (`DEPARTMENT_ID`),
+  CONSTRAINT `FKgf8aht9hqgj65q62wnlcnws7i` FOREIGN KEY (`DEPARTMENT_ID`) REFERENCES `tb_b_department` (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='专业表';
+
+-- ----------------------------
+-- Table structure for tb_b_year
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_b_year`;
+CREATE TABLE `tb_b_year` (
+  `ID` varchar(255) COLLATE utf8_bin NOT NULL,
+  `ADD_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人',
+  `ADD_TIME` datetime DEFAULT NULL COMMENT '创建时间',
+  `COMPANY_ID` varchar(200) COLLATE utf8_bin DEFAULT NULL,
+  `DELETE_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '删除人',
+  `DELETE_TIME` datetime DEFAULT NULL COMMENT '删除时间',
+  `DELETED` int(1) DEFAULT '1' COMMENT '是否删除  0：有效  1：删除',
+  `EDIT_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人',
+  `EDIT_TIME` datetime DEFAULT NULL COMMENT '修改时间',
+  `CODE` varchar(120) COLLATE utf8_bin NOT NULL COMMENT '学年代码',
+  `NAME` varchar(200) COLLATE utf8_bin NOT NULL COMMENT '学年名称',
+  PRIMARY KEY (`ID`),
+  UNIQUE KEY `UK_3f2a3s7jtus2nxicvu50l4uer` (`CODE`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='学年表';
+
+-- ----------------------------
+-- Table structure for tb_l_audit_node
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_l_audit_node`;
+CREATE TABLE `tb_l_audit_node` (
+  `ID` varchar(255) COLLATE utf8_bin NOT NULL,
+  `ADD_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人',
+  `ADD_TIME` datetime DEFAULT NULL COMMENT '创建时间',
+  `COMPANY_ID` varchar(200) COLLATE utf8_bin DEFAULT NULL,
+  `DELETE_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '删除人',
+  `DELETE_TIME` datetime DEFAULT NULL COMMENT '删除时间',
+  `DELETED` int(1) DEFAULT '1' COMMENT '是否删除  0：有效  1：删除',
+  `EDIT_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人',
+  `EDIT_TIME` datetime DEFAULT NULL COMMENT '修改时间',
+  `AUDIT_NODE_ADDRESS` varchar(200) COLLATE utf8_bin NOT NULL COMMENT '审核环节地址',
+  `AUDIT_NODE_DUTY` varchar(200) COLLATE utf8_bin NOT NULL COMMENT '审核环节职责',
+  `AUDIT_TYPE` varchar(20) COLLATE utf8_bin NOT NULL COMMENT '审核方式（手动、自动，默认手动）',
+  `CONTACT` varchar(120) COLLATE utf8_bin DEFAULT NULL COMMENT '联系人',
+  `DEFAULT_AUDIT_STATUS` varchar(20) COLLATE utf8_bin NOT NULL COMMENT '审核状态（待审核、审核通过、审核不通过 ，默认待审核）',
+  `NAME` varchar(150) COLLATE utf8_bin NOT NULL COMMENT '名称',
+  `PHONE_NUMBER` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '联系电话',
+  `SCOPE` varchar(20) COLLATE utf8_bin NOT NULL COMMENT '范围控制（全校范围、院系范围、辅导员范围）',
+  `DEPARTMENT_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '所属部门id',
+  PRIMARY KEY (`ID`),
+  KEY `FKhagjedhk0npq3w4esky8dum93` (`DEPARTMENT_ID`),
+  CONSTRAINT `FKhagjedhk0npq3w4esky8dum93` FOREIGN KEY (`DEPARTMENT_ID`) REFERENCES `tb_b_department` (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='审核环节';
+
+-- ----------------------------
+-- Table structure for tb_l_leave_audit_log
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_l_leave_audit_log`;
+CREATE TABLE `tb_l_leave_audit_log` (
+  `AUDIT_ID` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '离校流程审核ID',
+  `LOG_ID` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '离校流程审核日志ID',
+  KEY `FKmy5g4diqdrfhxb32d6ttoj2r3` (`LOG_ID`),
+  KEY `FKd8xtnyp7mytu5nfs8sc886tti` (`AUDIT_ID`),
+  CONSTRAINT `FKd8xtnyp7mytu5nfs8sc886tti` FOREIGN KEY (`AUDIT_ID`) REFERENCES `tb_l_leave_sch_pro_audit` (`ID`),
+  CONSTRAINT `FKmy5g4diqdrfhxb32d6ttoj2r3` FOREIGN KEY (`LOG_ID`) REFERENCES `tb_l_leave_sch_pro_audit_log` (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for tb_l_leave_batch_process
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_l_leave_batch_process`;
+CREATE TABLE `tb_l_leave_batch_process` (
+  `BATCH_ID` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '离校批次ID',
+  `PROCESS_ID` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '离校流程ID',
+  KEY `FK84kdx8345yysdv5malr2mclr7` (`PROCESS_ID`),
+  CONSTRAINT `FK84kdx8345yysdv5malr2mclr7` FOREIGN KEY (`PROCESS_ID`) REFERENCES `tb_l_leave_sch_pro` (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for tb_l_leave_process_dependence
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_l_leave_process_dependence`;
+CREATE TABLE `tb_l_leave_process_dependence` (
+  `PROCESS_ID` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '离校流程ID',
+  `DEPENDENCE_ID` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '离校流程依赖ID',
+  KEY `FKtgqlah237uwe75x9hjeej15mc` (`DEPENDENCE_ID`),
+  KEY `FK8n2agj2hx1wq7i4xxpcu800a1` (`PROCESS_ID`),
+  CONSTRAINT `FK8n2agj2hx1wq7i4xxpcu800a1` FOREIGN KEY (`PROCESS_ID`) REFERENCES `tb_l_leave_sch_pro` (`ID`),
+  CONSTRAINT `FKtgqlah237uwe75x9hjeej15mc` FOREIGN KEY (`DEPENDENCE_ID`) REFERENCES `tb_l_leave_sch_pro_depen` (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for tb_l_leave_sch_pro
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_l_leave_sch_pro`;
+CREATE TABLE `tb_l_leave_sch_pro` (
+  `ID` varchar(255) COLLATE utf8_bin NOT NULL,
+  `ADD_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人',
+  `ADD_TIME` datetime DEFAULT NULL COMMENT '创建时间',
+  `COMPANY_ID` varchar(200) COLLATE utf8_bin DEFAULT NULL,
+  `DELETE_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '删除人',
+  `DELETE_TIME` datetime DEFAULT NULL COMMENT '删除时间',
+  `DELETED` int(1) DEFAULT '1' COMMENT '是否删除  0：有效  1：删除',
+  `EDIT_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人',
+  `EDIT_TIME` datetime DEFAULT NULL COMMENT '修改时间',
+  `NEEDED_DEPARTMENT` int(11) DEFAULT NULL COMMENT '是否必办部门',
+  `ORDER_NUM` int(11) DEFAULT NULL COMMENT '显示顺序',
+  `AUDIT_NODE_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '审核环节id',
+  `LEAVE_SCH_BATCH_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '离校批次id',
+  PRIMARY KEY (`ID`),
+  KEY `FKrulca368cqgrj0txjve9mgmyo` (`AUDIT_NODE_ID`),
+  CONSTRAINT `FKrulca368cqgrj0txjve9mgmyo` FOREIGN KEY (`AUDIT_NODE_ID`) REFERENCES `tb_l_audit_node` (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='离校流程';
+
+-- ----------------------------
+-- Table structure for tb_l_leave_sch_pro_audit
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_l_leave_sch_pro_audit`;
+CREATE TABLE `tb_l_leave_sch_pro_audit` (
+  `ID` varchar(255) COLLATE utf8_bin NOT NULL,
+  `ADD_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人',
+  `ADD_TIME` datetime DEFAULT NULL COMMENT '创建时间',
+  `COMPANY_ID` varchar(200) COLLATE utf8_bin DEFAULT NULL,
+  `DELETE_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '删除人',
+  `DELETE_TIME` datetime DEFAULT NULL COMMENT '删除时间',
+  `DELETED` int(1) DEFAULT '1' COMMENT '是否删除  0：有效  1：删除',
+  `EDIT_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人',
+  `EDIT_TIME` datetime DEFAULT NULL COMMENT '修改时间',
+  `AUDIT_STATUS` varchar(20) COLLATE utf8_bin NOT NULL COMMENT '审核状态（待审核、审核通过、审核不通过 ，默认待审核）',
+  `LEAVE_SCH_BATCH_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '离校批次id',
+  `LEAVE_SCH_PRO_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '离校流程id',
+  `LEAVE_SCH_STUDENT_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '离校学生id',
+  PRIMARY KEY (`ID`),
+  KEY `FKl0erxg66at51u3whbwb17060h` (`LEAVE_SCH_PRO_ID`),
+  KEY `FK2i4jyp06972cpdhvblvppdk81` (`LEAVE_SCH_STUDENT_ID`),
+  CONSTRAINT `FK2i4jyp06972cpdhvblvppdk81` FOREIGN KEY (`LEAVE_SCH_STUDENT_ID`) REFERENCES `tb_l_leave_sch_student` (`ID`),
+  CONSTRAINT `FKl0erxg66at51u3whbwb17060h` FOREIGN KEY (`LEAVE_SCH_PRO_ID`) REFERENCES `tb_l_leave_sch_pro` (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='离校流程审核';
+
+-- ----------------------------
+-- Table structure for tb_l_leave_sch_pro_audit_log
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_l_leave_sch_pro_audit_log`;
+CREATE TABLE `tb_l_leave_sch_pro_audit_log` (
+  `ID` varchar(255) COLLATE utf8_bin NOT NULL,
+  `ADD_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人',
+  `ADD_TIME` datetime DEFAULT NULL COMMENT '创建时间',
+  `COMPANY_ID` varchar(200) COLLATE utf8_bin DEFAULT NULL,
+  `DELETE_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '删除人',
+  `DELETE_TIME` datetime DEFAULT NULL COMMENT '删除时间',
+  `DELETED` int(1) DEFAULT '1' COMMENT '是否删除  0：有效  1：删除',
+  `EDIT_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人',
+  `EDIT_TIME` datetime DEFAULT NULL COMMENT '修改时间',
+  `AUDIT_OPTION` varchar(400) COLLATE utf8_bin NOT NULL COMMENT '审核意见',
+  `AUDIT_STATUS` varchar(20) COLLATE utf8_bin NOT NULL COMMENT '审核状态（待审核、审核通过、审核不通过 ，默认待审核）',
+  `LEAVE_SCH_PRO_AUDIT_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '离校流程审核id',
+  PRIMARY KEY (`ID`),
+  KEY `FK8t5oab3vh813ew8ruii3befmm` (`LEAVE_SCH_PRO_AUDIT_ID`),
+  CONSTRAINT `FK8t5oab3vh813ew8ruii3befmm` FOREIGN KEY (`LEAVE_SCH_PRO_AUDIT_ID`) REFERENCES `tb_l_leave_sch_pro_audit` (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='离校流程审核日志';
+
+-- ----------------------------
+-- Table structure for tb_l_leave_sch_pro_depen
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_l_leave_sch_pro_depen`;
+CREATE TABLE `tb_l_leave_sch_pro_depen` (
+  `ID` varchar(255) COLLATE utf8_bin NOT NULL,
+  `ADD_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人',
+  `ADD_TIME` datetime DEFAULT NULL COMMENT '创建时间',
+  `COMPANY_ID` varchar(200) COLLATE utf8_bin DEFAULT NULL,
+  `DELETE_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '删除人',
+  `DELETE_TIME` datetime DEFAULT NULL COMMENT '删除时间',
+  `DELETED` int(1) DEFAULT '1' COMMENT '是否删除  0：有效  1：删除',
+  `EDIT_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人',
+  `EDIT_TIME` datetime DEFAULT NULL COMMENT '修改时间',
+  `AUDIT_NODE_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '审核环节id',
+  `LEAVE_SCH_PRO_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '离校流程id',
+  PRIMARY KEY (`ID`),
+  KEY `FKseosmwxwt4brth7k55rx5hvhg` (`AUDIT_NODE_ID`),
+  KEY `FKjk5ki774t3r6rq75xxehbi9y8` (`LEAVE_SCH_PRO_ID`),
+  CONSTRAINT `FKjk5ki774t3r6rq75xxehbi9y8` FOREIGN KEY (`LEAVE_SCH_PRO_ID`) REFERENCES `tb_l_leave_sch_pro` (`ID`),
+  CONSTRAINT `FKseosmwxwt4brth7k55rx5hvhg` FOREIGN KEY (`AUDIT_NODE_ID`) REFERENCES `tb_l_audit_node` (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='离校流程依赖';
+
+-- ----------------------------
+-- Table structure for tb_l_leave_sch_student
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_l_leave_sch_student`;
+CREATE TABLE `tb_l_leave_sch_student` (
+  `ID` varchar(255) COLLATE utf8_bin NOT NULL,
+  `ADD_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人',
+  `ADD_TIME` datetime DEFAULT NULL COMMENT '创建时间',
+  `COMPANY_ID` varchar(200) COLLATE utf8_bin DEFAULT NULL,
+  `DELETE_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '删除人',
+  `DELETE_TIME` datetime DEFAULT NULL COMMENT '删除时间',
+  `DELETED` int(1) DEFAULT '1' COMMENT '是否删除  0：有效  1：删除',
+  `EDIT_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人',
+  `EDIT_TIME` datetime DEFAULT NULL COMMENT '修改时间',
+  `ALLOWED_LEAVE` int(11) DEFAULT NULL COMMENT '是否准予离校',
+  `GRADUATE_MONTH` varchar(10) COLLATE utf8_bin DEFAULT NULL COMMENT '毕业月份MM',
+  `GRADUATE_YEAR` varchar(10) COLLATE utf8_bin DEFAULT NULL COMMENT '毕业年份yyyy',
+  `NAME` varchar(150) COLLATE utf8_bin NOT NULL COMMENT '姓名',
+  `STUDNET_NUMBER` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '学号',
+  `CLAZZ_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '班级id',
+  `DEPARTMENT_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '院系id',
+  `LEAVE_SCH_BATCH_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '离校批次id',
+  `LEAVE_SCHOOL_TYPE_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '离校类型',
+  `MAJOR_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '专业id',
+  `STUDENT_TYPE_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '学生类别',
+  PRIMARY KEY (`ID`),
+  KEY `FKi869693ev77m6padav52w63dk` (`CLAZZ_ID`),
+  KEY `FKlad5nxf34dq5id1m5u20m6b3f` (`DEPARTMENT_ID`),
+  KEY `FKcwpeg8ruswtxspc1br2jvv9ae` (`LEAVE_SCHOOL_TYPE_ID`),
+  KEY `FKsylcd1ke2br0fp1l7oplju0mt` (`MAJOR_ID`),
+  KEY `FKelc2uju93mbeg23trus61bi6w` (`STUDENT_TYPE_ID`),
+  CONSTRAINT `FKcwpeg8ruswtxspc1br2jvv9ae` FOREIGN KEY (`LEAVE_SCHOOL_TYPE_ID`) REFERENCES `tb_b_department` (`ID`),
+  CONSTRAINT `FKelc2uju93mbeg23trus61bi6w` FOREIGN KEY (`STUDENT_TYPE_ID`) REFERENCES `tb_b_department` (`ID`),
+  CONSTRAINT `FKi869693ev77m6padav52w63dk` FOREIGN KEY (`CLAZZ_ID`) REFERENCES `tb_b_department` (`ID`),
+  CONSTRAINT `FKlad5nxf34dq5id1m5u20m6b3f` FOREIGN KEY (`DEPARTMENT_ID`) REFERENCES `tb_b_department` (`ID`),
+  CONSTRAINT `FKsylcd1ke2br0fp1l7oplju0mt` FOREIGN KEY (`MAJOR_ID`) REFERENCES `tb_b_department` (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='离校名单';
+
+-- ----------------------------
+-- Table structure for tb_l_leave_student_audit
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_l_leave_student_audit`;
+CREATE TABLE `tb_l_leave_student_audit` (
+  `STUDENT_ID` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '离校名单ID',
+  `AUDIT_ID` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '离校流程审核ID',
+  KEY `FKm99oloebiq97mqmo1qs83x2dw` (`AUDIT_ID`),
+  KEY `FK4061tssmwd9oes5cbff9m8qr2` (`STUDENT_ID`),
+  CONSTRAINT `FK4061tssmwd9oes5cbff9m8qr2` FOREIGN KEY (`STUDENT_ID`) REFERENCES `tb_l_leave_sch_student` (`ID`),
+  CONSTRAINT `FKm99oloebiq97mqmo1qs83x2dw` FOREIGN KEY (`AUDIT_ID`) REFERENCES `tb_l_leave_sch_pro_audit` (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+-- ----------------------------
+-- Table structure for tb_l_node_auditor
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_l_node_auditor`;
+CREATE TABLE `tb_l_node_auditor` (
+  `ID` varchar(255) COLLATE utf8_bin NOT NULL,
+  `ADD_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人',
+  `ADD_TIME` datetime DEFAULT NULL COMMENT '创建时间',
+  `COMPANY_ID` varchar(200) COLLATE utf8_bin DEFAULT NULL,
+  `DELETE_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '删除人',
+  `DELETE_TIME` datetime DEFAULT NULL COMMENT '删除时间',
+  `DELETED` int(1) DEFAULT '1' COMMENT '是否删除  0：有效  1：删除',
+  `EDIT_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人',
+  `EDIT_TIME` datetime DEFAULT NULL COMMENT '修改时间',
+  `AUDIT_NODE_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '审核环节id',
+  `USER_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '审核人id',
+  PRIMARY KEY (`ID`),
+  KEY `FKj9d12cx0bm8rdm4b1s8bt1vsy` (`AUDIT_NODE_ID`),
+  KEY `FKgfqu40j6cflp2cew84io9e1y` (`USER_ID`),
+  CONSTRAINT `FKgfqu40j6cflp2cew84io9e1y` FOREIGN KEY (`USER_ID`) REFERENCES `tb_u_user` (`ID`),
+  CONSTRAINT `FKj9d12cx0bm8rdm4b1s8bt1vsy` FOREIGN KEY (`AUDIT_NODE_ID`) REFERENCES `tb_l_audit_node` (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='环节审核人';
+
+-- ----------------------------
+-- Table structure for tb_l_node_principal
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_l_node_principal`;
+CREATE TABLE `tb_l_node_principal` (
+  `ID` varchar(255) COLLATE utf8_bin NOT NULL,
+  `ADD_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人',
+  `ADD_TIME` datetime DEFAULT NULL COMMENT '创建时间',
+  `COMPANY_ID` varchar(200) COLLATE utf8_bin DEFAULT NULL,
+  `DELETE_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '删除人',
+  `DELETE_TIME` datetime DEFAULT NULL COMMENT '删除时间',
+  `DELETED` int(1) DEFAULT '1' COMMENT '是否删除  0：有效  1：删除',
+  `EDIT_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人',
+  `EDIT_TIME` datetime DEFAULT NULL COMMENT '修改时间',
+  `AUDIT_NODE_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '审核环节id',
+  `USER_ID` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '审核人id',
+  PRIMARY KEY (`ID`),
+  KEY `FK7s24tkhawwuhwxqdk8t5ips8a` (`AUDIT_NODE_ID`),
+  KEY `FK21n51h0y6ncm5fvhplc64j73v` (`USER_ID`),
+  CONSTRAINT `FK21n51h0y6ncm5fvhplc64j73v` FOREIGN KEY (`USER_ID`) REFERENCES `tb_u_user` (`ID`),
+  CONSTRAINT `FK7s24tkhawwuhwxqdk8t5ips8a` FOREIGN KEY (`AUDIT_NODE_ID`) REFERENCES `tb_l_audit_node` (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='环节负责人';
+
+-- ----------------------------
+-- Table structure for tb_u_user
+-- ----------------------------
+DROP TABLE IF EXISTS `tb_u_user`;
+CREATE TABLE `tb_u_user` (
+  `ID` varchar(255) COLLATE utf8_bin NOT NULL,
+  `ADD_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人',
+  `ADD_TIME` datetime DEFAULT NULL COMMENT '创建时间',
+  `COMPANY_ID` varchar(200) COLLATE utf8_bin DEFAULT NULL,
+  `DELETE_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '删除人',
+  `DELETE_TIME` datetime DEFAULT NULL COMMENT '删除时间',
+  `DELETED` int(1) DEFAULT '1' COMMENT '是否删除  0：有效  1：删除',
+  `EDIT_ACCOUNT` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '修改人',
+  `EDIT_TIME` datetime DEFAULT NULL COMMENT '修改时间',
+  `ACCOUNT_NON_EXPIRED` bit(1) DEFAULT NULL,
+  `ACCOUNT_NON_LOCKED` bit(1) DEFAULT NULL,
+  `CREDENTIALS_NON_EXPIRED` bit(1) DEFAULT NULL,
+  `EMAIL` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+  `ENABLED` bit(1) DEFAULT NULL,
+  `MOBILE` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+  `NAME` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+  `PASSWORD` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+  `STATUS` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+  `USERNAME` varchar(255) COLLATE utf8_bin DEFAULT NULL,
+  PRIMARY KEY (`ID`),
+  UNIQUE KEY `UK_m85n4fagxg9gtbho0y2nls1cg` (`USERNAME`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
