关于工作流的数据库设计

关于工作流的数据库设计,第1张

项目(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) 11 1 检出 100

2 23 检出 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 报销流程 11草稿

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 t1join 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,12--插入任务列表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"

那就设计两个表,一个是部门权限表,每个部门按照级别高低设置权限。另一个是部门成员权限表,为隶属该部门的每个成员设置权限。

这样要判断工作流中A,B的权限高低就看工作流是在哪个部门流转的。比如是在整个企业流转,那么A的权限高于B,仅在部门流转,那么B权限高于A。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6913203.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-30
下一篇 2023-03-30

发表评论

登录后才能评论

评论列表(0条)

保存