zoukankan      html  css  js  c++  java
  • FlowWork学习(数据库部分)

    简单工作流数据库设计   研发部:罗代均        
            
    项目(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"        

  • 相关阅读:
    【洛谷 1546】最短网络
    [Algorithms]Greedy
    [Operating System]Thread Pool
    微积分——外微分形式的微积分
    Codeforce Round #548(Div2)
    Codeforce Round #544(Div3)
    Codeforce Round #545(Div2) (BCD题解)
    桶排序桶的前缀和/差分
    Codeforce Round #545(Div2)
    Codeforce Round #531(Div3)
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/3116705.html
Copyright © 2011-2022 走看看