diff --git a/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/util/ReflectFieldUtil.java b/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/util/ReflectFieldUtil.java
new file mode 100644
index 0000000..56a676e
--- /dev/null
+++ b/leaveschool/common/src/main/java/com/supwisdom/leaveschool/common/util/ReflectFieldUtil.java
@@ -0,0 +1,39 @@
+package com.supwisdom.leaveschool.common.util;
+
+import java.lang.reflect.Field;
+/**
+ * 反射设置字段属性
+ * @ClassName ReflectFieldUtil
+ * @Description 
+ * @Author bin.zhang
+ * @Date 2018年8月30日 上午10:38:06
+ */
+public class ReflectFieldUtil {
+	
+	
+	/**
+	 * 修改字段属性值
+	 * @param entity  实体对象
+	 * @param fieldName  将要修改的字段名
+	 * @param fieldVlue  设置的值   object
+	 * @return
+	 * @throws Exception
+	 */
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public static <T> Object setValue(T entity,String fieldName,Object fieldVlue) throws Exception{
+		if(fieldVlue!=null) {
+			Field field = entity.getClass().getDeclaredField(fieldName);
+			Class class1 = field.getType();//field.getDeclaringClass();
+			Class class2 = fieldVlue.getClass();
+			System.out.println(class1.isAssignableFrom(class2));
+			//判断两个类型是否相等
+			if(class1.isAssignableFrom(class2)) {
+				//setAccessible这行代码把对象上的id字段设置为public访问属性.
+				 field.setAccessible(true);
+				// 设置该T的属性
+				field.set(entity, fieldVlue);
+			}
+		}
+		return entity;
+	}
+}
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 fe86559..14e4c6c 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
@@ -13,8 +13,8 @@
 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 com.supwisdom.leaveschool.leaving.repository.Test;
 
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -26,8 +26,10 @@
 	
 	@Autowired
 	private AuditNodeRepository auditNodeRepository;
+	
+
 	@Autowired
-	private AuditNode1Repository auditNode1Repository;
+	private Test test;
 	
 	@GetMapping(path = "/getById",produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
 	@ResponseStatus(value = HttpStatus.OK)
@@ -60,20 +62,12 @@
 		return null;
 	}
 	
-	@GetMapping(path = "/list",produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+	@GetMapping(path = "/test",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);
+	@ApiOperation(value="测试 test",notes="注意问题点")
+	public String getId() {
+		return test.getId();
 	}
 	
-	
-	
-	
-	
 
 }
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
index 15e99b1..916f5c9 100644
--- 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
@@ -50,19 +50,19 @@
 	/**
 	 * 名单同步接口
 	 */
-	@Column(name = "ROSTER_SYNC_INTERFACE",columnDefinition="String(250)  comment '名单同步接口'")
+	@Column(name = "ROSTER_SYNC_INTERFACE",columnDefinition="varchar(250)  comment '名单同步接口'")
 	private String rosterSyncInterface;
 	
 	/**
 	 * 开始日期（yyyy-MM-dd）
 	 */
-	@Column(name = "START_DATE",columnDefinition="datetime(20)  comment '开始日期yyyy-MM-dd'")
+	@Column(name = "START_DATE",columnDefinition="date  comment '开始日期yyyy-MM-dd'")
 	private Date startDate;
 	
 	/**
 	 * 结束日期（yyyy-MM-dd）
 	 */
-	@Column(name = "END_DATE",columnDefinition="datetime(20)  comment '结束日期yyyy-MM-dd'")
+	@Column(name = "END_DATE",columnDefinition="date  comment '结束日期yyyy-MM-dd'")
 	private Date endDate;
 	/**
 	 * 离校流程
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
index 8b718ce..16f3dfd 100644
--- 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
@@ -1,5 +1,7 @@
 package com.supwisdom.leaveschool.leaving.domain;
 
+import java.util.Date;
+
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EnumType;
@@ -10,6 +12,7 @@
 
 import com.supwisdom.leaveschool.common.domain.ABaseDomain;
 import com.supwisdom.leaveschool.leaving.domain.enums.DefaultAuditStatus;
+import com.supwisdom.leaveschool.leaving.domain.user.User;
 
 /**
  * 离校流程审核日志
@@ -42,7 +45,18 @@
 	 */
 	@Column(name = "AUDIT_OPTION",columnDefinition="varchar(400) not null comment '审核意见'")
 	private String auditOption;
-
+	/**
+	 * 审核时间
+	 */
+	@Column(name = "AUDIT_TIME",columnDefinition="datetime comment '审核时间'")
+	private Date auditTime;
+	/**
+	 * 审核人
+	 */
+	@ManyToOne(targetEntity=User.class)
+	@JoinColumn(name="USER_ID",columnDefinition="varchar(64) comment '用户id'")
+	private User auditor;
+	
 	public LeaveSchoolProcessAudit getLeaveSchoolProcessAudit() {
 		return leaveSchoolProcessAudit;
 	}
