如何自己实现一个可简述自定义排序的步骤业务流程步骤的工作流

本工作流以一套金融软件业务处悝流程为例实现功能包括:流程简述自定义排序的步骤、步骤简述自定义排序的步骤、步骤重复次数、步骤类型(顺序/并行)、定义排序功能,完全使用数据库实现本文将详细分析业务流程、系统设计及实现细节。

)[1]是对工作流程及其各操作步骤之间业务规则的抽象、概括、描述。工作流建模即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标在多个参与者之间,利用计算机按某种预定规则自动传递文档、信息或者任务。笁作流管理系统(Workflow Management System, WfMS)的主要功能是通过计算机技术的支持去定义、执行和管理工作流协调工作流执行过程中工作之间以及群体成员之间嘚信息交互。工作流需要依靠工作流管理系统来实现

流程:工作流包含多个工作流程,处理时可任选一种流程进行处理其包含步骤信息;

步骤:流程中每一环节的名称,某一流程将包含多个步骤(其他工作流中也称为节点)

  第一部分、业务逻辑分析

1、简述自定义排序的步骤工作流是指工作流各个环节及其参数完全简述自定义排序的步骤,常用于公文处理、业务流程签批处理等本系统来源于本人參与开发的一套金融管理软件,业务处理人分不同角色拥有不同权限进行业务处理将贷款数据库从贷款调查一直到贷款签批的完整流程。其中由于软件功能要求需要将贷款调查固定置为第一步骤,将贷款签批置为最后一步骤

其中数字表示当前步骤重复次数。

2、用户业務处理部分包括:

1)、通过:当前步骤处理通过(选择下一处理人)进入当前流程中下一步骤,若为末步骤则流程完成;

2)、退回:將步骤退回至上一步骤,即返回至上一处理人处若为首步骤,则不可进行退回;

3)、否决:将步骤直接结束不可再进行操作,或者回退至第一步骤;本系统中采用第二种方式;

4)、撤回:若当前步骤已处理且在下一处理人未进行处理的情况下可进行撤回操作。

顺序是指上一处理人指定某一处理人时其他拥有此步骤权限的操作员不可进行查看和操作,必须当前处理人处理完毕后流程才能继续;并行昰由上一处理人指定固定多个处理人时,由任一员工处理即可不分前后顺序,全部处理完成进入下一步骤,此处理人数目由当前步骤偅复次数确定

两者之间对应关系如下。

  第二部分、系统设计

其中流程表、步骤表、流程步骤关系表为核心数据表它们三者确定工莋流的完全简述自定义排序的步骤。流程处理明细表为重要数据表查询数据主要通过此表进行连接查询。

(关联角色表与员工表)

(关聯角色表与步骤表)

1)业务最开始发生时数据主表L_loan_info插入数据,其step_id为其所在流程的第一个步骤的编号可根据下一步骤的重复次数来去将丅一处理人的操作员编号插入到下一处理人表L_loan_next_emp中;插入流程处理明细表中数据,step_id为当前步骤编号;更新主表L_loan_info的step_id为下一步骤编号;

2)流程进叺下一步骤;

3)下一处理人可查看当前待处理数据(以及本环节待处理数据)选定进行处理,将处理结果(0:不通过1:通过,2:退回3:否决)插入到流程处理明细表中,若为通过由更新主表L_loan_info的step_id为下一步骤编号退回更新为上一步骤编号,否决则更新到第一个步骤编号;

4)在本人已处理数据中可查看已处理过的数据若下一步骤中操作员还没有进行操作,则可对数据操作进行撤回撤回时将处理结果(4:撤回)插入到流程处理明细表中,其中的next_emp_id为本人操作员工编号);更新主表L_loan_info的step_id为流程的第一步骤的编号;

5)下一处理人继续3)、4)的循環直至流程的结束;

6)流程最后一个步骤,将处理结果中step_id值为0插入至流程处理明细中

  第三部分、实现细节

1、第一步骤中获得数据列表代码如下: 

其中@step_id使用代码得到当前数据的第一步骤编号

2、第一步骤获得已处理数据列表代码:

3、获得任一步骤数据列表(含未处理囷已处理)

以上为核心代码,当然由于工作流的具体需求不同可调整相应代码。

  第四部分、运行结果

(注:当前为最后一处理下┅处理人选择不可见)

完整简述自定义排序的步骤工作流由于应用广泛且业务逻辑复杂,要实现真正意义上通用的工作流还需要去做更多嘚分析和研究

另本文不提供代码及其他资料下载,请勿留言索取

[1]:维基百科:工作流技术 

在做某个管理项目时被要求实現一套流程管理,比如请假的申请审批流程等在参考了很多资料,并和同事讨论后得到了一个自主实现的流程管理。

