springboot整合Camunda实现业务

news2024/11/19 20:46:48

1.bean实现 业务 

1.画流程图

系统任务,实现方式

 

2.定义bean 

package com.jmj.camunda7test.process.config;

import lombok.extern.slf4j.Slf4j;
import org.camunda.bpm.engine.TaskService;
import org.camunda.bpm.engine.delegate.JavaDelegate;
import org.camunda.bpm.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.awt.*;
import java.net.URI;
import java.util.Map;

@Configuration
@Slf4j
public class ProcessConfiguration {

    @Autowired
    TaskService taskService;



    @Bean("baidu")
    public JavaDelegate baidu() {
        return execution -> {
            String processDefinitionId = execution.getProcessDefinitionId();
            log.info("processDefinitionId:{}", processDefinitionId);
            Map<String, Object> variables = execution.getVariables();
            log.info("approved:{}", variables.get("approved"));
            try {
                System.out.println("来访问百度了");
            } catch (Exception e) {
                e.printStackTrace();
            }
        };
    }


    @Bean("hao123")
    public JavaDelegate hao123() {
        return execution -> {
            String processDefinitionId = execution.getProcessDefinitionId();
            log.info("processDefinitionId:{}", processDefinitionId);
            Map<String, Object> variables = execution.getVariables();
            log.info("approved:{}", variables.get("approved"));
            try {
                System.out.println("来访问hao123了");
            } catch (Exception e) {
                e.printStackTrace();
            }

        };
    }


}

 3.会对应Bean去执行

package com.jmj.camunda7test.controller;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.camunda.bpm.engine.RepositoryService;
import org.camunda.bpm.engine.RuntimeService;
import org.camunda.bpm.engine.TaskService;
import org.camunda.bpm.engine.repository.Deployment;
import org.camunda.bpm.engine.repository.ProcessDefinition;
import org.camunda.bpm.engine.runtime.ProcessInstance;
import org.camunda.bpm.engine.task.Task;
import org.camunda.bpm.engine.task.TaskQuery;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
class ResServiceTest {
    @Autowired
    private ResService resService;
    @Autowired
    private RepositoryService repositoryService;
    @Autowired
    private RuntimeService runtimeService;
    @Autowired
    private TaskService taskService;


    @Test
    //部署
    void deploy() {
        Deployment deploy = repositoryService.createDeployment().name("测试bean")
                .addClasspathResource("bpmn/process.bpmn")//绑定需要部署的流程文件
                .enableDuplicateFiltering(true)
                .deploy();
        System.out.println(deploy.getId() + ":" + deploy.getName());

    }

    @Test
    //运行
    void run() {

        ProcessInstance processInstance = runtimeService.startProcessInstanceById("my-project-process:5:21b5c0c8-399e-11ef-b3eb-005056c00008");
        String processDefinitionId = processInstance.getProcessDefinitionId();
        String businessKey = processInstance.getBusinessKey();
        String processInstanceId = processInstance.getProcessInstanceId();
        System.out.println(processDefinitionId);
        System.out.println(businessKey);
        System.out.println(processInstanceId);

    }

    public static final String Approved = "approved";

    @Test
    //运行
    void run1() {
        Map<String, Object> map = new HashMap<>();
        map.put(Approved, true);
        map.put("user", new DataB("testId","TestName"));
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("my-project-process", map);
        System.out.println("流程启动成功: 流程实例ID=" + processInstance.getProcessInstanceId());
    }

