Appearance
基于状态机的审批流程
1 案例需求
在主从表增删改查的案例业务上增加审批流程,新增会议接待单后可以提交审批,审批同意的通过,审批不同意的退回,审批界面如下:
这个审批流程将基于平台的状态机来实现,根据需求应提供的服务接口如下:
接口名称 | 接口功能 | 相关表 |
---|---|---|
会议接待单事件集 | 从状态图获取与状态关联的事件 | |
会议接待单流转 | 变更会议接待单状态 | t_reception |
2 状态图
在配置服务接口前,需要配置会议接待单的状态图。
进入<项目空间>-<状态>,在目录下点击【添加状态】,在弹出框中填写状态代码和名称。
保存后在右边画布上配置状态图,画布上默认有一个“初始状态”节点,点击该节点,在右侧面板上修改其状态名和状态值。
注:状态值应与t_reception表的c_status值的含义保持一致(3:待提交,0:待审批,1:已通过,2:已退回)。
点击工具栏上的新增状态图标按钮可以在画布上添加状态节点,或者拖拽该图标按钮到画布上也可以添加状态节点。
继续在画布上添加状态节点并修改名称和状态值,再按照状态流转关系使用连接线连接如下:
图上的每条连接线代表一个事件,双击连接线输入事件名,完成后的状态图如下:
点击连接线,右侧面板上显示该事件的事件ID(编号)和事件名。
在本案例中,审批接待单时根据当前接待单的状态值(即“待审批”节点状态值)在状态集中找到与之关联的事件集(“同意”和“退回”),达到在前端表单上动态生成【同意】、【退回】按钮的效果,点击【同意】或【退回】时则根据按钮对应的事件ID去变更接待单的状态值。
3 服务配置
3.1 会议接待单事件集
(1)添加接口
在目录下添加一个“会议接待单事件集”接口(POST方法)。
(2)添加服务部件
在画布上添加以下服务部件,并连接部件。
各部件说明如下:
部件类型 | 备注文字 | 任务说明 |
---|---|---|
开始 | ||
事件集 | 返回事件列表 | 根据当前状态获取事件列表 |
结束 |
(3)配置事件集部件:“返回事件列表”
点击该部件,在右侧的部件配置面板上填写输入参数和输出参数。
其中[状态机]指新增状态图时填写的状态代码,[当前状态]指当前状态节点的状态值。
3.2 会议接待单流转
(1)添加接口
在目录下添加一个“会议接待单流转”接口(GET方法)。
(2)添加服务部件
在画布上添加以下服务部件,并连接部件。
各部件说明如下:
部件类型 | 备注文字 | 任务说明 |
---|---|---|
开始 | ||
脚本 | 获取参数 | 从前端页面获取接待单的主键、状态代码、操作按钮(【同意】或【退回】)关联的事件ID |
流转 | 获取状态节点 | 根据事件ID获取下一流转状态节点 |
脚本 | 获取状态值 | 从状态节点中取到状态值 |
执行 | 变更状态 | 使用SQL操作数据库:根据接待单主键在t.recption表查找记录,并变更c_status的值(即状态值) |
结束 |
(3)配置脚本部件:“获取参数”
点击该部件,在右侧的部件配置面板上填写输入参数和输出参数。
其中输入参数的脚本如下:
Google
id = request.params.id;
eventId = request.params.eventId;
stateFlowCode = request.params.stateFlowCode;
(4)配置流转部件:“获取状态节点”
点击该部件,在右侧的部件配置面板上填写输入参数和输出参数。
(5)配置脚本部件:“获取状态值”
点击该部件,在右侧的部件配置面板上填写输入参数和输出参数。
其中输入参数的脚本如下:
Google
status = seq.get(state, "value");
(6)配置执行部件:“变更状态”
点击该部件,在右侧的部件配置面板上填写输入参数。
先选择数据源“test”,再在[SQL语句]输入如下:
Google
UPDATE t_reception SET c_status = ${status} where c_id = ${id}