camunda撤销流程

这篇具有很好参考价值的文章主要介绍了camunda撤销流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 /**
     * 撤销
     */
    @Override
    public void revoke(String processInstanceId, String businessId) {
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();

        HistoricProcessInstance instance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
        if (processInstanceIsFinished(instance.getId())) {
            throw new JeecgBootException("流程已经结束,不允许撤销");
        }
        Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
        if (!user.getUsername().equals(instance.getStartUserId())) {
            throw new JeecgBootException("您不是流程的发起人,不允许撤销");
        } else {
            //如果系统登录人是流程的发起人,并且当前任务办理人是流程的发起人,则允许撤回
            if (instance.getStartUserId().equals(task.getAssignee())) {
                revokeAndUpdateForm(instance, businessId);
            } else {
                List<HistoricTaskInstance> historicTaskInstanceList = historyService.createHistoricTaskInstanceQuery()
                        .processInstanceId(processInstanceId).finished().list();
                if (CollectionUtils.isEmpty(historicTaskInstanceList)) {//如果任务还没有被办理过,则允许撤回
                    revokeAndUpdateForm(instance, businessId);
                } else {
                    //获取办理人
                    List<String> assigneeList = historicTaskInstanceList.stream().map(HistoricTaskInstance::getAssignee).collect(Collectors.toList());
                    long count = assigneeList.stream().filter(a -> !a.equals(instance.getStartUserId())).count();
                    if (count == 0) {//已办的任务全部都是发起人自己办理的,则允许撤回
                        revokeAndUpdateForm(instance, businessId);
                    } else {
                        throw new JeecgBootException("流程已被其他人办理过,不允许撤销");
                    }
                }
            }
        }
    }

    /**
     * 撤销流程并更新表单
     *
     * @param instance
     * @param businessId
     */
    public void revokeAndUpdateForm(HistoricProcessInstance instance, String businessId) {
        runtimeService.deleteProcessInstance(instance.getId(), "撤销");
        //更新表单状态
        formDesignService.updateFormStatus(processDefinitionService.getStartFormKey(instance.getProcessDefinitionId()),
                businessId, FormStatusType.YCX.getCode());
    }

文章来源地址https://www.toymoban.com/news/detail-484418.html

到了这里,关于camunda撤销流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从public static void main(String[] args)看如何构造数据

    java语言中public static void main(String[] args)里面的ages有什么作用? 在Java语言中, public static void main(String[] args) 是一个特殊的方法,它是Java程序的入口点。当你运行一个Java程序时,程序会从这个方法开始执行。这个方法的参数 String[] args 是一个字符串数组,用于传递命令行参数

    2024年02月12日
    浏览(90)
  • camunda流程引擎send task节点用途

    Camunda的Send Task用于向外部系统或服务发送消息。消息可以是同步或异步的,可以发送到队列、主题或其他类型的消息中间件。Send Task通常用于将消息发送到外部系统,而无需等待响应或结果。相反,它只是向外部系统发出信号,通知其执行某些操作或启动某个过程。   Send

    2023年04月27日
    浏览(42)
  • 菜鸟学Java public static void main(String[] args) 是什么意思?

    这是一个经典的 Java 程序,它使用了面向对象的编程风格: 第一行代码: 这行代码定义了一个名为 HelloWorld 的公共类( public class ),该类是程序的入口点。 Java 程序中的每个类都必须以一个公共类来定义。文件名必须与公共类的名称相同,并以 .java 作为文件扩展名。 注:

    2024年02月09日
    浏览(45)
  • Spring Boot整合Camunda打造高效工作流程

    🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是尘缘,一个在CSDN分享笔记的博主。📚📚 👉点击这里,就可以查看我的主页啦!👇👇 尘缘的个人主页 🎁如果感觉还不错的话请给我点赞吧!🎁🎁 💖期待你的加入,一起学习,一起进步!💖💖 在现代的软件开发中,工作流管

    2024年04月13日
    浏览(51)
  • camunda工作流实战项目(表单设计器+流程编辑器,零代码创建流程)

    基于ruoyi平台和camunda工作流开发而成,结合bpmn.js流程编辑器和vform表单设计器,实现常规流程零代码创建。 具备流程中心的能力,支持外部任务,可协调多个业务系统协同工作 具备SaaS平台的能力,支持多租户,各业务系统可作为租户,创建自己的流程,通过外部任务与自身

    2024年02月12日
    浏览(56)
  • Springboot整合Camunda工作流引擎实现审批流程实例

    环境:Spingboot2.6.14 + camunda-spring-boot-starter7.18.0 依赖配置 应用程序配置 通过上面的配置后访问控制台: http://localhost:8100/workflow/ 默认是没有上面的tasks中的内容,这里是我之前测试数据 环境准备好后,接下来就可以设计工作流程。 上面的 camunda-bpm-spring-boot-starter-rest依赖中定义

    2024年02月09日
    浏览(52)
  • springboot集成Camunda,加前端bpmn页面流程编辑器

    搭建流程引擎后端的时候,主要注意springboot版本和Camunda版本之间的兼容性。此次springboot版本2.6.4,Camunda版本7.18.0。pom文件内容如下: pom文件配置好后,通过一般的注解入口@SpringBootApplication,即可启动Camunda流程引擎。 Camunda默认使用的数据库为自带的h2内存数据库,此时一般

    2023年04月18日
    浏览(37)
  • Camunda 7.x 系列【10】使用 Rest API 运行流程实例

    有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo

    2024年02月13日
    浏览(55)
  • 基于Docker和Springboot两种方式安装与部署Camunda流程引擎

    Camunda 相对于其他流程引擎的优势在于开源性、 BPMN 2.0 支持、可扩展性、轻量级和高性能,以及可观察性。并且 Camunda 支持独立平台的方式部署流程引擎,这更有利于分布式的项目。本文以 7.18.0 版本为例,介绍了: Docker Spring Boot 两种安装和部署 Camunda 流程引擎的方式。 D

    2024年03月16日
    浏览(45)
  • Camunda8微服务流程引擎搭建实战 -- camunda-identity接入keycloak,使用mysql数据库以OpenID Connect的方式实现用户的权限管理

    准备需要: docker最新版,camunda官方建议使用容器且最好能使用k8s,而且jar包启动失败时不能停止 mysql8.0+,keycloak默认使用postgresql,我不会 提前启动好其他组件,es,tasklis,operate,zeebe,偷个懒,我使用的jar包运行,也可以容器 组件下载地址,版本8.3.4 因为容器通信的问题(应该是通信/网络的

    2024年01月19日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包