flowable动态设置办理人

在ruoyi-flowable-plus-0.8.X-vform审批流程中动态设置审批人为发起人的部门经理 文件路径:ruoyi-ui/src/plugins/package/penal/task/task-components/UserTask.vue。2、配置测试监听器DeptLeaderTaskListener,我将监听器放在了system模块,因为要调用一些类。选择要使用监听器的节点,选择自定义的审批人设置,点击添加监听器,如下图。1、修改前端“审批人设置”,新增自定义,如下图。我摸索后测试这样是可行的。 阅读详情
AI摘要

本文介绍了如何在Flowable中动态设置办理人。通过配置全局监听和自定义监听类,实现流程实例中的审批人动态设定。关键代码展示了根据流程配置动态获取并设置办理人的过程,特别处理了会签节点的情况。

        实现动态设置办理人首先要设置全局监听,然后通过监听相关的步骤来进行相应的操作。

废话少说,先看东西!

1:配置全局监听配置类:

@Configuration
public class FlowableGlobalListenerConfig implements ApplicationListener<ContextRefreshedEvent> {

    @Autowired
    private SpringProcessEngineConfiguration configuration;

    @Autowired
    private GlobalTaskListener globalTaskListener;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        FlowableEventDispatcher dispatcher = configuration.getEventDispatcher();
        //任务创建全局监听
        dispatcher.addEventListener(globalTaskListener, FlowableEngineEventType.TASK_CREATED);
        //流程创建监听
        dispatcher.addEventListener(globalTaskListener, FlowableEngineEventType.PROCESS_CREATED);
        //流程启动监听
        dispatcher.addEventListener(globalTaskListener, FlowableEngineEventType.PROCESS_STARTED);
    }
}

其中globalTaskListener是自定义的具体监听类;FlowableEngineEventType是监听的具体类型;
package org.flowable.common.engine.api.delegate.event;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.flowable.common.engine.api.FlowableIllegalArgumentException;

/**
 * Enumeration containing all possible types of {@link FlowableEvent}s.
 * 
 * @author Frederik Heremans
 * 
 */
public enum FlowableEngineEventType implements FlowableEventType {

    /**
     * New entity is created.
     */
    ENTITY_CREATED,

    /**
     * New entity has been created and all properties have been set.
     */
    ENTITY_INITIALIZED,

    /**
     * Existing entity us updated.
     */
    ENTITY_UPDATED,

    /**
     * Existing entity is deleted.
     */
    ENTITY_DELETED,

    /**
     * Existing entity has been suspended.
     */
    ENTITY_SUSPENDED,

已上只是FlowableEngineEventType一部分,有兴趣的同学可以打开这个枚举类详细查看;

2:具体的监听类

@Component
public class GlobalTaskListener extends AbstractFlowableEngineEventListener {

    @Autowired
    private RuntimeService runtimeService;

    @Autowired
    private RepositoryService repositoryService;

    @Override
    protected void taskCreated(FlowableEngineEntityEvent event) {
        super.taskCreated(event);
    }

    @Override
    protected void processCreated(FlowableEngineEntityEvent event) {
        super.processCreated(event);
    }

