UML软件工程组织

 

 

简单易用的工作流设计方案
 
2008-06-27 来源:网络
 

简单工作流数据库设计   研发部:罗代均   
     
项目(Item)          
项目ID(ItemId) 项目描述(ItemName) 流程ID (RoutID) 申请人ID (ApplyUserID) 状态(State) 项目类型(ItemType)
1
郑州出差借款
1
1
借款单
2
郑州出差报销
3
1
报销单

这里的项目,是泛指,可以是公文,借款单,报销单等等需要流转的数据.


任务列表(TaskList)        
任务ID(taskId)
项目ID (itemId)
步骤ID (actorId)
状态(state)
版本(version)
1
1
1
检出
100
2
2
3
检出
1001
3
3
3
待检出
1002

项目申请后,任务列表插入一条记录.用户审批通过或者拒绝后,update当前步骤ID(上一步骤或者下一步骤).某个步骤可能有多个审批人,如果要审批,必须先检出.version字段是为了乐观锁控制,保证只能有一人检出.
  
任务历史记录(TaskHistory)        
ID(id) 项目ID (itemId) 步骤ID (actorId) 备注(memo) 操作人ID (operateUserId) 创建时间(createDate)
1
1
1
成都出差
1
 
1
1
2
批准
2
 
1
1
3
批准
3
 

每个步骤的操作,都写入任务历史记录
  

流程(Rout)        
流程ID(routId)
流程描述(routName)
部门ID (deptID)
版本号(version)
状态(State)  
1
借款流程
1
1
发布
2
报销流程
1
1
草稿
2
预算审批流程
1
1
停止

流程草稿状态是可以修改删除,发布状态就不能修改和删除,只能新增一个版本,或者新增一个流程,或者停止流程。


步骤(Actor)      
步骤ID(actorID)
步骤序号(sortNo)
步骤描述(actorName)
流程ID (routId)
1
1
借款申请
1
2
2
部门经理审批
1
3
3
财务经理审批
1

步骤序号是步骤执行的顺序,审批的时候,根据当前序号,查找下一步骤,然后将下一步骤update任务列表的步骤ID,审批拒绝,则查找上一步骤,然后update任务列表的步骤ID
  

步骤处理人(actorUser)  
步骤ID(actorId)
处理人ID (operateUserId)
1
1
2
2
2
3

一个步骤,是有多个处理人。处理人先检出任务列表,然后才能审批。
  
        
视图:待我处理的工作 

select t1.taskId,t1.itemId,t3.operateUserId
from taskList t1
join actor t2 on t1.actorId=t2.actorId
join actorUser t3 on t2.actorId=t3.actorId
where t1.state='待检出'
        
视图:我申请的工作 
 
select t1.itemId,t1.itemName,t1.state,t1.applyUserId,t2.actorId from item t1
join taskList t2 on t1.itemId=t2.itemId 

申请时       
 
"1--查找所选流程的第一个步骤

select   actorId from actor
where routId =1
order by sortNo
limit 0,1

2--插入任务列表taskList

insert into tasklist(actorId,state,version,itemId)
values()

3--插入任务历史记录

insert into taskhistory(itemId,actorid,memo,operateBy,createDate)
values()

4--修改项目Item的状态为待审批

update item set state='wait_to_approve' where itemId=1"        

审批通过        

"1--update任务列表的步骤ID为下一步骤ID

update taskList set actorId=
(select   actorId from actor
where routId = (select routId from actor where actorID=1)
and actorID>1
order by sortNo
limit 0,1
)
where taskId

2--插入任务历史记录

insert into taskhistory(itemId,actorid,memo,operateBy,createDate)
values()

3--修改项目Item的状态为审批中

update item set state='approveing' where itemId=1"        
        
审批拒绝    
    
"1--update任务列表的步骤ID为第一步的ID

update taskList set actorId=
(select   actorId from actor
where routId =(select routId from actor where actorID=1)
order by sortNo
limit 0,1)
where taskId=1

2--插入任务历史记录

insert into taskhistory(itemId,actorid,memo,operateBy,createDate)
values()

3--修改项目Item的状态为审批拒绝

update item set state='jujue' where itemId=1"  
 

组织简介 | 联系我们 |   Copyright 2002 ®  UML软件工程组织 京ICP备10020922号

京公海网安备110108001071号