精华内容
下载资源
问答
  • 启动流程实例 什么是流程...2、启动tomcat,访问http://lcoalhost:8080/activiti-explorer 3、使用kermit/kermit登录 4、 5、 参考文档:http://www.cnblogs.com/llzgzljl/archive/2013/10/07/3356108.html 学习资源:...

    启动流程实例

    什么是流程实例?根据一个流程定义具体的一次执行过程就是一个流程实例,一个流程定义对应多个流程实例(一对多关系)

    为了演示:在流程图中指定办理人是谁,现在是写死的,表示只能张三能提交请假申请。后面会讲解如何动态指定。

    f6d9c4f5493f39e2acea7d652942d6bf.png

    //根据流程定义的Id启动一个流程实例(操作ACT_RU_EXECUTION、ACT_RU_TASK、ACT_HI_PROCINST、ACT_HI_ACTINST、ACT_HI_TASKINST、ACT_RU_IDENTITYLINK、ACT_HI_IDENTITYLINK表)

    @Test

    public void test6() {

    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    String processDefinitionId="qjlc:1:104";

    ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceById(processDefinitionId);

    System.out.print(processInstance.getId());//201

    }

    查询个人任务列表

    @Test

    public void test7() {

    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    TaskQuery query = processEngine.getTaskService().createTaskQuery();

    query.taskAssignee("张三");

    List list = query.list();

    for (Task item : list) {

    System.out.print(item.getId()+"==="+item.getName());//204===提交请假申请

    }

    }

    办理任务

    //办理任务(主要操作ACT_RU_EXECUTION、ACT_RU_TASK表)

    @Test

    public void test8() {

    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    processEngine.getTaskService().complete("204");

    }

    办理任务后,流程就走到了下一个节点,再次查询张三个人任务列表就查不到了,此时用李四去查就可以了。

    使用Activiti框架的API操作流程

    /**

    * 使用Activiti框架的API操作流程

    */

    public class ActivitiAPITest {

    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    /**

    * 部署流程定义 方式一:读取单个的流程定义文件 方式二:读取zip压缩文件

    */

    @Test

    public void test1() {

    DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();

    // 方式一:读取单个的流程定义文件

    deploymentBuilder.addClasspathResource("test1.bpmn");

    deploymentBuilder.addClasspathResource("test1.png");

    Deployment deployment = deploymentBuilder.deploy();

    // 方式二:读取zip压缩文件

    /*ZipInputStream zipInputStream = new ZipInputStream(this.getClass().getClassLoader().getResourceAsStream("process.zip"));

    deploymentBuilder.addZipInputStream(zipInputStream);

    deploymentBuilder.name("请假流程部署");

    Deployment deployment = deploymentBuilder.deploy();*/

    }

    /**

    * 查询部署列表

    */

    @Test

    public void test2() {

    // 部署查询对象,查询表act_re_deployment

    DeploymentQuery query = processEngine.getRepositoryService().createDeploymentQuery();

    List list = query.list();

    for (Deployment deployment : list) {

    String id = deployment.getId();

    System.out.println(id);

    }

    }

    /**

    * 查询流程定义列表

    */

    @Test

    public void test3() {

    // 流程定义查询对象,查询表act_re_procdef

    ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();

    List list = query.list();

    for (ProcessDefinition pd : list) {

    System.out.println(pd.getName() + "" + pd.getId());

    }

    }

    /**

    * 删除部署信息

    */

    @Test

    public void test4() {

    String deploymentId = "1001";

    // processEngine.getRepositoryService().deleteDeployment(deploymentId);

    processEngine.getRepositoryService().deleteDeployment(deploymentId,true);

    }

    /**

    * 删除流程定义(通过删除部署信息达到删除流程定义的目的)

    */

    @Test

    public void test5() {

    String deploymentId = "1401";

    // processEngine.getRepositoryService().deleteDeployment(deploymentId);

    processEngine.getRepositoryService().deleteDeployment(deploymentId,

    true);

    }

    /**

    * 查询一次部署对应的流程定义文件名称和对应的输入流(bpmn png)

    *

    * @throws Exception

    */

    @Test

    public void test6() throws Exception {

    String deploymentId = "101";

    List names = processEngine.getRepositoryService()

    .getDeploymentResourceNames(deploymentId);

    for (String name : names) {

    System.out.println(name);

    InputStream in = processEngine.getRepositoryService()

    .getResourceAsStream(deploymentId, name);

    // 将文件保存到本地磁盘

    /*

    * OutputStream out = new FileOutputStream(new File("d:\\" + name));

    * byte[] b = new byte[1024]; int len = 0; while((len =

    * in.read(b))!=-1) { out.write(b, 0, len); } out.close();

    */

    FileUtils.copyInputStreamToFile(in, new File("d:\\" + name));

    in.close();

    }

    }

    /**

    * 获得png文件的输入流

    *

    * @throws Exception

    */

    @Test

    public void test7() throws Exception {

    String processDefinitionId = "qjlc:9:1204";

    InputStream pngInputStream = processEngine.getRepositoryService()

    .getProcessDiagram(processDefinitionId);

    FileUtils.copyInputStreamToFile(pngInputStream, new File("d:\\my.png"));

    }

    /**

    * 启动流程实例 方式一:根据流程定义的id启动 方式二:根据流程定义的key启动(自动选择最新版本的流程定义启动流程实例)

    */

    @Test

    public void test8() {

    /*

    * String processDefinitionId = "qjlc:9:1204"; ProcessInstance

    * processInstance =

    * processEngine.getRuntimeService().startProcessInstanceById

    * (processDefinitionId ); System.out.println(processInstance.getId());

    */

    String processDefinitionKey = "qjlc";

    ProcessInstance processInstance = processEngine.getRuntimeService()

    .startProcessInstanceByKey(processDefinitionKey);

    System.out.println(processInstance.getId());

    }

    /**

    * 查询流程实例列表,查询act_ru_execution表

    */

    @Test

    public void test9(){

    //流程实例查询对象,查询act_ru_execution表

    ProcessInstanceQuery query = processEngine.getRuntimeService().createProcessInstanceQuery();

    query.processDefinitionKey("qjlc");

    query.orderByProcessInstanceId().desc();

    query.listPage(0, 2);

    List list = query.list();

    for (ProcessInstance pi : list) {

    System.out.println(pi.getId() + " " + pi.getActivityId());

    }

    }

    /**

    * 结束流程实例,操作的表act_ru_execution act_ru_task

    */

    @Test

    public void test10(){

    String processInstanceId = "1601";

    processEngine.getRuntimeService().deleteProcessInstance(processInstanceId , "我愿意");

    }

    /**

    * 查询任务列表

    */

    @Test

    public void test11(){

    //任务查询对象,查询act_ru_task表

    TaskQuery query = processEngine.getTaskService().createTaskQuery();

    String assignee = "李四";

    query.taskAssignee(assignee);

    query.orderByTaskCreateTime().desc();

    List list = query.list();

    for (Task task : list) {

    System.out.println(task.getId());

    }

    }

    /**

    * 办理任务

    */

    @Test

    public void test12(){

    String taskId = "2902";

    processEngine.getTaskService().complete(taskId);

    }

    /**

    * 直接将流程向下执行一步

    */

    @Test

    public void test13(){

    String executionId = "2701";//流程实例id

    processEngine.getRuntimeService().signal(executionId);

    }

    /**

    * 查询最新版本的流程定义列表

    */

    @Test

    public void test14(){

    ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();

    query.orderByProcessDefinitionVersion().asc();

    List list = query.list();

    Map map = new HashMap();

    for (ProcessDefinition pd : list) {

    map.put(pd.getKey(), pd);

    }

    ArrayList lastList = new ArrayList<>(map.values());

    for (ProcessDefinition processDefinition : lastList) {

    System.out.println(processDefinition.getName() + " "+ processDefinition.getVersion() );

    }

    }

    }

    Activiti框架提供的Service对象

    RepositoryService----操作静态的资源(流程定义,bpmn、png)

    RuntimeService-----操作流程实例(启动流程实例、查询流程实例、结束流程实例)

    TaskService-----操作任务(查询任务、办理任务)

    HistoryService----操作历史数据

    Activiti框架提供的对象(和表有对应关系)

    Deployment-----act_re_deployment

    ProcessDefinition----act_re_procdef

    ProcessInstance-----act_ru_execution

    Task-----act_ru_task

    使用网页版流程设计器

    1、将activiti-explorer.war复制到tomcat中

    2、启动tomcat,访问http://lcoalhost:8080/activiti-explorer

    3、使用kermit/kermit登录

    4、

    868e228bb26a8bf5c7b4c4b58453890f.png

    5、

    ec7d213758060bed33247e4df714e343.png

    参考文档:http://www.cnblogs.com/llzgzljl/archive/2013/10/07/3356108.html

    学习资源:http://www.mossle.com/index.do

    展开全文
  • 不使用工作流存在以下问题工作流优缺点什么是工作流引擎尝试自己构建工作流引擎有哪些选型方案呢基于bpmn标准进行流程定义国产自定义如何使用SnakerFlow工作流以请假流程来看下数据库中数据流转情况初始状态员工发起...

    为什么使用工作流引擎?

    反证法,如果不使用工作流引擎,请假流程举例,从头开始开发流程的业务逻辑:(来看看会出现哪些问题?使用工作流能解决哪些问题?又会带来什么问题?

    • 一、业务流程梳理

      • 员工发起请假单
      • 组长审批
      • 请假天数小于等于2天
        • 结束
      • 请假天数大于2天
        • 总经理审批
        • 结束

      流程定义可能是hardcoding或者存储在某张表

    • 二、每个节点都要记录当前操作人和判断下个节点

      • 员工发起请假单 (记录谁发起的以及判断下个节点)

        • 员工填写请假单并提交
          • 存入leave表,创建人,创建时间
          • 存入transfer状态流转表, userId nextUserId等 驱动到下一个节点
            • nextUserId根据上面的流程定义获取
      • 组长审批 (记录谁发起的以及判断下个节点)

        • 同意或者拒绝
          • 存入transfer状态流转表, userId nextUserId等 驱动到下一个节点
            • nextUserId根据上面的流程定义获取
      • 请假天数小于等于2天 (记录谁发起的以及判断下个节点)

        • if(day<=2)
          • 结束
      • 请假天数大于2天 (记录谁发起的以及判断下个节点)

        • if(day>2)
          • 总经理审批 (记录谁发起的以及判断下个节点)
          • 结束

    如果再来个用车流程报销流程等,那么你的项目将无法维护

    不使用工作流存在以下问题

    • 流程设计没有可视化

    • 流程没有版本管理,热部署等

    • 每个活动的流转都需要硬性判断下一步活动节点及其操作人

    • 每次操作都需要维护业务数据和流程的相关数据

    • 缺乏数据管理、流程监控等功能

    工作流优缺点

    对上面共性问题进行抽象,抽象,抽象,可以得出下面的视图。

    业务流程进行了抽象分离降低耦合

    优点

    • 具有可视化的流程设计工具
    • 业务数据和流程数据的分离,可以进行更专注的性能优化,业务划分
    • 内置API能很好的完成常见的功能场景
    • 具有完善的流程监控体系
    • 具备大量的自定义扩展接口

    缺点

    • 需要额外的学习成本

    什么是工作流引擎

    所谓工作流引擎是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色、分工和条件的不同决定信息传递路由、内容等级等核心解决方案。工作流引擎包括流程的节点管理、流向管理、流程样例管理等重要功能。(来自百科)

    尝试自己构建工作流引擎

    以下内容取自:https://www.cnblogs.com/duck-and-duck/p/14436373.html

    并进行了部分修改。

    第1天

    我查了一天啥是工作流,然后做出了如下版本:

    img

    • 按顺序添加任意个审批人组成一个链表,最后加一个结束节点
    • 记录当前审批人,当审批完后,审批人向后移动一位
    • 当审批人对应结束节点时,流程结束

    每个节点执行人是hardcoding的

    第二天

    发现部分业务需要支持会签节点

    我又查了一天啥是会签节点,发现会签节点就是一个大节点,里面有很多审批人,当这个大节点里的所有人都审批通过后,才能进入下一个节点。

    翻了原来的链表式设计:

    img

    第三天

    发现部分业务需要支持条件节点

    要根据表单的内容确定下一步进入哪个分支。

    第四天

    审批人多加两种类型,比如可以从表单中选择下一个审批人,还有根据发起人不同选择不同的审批人。

    第五天

    需要满足xxx需求,卒。。。

    看来实现一个工作流引擎还是蛮难的,那有什么可选的轮子吗

    有哪些选型方案呢

    工作流整体流程如下:

    建模(事前)运行 (事中)管理 (事后)监控(全生命周期)
    流程设计engine驱动数据管理流程监控

    基于bpmn标准进行流程定义

    什么是BPMN

    BPMN 是 Business Process Modeling Notation 的简称,即业务流程建模与标注。BPMN 定义了一个业务流程图,这个流程图被设计用于创建业务流程操作的图形化模型 。 而一个业务流程模型( Business Process Model ),指一个由图形对象( graphical objects )组成的网状图,图形对象包括活动(activities) 和用于定义这些活动执行顺序的流程控制器( flow controls )。

    代表实现产品如下:

    • JBPM

    • Activiti

    • Flowable

    国产自定义

    • snaker
    • jflow

    如何使用SnakerFlow工作流

    仅列出常见功能场景实现,具体介绍和详情文档参见:Spring Boot 集成SnakerFlow流程引擎,简介、功能列表、详细解读、扩展点分析

    ☎️ ☎️ ☎️ 已开源基于SnakerFlow轻量级工作流引擎的脚手架项目 easy-admin

    详情参见:终于写了个开源项目,easy-admin 为打造一款简单、轻量级的后台管理系统脚手架

    以请假流程来看下数据库中数据流转情况

    相关源码已开源

    ☎️ ☎️ ☎️ 已开源基于SnakerFlow轻量级工作流引擎的脚手架项目 easy-admin

    详情参见:终于写了个开源项目,easy-admin 为打造一款简单、轻量级的后台管理系统脚手架

    初始状态

    wf_process

    员工发起请假申请

    args.put("user1", StpUtil.getLoginIdAsString());
    args.put("user2", "yang");
    args.put("user3", "zhang");
    Object day = args.get("day");
    if (day != null) {
        args.put("day", Integer.valueOf((String) day));
    }b
    snakerEngineFacets.startAndExecute(name, version, StpUtil.getLoginIdAsString(), args);
    

    员工laker发起一个请假单,请假3

    laker的待办列表为空,已办列表如下:

    yang的待办列表如下:

    当前监控流程图

    wf_order

    wf_task

    wf_task_actor

    wf_hist_order

    wf_hist_task

    wf_hist_task_actor

    常见功能

    流程标题

    我们经常希望待办任务列表有一列是流程实例的名称,即标题,例如,我们希望流程的标题是:张三 - 2019-12-04 16:40:20的请假申请 ,通常会采用一个命名规则:发起人+发起时间+流程模型名称把它作为流程的标题。这时候就希望启动流程实例时可以设置流程实例的名称。

    args.put(SnakerEngine.ID, "张三 - 2019-12-04 16:40:20的请假申请");
    snakerEngineFacets.startAndExecute(name, version, StpUtil.getLoginIdAsString(), args);
    

    发起申请

    args.put(SnakerEngine.ID, "张三 - 2019-12-04 16:40:20的请假申请");
    snakerEngineFacets.startAndExecute(name, version, StpUtil.getLoginIdAsString(), args);
    

    我的发起

    QueryFilter filter = new QueryFilter();
    filter.setOperator(operator);
    filter.orderBy("create_Time").order(DESC);
    snakerEngineFacets.getEngine().query().getHistoryOrders(page, filter);
    

    我的待办

    Page<WorkItem> page = new Page<>(30);
    snakerEngineFacets.getEngine().query().getWorkItems(page,
            new QueryFilter().setOperator(operator));
    

    我的已办

    Page<WorkItem> page = new Page<>(30);
    snakerEngineFacets.getEngine().query().getHistoryWorkItems(page,
            new QueryFilter().setOperator(operator));
    

    催办

    List<Task> tasks = snakerEngineFacets.getEngine().query().getActiveTasks(new QueryFilter().setOrderId(orderId));
    根据这个task跟指定人发消息
    

    转办

    转办任务(换当前办理人,或者叫变更当前办理人)

    snakerEngineFacets.transferMajor(taskId, operator, nextOperators);
    

    驳回

    驳回/退回上一步/退回至(即退回到历史某一个节点)

    snakerEngineFacets.executeAndJump(taskId, operator, args, nodeName);
    

    撤回

    根据历史任务id,撤回由该历史任务派发的所有活动任务,如果无活动任务,则不允许撤回

    snakerEngineFacets.getEngine().task().withdrawTask(taskId, operator);
    

    抄送

    实例的抄送类似于邮箱里面的抄送功能,一般用于将该流程实例抄送给领导查阅。

    新增表wf_cc_order根据实例id、创建人、抄送人创建抄送记录engine.order().createCCOrder(String orderId, String creator, String... actorIds)更新状态用于更新抄送记录为已经阅读engine.order().updateCCStatus(String orderId, String... actorIds)    
    

    加签

    加签(增加另一人或多人的审批)

    engine.task().addTaskActor(String taskId, 1, String... actorIds)
    

    会签

    会签(通常用于审批后给相关的人签字确认,以获得工作上的协调。)

    snaker的会签目前相对比较简单,仅仅是根据任务节点的performType属性值确定是否产生多个相同任务。

    performType的值有两种,分别是ANYALL

    ANY多个参与者时,任何一个完成任务即继续流转 (或签

    ALL多个参与者时,所有都需要完成任务才能继续流转

    会签只需要在流程定义时,将任务节点的属性performType值设置为ALL即可,当调用api时传递多个参与者时,则自动派发与参与者数量相同的任务。会签任务必须等待所有参与者完成后,才继续流转

    或签

    同上

    ☎️ ☎️ ☎️ 已开源基于SnakerFlow轻量级工作流引擎的脚手架项目 easy-admin

    详情参见:终于写了个开源项目,easy-admin 为打造一款简单、轻量级的后台管理系统脚手架

    展开全文
  • 文章发布源代码和文章均来源于各类开源网站社区或者是小编在项目中、学习中整理的一些实例项目。主要目的是将开源代码分享给喜欢编程、有梦想的程序员,希望能帮助到你们与他们共同成长。其中用户产生的一些自愿下载...

    正文 | 内容

    01

    【介绍】

    platform-plus是一个轻量级的,前后端分离的Java快速开发平台,基于Springboot2.X、Beetl、Mybatis-Plus、Shiro、Redis、JWT等众多优秀框架开发而成,包含了代码生成让您一键生成出通用的CRUD后台代码以及前台页面。

    02

    【技术框架】

    技术框架

    基础框架:Java8 & Spring Boot & Maven

    数据库:Mysql

    缓存框架:Redis & Redisson

    持久层框架:Mybatis Plus

    日志记录:Logback

    主要功能严格遵循阿里编码规约开发

    支持 MySQL

    实现前后端分离

    支持结合ELK实时日志分析系统

    灵活的权限控制

    可在线生成删改查代码一键生成

    引入quartz定时任务

    引入API模板,根据token作为登录令牌

    引入Hibernate Validator校验框架

    引入云存储服务

    自定义实现swagger文档支持

    使用Mybatis拦截器

    完成Activiti6集成

    接口支持微信开放

    主要实现内容

    190cbd5fb5f03c659b0cda1e8e1cf7e3.png

    f3e4a63d00fc4214006550bbbdd6e3da.png

    03

    【源码获取方式】

    https://gitee.com/fuyang_lipengjun/platform-plus.git

    联系

    公众号ID:  itcode

    微信ID:  itcoder

    免责

    【写作说明】以上文章属于此公众号原创所有,如需转载请注明出处。【免责申明】本公众号不是广告商,也没有为其他三方网站或者个人做广告宣传。文章发布源代码和文章均来源于各类开源网站社区或者是小编在项目中、学习中整理的一些实例项目。主要目的是将开源代码分享给喜欢编程、有梦想的程序员,希望能帮助到你们与他们共同成长。其中用户产生的一些自愿下载或者付费行为,原则与平台没有直接关系。如果涉及开源程序侵犯到原作者相关权益,可联系小编进行相关处理。【投稿邮箱】315997972@qq.com

    展开全文
  • laravel 工作流引擎

    2021-11-13 10:20:41
    如果你还不懂工作流,可以到我们的视频网站去学习学习 Tpflow视频教程 PHP开源工作流引擎 Gadmin低代码开发平台 在laravel 中使用工作流其实很简单, 前言 经常有很多小伙伴问问,Tpflow能不能在laravel上...

    如果你还不懂工作流,可以到我们的视频网站去学习学习

    Tpflow视频教程 PHP开源工作流引擎 Gadmin低代码开发平台

    在laravel 中使用工作流其实很简单,

    前言

    经常有很多小伙伴问问,Tpflow能不能在laravel上使用,其实说真的,不是假的,我没学过 laravel 框架,今天就以一个小白身份,告诉你,如何使用laravel网上教程很多,我就不多废话了。

    安装

    首先还是推荐使用 composer

    1. composer create-project --prefer-dist laravel/laravel blog

    然后就安装好了!

    伪静态

    这个自己百度吧。
    送上一个apache 的

     
    
    1. <IfModule mod_rewrite.c>
    2. RewriteEngine on
    3. RewriteBase /
    4. RewriteCond %{REQUEST_FILENAME} !-d
    5. RewriteCond %{REQUEST_FILENAME} !-f
    6. RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]
    7. </IfModule>

    偷偷告诉你,跟TP一毛一样

    然后就安装完了呀。

    安装Tpflow版本

    composer require guoguo/tpflow

    这不就安装完了吗?

    就是这么简单。

    移动相关资源及配置文件

    web\laravel\vendor\guoguo\tpflow\assets\work 复制到 public\static 目录下

    web\laravel\vendor\guoguo\tpflow\src 复制到 config 目录下

    配置下数据库信息

    打开 config\database.php 添加一下代码:

    use think\facade\Db;
    // 数据库配置信息设置(全局有效)
    Db::setConfig([
        // 默认数据连接标识
        'default'     => 'mysql',
        // 数据库连接信息
        'connections' => [
            'mysql' => [
                // 数据库类型
                'type'     => 'mysql',
                // 主机地址
                'hostname' => '127.0.0.1',
                // 用户名
                'username' => 'root',
                'password'    => 'root',
                // 数据库名
                'database' => 'tpflow5.0',
                // 数据库编码默认采用utf8
                'charset'  => 'utf8',
                // 数据库表前缀
                'prefix'   => 't_',
                // 数据库调试模式
                'debug'    => true,
            ],
        ],
    ]);

    如图:不要搞错了:

    配置下路由信息

     
    

    Route::any('/wf/designapi', '\tpflow\Api@designapi');//工作流设计统一接口APIRoute::any('/wf/wfapi', '\tpflow\Api@wfapi');//工作流前端管理统一接Route::any('/wf/wfdo', '\tpflow\Api@wfdo');//工作流审批统一接口

    使用下模拟数据

     
    

    Session::put('uid', 1);

    Session::put('role', 1);

    最后访问测试下:

    http://127.0.0.1:82/

    http://127.0.0.1:82/wf/wfapi

    laravel 工作流引擎就是这么简单,还有什么不懂的,可以下面提问哟!

    展开全文
  • Java基于jeeplus vue实现简单工作流过程图解jeeplus 是一款基于代码生成器的快速开发平台。前后端分离、maven多模块开发,方便多人协同开发后端选型:springboot2 + mybatis + shiro + jwt token + flowable前端选型...
  • 你知道的越多,不知道的就越多,业余的像一棵... 总结 compileflow 极其容易上手,降低工作流学习的难度。 compileflow IDEA 设计插件在 2021 版本兼容性存在问题。 自动生成的单元测试代码依赖版本较低不支持 Junit5。
  • 因最近工作需要,故学习activiti工作流,过程有点曲折,待整理完成后,将个人学习过程分享一下. 本次记录的问题,是在学习过程中,遇到一个有意思的问题,给大家避雷. 参考资料: ...
  • 之前的很多研究其实跟工程化是比较脱节的,模型在小环境中工作得很好,并不意味着它在任何地方都可以工作得很好。 各类开源项目其实很大程度上满足了我这样的调包工程师的需求,那么工程化就非常有必要了。 之前...
  • 所谓工作流,是一种用于业务流程自动化的工具,由一系列步骤、任务或事件组成。 作为世界企业管理软件巨头,SAP 自然也有自己的工作流解决方案。历史最悠久最经典的,当然就是 SAP ABAP Workflow. [图片] 1 [图片] 2...
  • 而且它作为一个典型的后台管理系统,要素基本都有,包括:组织机构、角色用户、权限授权、数据权限、内容管理、工作流等。 尤其要提的就是最后的工作流模块,它可以实现提工单、审核/审批等流程,这个在后台管理类...
  • compileflow Process 引擎是淘宝工作流 TBBPM 引擎之一,是专注于纯内存执行,无状态的流程引擎,通过将流程文件转换生成 java 代码编译执行,简洁高效。当前是阿里业务中台交易等多个核心系统的流程引擎。 ...
  • RoadFlow是天知软件旗下基于.NET Core的工作流快速开发平台,由从事多年OA及工作流开发与实施的团队设计开发,该工作流平台已应用于众多大型企事业单位。拥有全浏览器兼容的可视化流程设计器、表单设计器、基于角色...
  • 深度学习的兴起与流行原因.

    千次阅读 2020-12-24 11:26:56
    在我们学习深度学习的时候,最基本也是最好奇的问题就是:  深度学习和神经网络之前的基础技术理念已经存在大概几十年了,为什么它们现在才突然流行起来呢? 文章目录为什么深度学习会兴起?1.数据量的增长2. 算法...
  • 这里写自定义目录标题Apache DolphinScheduler 大数据工作流调度系统一、为什么选择DolphinScheduler?1、丰富的业务类型2、可视化的DAG图3、活跃的社区和用户群4、开发语言和框架二、DolphinScheduler有哪些优势?...
  • Activiti工作流引擎基础入门【收藏可做笔记系列】

    千次阅读 多人点赞 2021-08-03 17:39:53
    Activiti基础-Activiti7一、工作流介绍1.1 概念1.2 工作流系统1.3 适用行业1.4 具体应用1.5 实现方式二、Activiti7概述2.1 介绍2.1.1 BPM2.1.2 BPM软件2.1.3 BPMN2.2 使用步骤部署activiti流程定义流程定义部署启动...
  • 教程(一)学习前提: ①了解bpmn2.0基础知识中的:startEvent,endEvent,Task; ②会使用IDEA,以及Maven(JAVA); 1、首先,保存下方这个最简单的xml文件为:【simpleTest.bpmn20.xml】 <?xml version=...
  • World Machine 地形制作使用笔记 效果展示: 一、思维导图式笔记: ...World Machine导出unity工作流: 软件下载地址: http://www.gfxcamp.com/world-machine-4008/ 案例下载地址 World Machin...
  • 现在了解什么是特别的使机器学习成为一个有吸引力的研究领域是很重要的。知道为什么它现在是流行的,可以作为一个指南,与知识的承诺,该领域作出。它可以突出公开的问题和方法,这些都是增长领域,以及为什么会出现...
  • 机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的...
  • 收藏 | 强化学习应用简述

    千次阅读 2021-05-13 16:13:39
    比如1992年应用于西洋双陆棋(Backgammon)的TD-Gammon工作。有一些比较有影响的深度强化学习算法,比如,上面提到的DQN算法,还有异步优势行动者-评价者算法(Asynchronous Advantage Actor-Critic, A3C), 深度确定性...
  •  增加所有工作流定义的显示页面,以方便查找 a) 增加工作流定义筛选并跳转到工作流实例页面,并用折线图表示其运行时长的变化 b) 工作流实例继续下潜到任务实例 3. 运行时输入参数,还可以进行配置禁用任务节点 ...
  • IO流学习笔记(二)

    千次阅读 2021-06-15 20:49:59
    Properties 可保存在中或从中加载。Properties集合是一个唯一和I0相结合的集合。 可以使用Properties集合中的方法store,把集合中的临时数据,持久化写入到硬盘中存储。 可以使用Properties集合中的方法Load,把...
  • 增量学习(Incremental Learning)小综述

    千次阅读 2021-03-03 14:57:49
    点击上方,选择星标,每天给你送干货!来自:NewBeeNLP公众号专栏作者@Maple小七北京邮电大学·模式识别与智能系统1. 增量学习的概念1.1 什么是增量学习人类有终身不...
  • 早期工作是预先为每对任务指定哪些层来分享,这种方法扩展性差且模型结构严重有偏;当任务相关性下降或需要不同level推理时,hard parameter sharing就不行了。 目前比较火的是learning what to share(outperform ...
  • VS2017 CUDA编程学习12:CUDA

    千次阅读 2021-11-12 21:24:50
    CUDA的理解2. C++ 实现CUDA3. 执行结果总结学习资料 VS2017 CUDA编程学习1:CUDA编程两变量加法运算 VS2017 CUDA编程学习2:在GPU上执行线程 VS2017 CUDA编程学习3:CUDA获取设备上属性信息 VS2017 CUDA编程...
  • 我们先得明白搜索引擎都干了啥,然后看哪些部分可以用机器学习来提高用户体验的,下图出自:第 1 章 搜索引擎是如何工作的 构成搜索引擎的全部要素 1、文档管理器:存储作为检索对象的文档。当查询到相匹配的文档...
  • 机器学习常见算法分类

    千次阅读 2021-02-03 19:32:43
    1 机器学习概念 1.1 机器学习的定义 在维基百科上对机器学习提出以下几种定义: “机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”。 “机器学习是...
  • 深度强化学习的简要概述 作者: Kai Arulkumaran, Marc Peter Deisenroth, Miles Brundage, Anil Anthony Bharath 文章目录摘要 Abstract1. 引言 Introduction2. 奖励驱动行为 Reward-Driven Behavior2.1. ...
  • 第一部分:这里的元素详情请搜索bpmn2.0规范、元素之类的进行学习,这里就不详细介绍了,最简单的使用中,只需要了解开始事件、结束事件、顺序(也就是→),以及用户任务即可,如图。 第二部分也就是图形显示,...
  • 【C++学习笔记】C++输入输出

    千次阅读 2021-08-04 20:47:16
    文章目录C++输入和输出(超级详细)C++输入和输出C++ cout.put():输出单个字符C++ cout.write():输出字符串C++ cout.tellp()和cout.seekp()方法详解C++ tellp()成员方法C++ seekp()成员方法C++ cout格式化...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 525,961
精华内容 210,384
关键字:

工作流学习