当前位置: 首页 > news >正文

流程定义和流程实例

  • 流程定义 : 流程图,,ProcessDefinition
  • 流程实例: 我们启动的每一个具体的流程,就是一个流程实例,ProcessInstance
流程部署

放在resource/processes 下面的流程图会被自动部署
跟流程部署相关的三个表:

  • ACT_RE_PROCDEF : 流程定义
  • ACT_RE_DEPLOYMENT : 流程部署
  • ACT_GE_BYTEARRAY : 部署完了,会在这个表里面存,流程定义的xml和图片,会存ACT_RE_DEPLOYMENT的id
    在这里插入图片描述

更新流程信息,如果流程的id没变,,version会+1,,, 如果流程的id变了,会新开
在这里插入图片描述
流程图中的targetNamespace 表示流程的分类:
在这里插入图片描述

流程定义api

跟流程实例流程部署的表,就是RE_开头的表ACT_RE_DEPLOYMENT
ACT_RE_MODEL
ACT_RE_PROCDEF

都是通过RepositoryService操作

流程默认是会自动注入的,,如果需要手动注入,需要配置:

# true: 表示去检查,,false:表示不检查,表示不会自动部署流程
flowable.check-process-definitions=false
flowable.process-definition-location-prefix=classpath:/processes/
# 指定流程定义xml文件后缀,,默认的后缀 是 **.bpmn20.xml,**.bpmn
flowable.process-definition-location-suffixes=**.bpmn20.xml,**.bpmn
@RestController
public class ProcessDeployController {

    @Autowired
    RepositoryService repositoryService;

    @PostMapping("/deploy")
    public RespBean deployProcess(MultipartFile file) throws IOException {
        Deployment deploy = repositoryService
                // 开始部署构建
                .createDeployment()
                .name("测试工作流")
                // 部署表的分类
                .category("流程分类")
                .key("部署的key")
                // 设置文件的输入流,, 通过这个输入流自动读取xml文件
                .addInputStream(file.getOriginalFilename(), file.getInputStream())
                // 完成部署
                .deploy();

        return RespBean.ok("部署成功",deploy.getId());
    }

}

查询流程信息:

// 查询流程定义
List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().latestVersion().list();


 repositoryService.createProcessDefinitionQuery().processDefinitionKey("submit_an_expense_account")
                .orderByProcessDefinitionVersion().desc().list();

// 使用sql查找
 List<ProcessDefinition> list1 = repositoryService.createNativeProcessDefinitionQuery()
                .sql("SELECT * FROM act_re_procdef WHERE key_ = #{key} order by version_ desc")
                .parameter("key", "submit_an_expense_account")
                .list();

// 查询部署表
repositoryService.createDeploymentQuery().deploymentCategory("流程分类").list();


// 删除部署,,删除之后ACT_GE_BYTEARRAY ,,和流程定义表,和部署表,都会被清空
   List<Deployment> list = repositoryService.createDeploymentQuery().list();
        for (Deployment deployment : list) {
            repositoryService.deleteDeployment(deployment.getId());
        }
流程实例api
  • 流程实例 : ProcessInstance :根据流程定义启动一个流程,,这个启动后的流程就是流程实例
  • 执行实例: Execution : 是流程实例在运行时的具体执行路径,除开开始和结束节点
    • 在顺序流程中,流程实例和执行实例通常一一对应
    • 在并行网关或者子流程中,一个流程实例可能对应多个执行实例

ACT_RU_TASK: 当前所有待处理的用户任务(user task)

  • ID_ 任务唯一标识
  • NAME_ 任务名称(如“提交审批”、“经理审核”)
  • ASSIGNEE_ 任务处理人(用户ID)
  • PROC_INST_ID_ 关联的流程实例ID
  • EXECUTION_ID_ 关联的执行实例ID
  • TASK_DEF_KEY_ 任务定义Key(BPMN中定义的id,如userTask_approve)
  • CREATE_TIME_ 任务创建时间
  • DUE_DATE_ 任务截止时间

ACT_RU_EXECUTION: 存储当前所有活跃的执行实例(Execution),表示流程实例的运行路径(如主流程,子流程,并行分支等):

  • ID_ 执行实例唯一标识
  • PROC_INST_ID_ 关联的流程实例ID
  • PARENT_ID_ 父执行实例ID(用于子流程或并行分支)
  • ACT_ID_ 当前活动节点ID(BPMN中的节点id)
  • IS_ACTIVE_ 是否活跃(1=活跃,0=非活跃)
  • IS_SCOPE_ 是否作用域(用于区分主流程和子流程)