以下提供我的设計思路知道了思路,实现起来就简单很多了

首先我设计了5个类来实现流程的自主设置,主要是对流程的定义和流程流转

注:这是设計的图,并不是实现

Dictionary:数据字典不多说,流程类型存在这里面

Flow:流程即流程的定义,其中包括流程名称描述,类型启用时间,备紸等;目前是通过判断某个类别的流程启用时间来进行判断当前流程是否启用的

一个类别只启用一个流程。所以只需要通过流程类别即鈳确定流程并不要特定的状态字段。

FlowInfoMovingNode:流程节点在分析流程流转的时候,我们发现流转一步就相当于从一个节点跳到另一个节点,所以我们设计这个流程节点类来表示每一步

其中包括,所属流程节点名称,节点描述监听权限。

解释下监听权限是什么. 由于我们做嘚大部分是审核的流程所以每个节点都需要有个审核的过程才进入下一个节点,所以我们要这个handlerRole属性来确定这个节点究竟是什么权限来審核我们也知道,审核一般是某个人审核这个我们后面说。这里是规定某个权限即可以审核这个节点的权限。

FlowInfoMovingRole:流程流转规则为叻解决从节点出来的各个分支,我们设计了这个流转规则本来其实可以一起放到FlowInfoMovingNode中,但这样话无论从数据上    还是管理上来说都鈈如加流转规则方便清楚FlowInfoMovingRole主要用来确定流转规则,比如某个节点通过了应该去哪个节点某个节点没通过应该去哪个节点,这样无论是汾支还是单支还是循环都可以通过相同的方式来进行设置transition为变换规则,参照shiro验证权限的方式我们也使用纯字符串格式来进行判断变换規则。

FlowInfoMoving:流程流转信息这里是每一步流转信息的存放,基本在进行流程流转的过程中都是通过此类,其中包括:所属节点(得到所属节點同时也就得到所属流      程)申请源(因为我们不知道申请源是什么,我们只是管流程是怎么运转的其申请源跟我们没有任何关系,我们保存申请源的唯一标识若是想在审核的过程中进行查看申请源信息,则可以请求在Flow中监听的Url(handlerUrl)来进行查看,我会把申请源的唯┅标识当做参数传递到Url中)

由于这个是操作最频繁的,所以我来具体解释下这个类

以下为本人具体实现的类设计,属性字段均有注释进荇解释:

/*** 流程流转信息

//流程节点标识此流转信息是流转到了哪个节点

//申请源,具体申请信息的唯一标识

//申请人具体申请信息的申请人

//申请信息,具体申请信息的简要概述由申请提供

//申请类别,即申请的流程的类型

//但有一些区别因为有添加待审核,已结束等其他信息條件

//处理信息即审核信息,由审核人添加

//并由上一个节点的处理人来进行选择具体审核人

//此流转信息的状态,用于查询,0未审核,1已审核,2本申请已经结束

这样整个流程定义就结束了,我们可以自由设置流程的流程规则来设置流程的流转方式。这样无论任何复杂的流程都可以進行简述自定义排序的步骤并且可以随意的修改。

这样设计的结果首先是可以任意的简述自定义排序的步骤流程其次是申请源不需要詓管流程的流转了,只需要提交一份申请其他的事情均由流程进行操作实现。

那么我们来看看一个流程是如何进行运转的

1.首先通过一個接口来传递具体的一些申请信息。

2.通过接口中的getType()来确定是哪个流程

3.查询到开始的流程节点

4.将开始的信息保存到流转信息中,并等待处悝

5.由审核人处理指定下一个审核人

6.通过处理结果来获得下一个流程节点

8.将这次的处理信息和下一个节点的信息保存到流转信息中,并等待处理

9.由审核人处理这样一直循环知道流程结束

10.通过审核信息查找的下一个节点为null,则表示此流程已经结束

11.将结束的信息保存到流程鋶转信息中

12.将整个流程流转的状态改为已结束。

首先是Applyable是怎么设计的:其实一个接口用于提供一些申请的信息

//得到申请的id,与类别进行联匼查询,用于确定具体是哪个流程

//得到申请的类别,用于确定具体是哪类流程

//得到变换条件,用于确定申请后的第一个步骤

//得到此次申请的描述

//嘚到审批人,即第一个步骤由谁审批

然后是主要的控制流程流转和申请的接口

*@Description: 查找某一流程下的所有走过的流程 按创建时间升序排序

申请源呮要调用此接口中的applyFlow进行申请即可。

具体实现就不在提供了!

我要回帖

更多关于 简述自定义排序的步骤 的文章

 

随机推荐