其他分享
首页 > 其他分享> > 03_Snaker流程demo

03_Snaker流程demo

作者:互联网

本篇简介

本篇以一个小Case带大家熟悉下 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);
查看数据表

在这里插入图片描述

	/**
	 * 数据库访问接口
	 * 主要提供保存、更新、查询流程的相关table
	 */
    @Autowired
    private DBAccess dbAccess;
    // LEAVE_PROCESS:流程定义文件的name
	dbAccess.getLatestProcessVersion(LEAVE_PROCESS);
启动一个流程实例
		 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;
    }

在这里插入图片描述

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

标签:engine,03,Snaker,定义,PROCESS,demo,流程,System,println
来源: https://blog.csdn.net/qq_42946728/article/details/113757028