    @Override
    protected void processStarted(FlowableProcessStartedEvent event) {
        super.processStarted(event);

        FlowableProcessEventImpl eventImpl = (FlowableProcessEventImpl) event;

        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(eventImpl.getProcessDefinitionId()).singleResult();
        BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId());
        List<Process> processList = bpmnModel.getProcesses();
        Process process = processList.get(0);
        List list = (List) process.getFlowElements();
        HashMap<String, Object> variables = new HashMap<>();
        for(Object o : list){
            if(o instanceof UserTask){
                String  inputDataItem;
                UserTask userTask = (UserTask) o;
                //判断是不是会签节点
                MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = userTask.getLoopCharacteristics();
                if(multiInstanceLoopCharacteristics != null){
                    //会签节点
                    //获取设置参数名称
                    inputDataItem = multiInstanceLoopCharacteristics.getInputDataItem().replace("${","").replace("}","");
                    //获取前端设置的用户或者组
                    if(userTask.getCandidateGroups().size() >= 0){
                        List candidateGroups = userTask.getCandidateGroups();
                        //如果是用户组查询组里的用户
                        List<String> userList= new ArrayList<String>();
                        userList.add("卡卡罗特");
                        userList.add("贝吉塔");
                        userList.add("弗利萨");
                        userList.add("吉连");
                        //设置参数
                        variables.put(inputDataItem,userList);
                    }
                }else{
                    //获取设置参数名称
                    inputDataItem = userTask.getAssignee().replace("${","").replace("}","");
                    //非会签节点
                    if(userTask.getCandidateUsers().size() >= 0){
                        //设置参数
//                        variables.put(inputDataItem,userTask.getCandidateUsers());
                        variables.put(inputDataItem,"zmc");
                    }
                }

            }
        }
        //将variables设置进去
        runtimeService.setVariables(eventImpl.getExecutionId(),variables);
    }

具体的监听类要继承AbstractFlowableEngineEventListener;

在第一步配置类中配置的监听事件要在自定义的监听类中实现抽象方法;

动态设置办理人主要是以下代码:

@Override
    protected void processStarted(FlowableProcessStartedEvent event) {
        super.processStarted(event);

        FlowableProcessEventImpl eventImpl = (FlowableProcessEventImpl) event;

        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(eventImpl.getProcessDefinitionId()).singleResult();
        BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId());
        List<Process> processList = bpmnModel.getProcesses();
        Process process = processList.get(0);
        List list = (List) process.getFlowElements();
        HashMap<String, Object> variables = new HashMap<>();
        for(Object o : list){
            if(o instanceof UserTask){
                String  inputDataItem;
                UserTask userTask = (UserTask) o;
                //判断是不是会签节点
                MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = userTask.getLoopCharacteristics();
                if(multiInstanceLoopCharacteristics != null){
                    //会签节点
                    //获取设置参数名称
                    inputDataItem = multiInstanceLoopCharacteristics.getInputDataItem().replace("${","").replace("}","");
                    //获取前端设置的用户或者组
                    if(userTask.getCandidateGroups().size() >= 0){
                        List candidateGroups = userTask.getCandidateGroups();
                        //如果是用户组查询组里的用户
                        List<String> userList= new ArrayList<String>();
                        userList.add("卡卡罗特");
                        userList.add("贝吉塔");
                        userList.add("弗利萨");
                        userList.add("吉连");
                        //设置参数
                        variables.put(inputDataItem,userList);
                    }
                }else{
                    //获取设置参数名称
                    inputDataItem = userTask.getAssignee().replace("${","").replace("}","");
                    //非会签节点
                    if(userTask.getCandidateUsers().size() >= 0){
                        //设置参数
//                        variables.put(inputDataItem,userTask.getCandidateUsers());
                        variables.put(inputDataItem,"zmc");
                    }
                }

            }
        }
        //将variables设置进去
        runtimeService.setVariables(eventImpl.getExecutionId(),variables);
    }

        由于是创建了个demo project所以查询根据读取出来的办理人组或者用户没有去数据库中查询;

通过BpmnModel对象我们可以获取到流程配置中相关的设置,比如我们现在关心的办理人

通过判断LoopCharacteristics来区分该节点是否是会签节点;不能等于null为会签节点;

将获取到的具体办理人设置到variables中,最后将参数设置进去就完成了;

if(multiInstanceLoopCharacteristics != null){
                    //会签节点
                    //获取设置参数名称
                    inputDataItem = multiInstanceLoopCharacteristics.getInputDataItem().replace("${","").replace("}","");
                    //获取前端设置的用户或者组
                    if(userTask.getCandidateGroups().size() >= 0){
                        List candidateGroups = userTask.getCandidateGroups();
                        //如果是用户组查询组里的用户
                        List<String> userList= new ArrayList<String>();
                        userList.add("卡卡罗特");
                        userList.add("贝吉塔");
                        userList.add("弗利萨");
                        userList.add("吉连");
                        //设置参数
                        variables.put(inputDataItem,userList);
                    }
                }else{
                    //获取设置参数名称
                    inputDataItem = userTask.getAssignee().replace("${","").replace("}","");
                    //非会签节点
                    if(userTask.getCandidateUsers().size() >= 0){
                        //设置参数
//                        variables.put(inputDataItem,userTask.getCandidateUsers());
                        variables.put(inputDataItem,"zmc");
                    }
                }

//将variables设置进去
        runtimeService.setVariables(eventImpl.getExecutionId(),variables);

3-Springboot集成FLOWABLE之 流程节点动态显示审批人信息 效果是这样的 首先这个svg是参考display实现的。复制一份display出来变成display-custom.然后自己改源码就行了。 1、改displaymodel.html <html> <head> <!-- build:css ./styles/displaymodel-style.css --> <script src="../scripts/app-cfg.js"></script> <scr 阅读详情

相关推荐

【Flowable 学习手册】

