美文网首页
BOS项目第09天

BOS项目第09天

作者: KaveeDJ | 来源:发表于2019-08-19 00:47 被阅读0次

9 BOS项目第09天

今天开始学习工作流activity

9.1 工作流概念

  • 类似于流程图,完成业务的自动化

9.2 Activity简单介绍

  • 现在最新版本已经是activiti6了,工作中追求稳定,而不是追求新
  • activiti是一个工作流引擎,Activiti工作的核心,负责生成流程运行时的各种实例及数据、监控和管理流程的运行。

9.3 在IDEA安装acti插件

image.png

9.4 Eclipse中activity工作流插件安装

9.4.1 网络安装activity插件

9.4.2 离线下载安装

9.5 了解activity的目录结构

image.png

9.6 activiti的入门教程

9.6.1 导入activiti所需要的数据表

  • 这里使用mysql,所以导入database文件夹下面三个sql文件,创建23张表


    image.png

9.6.2 了解数据库表前缀代表的函数

  • Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。
    1. ACT_RE_: 'RE'表示repository。 这个前缀的表包含了流程定义流程静态资源*(图片,规则,等等。
    2. ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
    3. ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。
    4. ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
    5. ACT_GE_*: 通用数据, 用于不同场景下。

9.6.3 使用框架自动生成表(不建议)

  1. 创建一个java项目
  2. 导入activiti中wars程序的所有jar包
  3. 导入mysql的数据库驱动
  4. 提供一个配置文件,文件名必需为activiti-context.xml
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

    <!-- 1.流程引擎配置对象 -->
    <bean id="processEngineConfiguration"
          class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcDriver"  value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl"  value="jdbc:mysql:///activiti_day1"/>
        <property name="jdbcUsername"  value="root"/>
        <property name="jdbcPassword"  value="root"/>
        <property name="databaseSchemaUpdate" value="true"/>
    </bean>

    <!-- 2.使用工厂创建流程引擎对象 -->
    <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
        <property name="processEngineConfiguration" ref="processEngineConfiguration"/>
    </bean>

</beans>
  1. 写一个单元测试
    • 只要获取流程引擎对象,就会自动创建表
    • 可以添加示例程序的log4j.properties来查看日志里更多信息输出
    • 在activiti-engine-5.13.jar有数据库sql文件,用于自动创建数据库表
    @Test
    public void test1(){
        //1.获取默认的流程引擎对象
        ProcessEngine pe = ProcessEngines.getDefaultProcessEngine();
    }

9.6.4 设计一个请假流程图

  • 在Eclipse中,利用activiti插件创建一个请假流程图
  • 在每一个任务中,找到Main config的Assignee中,先固定每个任务的受理人


    image.png
    image.png

9.6.5 部署流程定义

  • 就是把流程存入数据库,写个单元测试代码
  • 流程定义部署完后,会在act_re_deployment和act_re_procdef两张表存储数据,
  • deployment的ID每次增加100
  • 同一个流程的procdef表的version是递增的
    @Test
    public void test2(){
        //1.把流程图保存到数据库
        ProcessEngine pe = ProcessEngines.getDefaultProcessEngine();

        //2.获取仓库
        RepositoryService rs = pe.getRepositoryService();

        //3.获取一个部署的构造器对象
        DeploymentBuilder db = rs.createDeployment();

        db.addClasspathResource("qjlc.bpmn");
        db.addClasspathResource("qjlc.jpg");

        //4.部署
        db.deploy();
    }

8.6.6 查询流程定义

    @Test
    public void test3(){
        ProcessEngine  pe = ProcessEngines.getDefaultProcessEngine();
        ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery();

        List<ProcessDefinition> list = query.list();
        for(ProcessDefinition pd : list){
            System.out.print("ResourceName-" +pd.getResourceName() + ": ");
            System.out.print("id-" + pd.getId() + ": ");
            System.out.print("key-" + pd.getKey() + ": ");
            System.out.print("name-" + pd.getName() + ": ");
            System.out.println();
        }
    }

8.6.7 根据流程定义启动流程实例

  • 就是把第一个请假申请任务跑
  • 内部会操作act_re_execution和act_re_task两张表
    @Test
    public void test5(){
        ProcessInstance pi = pe.getRuntimeService().startProcessInstanceById("myProcess_1:4:304");
        System.out.println("流程实例:" + pi.getProcessInstanceId());
        System.out.println("流程实例:" + pi.getId());
    }

8.6.8 查询个人任务

    @Test
    public void test7(){
        //查询个人任务
        TaskQuery tq = pe.getTaskService().createTaskQuery();
        tq.taskAssignee("zhangsan");
        tq.orderByTaskCreateTime().desc();//时间排序
        List<Task> tasks = tq.listPage(0, 10);//分页查询
        for(Task task : tasks){
            System.out.println("=================================");
            System.out.println("taskId:" + task.getId());
            System.out.println("taskName:" + task.getName());
            System.out.println("executionId:" + task.getExecutionId());
        }
    }

8.6.9 办理个人任务

  • 请求申请需要被处理,处理中会操作act_re_task和act_hi_taskinst表
  • 处理事,会进入下一个任务,往task表插入下一个流程的任务,比如请假申请后,下一个任务就是项目经理审批任务
    @Test
    public void test6(){
        //lisi审核任务
        String taskId = "602";
        pe.getTaskService().complete(taskId);
    }

8.6.10 部署流程定义的另一种方式zip文件

  • 把流程和jpg打包成zip文件
    @Test
    public void test8() throws FileNotFoundException {
        //创建部署构建器对象
        DeploymentBuilder db = pe.getRepositoryService().createDeployment();

        File file = new File("C:\\process.zip");
        FileInputStream fis = new FileInputStream(file);

        ZipInputStream zis = new ZipInputStream(fis);
        db.addZipInputStream(zis);

        //部署定义流程
        Deployment deployment = db.deploy();
        System.out.println(deployment.getId());
    }

8.6.11 删除流程定义

    @Test
    public void test8(){
        //pe.getRepositoryService().deleteDeployment("901");
        //加个true,删除process表相关记录,如果启动流程了实例,用下面的方法删除
        pe.getRepositoryService().deleteDeployment("901", true);
    }

8.6.12 6.12.查询部署对应的流程定义文件名称和输入流

    @Test
    public void test10(){
        String deploymentId = "301";
        List<String> names = pe.getRepositoryService().getDeploymentResourceNames(deploymentId);
        for (String name : names) {
            System.out.println(names);
            //可以还原成文件,默认流程定义文件存在了act_ge_bytearr表
            //InputStream in = pe.getRepositoryService().getResourceAsStream(deploymentId, name);
        }
    }

8.6.13 查询部署对应的流程定义图表

    @Test
    public void test11() throws IOException{
        String processDefinitionId = "qjlc:1:304";//流程定义id
        InputStream pngStream = pe.getRepositoryService().getProcessDiagram(processDefinitionId);
        FileUtils.copyInputStreamToFile(pngStream, new File("c:\\t\\abc.png"));
    }

8.6.14 删除流程实例

    @Test
    public void test12(){
        String processInstanceId = "401";
        String deleteReason = "不请假了";
        pe.getRuntimeService().deleteProcessInstance(processInstanceId , deleteReason );
    }

相关文章

  • BOS项目第11天

    11 BOS项目第11天 今天学习将activiti整合进BOS系统 11.1 查看流程实例列表 前提:使用jun...

  • BOS项目第10天

    10 BOS项目第10天 今天继续学习工作流activity,流程变量 10.1 请假流程存在的问题 缺少请假原因...

  • BOS项目第09天

    9 BOS项目第09天 今天开始学习工作流activity 9.1 工作流概念 类似于流程图,完成业务的自动化 9...

  • BOS项目第08天

    8 BOS项目第08天 对权限涉及的5张表,进行CRUD的操作 8.1 初始化权限数据 权限功能需要一张权限表记录...

  • 如何创建自定义普通基础资料(模组配置)

    [BOS]菜单打开->基础管理->基础资料普通基础资料 [BOS]复制普通基础资料模板;工程项目 [Adminis...

  • 第一天

    《1 项目概述 1.1 项目背景介绍 BOS----Bussiness Operating System 业务操作...

  • 如何在bloks.io上检查您的BOS帐户名称(3)

    第2步: 输入您的EOS用户名,它会显示您的BOS帐户名和其他信息,例如BOS快照时的EOS余额,空投您的BOS数...

  • 百度Bos上传文件工具类-BosUtils(java)

    功能要求 java项目中所有的图片均使用对象存储BOS 准备材料 首先你要又百度bos的账号,找到自己的ak、sk...

  • BOS物流管理项目

    基于itheimaSSH阶段物流管理项目 Kotlin入门也好久了,但好像还是不熟悉,熟悉一个语言还是用起来会熟悉...

  • 币创将于1月17日上线BOS

    尊敬的币创用户: 币创将于1月17日上线BOS: 1月17日21:00 (GMT+8)BOS主网上线后,币创将在第...

网友评论

      本文标题:BOS项目第09天

      本文链接:https://www.haomeiwen.com/subject/mlfdsctx.html