03_Snaker流程demo

本篇简介

本篇以一个小Case带大家熟悉下 Snaker是如何运作的,对于初入门的老铁可以先跟着我得思路走,你会逐步熟悉Snaker提供的操作

请假案例
流程定义文件存放位置

在这里插入图片描述

  • Snaker中的流程定义文件是以.snaker结尾
流程定义模型

在这里插入图片描述

流程定义文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<process displayName="请假流程测试" instanceUrl="/snaker/flow/all" name="leave">
	<start displayName="start1" layout="24,124,-1,-1" name="start1">
	<transition g="" name="transition1" offset="0,0" to="apply"/>
	</start>
	<end displayName="end1" layout="570,124,-1,-1" name="end1"/>
	<task assignee="apply" displayName="请假申请" form="/flow/leave/apply" layout="117,122,-1,-1" name="apply" performType="ANY">
	<transition g="" name="transition2" offset="0,0" to="approveDept"/>
	</task>
	<task assignee="approveDept" displayName="部门经理审批" form="/flow/leave/approveDept" layout="272,122,-1,-1" name="approveDept" performType="ANY">
	<transition g="" name="transition3" offset="0,0" to="decision1"/>
	</task>
	<decision displayName="decision1" expr="#day &gt; 2 ? 'transition5' : 'transition4'" layout="426,124,-1,-1" name="decision1">
	<transition displayName="&lt;=2天" g="" name="transition4" offset="0,0" to="end1"/>
	<transition displayName="&gt;2天" g="" name="transition5" offset="0,0" to="approveBoss"/>
	</decision>
	<task assignee="approveBoss" displayName="总经理审批" form="/flow/leave/approveBoss" layout="404,231,-1,-1" name="approveBoss" performType="ANY">
	<transition g="" name="transition6" offset="0,0" to="end1"/>
	</task>
</process>
组件模型属性

在这里插入图片描述

部署流程定义文件
注入流程引擎接口
    @Autowired
    private SnakerEngine engine;
部署流程定义文件
        InputStream streamFromClasspath = StreamHelper.getStreamFromClasspath("flows/leave.snaker");
        String deploy = engine.process().deploy(streamFromClasspath);
        System.out.println(deploy);
查看数据表

在这里插入图片描述

  • wf_process中就会增加一条数据,如果重复部署version就会加一
  • 一般我都会使用最新的流程定义,重复部署意味着我们的流程有变更,管理员才会有的操作
  • 如何获取一个流程定义最新的版本是多少呢?放心提供的有API
	/**
	 * 数据库访问接口
	 * 主要提供保存、更新、查询流程的相关table
	 */
    @Autowired
    private DBAccess dbAccess;
    // LEAVE_PROCESS:流程定义文件的name
	dbAccess.getLatestProcessVersion(LEAVE_PROCESS);
启动一个流程实例
  • tom这名员工要请假
		 Integer leaveVersion = dbAccess.getLatestProcessVersion(LEAVE_PROCESS);
        // 流程定义Id、操作人、参数
        Order dm = engine.startInstanceByName(LEAVE_PROCESS, leaveVersion, "tom");
        System.out.println(dm.getId());
  • 更多启动流程实例方法
    在这里插入图片描述
启动流程并执行
/**
     * 据流程定义 name 启动流程实例
     * 申请上线操作发起;并完成任务
     */
    @Test
    public void startInstanceByNameAndExecute() {
        // Process process = allProcess.get(0);
        Map<String, Object> map = new HashMap<>();
        // 传递变量;申请者的Id
        map.put("apply", APPLY_OPERATOR);
        // 传递变量;部门审批人的Id
        map.put("approveDept", APPROVE_DEPT_OPERATOR);
        // 变量 请假天数
        map.put("day", 3);
        Integer leaveVersion = dbAccess.getLatestProcessVersion(LEAVE_PROCESS);
        // 获取一个流程定义最新的版本
        // 按照名字启动的 流程
        Order dm = startAndExecute(LEAVE_PROCESS, leaveVersion, APPLY_OPERATOR, map);
        System.out.println(dm.getId());
    }

    private Order startAndExecute(String name, Integer version, String operator, Map<String, Object> args) {
        Order order = engine.startInstanceByName(name, version, operator, args);
        List<Task> tasks = engine.query().getActiveTasks(new QueryFilter().setOrderId(order.getId()));
        if (tasks != null && tasks.size() > 0) {
            List<Task> tasks1 = engine.executeTask(tasks.get(0).getId(), operator, args);
            if (!tasks1.isEmpty() && tasks1.size() == 1) {
                engine.task().addTaskActor(tasks1.get(0).getId(), "approve_userName2");
                System.out.println("测试加签----------加签成功!");
            } else {
                System.out.println("测试加签----------加签失败!");
            }
            System.out.println(tasks1.size());
        }
        return order;
    }
  • 任务表数据变化

    在这里插入图片描述

  • 历史任务表数据变化
    在这里插入图片描述

  • 任务和参与人表数据变化

在这里插入图片描述

历史 任务和参与人表数据变化
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qq_2760097491

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

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

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

打赏作者

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

抵扣说明:

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

余额充值