《Flowable审批场景快速上手手册》摘要(150字) 本手册面向审批流程开发者,聚焦Flowable 6.8.0的核心应用。内容涵盖:1)流程引擎边界(用户任务、网关、会签等审批要素);2)核心概念地图(部署-定义-实例-任务);3)审批闭环路径(部署→发起→办理→审计);4)关键表结构解析(RE/RU/HI三态表);5)审批难点(退回/驳回实现与多token机制)。提供4个实验模板(单人审批/金额分支/并行会签/退回驳回),建议配合SQL日志与表变更观察学习,两周即可掌握审批系统开发与排障要点。手册强

weixin_40912009的博客 968

Flowable候选人及候选人组机制在动态任务分配中的实战解析

本文深入解析了Flowable工作流引擎中的候选人及候选人组机制,阐述了其在动态任务分配中的核心价值。通过对比传统指定办理人的弊端,详细介绍了如何利用Candidate Users和Candidate Groups实现角色化审批、工作组任务池、多角色会签等实战场景,从而解耦流程定义与具体执行人,提升流程的灵活性与健壮性。

weixin_29306261的博客 383

【Flowable | 第三篇】flowable工作流使用任务监听器、执行监听器

flowable工作流使用任务监听器、执行监听器

踢桃的成长之路 1万+

flowable工作流--实操篇

本文通过申请发工资的业务场景来介绍使用工作流的全流程,包括画流程图,设置属性,以及代码编写使用工作流大致分为三步第一步:根据自己的业务画好流程图第二步:设置流程图的属性和变量,保存模型第三步:部署画好的流程图(发布)第四步:根据业务和流程图写一些服务和监听器这里主要介绍以下几个任务的使用1.用户任务的分配和提交2.服务任务的使用3.中间信号捕捉事件的触发4.排他网关的使用5.通过设置流程变量,实现流程的不同流转。

当作记事本用 1万+

初探Flowable流程引擎,偶遇多实例子流程

对于flowable的认知一直是浅显的停留在理论了解上,并未深入学习研究,也没有完整的样例作品。了解过一些原理,架构,表结构说明等等,但老实说,如果没有实战,这些理论性的东西在记忆中并不会保留太长久,很容易被遗忘掉。 一直以来想把流程引擎这块空缺补起来,无奈团队的项目中尚未有真正的流程应用,暂时不易投入人力和精力来做这部分的内容。 前段时间,架构师接手的项目中涉及到了流程引擎的应用开发,我推荐了flowable,也做了一些理论基础的讲解。也协助解决了一些比较基础的问题。 五一节前的那天下班前,负责后端

忆年--尘封的记忆 6499

flowable候选人及候选人组(Candidate Users 、Candidate Groups)的应用包含拾取、归还、交接

Flowable中的任务分配机制:候选人/组与办理人 摘要:Flowable通过候选人(CandidateUsers)和候选人组(CandidateGroups)实现动态任务分配,将任务预分配给特定用户或角色组。候选人机制支持任务池模式,允许组内成员认领任务,而直接分配(Assignee)则指定具体负责人。关键特点包括:1)解耦流程定义与具体人员;2)支持工作组协同;3)灵活的任务可见性控制。实现方式包括BPMN定义、运行时API设置及任务后修改。典型应用场景涵盖审批流程、工单处理等需要动态分配的业务场景。

2301_80981132的博客 1744

springboot+flowable第三节(动态设置审批人)

目录1. 创建流程2. 启动流程 1. 创建流程 创建一个3个节点的流程: 开始—>申请—>结束。 xml文件: <?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:flowable="http://flowable.org/bpmn" targetNamespace="http://w

悢七的优快云博客 1万+

16 Flowable任务之用户任务(UserTask)包含任务指派、多人会签和动态表单

用户任务是流程处理中的非常重要的组成部分,也是比较复杂的一块,涉及到的知识点也比较多,包扣用户指派、候选人指派、领取任务、多人会签、以及涉及到的相关监听器的配置和使用。下面我们通过几个例子来讲述这块内容。 4.2.1.1 用户任务入门案例Assignee指定 我们先用一个简单的用户任务来演示其主要的使用步骤和流程。定义流程定义userTaskOne.bpmn20.xml,其流程图展示如下: 从图上可以看出,在这个任务中,设置的Assignee是admin这个用户。此流程实例的XML内容如下:

qq_36305027的博客 3709

【flowable学习7】自定义任务处理的用户和组

