[转] 简单的工作流

图片

 

简单工作流数据库设计           
项目(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--查找所选流程的第一个步骤
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"        
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"        
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"    

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24777338/viewspace-676199/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24777338/viewspace-676199/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值