    @Test
    //完成用户任务
    void compelete() {
        TaskQuery taskQuery = taskService.createTaskQuery().processDefinitionKey("my-project-process")
                .orderByProcessInstanceId()
                .desc()
                .active();
        String taskId = taskQuery.list().get(0).getId();
        Map<String, Object> map = new HashMap<>();

        map.put("user", "admin");

        taskService.complete(taskId, map);

    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    //参数
    static class DataB implements Serializable {
        private String id;
        private String name;
    }

    @Test
    //完成用户任务 
    void compelete1() {


        Task task = taskService.createTaskQuery().taskAssignee("admin").list().get(0);
        Map<String, Object> variables = taskService.getVariables(task.getId());
        variables.forEach((k, v) -> {
            System.out.println(k + ":" + v);
        });
        taskService.setVariable(task.getId(), Approved, false);
        taskService.complete(task.getId());


    }

    @Test
    //级联删除所有部署
    void deleteDeploy() {
        for (ProcessDefinition processDefinition : repositoryService.createProcessDefinitionQuery().list()) {
            System.out.println(processDefinition.getId() + ":" + processDefinition.getName());
        }
        repositoryService.createDeploymentQuery().list().forEach(deployment -> {
            repositoryService.deleteDeployment(deployment.getId(), true);

        });
    }

    @Test
    //删除部署
    void delete() {
        repositoryService.deleteDeployment("86cf1536-39a5-11ef-ba9b-005056c00008", true);
    }
}

2.JavaClass:

package com.jmj.camunda7test.process.config;

import lombok.extern.slf4j.Slf4j;
import org.camunda.bpm.engine.RepositoryService;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.JavaDelegate;
import org.camunda.bpm.engine.repository.Deployment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

@Slf4j
@Component
public class Hao123Delegate implements JavaDelegate {
    @Autowired
    private RepositoryService repositoryService;
    @Override
    public void execute(DelegateExecution execution) throws Exception {
        List<Deployment> list = repositoryService.createDeploymentQuery().list();
        for (Deployment deployment : list) {
            System.out.println(deployment.getId()+":"+deployment.getName());
        }
        log.info("进入Java;类执行 hao123");
    }
}

3.Expression

下面两种可使用spring的配置

EL表达式,调用java类的方法 ,规范:

expression=“#{monitorExecution.execution(execution)}”

 直接调用容器中对象的方法

package com.jmj.camunda7test.getStarted.chargecard;

import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Component;

@Component("testA")
public class TestA {
    public void add(DelegateExecution delegateExecution) {
        String processDefinitionId = delegateExecution.getProcessDefinitionId();
        System.out.println("testA:"+processDefinitionId);
    }
}

 4.创建用户 组

package com.jmj.camunda7test.controller;

import org.camunda.bpm.engine.IdentityService;
import org.camunda.bpm.engine.identity.Group;
import org.camunda.bpm.engine.identity.GroupQuery;
import org.camunda.bpm.engine.identity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class IdentityActivity {

    @Autowired
    IdentityService identityService;

    @Test
    void createUser() {
        List<User> list = identityService.createUserQuery().list();
        for (User user : list) {
            System.out.println(user.getId());
            System.out.println(user.getFirstName());
            System.out.println(user.getEmail());
            System.out.println(user.getPassword());
            System.out.println(user.getLastName());
        }
    }

    @Test
    void selectUserGroup() {
        List<Group> list = identityService.createGroupQuery().groupId("camunda-admin").list();
        System.out.println(list.get(0).getName());
    }

    @Test
    void getCurrentAuth() {
        identityService.setAuthenticatedUserId("admin");
        String userId = identityService.getCurrentAuthentication().getUserId();
        System.out.println(userId);
    }

    @Test
    void createUserID() {
        User jmj = identityService.newUser("jmj");
        jmj.setFirstName("mingji");
        jmj.setLastName("jiang");
        jmj.setPassword("123456");
        jmj.setEmail("123@qq");
        identityService.saveUser(jmj);
    }

    @Test
    void bindGroup() {
        identityService.createMembership("jmj","camunda-admin");



    }
}

官网Spring Boot Version Compatibility | docs.camunda.org

5.获取候选人用户

候选人或者主要审批人或者候选组的所有用户都会有审批的权限,谁审批了,就过去了

   @Test
    //完成用户任务
    void compelete1() {

        identityService.setAuthenticatedUserId("jmj");

        Authentication currentAuthentication = identityService.getCurrentAuthentication();
        List<String> groupIds = currentAuthentication.getGroupIds();
        List<String> tenantIds = currentAuthentication.getTenantIds();
        System.out.println(groupIds);
        System.out.println(tenantIds);

        String userId = currentAuthentication.getUserId();
        System.out.println(userId);


        Task task = taskService.createTaskQuery().taskAssignee("admin").list().get(0);

        List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId());
        for (IdentityLink identityLink : identityLinksForTask) {
            String type = identityLink.getType();
            System.out.println(type+":"+identityLink.getUserId());
        }
        Map<String, Object> variables = taskService.getVariables(task.getId());
        variables.forEach((k, v) -> {
            System.out.println(k + ":" + v);
        });
//        taskService.setVariable(task.getId(), Approved, false);
//        taskService.complete(task.getId());

        taskService.complete(task.getId());
    }

 6.监听器

package com.jmj.camunda7test.process.config;

import org.camunda.bpm.engine.TaskService;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.ExecutionListener;
import org.camunda.bpm.engine.delegate.TaskListener;
import org.camunda.bpm.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.EventListener;

@Configuration
public class EvenListenerConfig {

   public String inject;

