简单易用的工作流设计方案

  

简单易用的工作流设计方案

  简单工作流数据库设计  研发部:罗代均 

项目(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)
111检出100
223检出1001
333待检出1002

  项目申请后,任务列表插入一条记录.用户审批通过或者拒绝后,update当前步骤ID(上一步骤或者下一步骤).某个步骤可能有多个审批人,如果要审批,必须先检出.version字段是为了乐观锁控制,保证只能有一人检出.

  

任务历史记录(TaskHistory)    
ID(id) 项目ID (itemId) 步骤ID (actorId)备注(memo) 操作人ID (operateUserId)创建时间(createDate)
111成都出差1 
112批准2 
113批准3 

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

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

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

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

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

步骤处理人(actorUser) 
步骤ID(actorId)处理人ID (operateUserId)
11
22
23

  一个步骤,是有多个处理人。处理人先检出任务列表,然后才能审批。 

  视图:待我处理的工作

  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"

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值