Skip to content
本页目录

基于状态机的审批流程

1 案例需求

主从表增删改查的案例业务上增加审批流程,新增会议接待单后可以提交审批,审批同意的通过,审批不同意的退回,审批界面如下:

image

这个审批流程将基于平台的状态机来实现,根据需求应提供的服务接口如下:

接口名称接口功能相关表
会议接待单事件集从状态图获取与状态关联的事件
会议接待单流转变更会议接待单状态t_reception

2 状态图

在配置服务接口前,需要配置会议接待单的状态图。

进入<项目空间>-<状态>,在目录下点击【添加状态】,在弹出框中填写状态代码和名称。

image

image

保存后在右边画布上配置状态图,画布上默认有一个“初始状态”节点,点击该节点,在右侧面板上修改其状态名和状态值。

注:状态值应与t_reception表的c_status值的含义保持一致(3:待提交,0:待审批,1:已通过,2:已退回)。

image

点击工具栏上的新增状态图标按钮可以在画布上添加状态节点,或者拖拽该图标按钮到画布上也可以添加状态节点。

image

继续在画布上添加状态节点并修改名称和状态值,再按照状态流转关系使用连接线连接如下:

image

图上的每条连接线代表一个事件,双击连接线输入事件名,完成后的状态图如下:

image

点击连接线,右侧面板上显示该事件的事件ID(编号)和事件名。

image

在本案例中,审批接待单时根据当前接待单的状态值(即“待审批”节点状态值)在状态集中找到与之关联的事件集(“同意”和“退回”),达到在前端表单上动态生成【同意】、【退回】按钮的效果,点击【同意】或【退回】时则根据按钮对应的事件ID去变更接待单的状态值。

3 服务配置

3.1 会议接待单事件集

(1)添加接口

在目录下添加一个“会议接待单事件集”接口(POST方法)。

(2)添加服务部件

在画布上添加以下服务部件,并连接部件。

image

各部件说明如下:

部件类型备注文字任务说明
开始
事件集返回事件列表根据当前状态获取事件列表
结束

(3)配置事件集部件:“返回事件列表”

点击该部件,在右侧的部件配置面板上填写输入参数和输出参数。

其中[状态机]指新增状态图时填写的状态代码,[当前状态]指当前状态节点的状态值。

image

3.2 会议接待单流转

(1)添加接口

在目录下添加一个“会议接待单流转”接口(GET方法)。

(2)添加服务部件

在画布上添加以下服务部件,并连接部件。

image

各部件说明如下:

部件类型备注文字任务说明
开始
脚本获取参数从前端页面获取接待单的主键、状态代码、操作按钮(【同意】或【退回】)关联的事件ID
流转获取状态节点根据事件ID获取下一流转状态节点
脚本获取状态值从状态节点中取到状态值
执行变更状态使用SQL操作数据库:根据接待单主键在t.recption表查找记录,并变更c_status的值(即状态值)
结束

(3)配置脚本部件:“获取参数”

点击该部件,在右侧的部件配置面板上填写输入参数和输出参数。

image

其中输入参数的脚本如下:

Google
id = request.params.id;
eventId = request.params.eventId;
stateFlowCode = request.params.stateFlowCode;

(4)配置流转部件:“获取状态节点”

点击该部件,在右侧的部件配置面板上填写输入参数和输出参数。

image

(5)配置脚本部件:“获取状态值”

点击该部件,在右侧的部件配置面板上填写输入参数和输出参数。

image

其中输入参数的脚本如下:

Google
status = seq.get(state, "value");

(6)配置执行部件:“变更状态”

点击该部件,在右侧的部件配置面板上填写输入参数。

image

先选择数据源“test”,再在[SQL语句]输入如下:

Google
UPDATE t_reception SET c_status = ${status} where c_id = ${id}

内部资料,请勿外传