初识flowable工作流-实现简单请假流程SpringBoot+VUE

一、前言

大家好,因为目前手里需要用到flowable工作流,之前没有接触过,所以在这里记录一下学习的进度,开始后台使用SpringCloud分布式框架和前端Vue框架实现一个简单的请假流程。

二、代码实现

1.首先引入需要flowable的坐标,也是就pom依赖包。

		<!-- flowable初始化工程所需-->
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-spring-boot-starter</artifactId>
            <version>${flowable.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.mybatis</groupId>
                    <artifactId>mybatis</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- 如果指定了自己的数据库则不需要,h2基于内存存储-->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.197</version>
        </dependency>

2.流程设计
利用flowable-UI可视化设计器设计自己的请假流程,这里只做一个简单请假审批流程,如下图:
在这里插入图片描述
其中,开始审批节点可以指定流程发起者和绑定相应的请假表单,表单可以自己设计,
在这里插入图片描述

在创建新的表单时的key很重要,后面是跟流程绑定的。
在这里插入图片描述
这样自己设计的表单就建好了,在之后的每个流程节点上的表单引用选择此表单进行绑定(同流程开始节点)。
在这里插入图片描述
好了,这里建好了需要的模型,接下来就是如何后台启动部署并走流程了。

3.后台实现

首先,flowable工作流想要生效需要几个步骤:

  1. 建立流程模型(上一步已经做好了),获得bpmn.xml配置文件,这个xml里面记录的是可视化设计页面上的节点、指定人、表单相关信息。
  2. 部署该模型,指定需要使用的流程是哪一个。
  3. 启动刚刚指定的流程实例。
  4. 根据节点指定的审批人或组的key获取待办列表。
  5. 审批该节点。
  6. 自动到下一个节点指定的审批人或组。
  7. 查询节点已办列表。

接下来每一步将详细介绍:

1.获得配置文件

之前咱们建好了流程模型,先下载配置文件
在这里插入图片描述
2.部署流程

这里部署流程有三种:

1.当前我们使用的是classpath部署,即指定classes路径。将下载的xml放在resources下面

//部署流程
		Deployment deploy = repositoryService.createDeployment()
			.addClasspathResource("yourmodelkey.bpmn20.xml")
			.name("yourmodelkey")
			.deploy();

2.根据ui.modeler的 modelId部署

	/**部署流程定义(根据ui.modeler的 modelId部署)
     * @param modelId 模型ID
     * @from fhadmin.cn
     */
    protected String deploymentProcessDefinitionFromUIModelId(String modelId) throws Exception{
        Model model = modelService.getModel(modelId);
        BpmnModel bpmnModel = modelService.getBpmnModel(model);
        Deployment deployment = repositoryService.createDeployment()
        .name(model.getName())
        .addBpmnModel(model.getKey() + ".bpmn", bpmnModel).deploy();
        return deployment.getId(); //部署ID
    }

3.从zip压缩包部署

/**部署流程定义(从zip压缩包)
     * @param name       //部署名称
     * @param zippath    //zip文件路径
     * @from fhadmin.cn
     * @throws FileNotFoundException 
     */
    protected String deploymentProcessDefinitionFromZip(String name, String zippath) throws Exception{
        File outfile = new File(zippath);
        FileInputStream inputStream = new FileInputStream(outfile);
        ZipInputStream ipInputStream = new ZipInputStream(inputStream);
        DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();      //创建部署对象
        deploymentBuilder.name(name);                       //部署名称
        deploymentBuilder.addZipInputStream(ipInputStream);
        Deployment deployment = deploymentBuilder.deploy();  //完成部署
        ipInputStream.close();
        inputStream.close();
        return deployment.getId();                         //部署ID
    }

3.启动流程

	@Autowired
	private RuntimeService runtimeService;
	
	ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("forleave");
	processInstance.getId();//启动的流程Id

到这里已经可以应用刚刚创建的请假流程了,接下来需要到下一个节点审批人。

4.待办列表

/**
* @assignee 指定人id
**/
public List<Task> getTasks(String assignee) {
		//taskCandidateUser() 根据指定人查
		//taskCandidateGroup() 根据指定组查
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		TaskService taskService = processEngine.getTaskService();
		return taskService.createTaskQuery().taskAssignee(assignee).orderByTaskCreateTime().desc().list();
	}

当我们的待办人登录后,则需要选择一条流程进行审批。

5.审批流程

/**
*@id 流程Id
*@approved true表示通过,false表示驳回
*/
public void dealTask(String id,Boolean approved) {
		Map variables = new HashMap<String, Object>();
		variables.put("approved", approved);
		taskService.complete(id, variables);
	}

此刻通过后流程自动流转到下一审批人,需要下一审批人登录后处理。这里我们可以查看当前审批人的已办列表已经有该流程。

6.已办列表

/**
* @assignee 指定人id
**/
public List<HistoricProcessInstance> getdoed(String assignee) {
		return historyService.createHistoricProcessInstanceQuery().involvedUser(assignee).orderByProcessInstanceStartTime().desc().list();
	}

三、总结

以上是初识了两天flowable工作流的内容,熟悉了flowable中Rest API使用和种类,知道了flowable数据库表中表功能,简单的实现了请假流程。这里再补充两个问题,一个是微服务模式下,分布式部署flowable的xml该怎么获取?第二个是实际业务产生的表单如何与工作流相关联?大家有想法吗,可以在评论区一起讨论哦。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大头程序员不头大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值