yonge 5 anni fa
parent
commit
bb92fdb1a4

+ 8 - 37
workflowy/pom.xml

@@ -25,44 +25,18 @@
 		</dependency>
 
 		<dependency>
-			<groupId>org.springframework.cloud</groupId>
-			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.springframework.cloud</groupId>
-			<artifactId>spring-cloud-starter-oauth2</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.springframework.cloud</groupId>
-			<artifactId>spring-cloud-starter-security</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.springframework.cloud</groupId>
-			<artifactId>spring-cloud-sleuth-zipkin</artifactId>
-		</dependency>
-
-		<!-- swagger-spring-boot -->
-		<dependency>
-			<groupId>com.spring4all</groupId>
-			<artifactId>swagger-spring-boot-starter</artifactId>
-		</dependency>
-
-		<dependency>
 			<groupId>com.alibaba</groupId>
 			<artifactId>druid-spring-boot-starter</artifactId>
 		</dependency>
 
 		<dependency>
-			<groupId>mysql</groupId>
-			<artifactId>mysql-connector-java</artifactId>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-jdbc</artifactId>
 		</dependency>
 
 		<dependency>
-			<groupId>com.ym</groupId>
-			<artifactId>common-core</artifactId>
+			<groupId>mysql</groupId>
+			<artifactId>mysql-connector-java</artifactId>
 		</dependency>
 
 		<dependency>
@@ -80,16 +54,13 @@
 		</dependency>
 
 		<dependency>
-			<groupId>javax.transaction</groupId>
-			<artifactId>jta</artifactId>
-			<version>1.1</version>
-			<scope>provided</scope>
+			<groupId>commons-beanutils</groupId>
+			<artifactId>commons-beanutils</artifactId>
 		</dependency>
 
 		<dependency>
-			<groupId>cglib</groupId>
-			<artifactId>cglib-nodep</artifactId>
-			<version>3.2.12</version>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-databind</artifactId>
 		</dependency>
 
 		<dependency>

+ 24 - 19
workflowy/src/main/java/org/snaker/engine/helper/DateHelper.java

@@ -14,42 +14,45 @@
  */
 package org.snaker.engine.helper;
 
+import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Map;
 
-import org.joda.time.DateTime;
-
 /**
  * 日期帮助类
  * @author yuqs
  * @since 1.0
  */
 public class DateHelper {
+
 	private static final String DATE_FORMAT_DEFAULT = "yyyy-MM-dd HH:mm:ss";
-	
+
+	private static final SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_DEFAULT);
+
 	/**
 	 * 返回标准格式的当前时间
 	 * @return
 	 */
 	public static String getTime() {
-		return new DateTime().toString(DATE_FORMAT_DEFAULT);
+		return sdf.format(new Date());
 	}