直接指定:在用户任务的Assignee属性中直接填写用户的ID。候选用户(Candidate Users):在属性中指定多个用户ID,任务将分配给这些用户中的任何一个。候选组(Candidate Groups):在属性中指定多个组ID,任何属于这些组的用户都可以拾取任务。可以在流程执行之前或执行过程中设置流程变量,然后在BPMN模型中使用UEL表达式来指定任务办理人。例如,在流程变量中设置assignee和对于Assignee对于。

猿脑2.0的博客 1874

可视化大屏系列(5):设备状态面板与数据分析仪表盘

在这篇文章中,我们将重点讨论如何通过智能化手段提升工地设备的管理效率与维护质量。随着智能工地系统的不断发展,设备监控与维护管理变得尤为重要。本篇将从 设备状态实时监控、自动化维护提醒、设备管理与维修记录 三个方面入手,展示如何通过 Vue3 和 ECharts 构建一个智能化的设备管理平台,实时采集和展示设备运行状态、及时生成维护提醒并记录维修历史,以提高设备的使用效率与安全性。我们还将结合实际代码示例,详细讲解如何实现这些功能,帮助你在智能工地项目中实现设备管理的智能化、数字化和自动化。

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 3365

一步一步教你写股票走势图——K线图一(概述)

股票分时图部分已经开发完毕,受到了广大开发者的好评!界面、功能都挺完美,解决了好一些MP开发者的问题,博主甚是欣悦,更有动力去开源K线图。这里说一下,如果有问题直接留言或者发邮件,github上个人信息有邮件,我看到基本都会回复,博主不加qq的,体谅O(∩_∩)O。分析好了,废话不多说,我们分析下K线图吧,首先我们看下自选股K线图的效果吧效果还是很赞的,经过分时图的研究后,博主越来越确信自选股用的应

体验Android编程之美 3万+

会签

java代码生成用户任务 UserTask userTask = new UserTask(); // 流程名称 userTask.setName("会签任务"); userTask.setId(IdGenerator.createId()); //使用变量名assignee从变量中获取办理人 userTask.setAssignee("${assignee}"); //设置候选审批人:提供给执行监听器MultiInstanceExecutionListener使用 userTask.setCa..

小毛贼_哪里逃 920

Selenium ChromeDriver反爬与性能优化实战指南

ChromeDriver作为Selenium的核心驱动,本质是浏览器自动化执行引擎,其默认行为会暴露大量JS运行时指纹(如navigator.webdriver、window.chrome),极易被前端反爬系统识别;同时因进程管理粗放、渲染等待机制僵化,导致内存泄漏、僵尸进程和高并发下稳定性崩塌。本文围绕真实生产场景,系统解析浏览器指纹伪造原理、进程级资源管控策略、基于页面状态的智能等待范式,并提供Docker容器化、K8s弹性扩缩与Prometheus可观测性落地路径,助力开发者将ChromeDriver

weixin_29762151的博客 1259

Flowable 设置任务处理人的四种方式

UserTask 看名字就知道,需要人工干预,而人工处理的方式有很多种,我们可以设置节点是由哪个用户处理,也可以设置是由哪个用户组来处理(相当于是由哪个角色来处理),今天这篇文章我主要和大家分享设置用户的三种方式,至于如何设置用户组,这个咱们下篇文章再聊。最后再来说说一种特殊情况,就是这个 UserTask 由任务的发起人处理,任务是谁发起的,谁来处理人这个 UserTask。接下来,我们部署并启动这个流程(具体的部署启动方式可以参考本系列之前的文章),启动之后,我们可以在数据库的。

江南一点雨的专栏 1万+

Windows下QT5.15.2安装MQTT模块全攻略(附分支选择避坑指南)

本文详细介绍了在Windows环境下为QT5.15.2安装MQTT模块的完整流程,包括环境准备、源码获取、编译配置及项目集成等关键步骤。特别针对分支选择、依赖项处理和常见错误提供了实用解决方案,帮助开发者高效完成MQTT模块的安装与调试,适用于物联网开发场景。

weixin_29224589的博客 466

mysql 计算不同胜率的活跃玩家的次日,3日,7日留存率

它根据每天的日期(logymd)和最高段位(max_rank)、胜率段落(win_rate_segment)进行分组,并计算总玩家人数(total_players)、第二天的留存人数(next_day_players)、第三天的留存人数(day3_players)和第七天的留存人数(day7_players)。注意:不是新手留存,是段位活跃玩家留存;最终的结果则是将留存数据进行展示,按照日期(date)、最高段位(rank_level)、胜率段落(win_rate_segment)进行排序。

weixin_42698221的博客 1836

Flowable7.x学习笔记(十五)动态指定用户分配参数启动工作流程

动态指定用户分配参数启动工作流程