    @Autowired
    private TaskService taskService;
    @Bean("start")
    public ExecutionListener start() {
        return execution -> {
            String processInstanceId = execution.getProcessInstanceId();
            System.out.println(processInstanceId+"开始执行了");
        };
    }

    @Bean("end")
    public ExecutionListener end() {
        return execution -> {
            String processInstanceId = execution.getProcessInstanceId();
            System.out.println(processInstanceId+"执行结束了");
        };
    }

}

Camunda工作流集成SpringBoot(三)_camunda springboot 监听-CSDN博客 可以看看这个

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1896305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开源大模型和闭源大模型,打法有何区别?

现阶段&#xff0c;各个公司都有自己的大模型产品&#xff0c;有的甚至不止一个。除了小部分开源外&#xff0c;大部分都选择了闭源。那么&#xff0c;头部开源模型厂商选择开源是出于怎样的初衷和考虑&#xff1f;未来大模型将如何发展&#xff1f;我们来看看本文的分享。 在对…

Hi3861 OpenHarmony嵌入式应用入门--SNTP

sntp&#xff08;Simple Network Time Protocol&#xff09;是一种网络时间协议&#xff0c;它是NTP&#xff08;Network Time Protocol&#xff09;的一个简化版本。 本项目是从LwIP中抽取的SNTP代码&#xff1b; Hi3861 SDK中已经包含了一份预编译的lwip&#xff0c;但没有…

基于布雷格曼偏差校正技术的全变分一维时间序列信号降噪方法(MATLAB R2018A)

信号降噪是信号处理的重要步骤之一&#xff0c;目的是提高所获得信号数据的质量&#xff0c;以达到更高的定性和定量分析精度。信号降噪能提升信号处理其他环节的性能和人们对信息识别的准确率&#xff0c;给信号处理工作提供更可靠的保证。信号降噪的难点是降低噪声的同时也会…

如何压缩视频大小,怎么压缩视频

随着科技的进步&#xff0c;我们拍摄的视频质量越来越高。然而&#xff0c;视频带来的一个问题是文件体积巨大&#xff0c;这不仅占用大量存储空间&#xff0c;而且在传输和分享时也造成了不小的困扰。别担心&#xff0c;本文将为你详细介绍几种实用的视频压缩方法&#xff0c;…

xmind2testcase工具将测试用例从Xmind转为CSV导入禅道

使用xmind编写测试用例&#xff0c;使用xmind2testcase工具将测试用例从Xmind转为CSV导入禅道&#xff0c;便于管理。 1.工具准备 第一步&#xff1a;安装python 第二步&#xff1a;安装xmind2testcase工具 运行-cmd-打开命令提示符弹窗&#xff0c;输入安装命令 安装命令&…

粉丝问:教育机构首页UI,安排

教育机构的首页UI应该展现以下内容&#xff1a; 机构简介&#xff1a;在首页上展示教育机构的简介和核心价值观&#xff0c;包括机构的使命、愿景和教育理念。这有助于让访问者了解机构的背景和宗旨。课程和项目&#xff1a;展示机构提供的课程和项目&#xff0c;包括学科课程…

AGI|Transformer自注意力机制超全扫盲攻略,建议收藏!

一、前言 2017年&#xff0c;谷歌团队推出一篇神经网络的论文&#xff0c;首次提出将“自注意力”机制引入深度学习中&#xff0c;这一机制可以根据输入数据各部分重要性的不同而分配不同的权重。当ChatGPT震惊世人时&#xff0c;Transformer也随之进入大众视野。一夜之间&…

PMP--知识卡片--波士顿矩阵

文章目录 记忆黑话概念作用图示 记忆 一说到波士顿就联想到波士顿龙虾&#xff0c;所以波士顿矩阵跟动物有关&#xff0c;狗&#xff0c;牛。 黑话 你公司的现金牛业务&#xff0c;正在逐渐变成瘦狗&#xff0c;应尽快采取收割策略&#xff1b;问题业务的储备太少&#xff0…

测量和检测二合一的劳易测解决方案

劳易测ODT3CL系列是一款基于TOF原理的具有测量功能的传感器。它具有很好的检测性能&#xff0c;能够非常可靠的检测亮色、深色以及高反光的物体。ODT 3CL系列的检测距离可达2000毫米&#xff0c;在量程范围内对目标物体的颜色检测不敏感&#xff0c;检测距离稳定输出。 针对工业…

浅析基于量子成像的下一代甚高灵敏度图像传感器技术

