Snaker

七张表

WF_PROCESS   //流程定义

WF_ORDER     //流程实例

WF_HIST_ORDER  //历史流程实例

WF_TASK    //任务

WF_HIST_TASK  //历史任务(就是执行完了的任务)

WF_TASK_ACTOR   //每个任务对应的参与者(记住谁可以签收或处理)

WF_HIST_TASK_ACTOR   //历史的参与者表

WF_PROCESS:存放流程定义的,通过编辑一个后缀为.snaker的xml文档来定义流程的走向;然后在流程定义管理里有个部署流程的按钮,可以将编辑好的xml文档保存到WF_PROCESS表中,并产生一条记录。xml文档里有流程的名字,如果这个名字在WF_PROCESS已经存在了,则保存时产生的新的记录的version字段值会自动加1。当然processId肯定是每条记录都是不一样的;

WF_ORDER:存放流程实例的。开启一个流程实例WF_ORDER时。WF_ORDER表有个字段PROCESS_ID和流程定义的process_id相关联,他们是一对多的关系。当开启一个流程实例WF_ORDER时,在WF_ORDER和WF_HIST_ORDER都新增一条记录,其中WF_HIST_ORDER比WF_ORDER多一个字段ORDER_STATUS,当流程没跑完时,ORDER_STATUS的值是1。当整个事件流程跑完了,WF_ORDER表的那条记录会被删除,WF_HIST_ORDER表对应的那条记录的ORDER_STATUS的值变成0,表示流程实例跑完了。WF_ORDER和WF_HIST_ORDER同时产生的那两条记录的主键id是一样的。

WF_TASK:存当前任务的;当流程执行完当前任务节点时,WF_TASK的这条记录会被剪切到WF_HIST_TASK表中,然后在WF_TASK表中新增下一个任务节点的信息记录。新增的下一任务节点的task有个字段 parent_task_id记住上一个任务节点在WF_HIST_TASK表里的WF_HIST_TASK_ID(上一个任务节点从WF_TASK表剪切到WF_HIST_TASK了);这样就可以实现回退等功能。

WF_TASK_ACTOR:存哪个任务关联了那些参与者的,就是哪些人可以签收或者处理。如果当前任务节点被执行了,则相关的参与者会被剪切到WF_HIST_TASK_ACTOR表里,和WF_TASK、WF_HIST_TASK类似,这样回退时,就知道以前这一步是谁处理的。

操作流程

select id,name,display_Name,type,instance_Url,state, content, version,create_Time,creator from wf_process where id = ?

insert into wf_order (id,process_Id,creator,create_Time,parent_Id,parent_Node_Name,expire_Time,last_Update_Time,last_Updator,order_No,variable,version) values (?,?,?,?,?,?,?,?,?,?,?,?)

insert into wf_hist_order (id,process_Id,order_State,creator,create_Time,end_Time,parent_Id,expire_Time,order_No,variable) values (?,?,?,?,?,?,?,?,?,?)

insert into wf_task (id,order_Id,task_Name,display_Name,task_Type,perform_Type,operator,create_Time,finish_Time,expire_Time,action_Url,parent_Task_Id,variable,version) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)

insert into wf_task_actor (task_Id, actor_Id) values (?, ?)

insert into wf_hist_task (id,order_Id,task_Name,display_Name,task_Type,perform_Type,task_State,operator,create_Time,finish_Time,expire_Time,action_Url,parent_Task_Id,variable) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)

insert into wf_hist_task_actor (task_Id, actor_Id) values (?, ?)

delete from wf_task_actor where task_Id = ?

delete from wf_task where id = ?

update wf_order set last_Updator=?, last_Update_Time=?, variable = ?, expire_Time=?, version = version + 1 where id=? and version = ?

insert into wf_task (id,order_Id,task_Name,display_Name,task_Type,perform_Type,operator,create_Time,finish_Time,expire_Time,action_Url,parent_Task_Id,variable,version) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)

insert into wf_task_actor (task_Id, actor_Id) values (?, ?)

public void deleteTask(Task task) {

if (!this.isORM()) {

Object[] args = new Object[]{task.getId()};

int[] type = new int[]{12};

this.saveOrUpdate(this.buildMap("delete from wf_task_actor where task_Id = ?", args, type));

this.saveOrUpdate(this.buildMap("delete from wf_task where id = ?", args, type));

}

//启动

public void saveOrder(Order order) {

HistoryOrder history = new HistoryOrder(order);

history.setOrderState(STATE_ACTIVE);

this.access().saveOrder(order);

this.access().saveHistory(history);

}

}

//执行删除task 插入历史表

public void complete(String orderId) {

Order order = this.access().getOrder(orderId);

HistoryOrder history = this.access().getHistOrder(orderId);

history.setOrderState(STATE_FINISH);

history.setEndTime(DateHelper.getTime());

this.access().updateHistory(history);

this.access().deleteOrder(order);

Completion completion = this.getCompletion();

if (completion != null) {

completion.complete(history);

}

猜你喜欢

转载自blog.csdn.net/yu35081401032/article/details/86620640
今日推荐