持续学习ing 3038

从 SAP ABAP 到 S/4HANA,SAML 2.0 单点登录到底是怎么跑起来的

在很多 SAP 项目里,SSO 不是一个锦上添花的功能,而是系统能不能顺利上线的基本门槛。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1050

Flowable06分配用户

任务分配是工作流应用的核心,直接决定了“工作”如何流转到“正确的人”手中。Flowable 提供了非常灵活且强大的任务分配机制,下面我将为您进行详细的解释说明。在 Flowable 中,任务的分配策略是在设计BPMN流程图时,通过设置用户任务 (User Task) 的属性来定义的。概念:最简单的分配方式。直接将任务指派给一个唯一确定的用户。一旦设置了 Assignee,这个任务就有了明确的“主人”,只有这个用户能看到并处理它。

CodeTom的博客 1312

2、欧洲期权的赫斯顿模型

本文详细介绍了赫斯顿随机波动率模型在欧洲期权定价中的应用。模型通过引入随机方差过程,克服了布莱克-斯科尔斯模型中波动率恒定的局限性,更贴近市场实际。文章阐述了模型的动态结构、风险中性转换、期权定价公式及其半封闭解的计算方法,并提供了基于VBA的数值实现方案。通过梯形法则与高斯积分等数值方法对比,分析了不同积分策略的精度与效率。同时验证了当波动率为零时,赫斯顿模型退化为布莱克-斯科尔斯模型的一致性。最后讨论了模型的优势、挑战及实际应用建议,强调了数值积分稳定性和参数估计的重要性。

tequila的博客 350

2022年灌溉试验设计与数据分析考试试题

2.表2数据为表层0~10cm的原状土离心机土壤水分特征曲线试验数据,(1)请利用R语言nls函数通过Van Genuchten方程对土壤体积含水率和土壤基质势进行拟合;(3)指明土壤基值势为-33 kPa和-1500kPa时的体积含水率。1.请根据表1数据,以灌溉模式为主区,生物炭用量为子区,利用R语言agricolae包生成裂区试验设计试验处理布置图;3.以R工具包factoextra中decathlon2数据集前10列为数据进行PCA分析,要求计算出(1)前5个主成分的特征值、特征向量;

Mrrunsen的博客 265

BPMN2.0,flowable工作流,【用户任务】使用【任务监听器】动态设置下一步处理人

本文介绍了基于Flowable 6.8.0的工作流实现方案,重点解决了领导审批节点审批人动态设置问题。通过任务监听器机制,在【领导审批】节点配置SetAssigneeListener类,根据提交人所属部门动态设置实际处理人、候选人和候选组。核心代码展示了如何通过TaskService操作任务处理人信息,包括删除原有处理人、设置新处理人等操作。流程定义文件flowable.xml详细展示了节点配置和监听器实现方式,实现了人事部提交需人事主管审批、开发部提交需技术经理审批的业务需求。

小菜bill的博客 757

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

activity或者flowable会签任务的事例

需求 一个任务节点需要多个人审批签字,其中都同意进入到下一个节点,如果有一个不同意就回到上一个节点或者直接结束(我这里是回到上一个节点) 流程图 流程图详情 任务1参数配置 会签任务参数配置 参数解释: sequential:代表是否按顺序; collection:会签任务的办理人,是一个list列表,在流程变量中用List做为参数,我这里是设置为assigneeList; elemen...

weixin_43959245的博客 4530

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

以若依Flowable工作流版本(RuoYi-Vue-Flowable)为基础,进行二次开发

此代码以RuoYi-Vue-Flowable源码基础,将流程表单由原来的在线设计并保存为数据库的方式,改为直接指向前端vue文件的方式,解决了一些原来vue代码中存在的报错问题,并且修改、增加或删除部分功能。在此提醒下,此代码需要付费获取的。

qq_55896432的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

flowable多任务实现会签、或签

做工作流,基本会遇到会签、或签的需求。而flowable是通过多任务方式来实现的。

wangwcy的博客 8380

SpringBoot集成Flowable

1、概念通过计算机对业务流程的自动化管理。工作流是建立在业务流程的基础上,一个软件的系统核心根本上还是系统的业务流程,工作流只是协助进行业务流程管理。解决的是:在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标2、工作流系统概念:具有工作流功能的系统比如,OA、ERP系统,可能涉及工作流,都可以叫工作流系统3、具体应用关键业务流程:订单、报价处理、合同审核、客户电话处理、供应链管理等。

2509_94084001的博客 882
上一篇: Field XXX in XXXX required a bean of type XXXX that could not be found.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值