高灵敏度探测成像是空间遥感应用中的一个重要技术领域&#xff0c;如全天时对地观测、空间暗弱目标跟踪识别等应用&#xff0c;对于甚高灵敏度图像传感器的需求日益强烈。随着固态图像传感器技术水平的不断提高&#xff0c;尤其背照式及埋沟道等工艺的突破&#xff0c;使得固态…

相机光学(二十四)——CRA角度

CRA角度 0.参考资料1.什么是CRA角度2.为什么 CRA 会导致luma shading3.为什么 CRA 会导致color shading4.CRA相差过大的具体表现5.CRA Matching6.怎样选择sensor的CRA 0.参考资料 1.芯片CRA角度与镜头的匹配关系&#xff08;一&#xff09;   2.芯片CRA角度与镜头选型的匹配关…

谷粒商城学习-07-虚拟机网络设置

文章目录 一&#xff0c;找到配置文件Vagrantfile二&#xff0c;查询虚拟机网卡地址1&#xff0c;查看虚拟机网络配置2&#xff0c;查看宿主机网络配置 三&#xff0c;修改配置文件下的IP配置四&#xff0c;重新启动虚拟机即可生效五&#xff0c;Vagrantfile 的作用1&#xff0…

护眼落地灯哪个牌子好?盘点五款必入不踩雷的护眼大路灯

护眼落地灯哪个牌子好&#xff1f;在这个快节奏的时代&#xff0c;护眼落地灯已经从一种高端选择转变为日常用眼生活中的必须品。不论是提升普通照明&#xff0c;还是针对孩子学习是改善光线质量环境&#xff0c;一款优秀的护眼落地灯都能成为我们生活中的照明神器。怎么选择一…

QT+OpenCV在Android上实现人脸实时检测与目标检测

一、功能介绍 在当今的移动应用领域&#xff0c;随着技术的飞速发展和智能设备的普及&#xff0c;将先进的计算机视觉技术集成到移动平台&#xff0c;特别是Android系统中&#xff0c;已成为提升用户体验、拓展应用功能的关键。其中&#xff0c;目标检测与人脸识别作为计算机视…

固相提取铕和铀

固相萃取&#xff08;Solid Phase Extraction&#xff0c;SPE&#xff09;是一种常用的化学分离技术&#xff0c;它利用固体吸附剂&#xff08;固定相&#xff09;与样品中的目标化合物&#xff08;流动相&#xff09;之间的相互作用力&#xff0c;将目标化合物从样品中分离出来…

【数据结构】(C语言):堆(二叉树的应用)

堆&#xff1a; 此处堆为二叉树的应用&#xff0c;不是计算机中用于管理动态内存的堆。形状是完全二叉树。堆分两种&#xff1a;最大堆&#xff0c;最小堆。最大堆&#xff1a;每个节点比子树所有节点的数值都大&#xff0c;根节点为最大值。最小堆&#xff1a;每个节点比子树…

推动高效能:东芝TB67H301FTG全桥直流电机驱动IC

在如今高度自动化的时代&#xff0c;电子产品的性能和效率成为了工程师们关注的焦点。东芝的TB67H301FTG全桥直流电机驱动IC应运而生&#xff0c;以其卓越的技术和可靠性&#xff0c;成为众多应用的理想选择。无论是在机器人、家用电器、工业自动化&#xff0c;还是在其他需要精…

面试篇-系统设计题总结

这里记录一些有趣的系统设计类的题目&#xff0c;一般大家比较喜欢出的设计类面试题目会和高可用系统相关比如秒杀和抢红包等。欢迎大家在评论中评论自己遇到的题目&#xff0c;本篇文章会持续更新。 1、设计一个抢红包系统 抢红包系统其实也是秒杀类中的一个场景&#xff0…

【Linux系统编程】深入剖析:四大IO模型机制与应用(阻塞、非阻塞、多路复用、信号驱动IO 全解读)

目录 概述&#xff1a; 1. 阻塞IO (Blocking IO) 2. 非阻塞IO (Non-blocking IO) 3. IO多路复用 (I/O Multiplexing) 4. 信号驱动IO (Signal-driven IO) 阻塞式IO 非阻塞式IO 信号驱动IO&#xff08;Signal-driven IO&#xff09; 信号IO实例&#xff1a; IO多路复用…

后端之路——最规范、便捷的spring boot工程配置

一、参数配置化 上一篇我们学了阿里云OSS的使用&#xff0c;那么我们为了方便使用OSS来上传文件&#xff0c;就创建了一个【util】类&#xff0c;里面有一个【AliOSSUtils】类&#xff0c;虽然本人觉得没啥不方便的&#xff0c;但是黑马视频又说这样还是存在不便维护和管理问题…