在佩特来项目设计中有一个流程设计问题,虽然.NET 和Java都有工作流,但是考虑到这个项目小,这里就简单的借用一点工作流的思想,设计了几张表,然后通过代码来控制流程。下面以"维修鉴定单业务流程"中的有实物流程为例,谈一下具体的流程设计。有实物的维修鉴定业务流程包含大致步骤:代理商填单、打印二维码、拆包、沟通转办、拆分、故障分析、各角色对费用进行审批、费用提交到费用池(统计各代理商金钱的地方)。维修鉴定单流程见下图:
因为系统中不止这一个业务流程,所以系统流程设计的表有任务表(如维修鉴定业务、订单管理业务)、各任务对应的流程步骤表(如维修基地流程要完成的各步骤)、维修鉴定流程表(相当于第三张表,包含维修鉴定单ID、流程步骤ID、及完成的状态),详见下图:
任务表主要记录这个系统有流程的各任务;流程步骤表,记录各个任务对应的各个流程步骤,其中有一个字段优先级,是指各个步骤是第几步进行;业务流程表主要记录某一任务的流程进行到第几步了,进行到第几步用状态字段State统计,此表还记录各步骤操作人及操作内容、时间。
通过图表可以看出这个流程设计比较简单,它的实现流程是:当填单完毕,代理商手动点击按钮,将此维修鉴定单与各流程步骤进行绑定,且第一个流程状态为是,其他流程状态为否。进行完第一个流程,然后进行第2个流程,然后进行第三个流程,以后各流程依次进行。这样设计,只是每次完成某一结点时,要修改这个结点对应的状态。
如何查询进行到某一结点的单子信息(列表)呢? 通过一行代码即可完成:
SELECT * FROM View_DLS_WXJDLC WHERE ID IN(SELECT ID FROM View_DLS_WXJDLC WHERE YXJ=@YXJ-1 AND State='是') AND YXJ=@YXJ AND State='否' AND IsFYC = '否'
代码中用到的视图是维修鉴定流程与流程步骤两张表建立的视图。这行代码的意思是:查询上一优先级对应的步骤完成且本步骤流程尚未做的维修鉴定单信息列表。
到这里,系统流程设计也就简单介绍完了,还有一种设计就是除了任务表及任务步骤表,还建立两张表,一张维护现在进行到的流程步骤,一张记录各任务完成的步骤;经思考两种方式都能实现我们的业务,我们使用的是第一种方式,欢迎大家对这个设计提出建议!!!(ˇ?ˇ)~
佩特来项目经验小集合(5)___系统流程设计,布布扣,bubuko.com
原文地址:http://blog.csdn.net/mazhaojuan/article/details/38665421