专业的JAVA编程教程与资源

网站首页 > java教程 正文

zPaaS低代码平台使用介绍:实现流程审批功能

temp10 2025-07-24 21:51:09 java教程 7 ℃ 0 评论

接上一篇《zPaaS低代码平台使用介绍:文件上传下载服务开发》,本篇主要介绍一下如何使用zPaaS低代码开发平台进行流程审批类功能的快速开发。

  1. 开发的功能说明

流程审批功能涉及到工作流引擎,目前低代码平台的工作流引擎集成的camunda,本示例将基于我的休息记录表实现休息记录的管理以及休息申请的会签审批功能,实现的前端功能包括《我的休息记录》以及《申请申请审批》两个功能。

zPaaS低代码平台使用介绍:实现流程审批功能


涉及的数据库表为《my_rest_record》,建表语句如下:

CREATE TABLE `my_rest_record` (

`id` varchar(32) NOT NULL COMMENT '主键',

`user_id` varchar(32) NOT NULL COMMENT '用户id',

`begin_time` datetime NOT NULL COMMENT '开时时间',

`end_time` datetime NOT NULL COMMENT '结束时间',

`apply_time` datetime DEFAULT NULL COMMENT '申请时间',

`apply_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '申请原因',

`process_inst_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '流程实例id',

`status` varchar(1) DEFAULT NULL COMMENT '状态',

`status_time` datetime DEFAULT NULL COMMENT '状态时间',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='我的休息记录';

其中:

  • 用户标识user_id字段:取登录用户的用户标识流程实例标识process_inst_id字段:用户记录工作流引擎的流程实例标识,在工作流引擎流程实例的流程参数中同时记录我的休息记录的主键信息{"applyId":""}
  1. 前提条件

目前低代码平台未直接提供对数据库以及数据库表的管理功能,因此需要使用其他工具,提前创建一个数据库,并在数据库中创建好对应的表。

前提工作:

(1)部署mysql数据库

(2)创建一个database,如demo

(3)在demo库中,使用如上的建表语句,创建my_rest_record表


  1. 准备工作

同《zPaaS低代码平台使用介绍:第一个功能开发》的准备工作,其中流程审批相关的功能及服务放到休息域Rests。


  1. 流程设计

(1)使用工作台左上角的“+”按钮,创建一个流程资源

(2)创建好的流程如下:

(3)延时节点,延时10S执行,并使后续的节点执行异步化,主要用来避免流程启动时的业务逻辑与后续的自动节点逻辑执行顺序错乱的问题。

(4)提交休息申请节点,类型为Service Task,自动节点,主要用于调用后端服务执行相应的逻辑。后端服务通过内置的Java实现类
cn.zpaas.lowcode.be.engine.workflow.ServiceInvokeDelegate以及systemId(业务系统id)、serviceId(服务对象id)、operationId(方法id)三个固定的输入来定位一个后端的服务方法,三个输入参数的值目前未实现界面化的选择功能,需要通过低代码平台找到相应的值并手工填入。为避免执行顺序的错乱,该节点也设置异步执行。对应后端的方法为changeStatus2Approving。

(5)会签节点,两人会签,必须都审批通过才算通过(${nrOfInstances == nrOfCompletedInstances})。涉及审批的人员由流程参数userList传入,示例功能中由前一节点固定两用户id并传入。

(6)两个分支,rejected是流程参数,由前一个节点设置,只要有一个审批驳回审批时,整体流程为驳回;当全部审批通过(没有驳回时),整体流程才算审批通过。

(7)审批通过与审批驳回节点,调用后端服务实现申请状态的变更。对应后端的方法为changeStatus2Approved和changeStatus2Rejected。

  1. 开发后端服务

(1)通过新建《系统功能》或《根据数据库表生成》一键生成后端所有的基础对象。

(2)创建服务对象MyRestRecordService

(3)在MyRestRecordService对象中创建相应的方法如下:

(4)其中addMyRestRecord、deleteMyRestRecordById、modifyMyRestRecordById、
queryMyRestRecordByCondition和queryMyRestRecordById 5个基础的增删改查方法是自动生成的默认方法。其中addMyRestRecord方法是休息记录新增的方法,其业务流增加“对象属性设置”节点,用来设置userId、status和statusTime三个属性的默认值。queryMyRestRecordByCondit方法是休息记录查询方法,其业务流增加“对象属性设置”节点,用于设置默认的查询条件userId,只查询当前用户自己的休息记录。其余三个方法保持生成的状态即可。

(5)新增提交提交审批方法,

该方法首先判断提交审批申请的状态是否正常,如果不正常则抛出“已经存在审批流程或不是待提交状态”的提示;


输入参数

modifyMyRestRecord

status

不等于

字符串比较

固定值

0


输入参数

modifyMyRestRecord

processInstId

不等于

字符串比较

固定值

NULL


输入参数

modifyMyRestRecord

processInstId

不等于

长度比较

固定值

0


然后构建参与会签的用户列表,示例程序中写死两个用户id;

固定值

5df6ddead0d74ae8bb993e9d2af9eb5e

[{"fromAttrPath":"/","toObjectAttr":"[@+]"}]

固定值

6534f4967b3743be86d3f4944f0fe72c

[{"fromAttrPath":"/","toObjectAttr":"[@+]"}]

创建审批流程,创建的时候同时设置流程参数applyId和userList;

输入参数

modifyMyRestRecord

[{"fromAttrPath":"id","toObjectAttr":"applyId"}]

过程数据

userList

[{"fromAttrPath":"/","toObjectAttr":"userList"}]

更新modifyMyRestRecord对象信息;

过程数据

processInstId

[{"fromAttrPath":"/","toObjectAttr":"processInstId"}]

固定值

2

[{"fromAttrPath":"/","toObjectAttr":"status"}]

固定值

now()

[{"fromAttrPath":"/","toObjectAttr":"statusTime"}]

固定值

now()

[{"fromAttrPath":"/","toObjectAttr":"applyTime"}]

调用modifyMyRestRecordById方法保存申请信息;

输入参数

modifyMyRestRecord

[{"fromAttrPath":"/","toObjectAttr":"modifyMyRestRecord"}]

(5)新增add&SubmitMyRestRecord方法,该方法在新增休息记录的时候同时提交审批,生成审批流程。该方法主要调用新增以及提交审批两个方法。

(6)新增changeStatus2Approving方法,该方法主要用于工作流ServiceTask节点调用,用来更新休息记录的状态。

(7)新增approveApply方法,该方法主要用于前端的审批操作,支持审批通过和审批驳回。

(8)新增cancelApply方法,该方法主要用于前端撤加申请。

(9)新增changeStatus2Approved和changeStatus2Rejected方法,该方法主要由工作流的ServiceTask节点调用,用于更新申请的状态为审批通过或驳回。

(10)新增queryApplyToApprove方法,该方法用于前端查询待审批申请;

(11)发布需要由前端调用的服务方法。

(12)详细配置参见示例系统

  1. 开发前端功能

(1)开发《休息管理》和《休息申请审批》功能,同《zPaaS低代码平台使用介绍:第一个功能开发》。

(2)两个功能的绑定对象属性选项基本一致,一个配置好后,可以通过复制功能进行快速同步。特殊配置:申请时间字段支持范围查询、状态字段支持下拉、流程实例Id字段支持弹出查看、用户id字段支持翻译。

{

"default": {

"funcType": "P",

"params": [

{

"valueType": "A",

"value": "processInstId",

"targetAttr": "processInstId"

}

]

}

}

funcType:P为内置的流程查看子功能。

[

{

"sql": "select real_name from sys_user where id=?",

"parent": "",

"datasource": "5195adf9540c4585b413c481bb3fdd6c"

}

]

{

"default": {

"subFuncId": "c6153ad03ac64a9097fc07ba68932b4c",

"params": [

{

"valueType": "F",

"value": "1",

"targetAttr": "status"

}

],

"returnParams": {

"labelAttr": "userName",

"valueAttr": "id"

}

}

}

(3)休息管理功能

(4)休息申请审批功能

(5)最终的效果见示例功能《我的休息记录》和《休息申请审批》

  1. 其他

低代码平台的源码已经提交到GitHub:
https://github.com/zjyzju/zPaaS-lowcode,后续将通过更多的文章,逐步对低代码平台的设计理念/思想、具体的设计、部署以及操作说明进行细化,敬请关注。

另外在一台云服务器上部署了一个演示环境,有兴趣的小伙伴可以通过演示环境进行试用:

访问地址:
https://129.153.118.144:11443

试用账户: demo/adl28m2@ma(a!*D2

demo1/adl28m2@ma(a!*D2

注:(1)该演示环境部署在一台免费的云服务器上,且位于国外,在国内访问响应会比较慢

(2)系统管理子系统的菜单框架引用的@micro-zoe/micro-app@1.0.0-rc.24组件,该组件在不同浏览器中存在兼容性问题,苹果的safari浏览器访问一切正常,但是windows的Edge和谷可的Chrome会存在页面刷不出来的情况,需要多等一会儿(有解决方案的可以邮件发给我,多谢!
https://github.com/jd-opensource/micro-app/issues/1559#issuecomment-2784997902)。

如果有低代码平台以及AI相关的讨论,可以发送邮件到我的邮箱:zjyzju@163.com 。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表