@@ -66,7 +80,21 @@
 	public void setAuditOption(String auditOption) {
 		this.auditOption = auditOption;
 	}
-	
-	
+
+	public Date getAuditTime() {
+		return auditTime;
+	}
+
+	public void setAuditTime(Date auditTime) {
+		this.auditTime = auditTime;
+	}
+
+	public User getAuditor() {
+		return auditor;
+	}
+
+	public void setAuditor(User auditor) {
+		this.auditor = auditor;
+	}
 	
 }
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
deleted file mode 100644
index a7371f6..0000000
--- a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/AuditNode1Repository.java
+++ /dev/null
@@ -1,27 +0,0 @@
-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/Test.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/Test.java
new file mode 100644
index 0000000..5ece20c
--- /dev/null
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/repository/Test.java
@@ -0,0 +1,16 @@
+package com.supwisdom.leaveschool.leaving.repository;
+
+import org.springframework.stereotype.Service;
+@Service
+public class Test {
+	private String id="00";
+
+	public String getId() {
+		return id+"111113341";
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+}
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/test/Test1.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/test/Test1.java
index eba1f13..87a3774 100644
--- a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/test/Test1.java
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/test/Test1.java
@@ -1,6 +1,7 @@
 package com.supwisdom.leaveschool.leaving.test;
 
 import java.io.Serializable;
+import java.util.Date;
 
 public class Test1 implements Serializable{
 	
@@ -11,6 +12,10 @@
 	private String name;
 	
 	private String address;
+	
+	private Integer age;
+	
+	private Date thisTime;
 
 	public String getId() {
 		return id;
@@ -35,5 +40,21 @@
 	public void setAddress(String address) {
 		this.address = address;
 	}
+
+	public Integer getAge() {
+		return age;
+	}
+
+	public void setAge(Integer age) {
+		this.age = age;
+	}
+
+	public Date getThisTime() {
+		return thisTime;
+	}
+
+	public void setThisTime(Date thisTime) {
+		this.thisTime = thisTime;
+	}
 	
 }
diff --git a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/test/TestMain.java b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/test/TestMain.java
index 1efcfb7..0a16467 100644
--- a/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/test/TestMain.java
+++ b/leaveschool/leaving/src/main/java/com/supwisdom/leaveschool/leaving/test/TestMain.java
@@ -1,24 +1,34 @@
 package com.supwisdom.leaveschool.leaving.test;
 
 import java.lang.reflect.Field;
+import java.util.Date;
 
 public class TestMain {
 	
 	
-	
-	public static <T> Object save(T entity) throws Exception{
-		Field field = entity.getClass().getDeclaredField("id");
-		//setAccessible这行代码把对象上的id字段设置为public访问属性.
-		 field.setAccessible(true);
-		// 设置该T的id属性
-		field.set(entity, "1111");
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public static <T> Object save(T entity,String fieldName,Object fieldVlue) throws Exception{
+		if(fieldVlue!=null) {
+			Field field = entity.getClass().getDeclaredField(fieldName);
+			Class class1 = field.getType();//field.getDeclaringClass();
+			Class class2 = fieldVlue.getClass();
+			System.out.println(class1.isAssignableFrom(class2));
+			//判断两个类型是否相等
+			if(class1.isAssignableFrom(class2)) {
+				//setAccessible这行代码把对象上的id字段设置为public访问属性.
+				 field.setAccessible(true);
+				// 设置该T的id属性
+				field.set(entity, fieldVlue);
+			}
+		}
 		return entity;
 	}
 	
 	public static void main(String[] args) {
 		try {
-			System.out.println(save(new Test1()));
+			System.out.println(save(new Test1(),"thisTime",new Date()));
 		} catch (Exception e) {
+			System.out.println(1111);
 			e.printStackTrace();
 		}
 		
diff --git a/leaveschool/leaving/src/main/resources/application.yml b/leaveschool/leaving/src/main/resources/application.yml
index 4981a80..7287745 100644
--- a/leaveschool/leaving/src/main/resources/application.yml
+++ b/leaveschool/leaving/src/main/resources/application.yml
@@ -15,14 +15,14 @@
     name: leaving
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://180.166.150.114:9512/leave_school?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull
-    #url: jdbc:mysql://172.50.10.15:3306/leave_school?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull
+    #url: jdbc:mysql://180.166.150.114:9512/leave_school?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull
+    url: jdbc:mysql://172.50.10.15:3306/leave_school?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull
     #url: jdbc:mysql://172.18.101.207: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
diff --git a/leaveschool/leaving/src/main/resources/db/leave_school.sql b/leaveschool/leaving/src/main/resources/db/leave_school.sql
deleted file mode 100644
index 077c029..0000000
--- a/leaveschool/leaving/src/main/resources/db/leave_school.sql
+++ /dev/null
@@ -1,443 +0,0 @@
-/*
-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;