ACT_RU_ACTINST : 流程活动的执行情况,,存储所有正在运行或已完成的节点活动实例:

  • ID_ 活动实例唯一标识
    PROC_INST_ID_ 关联的流程实例ID
    EXECUTION_ID_ 关联的执行实例ID
    ACT_ID_ 节点ID(BPMN中的节点id)
    ACT_NAME_ 节点名称(如“提交申请”、“审批通过”)
    ACT_TYPE_ 节点类型(如userTask、exclusiveGateway、startEvent)
    START_TIME_ 节点进入时间
    END_TIME_ 节点退出时间(未完成时为null)
//发起一个流程:
   // 设置流程发起人
        Authentication.setAuthenticatedUserId("ww");

        String processDefinitionKey = "leave";
        // 流程实例
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
        System.out.println(processInstance.getId()+processInstance.getName());



// 查看这个人有哪些任务
     List<Task> list = taskService.createTaskQuery().taskAssignee("ww").list();
        for (Task task : list) {
            System.out.println(task.getId()+task.getName());
            // 完成任务
            taskService.complete(task.getId());
        }


// 查看当前正在运行的流程实例
 // 流程实例只会有一个,,,
        // 流程执行结束会为null
        ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId("xxx").singleResult();


    /**
         * 查看活动节点,,本质上查看 act_ru_execution
         * 查看当前流程执行到哪一步了
         */
        // 查询执行实例
        List<Execution> executions = runtimeService.createExecutionQuery().list();
        for (Execution execution : executions) {
            List<String> activeActivityIds = runtimeService.getActiveActivityIds(execution.getId());
            for (String activeActivityId : activeActivityIds) {
                System.out.println("activeActivityId = " + activeActivityId);
            }
        }


// 删除流程实例
 runtimeService.deleteProcessInstance("id","reason");

  // 挂起的流程定义,,,是无法开启流程实例
        List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();
        for (ProcessDefinition processDefinition : list) {
            // 挂起
            repositoryService.suspendProcessDefinitionById(processDefinition.getId());
            // 激活
            repositoryService.activateProcessDefinitionById(processDefinition.getId());
        }


// 挂起的流程实例
      // 对于一个挂起的流程实例,我们是无法执行相应的 task
        // 流程实例的挂起,最终也会挂起流程定义
        /**
         * param01: 流程定义的id
         * param02: 是否挂起这个流程定义所对应的流程实例
         * parmas03: 挂起的时间 ,, null表示立即挂起,,也可以给一个具体的时间,表示到期之后才会挂起
         */
        repositoryService.suspendProcessDefinitionById("definition id",true,null);

        // 激活流程实例
        repositoryService.activateProcessDefinitionById("definition id",true,null);
    }

相关文章:

  • rk3568 sysrq如何使用快捷键
  • 题解 | 牛客周赛83 Java ABCDEF
  • 多Agent协作智能系统
  • Flutter系列教程之(9)——Flutter调用Android原生
  • 让自己如何快速有用一台华为云桌面。
  • 2025国家护网HVV高频面试题总结来了01(题目+回答)
  • C# dll文件的反编译获取源码
  • 【蓝桥】大小写转换
  • [含文档+PPT+源码等]精品基于Python实现的微信小程序的在线医疗咨询系统
  • 我们应该如何优化UI(基于UGUI)
  • 爬虫:PhantomJS的详细使用和实战案例
  • 【电力——tarjan割点,求连通块】
  • Leetcode132:分割回文串 II
  • 【领域】百度OCR识别
  • 请AI帮我们进行JAVA ORM 框架的选型, Hibernate, Mybatis, Bee,如何选择
  • 类和对象进一步了解c++
  • ​SMPP 协议在短信网关中的应用与迁移指南​附上文档地址(另外有个包内的方法,我使用的版本是又问题的,文章已经附上解决方式)
  • cellphonedb v5受配体多组比较气泡图(原创函数)
  • Ubuntu系统中测试硬盘速度
  • java作业
  • 网站开发技术技巧/开封seo公司
  • 追天网站建设 优帮云/营销推广活动策划
  • 香港免费永久网站/百度推广费用多少
  • 企业做网站哪家公司好/特色产品推广方案
  • 高端网站建设 企业网站建站/网站推广的方式和方法
  • wordpress发布文章关键词/seo作弊