-	
+
 	/**
 	 * 解析日期时间对象
 	 * @param date
 	 * @return
 	 */
 	public static String parseTime(Object date) {
-		if(date == null) return null;
-		if(date instanceof Date) {
-			return new DateTime((Date)date).toString(DATE_FORMAT_DEFAULT);
-		} else if(date instanceof String) {
+		if (date == null)
+			return null;
+		if (date instanceof Date) {
+			return sdf.format(new Date());
+		} else if (date instanceof String) {
 			return String.valueOf(date);
 		}
 		return "";
 	}
-	
+
 	/**
 	 * 对时限数据进行处理
 	 * 1、运行时设置的date型数据直接返回
@@ -60,17 +63,19 @@ public class DateHelper {
 	 * @return Date类型
 	 */
 	public static Date processTime(Map<String, Object> args, String parameter) {
-		if(StringHelper.isEmpty(parameter)) return null;
+		if (StringHelper.isEmpty(parameter))
+			return null;
 		Object data = args.get(parameter);
-		if(data == null) data = parameter;
-		
+		if (data == null)
+			data = parameter;
+
 		Date result = null;
-		if(data instanceof Date) {
-			return (Date)data;
-		} else if(data instanceof Long) {
-			return new Date((Long)data);
-		} else if(data instanceof String) {
-			//TODO 1.4-dev ignore
+		if (data instanceof Date) {
+			return (Date) data;
+		} else if (data instanceof Long) {
+			return new Date((Long) data);
+		} else if (data instanceof String) {
+			// TODO 1.4-dev ignore
 		}
 		return result;
 	}

+ 2 - 1
workflowy/src/main/java/org/snaker/engine/helper/JsonHelper.java

@@ -16,7 +16,8 @@ package org.snaker.engine.helper;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.codehaus.jackson.map.ObjectMapper;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
 
 /**
  * json处理帮助类

+ 6 - 3
workflowy/src/main/java/org/snaker/engine/impl/DefaultNoGenerator.java

@@ -14,9 +14,10 @@
  */
 package org.snaker.engine.impl;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.Random;
 
-import org.joda.time.DateTime;
 import org.snaker.engine.INoGenerator;
 import org.snaker.engine.model.ProcessModel;
 import org.springframework.stereotype.Component;
@@ -29,9 +30,11 @@ import org.springframework.stereotype.Component;
  */
 @Component
 public class DefaultNoGenerator implements INoGenerator {
+
+	private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd-HH:mm:ss-SSS");
+
 	public String generate(ProcessModel model) {
-		DateTime dateTime = new DateTime();
-		String time = dateTime.toString("yyyyMMdd-HH:mm:ss-SSS");
+		String time = sdf.format(new Date());
 		Random random = new Random();
 		return time + "-" + random.nextInt(1000);
 	}

+ 237 - 0
workflowy/src/main/resources/db/core/schema-db2.sql

@@ -0,0 +1,237 @@
+create table wf_process (
+    id               VARCHAR(32) primary key not null,
+    name             VARCHAR(100),
+    display_Name     VARCHAR(200),
+    type             VARCHAR(100),
+    instance_Url     VARCHAR(200),
+    state            SMALLINT(1),
+    content          blob,
+    version          SMALLINT(2),
+    create_Time      VARCHAR(50),
+    creator          VARCHAR(50)
+);
+
+comment on table wf_process is '流程定义表';
+comment on column wf_process.id is '主键ID';
+comment on column wf_process.name is '流程名称';
+comment on column wf_process.display_Name is '流程显示名称';
+comment on column wf_process.type is '流程类型';
+comment on column wf_process.instance_Url is '实例url';
+comment on column wf_process.state is '流程是否可用';
+comment on column wf_process.content is '流程模型定义';
+comment on column wf_process.version is '版本';
+comment on column wf_process.create_Time is '创建时间';
+comment on column wf_process.creator is '创建人';
+
+create table wf_order (
+    id               VARCHAR(32) not null primary key,
+    process_Id       VARCHAR(32) not null,
+    creator          VARCHAR(50),
+    create_Time      VARCHAR(50) not null,
+    expire_Time      VARCHAR(50),
+    last_Update_Time VARCHAR(50),
+    last_Updator     VARCHAR(50),
+    priority         SMALLINT(1),
+    parent_Id        VARCHAR(32),
+    parent_Node_Name VARCHAR(100),
+    order_No         VARCHAR(50),
+    variable         VARCHAR(2000),
+    version          SMALLINT(3)
+);
+comment on table wf_order is '流程实例表';
+comment on column wf_order.id is '主键ID';
+comment on column wf_order.parent_Id is '父流程ID';
+comment on column wf_order.process_Id is '流程定义ID';
+comment on column wf_order.creator is '发起人';
+comment on column wf_order.create_Time is '发起时间';
+comment on column wf_order.expire_Time is '期望完成时间';
+comment on column wf_order.last_Update_Time is '上次更新时间';
+comment on column wf_order.last_Updator is '上次更新人';
+comment on column wf_order.priority is '优先级';
+comment on column wf_order.parent_Node_Name is '父流程依赖的节点名称';
+comment on column wf_order.order_No is '流程实例编号';
+comment on column wf_order.variable is '流程实例附属变量';
+comment on column wf_order.version is '版本';
+
+create table wf_task (
+    id               VARCHAR(32) not null primary key,
+    order_Id         VARCHAR(32) not null,
+    task_Name        VARCHAR(100) not null,
+    display_Name     VARCHAR(200) not null,
+    task_Type        SMALLINT(1) not null,
+    perform_Type     SMALLINT(1),
+    operator         VARCHAR(50),
+    create_Time      VARCHAR(50) not null,
+    finish_Time      VARCHAR(50),
+    expire_Time      VARCHAR(50),
+    action_Url       VARCHAR(200),
+    parent_Task_Id   VARCHAR(32),
+    variable         VARCHAR(2000),
+    version          SMALLINT(1)
+);
+comment on table wf_task is '任务表';
+comment on column wf_task.id is '主键ID';
+comment on column wf_task.order_Id is '流程实例ID';
+comment on column wf_task.task_Name is '任务名称';
+comment on column wf_task.display_Name is '任务显示名称';
+comment on column wf_task.task_Type is '任务类型';
+comment on column wf_task.perform_Type is '参与类型';
+comment on column wf_task.operator is '任务处理人';
+comment on column wf_task.create_Time is '任务创建时间';
+comment on column wf_task.expire_Time is '任务期望完成时间';
+comment on column wf_task.finish_Time is '任务完成时间';
+comment on column wf_task.action_Url is '任务处理的url';
+comment on column wf_task.parent_Task_Id is '父任务ID';
+comment on column wf_task.variable is '附属变量json存储';
+comment on column wf_task.version is '版本';
+
+create table wf_task_actor (
+    task_Id          VARCHAR(32) not null,
+    actor_Id         VARCHAR(50) not null
+);
+comment on table wf_task_actor is '任务参与者表';
+comment on column wf_task_actor.task_Id is '任务ID';
+comment on column wf_task_actor.actor_Id is '参与者ID';
+
+create table wf_hist_order (
+    id               VARCHAR(32) not null primary key,
+    process_Id       VARCHAR(32) not null,
+    order_State      SMALLINT(1) not null,
+    creator          VARCHAR(50),
+    create_Time      VARCHAR(50) not null,
+    end_Time         VARCHAR(50),
+    expire_Time      VARCHAR(50),
+    priority         SMALLINT(1),
+    parent_Id        VARCHAR(32),
+    order_No         VARCHAR(50),
+    variable         VARCHAR(2000)
+);
+comment on table wf_hist_order is '历史流程实例表';
+comment on column wf_hist_order.id is '主键ID';
+comment on column wf_hist_order.parent_Id is '父流程ID';
+comment on column wf_hist_order.process_Id is '流程定义ID';
+comment on column wf_hist_order.order_State is '状态';
+comment on column wf_hist_order.priority is '优先级';
+comment on column wf_hist_order.creator is '发起人';
+comment on column wf_hist_order.create_Time is '发起时间';
+comment on column wf_hist_order.expire_Time is '期望完成时间';
+comment on column wf_hist_order.end_Time is '完成时间';
+comment on column wf_hist_order.order_No is '流程实例编号';
+comment on column wf_hist_order.variable is '流程实例附属变量';
+
+create table wf_hist_task (
+    id               VARCHAR(32) not null primary key,
+    order_Id         VARCHAR(32) not null,
+    task_Name        VARCHAR(100) not null,
+    display_Name     VARCHAR(200) not null,
+    task_Type        SMALLINT(1) not null,
+    perform_Type     SMALLINT(1),
+    task_State       SMALLINT(1) not null,
+    operator         VARCHAR(50),
+    create_Time      VARCHAR(50) not null,
+    finish_Time      VARCHAR(50),
+    expire_Time      VARCHAR(50),
+    action_Url       VARCHAR(200),
+    parent_Task_Id   VARCHAR(32),
+    variable         VARCHAR(2000)
+);
+comment on table wf_hist_task is '历史任务表';
+comment on column wf_hist_task.id is '主键ID';
+comment on column wf_hist_task.order_Id is '流程实例ID';
+comment on column wf_hist_task.task_Name is '任务名称';
+comment on column wf_hist_task.display_Name is '任务显示名称';
+comment on column wf_hist_task.task_Type is '任务类型';
+comment on column wf_hist_task.perform_Type is '参与类型';
+comment on column wf_hist_task.task_State is '任务状态';
+comment on column wf_hist_task.operator is '任务处理人';
+comment on column wf_hist_task.create_Time is '任务创建时间';
+comment on column wf_hist_task.expire_Time is '任务期望完成时间';
+comment on column wf_hist_task.finish_Time is '任务完成时间';
+comment on column wf_hist_task.action_Url is '任务处理的url';
+comment on column wf_hist_task.parent_Task_Id is '父任务ID';
+comment on column wf_hist_task.variable is '附属变量json存储';
+
+create table wf_hist_task_actor (
+    task_Id          VARCHAR(32) not null,
+    actor_Id         VARCHAR(50) not null
+);
+comment on table wf_hist_task_actor is '历史任务参与者表';
+comment on column wf_hist_task_actor.task_Id is '任务ID';
+comment on column wf_hist_task_actor.actor_Id is '参与者ID';
+
+create table wf_surrogate (
+    id                VARCHAR(32) not null primary key,
+    process_Name      VARCHAR(100),
+    operator          VARCHAR(50),
+    surrogate         VARCHAR(50),
+    odate             VARCHAR(64),
+    sdate             VARCHAR(64),
+    edate             VARCHAR(64),
+    state             SMALLINT(1)
+);
+comment on table wf_surrogate is '委托代理表';
+comment on column wf_surrogate.id is '主键ID';
+comment on column wf_surrogate.process_Name is '流程名称';
+comment on column wf_surrogate.operator is '授权人';
+comment on column wf_surrogate.surrogate is '代理人';
+comment on column wf_surrogate.odate is '操作时间';
+comment on column wf_surrogate.sdate is '开始时间';
+comment on column wf_surrogate.edate is '结束时间';
+comment on column wf_surrogate.state is '状态';
+create index IDX_SURROGATE_OPERATOR on wf_surrogate (operator);
+
+create table wf_cc_order (
+    order_Id        VARCHAR(32),
+    actor_Id        VARCHAR(50),
+    creator         VARCHAR(50),
+    create_Time     VARCHAR(50),
+    finish_Time    VARCHAR(50),
+    status          SMALLINT(1)
+);
+comment on table wf_cc_order is '抄送实例表';
+comment on column wf_cc_order.order_Id is '流程实例ID';
+comment on column wf_cc_order.actor_Id is '参与者ID';
+comment on column wf_cc_order.creator is '发起人';
+comment on column wf_cc_order.create_Time is '发起时间';
+comment on column wf_cc_order.finish_Time is '完成时间';
+comment on column wf_cc_order.status is '状态';
+create index IDX_CCORDER_ORDER on wf_cc_order (order_Id);
+
+create index IDX_PROCESS_NAME on wf_process (name);
+create index IDX_ORDER_PROCESSID on wf_order (process_Id);
+create index IDX_ORDER_NO on wf_order (order_No);
+create index IDX_TASK_ORDER on wf_task (order_Id);
+create index IDX_TASK_TASKNAME on wf_task (task_Name);
+create index IDX_TASK_PARENTTASK on wf_task (parent_Task_Id);
+create index IDX_TASKACTOR_TASK on wf_task_actor (task_Id);
+create index IDX_HIST_ORDER_PROCESSID on wf_hist_order (process_Id);
+create index IDX_HIST_ORDER_NO on wf_hist_order (order_No);
+create index IDX_HIST_TASK_ORDER on wf_hist_task (order_Id);
+create index IDX_HIST_TASK_TASKNAME on wf_hist_task (task_Name);
+create index IDX_HIST_TASK_PARENTTASK on wf_hist_task (parent_Task_Id);
+create index IDX_HIST_TASKACTOR_TASK on wf_hist_task_actor (task_Id);
+
+alter table wf_task_actor
+  add constraint FK_TASK_ACTOR_TASKID foreign key (task_Id)
+  references wf_task (id);
+alter table wf_task
+  add constraint FK_TASK_ORDERID foreign key (order_Id)
+  references wf_order (id);
+alter table wf_order
+  add constraint FK_ORDER_PARENTID foreign key (parent_Id)
+  references wf_order (id);
+alter table wf_order
+  add constraint FK_ORDER_PROCESSID foreign key (process_Id)
+  references wf_process (id);
+alter table wf_hist_task_actor
+  add constraint FK_HIST_TASKACTOR foreign key (task_Id)
+  references wf_hist_task (id);
+alter table wf_hist_task
+  add constraint FK_HIST_TASK_ORDERID foreign key (order_Id)
+  references wf_hist_order (id);
+alter table wf_hist_order
+  add constraint FK_HIST_ORDER_PARENTID foreign key (parent_Id)
+  references wf_hist_order (id);
+alter table wf_hist_order
+  add constraint FK_HIST_ORDER_PROCESSID foreign key (process_Id)
+  references wf_process (id);

+ 146 - 0
workflowy/src/main/resources/db/core/schema-h2.sql

@@ -0,0 +1,146 @@
+create table wf_process (
+  id               VARCHAR(32) primary key not null,
+  name             VARCHAR(100),
+  display_Name     VARCHAR(200),
+  type             VARCHAR(100),
+  instance_Url     VARCHAR(200),
+  state            integer,
+  content          longvarbinary,
+  version          integer,
+  create_Time      VARCHAR(50),
+  creator          VARCHAR(50)
+);
+
+create table wf_order (
+  id               VARCHAR(32) not null primary key,
+  process_Id       VARCHAR(32) not null,
+  creator          VARCHAR(50),
+  create_Time      VARCHAR(50) not null,
+  expire_Time      VARCHAR(50),
+  last_Update_Time VARCHAR(50),
+  last_Updator     VARCHAR(50),
+  priority         integer,
+  parent_Id        VARCHAR(32),
+  parent_Node_Name VARCHAR(100),
+  order_No         VARCHAR(50),
+  variable         VARCHAR(2000),
+  version          integer
+);
+
+create table wf_task (
+  id               VARCHAR(32) not null primary key,
+  order_Id         VARCHAR(32) not null,
+  task_Name        VARCHAR(100) not null,
+  display_Name     VARCHAR(200) not null,
+  task_Type        integer not null,
+  perform_Type     integer,
+  operator         VARCHAR(50),
+  create_Time      VARCHAR(50) not null,
+  finish_Time      VARCHAR(50),
+  expire_Time      VARCHAR(50),
+  action_Url       VARCHAR(200),
+  parent_Task_Id   VARCHAR(32),
+  variable         VARCHAR(2000),
+  version          integer
+);
+
+create table wf_task_actor (
+  task_Id          VARCHAR(32) not null,
+  actor_Id         VARCHAR(50) not null
+);
+
+create table wf_hist_order (
+  id               VARCHAR(32) not null primary key,
+  process_Id       VARCHAR(32) not null,
+  order_State      integer not null,
+  creator          VARCHAR(50),
+  create_Time      VARCHAR(50) not null,
+  end_Time         VARCHAR(50),
+  expire_Time      VARCHAR(50),
+  priority         integer,
+  parent_Id        VARCHAR(32),
+  order_No         VARCHAR(50),
+  variable         VARCHAR(2000)
+);
+
+create table wf_hist_task (
+  id               VARCHAR(32) not null primary key,
+  order_Id         VARCHAR(32) not null,
+  task_Name        VARCHAR(100) not null,
+  display_Name     VARCHAR(200) not null,
+  task_Type        integer not null,
+  perform_Type     integer,
+  task_State       integer not null,
+  operator         VARCHAR(50),
+  create_Time      VARCHAR(50) not null,
+  finish_Time      VARCHAR(50),
+  expire_Time      VARCHAR(50),
+  action_Url       VARCHAR(200),
+  parent_Task_Id   VARCHAR(32),
+  variable         VARCHAR(2000)
+);
+
+create table wf_hist_task_actor (
+  task_Id          VARCHAR(32) not null,
+  actor_Id         VARCHAR(50) not null
+);
+
+create table wf_surrogate (
+  id                VARCHAR(32) not null primary key,
+  process_Name      VARCHAR(100),
+  operator          VARCHAR(50),
+  surrogate         VARCHAR(50),
+  odate             VARCHAR(64),
+  sdate             VARCHAR(64),
+  edate             VARCHAR(64),
+  state             integer
+);
+
+create table wf_cc_order (
+  order_Id        VARCHAR(32),
+  actor_Id        VARCHAR(50),
+  creator         VARCHAR(50),
+  create_Time     VARCHAR(50),
+  finish_Time    VARCHAR(50),
+  status          integer
+);
+create index IDX_CCORDER_ORDER on wf_cc_order (order_Id);
+
+create index IDX_PROCESS_NAME on wf_process (name);
+create index IDX_ORDER_PROCESSID on wf_order (process_Id);
+create index IDX_ORDER_NO on wf_order (order_No);
+create index IDX_TASK_ORDER on wf_task (order_Id);
+create index IDX_TASK_TASKNAME on wf_task (task_Name);
+create index IDX_TASK_PARENTTASK on wf_task (parent_Task_Id);
+create index IDX_TASKACTOR_TASK on wf_task_actor (task_Id);
+create index IDX_HIST_ORDER_PROCESSID on wf_hist_order (process_Id);
+create index IDX_HIST_ORDER_NO on wf_hist_order (order_No);
+create index IDX_HIST_TASK_ORDER on wf_hist_task (order_Id);
+create index IDX_HIST_TASK_TASKNAME on wf_hist_task (task_Name);
+create index IDX_HIST_TASK_PARENTTASK on wf_hist_task (parent_Task_Id);
+create index IDX_HIST_TASKACTOR_TASK on wf_hist_task_actor (task_Id);
+
+alter table wf_task_actor
+add constraint FK_TASK_ACTOR_TASKID foreign key (task_Id)
+references wf_task (id);
+alter table wf_task
+add constraint FK_TASK_ORDERID foreign key (order_Id)
+references wf_order (id);
+alter table wf_order
+add constraint FK_ORDER_PARENTID foreign key (parent_Id)
+references wf_order (id);
+alter table wf_order
+add constraint FK_ORDER_PROCESSID foreign key (process_Id)
+references wf_process (id);
+alter table wf_hist_task_actor
+add constraint FK_HIST_TASKACTOR foreign key (task_Id)
+references wf_hist_task (id);
+alter table wf_hist_task
+add constraint FK_HIST_TASK_ORDERID foreign key (order_Id)
+references wf_hist_order (id);
+alter table wf_hist_order
+add constraint FK_HIST_ORDER_PARENTID foreign key (parent_Id)
+references wf_hist_order (id);
+alter table wf_hist_order
+add constraint FK_HIST_ORDER_PROCESSID foreign key (process_Id)
+references wf_process (id);

+ 147 - 0
workflowy/src/main/resources/db/core/schema-mssql.sql

@@ -0,0 +1,147 @@
+create table wf_process (
+    id               nvarchar(32) primary key not null,
+    name             nvarchar(100),
+    display_Name     nvarchar(200),
+    type             nvarchar(100),
+    instance_Url     nvarchar(200),
+    state            tinyint,
+    content          varbinary(max),
+    version          tinyint,
+    create_Time      nvarchar(50),
+    creator          nvarchar(50)
+);
+
+create table wf_order (
+    id               nvarchar(32) not null primary key,
+    process_Id       nvarchar(32) not null,
+    creator          nvarchar(50),
+    create_Time      nvarchar(50) not null,
+    expire_Time      nvarchar(50),
+    last_Update_Time nvarchar(50),
+    last_Updator     nvarchar(50),
+    priority         tinyint,
+    parent_Id        nvarchar(32),
+    parent_Node_Name nvarchar(100),
+    order_No         nvarchar(50),
+    variable         nvarchar(2000),
+    version          tinyint
+);
+
+create table wf_task (
+    id               nvarchar(32) not null primary key,
+    order_Id         nvarchar(32) not null,
+    task_Name        nvarchar(100) not null,
+    display_Name     nvarchar(200) not null,
+    task_Type        tinyint not null,
+    perform_Type     tinyint,
+    operator         nvarchar(50),
+    create_Time      nvarchar(50) not null,
+    finish_Time      nvarchar(50),
+    expire_Time      nvarchar(50),
+    action_Url       nvarchar(200),
+    parent_Task_Id   nvarchar(32),
+    variable         nvarchar(2000),
+    version          tinyint
+);
+
+create table wf_task_actor (
+    task_Id          nvarchar(32) not null,
+    actor_Id         nvarchar(50) not null
+);
+
+create table wf_hist_order (
+    id               nvarchar(32) not null primary key,
+    process_Id       nvarchar(32) not null,
+    order_State      tinyint not null,
+    creator          nvarchar(50),
+    create_Time      nvarchar(50) not null,
+    end_Time         nvarchar(50),
+    expire_Time      nvarchar(50),
+    priority         tinyint,
+    parent_Id        nvarchar(32),
+    order_No         nvarchar(50),
+    variable         nvarchar(2000)
+);
+
+create table wf_hist_task (
+    id               nvarchar(32) not null primary key,
+    order_Id         nvarchar(32) not null,
+    task_Name        nvarchar(100) not null,
+    display_Name     nvarchar(200) not null,
+    task_Type        tinyint not null,
+    perform_Type     tinyint,
+    task_State       tinyint not null,
+    operator         nvarchar(50),
+    create_Time      nvarchar(50) not null,
+    finish_Time      nvarchar(50),
+    expire_Time      nvarchar(50),
+    action_Url       nvarchar(200),
+    parent_Task_Id   nvarchar(32),
+    variable         nvarchar(2000)
+);
+
+create table wf_hist_task_actor (
+    task_Id          nvarchar(32) not null,
+    actor_Id         nvarchar(50) not null
+);
+
+create table wf_surrogate (
+    id                nvarchar(32) not null primary key,
+    process_Name      nvarchar(100),
+    operator          nvarchar(50),
+    surrogate         nvarchar(50),
+    odate             nvarchar(64),
+    sdate             nvarchar(64),
+    edate             nvarchar(64),
+    state             tinyint
+);
+create index IDX_SURROGATE_OPERATOR on wf_surrogate (operator);
+
+create table wf_cc_order (
+    order_Id        nvarchar(32),
+    actor_Id        nvarchar(50),
+    creator         nvarchar(50),
+    create_Time     nvarchar(50),
+    finish_Time     nvarchar(50),
+    status          tinyint
+);
+create index IDX_CCORDER_ORDER on wf_cc_order (order_Id);
+
+create index IDX_PROCESS_NAME on wf_process (name);
+create index IDX_ORDER_PROCESSID on wf_order (process_Id);
+create index IDX_ORDER_NO on wf_order (order_No);
+create index IDX_TASK_ORDER on wf_task (order_Id);
+create index IDX_TASK_TASKNAME on wf_task (task_Name);
+create index IDX_TASK_PARENTTASK on wf_task (parent_Task_Id);
+create index IDX_TASKACTOR_TASK on wf_task_actor (task_Id);
+create index IDX_HIST_ORDER_PROCESSID on wf_hist_order (process_Id);
+create index IDX_HIST_ORDER_NO on wf_hist_order (order_No);
+create index IDX_HIST_TASK_ORDER on wf_hist_task (order_Id);
+create index IDX_HIST_TASK_TASKNAME on wf_hist_task (task_Name);
+create index IDX_HIST_TASK_PARENTTASK on wf_hist_task (parent_Task_Id);
+create index IDX_HIST_TASKACTOR_TASK on wf_hist_task_actor (task_Id);
+
+alter table wf_task_actor
+  add constraint FK_TASK_ACTOR_TASKID foreign key (task_Id)
+  references wf_task (id);
+alter table wf_task
+  add constraint FK_TASK_ORDERID foreign key (order_Id)
+  references wf_order (id);
+alter table wf_order
+  add constraint FK_ORDER_PARENTID foreign key (parent_Id)
+  references wf_order (id);
+alter table wf_order
+  add constraint FK_ORDER_PROCESSID foreign key (process_Id)
+  references wf_process (id);
+alter table wf_hist_task_actor
+  add constraint FK_HIST_TASKACTOR foreign key (task_Id)
+  references wf_hist_task (id);
+alter table wf_hist_task
+  add constraint FK_HIST_TASK_ORDERID foreign key (order_Id)
+  references wf_hist_order (id);
+alter table wf_hist_order
+  add constraint FK_HIST_ORDER_PARENTID foreign key (parent_Id)
+  references wf_hist_order (id);
+alter table wf_hist_order
+  add constraint FK_HIST_ORDER_PROCESSID foreign key (process_Id)
+  references wf_process (id);

+ 147 - 0
workflowy/src/main/resources/db/core/schema-mysql.sql

@@ -0,0 +1,147 @@
+CREATE TABLE wf_process (
+    id                VARCHAR(32) PRIMARY KEY NOT NULL comment '主键ID',
+    name              VARCHAR(100) comment '流程名称',
+    display_Name      VARCHAR(200) comment '流程显示名称',
+    type              VARCHAR(100) comment '流程类型',
+    instance_Url      VARCHAR(200) comment '实例url',
+    state             TINYINT(1) comment '流程是否可用',
+    content           LONGBLOB comment '流程模型定义',
+    version           INT(2) comment '版本',
+    create_Time       VARCHAR(50) comment '创建时间',
+    creator           VARCHAR(50) comment '创建人'
+)comment='流程定义表';
+
+CREATE TABLE wf_order (
+    id                VARCHAR(32) NOT NULL PRIMARY KEY comment '主键ID',
+    parent_Id         VARCHAR(32) comment '父流程ID',
+    process_Id        VARCHAR(32) NOT NULL comment '流程定义ID',
+    creator           VARCHAR(50) comment '发起人',
+    create_Time       VARCHAR(50) NOT NULL comment '发起时间',
+    expire_Time       VARCHAR(50) comment '期望完成时间',
+    last_Update_Time  VARCHAR(50) comment '上次更新时间',
+    last_Updator      VARCHAR(50) comment '上次更新人',
+    priority          TINYINT(1) comment '优先级',
+    parent_Node_Name  VARCHAR(100) comment '父流程依赖的节点名称',
+    order_No          VARCHAR(50) comment '流程实例编号',
+    variable          VARCHAR(2000) comment '附属变量json存储',
+    version           INT(3) comment '版本'
+)comment='流程实例表';
+
+CREATE TABLE wf_task (
+    id                VARCHAR(32) NOT NULL PRIMARY KEY comment '主键ID',
+    order_Id          VARCHAR(32) NOT NULL comment '流程实例ID',
+    task_Name         VARCHAR(100) NOT NULL comment '任务名称',
+    display_Name      VARCHAR(200) NOT NULL comment '任务显示名称',
+    task_Type         TINYINT(1) NOT NULL comment '任务类型',
+    perform_Type      TINYINT(1) comment '参与类型',
+    operator          VARCHAR(50) comment '任务处理人',
+    create_Time       VARCHAR(50) comment '任务创建时间',
+    finish_Time       VARCHAR(50) comment '任务完成时间',
+    expire_Time       VARCHAR(50) comment '任务期望完成时间',
+    action_Url        VARCHAR(200) comment '任务处理的url',
+    parent_Task_Id    VARCHAR(32) comment '父任务ID',
+    variable          VARCHAR(2000) comment '附属变量json存储',
+    version           TINYINT(1) comment '版本'
+)comment='任务表';
+
+CREATE TABLE wf_task_actor (
+    task_Id           VARCHAR(32) not null comment '任务ID',
+    actor_Id          VARCHAR(50) not null comment '参与者ID'
+)comment='任务参与者表';
+
+create table wf_hist_order (
+    id                VARCHAR(32) not null primary key comment '主键ID',
+    process_Id        VARCHAR(32) not null comment '流程定义ID',
+    order_State       TINYINT(1) not null comment '状态',
+    creator           VARCHAR(50) comment '发起人',
+    create_Time       VARCHAR(50) not null comment '发起时间',
+    end_Time          VARCHAR(50) comment '完成时间',
+    expire_Time       VARCHAR(50) comment '期望完成时间',
+    priority          TINYINT(1) comment '优先级',
+    parent_Id         VARCHAR(32) comment '父流程ID',
+    order_No          VARCHAR(50) comment '流程实例编号',
+    variable          VARCHAR(2000) comment '附属变量json存储'
+)comment='历史流程实例表';
+
+create table wf_hist_task (
+    id                VARCHAR(32) not null primary key comment '主键ID',
+    order_Id          VARCHAR(32) not null comment '流程实例ID',
+    task_Name         VARCHAR(100) not null comment '任务名称',
+    display_Name      VARCHAR(200) not null comment '任务显示名称',
+    task_Type         TINYINT(1) not null comment '任务类型',
+    perform_Type      TINYINT(1) comment '参与类型',
+    task_State        TINYINT(1) not null comment '任务状态',
+    operator          VARCHAR(50) comment '任务处理人',
+    create_Time       VARCHAR(50) not null comment '任务创建时间',
+    finish_Time       VARCHAR(50) comment '任务完成时间',
+    expire_Time       VARCHAR(50) comment '任务期望完成时间',
+    action_Url        VARCHAR(200) comment '任务处理url',
+    parent_Task_Id    VARCHAR(32) comment '父任务ID',
+    variable          VARCHAR(2000) comment '附属变量json存储'
+)comment='历史任务表';
+
+create table wf_hist_task_actor (
+    task_Id           VARCHAR(32) not null comment '任务ID',
+    actor_Id          VARCHAR(50) not null comment '参与者ID'
+)comment='历史任务参与者表';
+
+create table wf_surrogate (
+    id                VARCHAR(32) PRIMARY KEY NOT NULL COMMENT '主键ID',
+    process_Name       VARCHAR(100) COMMENT '流程名称',
+    operator          VARCHAR(50) COMMENT '授权人',
+    surrogate         VARCHAR(50) COMMENT '代理人',
+    odate             VARCHAR(64) COMMENT '操作时间',
+    sdate             VARCHAR(64) COMMENT '开始时间',
+    edate             VARCHAR(64) COMMENT '结束时间',
+    state             TINYINT(1) COMMENT '状态'
+)COMMENT='委托代理表';
+create index IDX_SURROGATE_OPERATOR on wf_surrogate (operator);
+
+create table wf_cc_order (
+    order_Id        varchar(32) COMMENT '流程实例ID',
+    actor_Id        varchar(50) COMMENT '参与者ID',
+    creator         varchar(50) COMMENT '发起人',
+    create_Time     varchar(50) COMMENT '抄送时间',
+    finish_Time     varchar(50) COMMENT '完成时间',
+    status          TINYINT(1)  COMMENT '状态'
+)comment='抄送实例表';
+create index IDX_CCORDER_ORDER on wf_cc_order (order_Id);
+
+create index IDX_PROCESS_NAME on wf_process (name);
+create index IDX_ORDER_PROCESSID on wf_order (process_Id);
+create index IDX_ORDER_NO on wf_order (order_No);
+create index IDX_TASK_ORDER on wf_task (order_Id);
+create index IDX_TASK_TASKNAME on wf_task (task_Name);
+create index IDX_TASK_PARENTTASK on wf_task (parent_Task_Id);
+create index IDX_TASKACTOR_TASK on wf_task_actor (task_Id);
+create index IDX_HIST_ORDER_PROCESSID on wf_hist_order (process_Id);
+create index IDX_HIST_ORDER_NO on wf_hist_order (order_No);
+create index IDX_HIST_TASK_ORDER on wf_hist_task (order_Id);
+create index IDX_HIST_TASK_TASKNAME on wf_hist_task (task_Name);
+create index IDX_HIST_TASK_PARENTTASK on wf_hist_task (parent_Task_Id);
+create index IDX_HIST_TASKACTOR_TASK on wf_hist_task_actor (task_Id);
+
+alter table wf_task_actor
+  add constraint FK_TASK_ACTOR_TASKID foreign key (task_Id)
+  references wf_task (id);
+alter table wf_task
+  add constraint FK_TASK_ORDERID foreign key (order_Id)
+  references wf_order (id);
+alter table wf_order
+  add constraint FK_ORDER_PARENTID foreign key (parent_Id)
+  references wf_order (id);
+alter table wf_order
+  add constraint FK_ORDER_PROCESSID foreign key (process_Id)
+  references wf_process (id);
+alter table wf_hist_task_actor
+  add constraint FK_HIST_TASKACTOR foreign key (task_Id)
+  references wf_hist_task (id);
+alter table wf_hist_task
+  add constraint FK_HIST_TASK_ORDERID foreign key (order_Id)
+  references wf_hist_order (id);
+alter table wf_hist_order
+  add constraint FK_HIST_ORDER_PARENTID foreign key (parent_Id)
+  references wf_hist_order (id);
+alter table wf_hist_order
+  add constraint FK_HIST_ORDER_PROCESSID foreign key (process_Id)
+  references wf_process (id);

+ 233 - 0
workflowy/src/main/resources/db/core/schema-oracle.sql

@@ -0,0 +1,233 @@
+create table wf_process (
+    id               varchar2(32) primary key not null,
+    name             varchar2(100),
+    display_Name     varchar2(200),
+    type             varchar2(100),
+    instance_Url     varchar2(200),
+    state            number(1),
+    content          blob,
+    version          number(2),
+    create_Time      varchar2(50),
+    creator          varchar2(50)
+);
+comment on table wf_process is '流程定义表';
+comment on column wf_process.id is '主键ID';
+comment on column wf_process.name is '流程名称';
+comment on column wf_process.display_Name is '流程显示名称';
+comment on column wf_process.type is '流程类型';
+comment on column wf_process.instance_Url is '实例url';
+comment on column wf_process.state is '流程是否可用';
+comment on column wf_process.content is '流程模型定义';
+comment on column wf_process.version is '版本';
+comment on column wf_process.create_Time is '创建时间';
+comment on column wf_process.creator is '创建人';
+
+create table wf_order (
+    id               varchar2(32) not null primary key,
+    process_Id       varchar2(32) not null,
+    creator          varchar2(50),
+    create_Time      varchar2(50) not null,
+    expire_Time      varchar2(50),
+    last_Update_Time varchar2(50),
+    last_Updator     varchar2(50),
+    priority         number(1),
+    parent_Id        varchar2(32),
+    parent_Node_Name varchar2(100),
+    order_No         varchar2(50),
+    variable         varchar2(2000),
+    version          number(3)
+);
+comment on table wf_order is '流程实例表';
+comment on column wf_order.id is '主键ID';
+comment on column wf_order.parent_Id is '父流程ID';
+comment on column wf_order.process_Id is '流程定义ID';
+comment on column wf_order.creator is '发起人';
+comment on column wf_order.create_Time is '发起时间';
+comment on column wf_order.expire_Time is '期望完成时间';
+comment on column wf_order.last_Update_Time is '上次更新时间';
+comment on column wf_order.last_Updator is '上次更新人';
+comment on column wf_order.priority is '优先级';
+comment on column wf_order.parent_Node_Name is '父流程依赖的节点名称';
+comment on column wf_order.order_No is '流程实例编号';
+comment on column wf_order.variable is '流程实例附属变量';
+comment on column wf_order.version is '版本';
+
+create table wf_task (
+    id               varchar2(32) not null primary key,
+    order_Id         varchar2(32) not null,
+    task_Name        varchar2(100) not null,
+    display_Name     varchar2(200) not null,
+    task_Type        number(1) not null,
+    perform_Type     number(1),
+    operator         varchar2(50),
+    create_Time      varchar2(50) not null,
+    finish_Time      varchar2(50),
+    expire_Time      varchar2(50),
+    action_Url       varchar2(200),
+    parent_Task_Id   varchar2(32),
+    variable         varchar2(2000),
+    version          number(1)
+);
+comment on table wf_task is '任务表';
+comment on column wf_task.id is '主键ID';
+comment on column wf_task.order_Id is '流程实例ID';
+comment on column wf_task.task_Name is '任务名称';
+comment on column wf_task.display_Name is '任务显示名称';
+comment on column wf_task.task_Type is '任务类型';
+comment on column wf_task.perform_Type is '参与类型';
+comment on column wf_task.operator is '任务处理人';
+comment on column wf_task.create_Time is '任务创建时间';
+comment on column wf_task.expire_Time is '任务期望完成时间';
+comment on column wf_task.finish_Time is '任务完成时间';
+comment on column wf_task.action_Url is '任务处理的url';
+comment on column wf_task.parent_Task_Id is '父任务ID';
+comment on column wf_task.variable is '附属变量json存储';
+comment on column wf_task.version is '版本';
+
+create table wf_task_actor (
+    task_Id          varchar2(32) not null,
+    actor_Id         varchar2(50) not null
+);
+comment on table wf_task_actor is '任务参与者表';
+comment on column wf_task_actor.task_Id is '任务ID';
+comment on column wf_task_actor.actor_Id is '参与者ID';
+
+create table wf_hist_order (
+    id               varchar2(32) not null primary key,
+    process_Id       varchar2(32) not null,
+    order_State      number(1) not null,
+    creator          varchar2(50),
+    create_Time      varchar2(50) not null,
+    end_Time         varchar2(50),
+    expire_Time      varchar2(50),
+    priority         number(1),
+    parent_Id        varchar2(32),
+    order_No         varchar2(50),
+    variable         varchar2(2000)
+);
+comment on table wf_hist_order is '历史流程实例表';
+comment on column wf_hist_order.id is '主键ID';
+comment on column wf_hist_order.parent_Id is '父流程ID';
+comment on column wf_hist_order.process_Id is '流程定义ID';
+comment on column wf_hist_order.order_State is '状态';
+comment on column wf_hist_order.priority is '优先级';
+comment on column wf_hist_order.creator is '发起人';
+comment on column wf_hist_order.create_Time is '发起时间';
+comment on column wf_hist_order.expire_Time is '期望完成时间';
+comment on column wf_hist_order.end_Time is '完成时间';
+comment on column wf_hist_order.order_No is '流程实例编号';
+comment on column wf_hist_order.variable is '流程实例附属变量';
+
+create table wf_hist_task (
+    id               varchar2(32) not null primary key,
+    order_Id         varchar2(32) not null,
+    task_Name        varchar2(100) not null,
+    display_Name     varchar2(200) not null,
+    task_Type        number(1) not null,
+    perform_Type     number(1),
+    task_State       number(1) not null,
+    operator         varchar2(50),
+    create_Time      varchar2(50) not null,
+    finish_Time      varchar2(50),
+    expire_Time      varchar2(50),
+    action_Url       varchar2(200),
+    parent_Task_Id   varchar2(32),
+    variable         varchar2(2000)
+);
+comment on table wf_hist_task is '历史任务表';
+comment on column wf_hist_task.id is '主键ID';
+comment on column wf_hist_task.order_Id is '流程实例ID';
+comment on column wf_hist_task.task_Name is '任务名称';
+comment on column wf_hist_task.display_Name is '任务显示名称';
+comment on column wf_hist_task.task_Type is '任务类型';
+comment on column wf_hist_task.perform_Type is '参与类型';
+comment on column wf_hist_task.task_State is '任务状态';
+comment on column wf_hist_task.operator is '任务处理人';
+comment on column wf_hist_task.create_Time is '任务创建时间';
+comment on column wf_hist_task.expire_Time is '任务期望完成时间';
+comment on column wf_hist_task.finish_Time is '任务完成时间';
+comment on column wf_hist_task.action_Url is '任务处理的url';
+comment on column wf_hist_task.parent_Task_Id is '父任务ID';
+comment on column wf_hist_task.variable is '附属变量json存储';
+
+create table wf_hist_task_actor (
+    task_Id          varchar2(32) not null,
+    actor_Id         varchar2(50) not null
+);
+comment on table wf_hist_task_actor is '历史任务参与者表';
+comment on column wf_hist_task_actor.task_Id is '任务ID';
+comment on column wf_hist_task_actor.actor_Id is '参与者ID';
+
+create table wf_surrogate (
+    id                varchar2(32) not null primary key,
+    process_Name      varchar2(100),
+    operator          varchar2(50),
+    surrogate         varchar2(50),
+    odate             varchar2(64),
+    sdate             varchar2(64),
+    edate             varchar2(64),
+    state             number(1)
+);
+comment on table wf_surrogate is '委托代理表';
+comment on column wf_surrogate.id is '主键ID';
+comment on column wf_surrogate.process_Name is '流程名称';
+comment on column wf_surrogate.operator is '授权人';
+comment on column wf_surrogate.surrogate is '代理人';
+comment on column wf_surrogate.odate is '操作时间';
+comment on column wf_surrogate.sdate is '开始时间';
+comment on column wf_surrogate.edate is '结束时间';
+comment on column wf_surrogate.state is '状态';
+create index IDX_SURROGATE_OPERATOR on wf_surrogate (operator);
+
+create table wf_cc_order (
+    order_Id        varchar2(32),
+    actor_Id        varchar2(50),
+    creator         varchar2(50),
+    create_Time     varchar2(50),
+    finish_Time    varchar2(50),
+    status          number(1)
+);
+comment on table wf_cc_order is '抄送实例表';
+comment on column wf_cc_order.order_Id is '流程实例ID';
+comment on column wf_cc_order.actor_Id is '参与者ID';
+comment on column wf_cc_order.status is '状态';
+create index IDX_CCORDER_ORDER on wf_cc_order (order_Id);
+
+create index IDX_PROCESS_NAME on wf_process (name);
+create index IDX_ORDER_PROCESSID on wf_order (process_Id);
+create index IDX_ORDER_NO on wf_order (order_No);
+create index IDX_TASK_ORDER on wf_task (order_Id);
+create index IDX_TASK_TASKNAME on wf_task (task_Name);
+create index IDX_TASK_PARENTTASK on wf_task (parent_Task_Id);
+create index IDX_TASKACTOR_TASK on wf_task_actor (task_Id);
+create index IDX_HIST_ORDER_PROCESSID on wf_hist_order (process_Id);
+create index IDX_HIST_ORDER_NO on wf_hist_order (order_No);
+create index IDX_HIST_TASK_ORDER on wf_hist_task (order_Id);
+create index IDX_HIST_TASK_TASKNAME on wf_hist_task (task_Name);
+create index IDX_HIST_TASK_PARENTTASK on wf_hist_task (parent_Task_Id);
+create index IDX_HIST_TASKACTOR_TASK on wf_hist_task_actor (task_Id);
+
+alter table wf_task_actor
+  add constraint FK_TASK_ACTOR_TASKID foreign key (task_Id)
+  references wf_task (id);
+alter table wf_task
+  add constraint FK_TASK_ORDERID foreign key (order_Id)
+  references wf_order (id);
+alter table wf_order
+  add constraint FK_ORDER_PARENTID foreign key (parent_Id)
+  references wf_order (id);
+alter table wf_order
+  add constraint FK_ORDER_PROCESSID foreign key (process_Id)
+  references wf_process (id);
+alter table wf_hist_task_actor
+  add constraint FK_HIST_TASKACTOR foreign key (task_Id)
+  references wf_hist_task (id);
+alter table wf_hist_task
+  add constraint FK_HIST_TASK_ORDERID foreign key (order_Id)
+  references wf_hist_order (id);
+alter table wf_hist_order
+  add constraint FK_HIST_ORDER_PARENTID foreign key (parent_Id)
+  references wf_hist_order (id);
+alter table wf_hist_order
+  add constraint FK_HIST_ORDER_PROCESSID foreign key (process_Id)
+  references wf_process (id);

+ 231 - 0
workflowy/src/main/resources/db/core/schema-postgres.sql

@@ -0,0 +1,231 @@
+CREATE TABLE wf_process (
+    id                VARCHAR(32) PRIMARY KEY NOT NULL,
+    name              VARCHAR(100),
+    display_Name      VARCHAR(200),
+    type              VARCHAR(100),
+    instance_Url      VARCHAR(200),
+    state             smallint,
+    content           text,
+    version           smallint,
+    create_Time       VARCHAR(50),
+    creator           VARCHAR(50)
+);
+COMMENT ON TABLE wf_process IS '流程定义表';
+COMMENT ON COLUMN wf_process.id IS '主键ID';
+COMMENT ON COLUMN wf_process.name IS '流程名称';
+COMMENT ON COLUMN wf_process.display_Name IS '流程显示名称';
+COMMENT ON COLUMN wf_process.type IS '流程类型';
+COMMENT ON COLUMN wf_process.instance_Url IS '实例url';
+COMMENT ON COLUMN wf_process.state IS '流程是否可用';
+COMMENT ON COLUMN wf_process.content IS '流程模型定义';
+COMMENT ON COLUMN wf_process.version IS '版本';
+
+CREATE TABLE wf_order (
+    id                VARCHAR(32) NOT NULL PRIMARY KEY,
+    parent_Id         VARCHAR(32),
+    process_Id        VARCHAR(32) NOT NULL,
+    creator           VARCHAR(50),
+    create_Time       VARCHAR(50) NOT NULL,
+    expire_Time       VARCHAR(50),
+    last_Update_Time  VARCHAR(50),
+    last_Updator      VARCHAR(50),
+    priority          smallint,
+    parent_Node_Name  VARCHAR(100),
+    order_No          VARCHAR(50),
+    variable          VARCHAR(2000),
+    version           smallint
+);
+COMMENT ON TABLE wf_order IS '流程实例表';
+COMMENT ON COLUMN wf_order.id IS '主键ID';
+COMMENT ON COLUMN wf_order.parent_Id IS '父流程ID';
+COMMENT ON COLUMN wf_order.process_Id IS '流程定义ID';
+COMMENT ON COLUMN wf_order.creator IS '发起人';
+COMMENT ON COLUMN wf_order.create_Time IS '发起时间';
+COMMENT ON COLUMN wf_order.expire_Time IS '期望完成时间';
+COMMENT ON COLUMN wf_order.last_Update_Time IS '上次更新时间';
+COMMENT ON COLUMN wf_order.last_Updator IS '上次更新人';
+COMMENT ON COLUMN wf_order.priority IS '优先级';
+COMMENT ON COLUMN wf_order.parent_Node_Name IS '父流程依赖的节点名称';
+COMMENT ON COLUMN wf_order.order_No IS '流程实例编号';
+COMMENT ON COLUMN wf_order.variable IS '附属变量json存储';
+COMMENT ON COLUMN wf_order.version IS '版本';
+
+CREATE TABLE wf_task (
+    id                VARCHAR(32) NOT NULL PRIMARY KEY,
+    order_Id          VARCHAR(32) NOT NULL,
+    task_Name         VARCHAR(100) NOT NULL,
+    display_Name      VARCHAR(200) NOT NULL,
+    task_Type         smallint NOT NULL,
+    perform_Type      smallint,
+    operator          VARCHAR(50),
+    create_Time       VARCHAR(50),
+    finish_Time       VARCHAR(50),
+    expire_Time       VARCHAR(50),
+    action_Url        VARCHAR(200),
+    parent_Task_Id    VARCHAR(32),
+    variable          VARCHAR(2000),
+    version           smallint
+);
+COMMENT ON TABLE wf_task IS '任务表';
+COMMENT ON COLUMN wf_task.id IS '主键ID';
+COMMENT ON COLUMN wf_task.order_Id IS '流程实例ID';
+COMMENT ON COLUMN wf_task.task_Name IS '任务名称';
+COMMENT ON COLUMN wf_task.display_Name IS '任务显示名称';
+COMMENT ON COLUMN wf_task.task_Type IS '任务类型';
+COMMENT ON COLUMN wf_task.perform_Type IS '参与类型';
+COMMENT ON COLUMN wf_task.operator IS '任务处理人';
+COMMENT ON COLUMN wf_task.create_Time IS '任务创建时间';
+COMMENT ON COLUMN wf_task.finish_Time IS '任务完成时间';
+COMMENT ON COLUMN wf_task.expire_Time IS '任务期望完成时间';
+COMMENT ON COLUMN wf_task.action_Url IS '任务处理的url';
+COMMENT ON COLUMN wf_task.parent_Task_Id IS '父任务ID';
+COMMENT ON COLUMN wf_task.variable IS '附属变量json存储';
+COMMENT ON COLUMN wf_task.version IS '版本';
+
+CREATE TABLE wf_task_actor (
+    task_Id           VARCHAR(32) not null,
+    actor_Id          VARCHAR(50) not null
+);
+COMMENT ON TABLE wf_task_actor IS '任务参与者表';
+COMMENT ON COLUMN wf_task_actor.task_Id IS '任务ID';
+COMMENT ON COLUMN wf_task_actor.actor_Id IS '参与者ID';
+
+create table wf_hist_order (
+    id                VARCHAR(32) not null primary key,
+    process_Id        VARCHAR(32) not null,
+    order_State       smallint not null,
+    creator           VARCHAR(50),
+    create_Time       VARCHAR(50) not null,
+    end_Time          VARCHAR(50),
+    expire_Time       VARCHAR(50),
+    priority          smallint,
+    parent_Id         VARCHAR(32),
+    order_No          VARCHAR(50),
+    variable          VARCHAR(2000)
+);
+COMMENT ON TABLE wf_hist_order IS '历史流程实例表';
+COMMENT ON COLUMN wf_hist_order.id IS '主键ID';
+COMMENT ON COLUMN wf_hist_order.process_Id IS '流程定义ID';
+COMMENT ON COLUMN wf_hist_order.order_State IS '状态';
+COMMENT ON COLUMN wf_hist_order.creator IS '发起人';
+COMMENT ON COLUMN wf_hist_order.create_Time IS '发起时间';
+COMMENT ON COLUMN wf_hist_order.end_Time IS '完成时间';
+COMMENT ON COLUMN wf_hist_order.expire_Time IS '期望完成时间';
+COMMENT ON COLUMN wf_hist_order.priority IS '优先级';
+COMMENT ON COLUMN wf_hist_order.parent_Id IS '父流程ID';
+COMMENT ON COLUMN wf_hist_order.order_No IS '流程实例编号';
+COMMENT ON COLUMN wf_hist_order.variable IS '附属变量json存储';
+
+create table wf_hist_task (
+    id                VARCHAR(32) not null primary key,
+    order_Id          VARCHAR(32) not null,
+    task_Name         VARCHAR(100) not null,
+    display_Name      VARCHAR(200) not null,
+    task_Type         smallint not null,
+    perform_Type      smallint,
+    task_State        smallint not null,
+    operator          VARCHAR(50),
+    create_Time       VARCHAR(50) not null,
+    finish_Time       VARCHAR(50),
+    expire_Time       VARCHAR(50),
+    action_Url        VARCHAR(200),
+    parent_Task_Id    VARCHAR(32),
+    variable          VARCHAR(2000)
+);
+COMMENT ON TABLE wf_hist_task IS '历史任务表';
+COMMENT ON COLUMN wf_hist_task.id IS '主键ID';
+COMMENT ON COLUMN wf_hist_task.order_Id IS '流程实例ID';
+COMMENT ON COLUMN wf_hist_task.task_Name IS '任务名称';
+COMMENT ON COLUMN wf_hist_task.display_Name IS '任务显示名称';
+COMMENT ON COLUMN wf_hist_task.task_Type IS '任务类型';
+COMMENT ON COLUMN wf_hist_task.perform_Type IS '参与类型';
+COMMENT ON COLUMN wf_hist_task.task_State IS '任务状态';
+COMMENT ON COLUMN wf_hist_task.operator IS '任务处理人';
+COMMENT ON COLUMN wf_hist_task.create_Time IS '任务创建时间';
+COMMENT ON COLUMN wf_hist_task.finish_Time IS '任务完成时间';
+COMMENT ON COLUMN wf_hist_task.expire_Time IS '任务期望完成时间';
+COMMENT ON COLUMN wf_hist_task.action_Url IS '任务处理url';
+COMMENT ON COLUMN wf_hist_task.parent_Task_Id IS '父任务ID';
+COMMENT ON COLUMN wf_hist_task.variable IS '附属变量json存储';
+
+create table wf_hist_task_actor (
+    task_Id           VARCHAR(32) not null,
+    actor_Id          VARCHAR(50) not null
+);
+COMMENT ON TABLE wf_hist_task_actor IS '历史任务参与者表';
+COMMENT ON COLUMN wf_hist_task_actor.task_Id IS '任务ID';
+COMMENT ON COLUMN wf_hist_task_actor.actor_Id IS '参与者ID';
+
+create table wf_surrogate (
+    id                VARCHAR(32) not null primary key,
+    process_Name      VARCHAR(100),
+    operator          VARCHAR(50),
+    surrogate         VARCHAR(50),
+    odate             VARCHAR(64),
+    sdate             VARCHAR(64),
+    edate             VARCHAR(64),
+    state             smallint
+);
+COMMENT on table wf_surrogate is '委托代理表';
+COMMENT on column wf_surrogate.id is '主键ID';
+COMMENT on column wf_surrogate.process_Name is '流程名称';
+COMMENT on column wf_surrogate.operator is '授权人';
+COMMENT on column wf_surrogate.surrogate is '代理人';
+COMMENT on column wf_surrogate.odate is '操作时间';
+COMMENT on column wf_surrogate.sdate is '开始时间';
+COMMENT on column wf_surrogate.edate is '结束时间';
+COMMENT on column wf_surrogate.state is '状态';
+create index IDX_SURROGATE_OPERATOR on wf_surrogate (operator);
+
+create table wf_cc_order (
+    order_Id        VARCHAR(32),
+    actor_Id        VARCHAR(50),
+    creator         VARCHAR(50),
+    create_Time     VARCHAR(50),
+    finish_Time    VARCHAR(50),
+    status          smallint
+);
+COMMENT on table wf_cc_order is '抄送实例表';
+COMMENT on column wf_cc_order.order_Id is '流程实例ID';
+COMMENT on column wf_cc_order.actor_Id is '参与者ID';
+COMMENT on column wf_cc_order.status is '状态';
+create index IDX_CCORDER_ORDER on wf_cc_order (order_Id);
+
+create index IDX_PROCESS_NAME on wf_process (name);
+create index IDX_ORDER_PROCESSID on wf_order (process_Id);
+create index IDX_ORDER_NO on wf_order (order_No);
+create index IDX_TASK_ORDER on wf_task (order_Id);
+create index IDX_TASK_TASKNAME on wf_task (task_Name);
+create index IDX_TASK_PARENTTASK on wf_task (parent_Task_Id);
+create index IDX_TASKACTOR_TASK on wf_task_actor (task_Id);
+create index IDX_HIST_ORDER_PROCESSID on wf_hist_order (process_Id);
+create index IDX_HIST_ORDER_NO on wf_hist_order (order_No);
+create index IDX_HIST_TASK_ORDER on wf_hist_task (order_Id);
+create index IDX_HIST_TASK_TASKNAME on wf_hist_task (task_Name);
+create index IDX_HIST_TASK_PARENTTASK on wf_hist_task (parent_Task_Id);
+create index IDX_HIST_TASKACTOR_TASK on wf_hist_task_actor (task_Id);
+
+alter table wf_task_actor
+  add constraint FK_TASK_ACTOR_TASKID foreign key (task_Id)
+  references wf_task (id);
+alter table wf_task
+  add constraint FK_TASK_ORDERID foreign key (order_Id)
+  references wf_order (id);
+alter table wf_order
+  add constraint FK_ORDER_PARENTID foreign key (parent_Id)
+  references wf_order (id);
+alter table wf_order
+  add constraint FK_ORDER_PROCESSID foreign key (process_Id)
+  references wf_process (id);
+alter table wf_hist_task_actor
+  add constraint FK_HIST_TASKACTOR foreign key (task_Id)
+  references wf_hist_task (id);
+alter table wf_hist_task
+  add constraint FK_HIST_TASK_ORDERID foreign key (order_Id)
+  references wf_hist_order (id);
+alter table wf_hist_order
+  add constraint FK_HIST_ORDER_PARENTID foreign key (parent_Id)
+  references wf_hist_order (id);
+alter table wf_hist_order
+  add constraint FK_HIST_ORDER_PROCESSID foreign key (process_Id)
+  references wf_process (id);

+ 8 - 5
workflowy/src/test/java/test/time/expire/TestExpire.java

@@ -14,10 +14,11 @@
  */
 package test.time.expire;
 
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.joda.time.DateTime;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -45,12 +46,14 @@ public class TestExpire extends TestSnakerBase {
 	}
 	
 	@Test
-	public void test() {
-		System.out.println(DateHelper.parseTime(new DateTime(2014, 4, 6, 16, 41).toDate()));
+	public void test() throws ParseException {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+		
+		System.out.println(DateHelper.parseTime(sdf.parse("2014-04-06 16:41")));
 		Map<String, Object> args = new HashMap<String, Object>();
 		args.put("task1.operator", new String[]{"1"});
-		args.put("task1.expireTime", new DateTime(2014, 4, 15, 9, 0).toDate());
-		args.put("task1.reminderTime", new DateTime(2014, 4, 15, 8, 57).toDate());
+		args.put("task1.expireTime", sdf.parse("2014-04-15 09:00"));
+		args.put("task1.reminderTime", sdf.parse("2014-04-15 08:57"));
 		Order order = engine.startInstanceByName(PROCESSNAME, null, "2", args);
 		System.out.println("order=" + order);
 //		List<Task> tasks = queryService.getActiveTasks(new QueryFilter().setOrderId(order.getId()));