activiti工作流的使用

网址
https://www.activiti.org
https://github.com/Activiti/Activiti

版本
5.16 2014.07.23
5.17 2014.12.18
5.18 2015.07.31
5.19 2015.11.05
5.20 2016.04.18
5.21 2016.07.13
5.22 2016.11.04

工作流
定义
工作的流程,实际业务的一个执行过程
预先定义需要执行的任务,参与的人或者角色,执行的规则,
参与者按照规则执行这些任务,最终完成整个过程

核心概念
    流程定义和流程实例
    流程人员,执行实例,任务,流程变量
    流程定义中 包含 流程人员,任务,流程变量 等

BPMN
    业务流程模型的一组符号,用来定义业务流程图,描述一个业务流程

配置spring集成activiti
使用流程引擎配置类, SpringProcessEngineConfiguration
配置流程引擎 ProcessEngine,
配置service服务, 有
RepositoryService 管理流程定义
RuntimeService 管理流程的执行实例,包括启动、推进、删除流程实例等操作
TaskService 管理流程的任务
HistoryService 管理历史流程的执行实例/任务/流程变量/流程人员等
IdentityService 管理流程人员
FormService 管理任务表单
————————————————————————————————-






  <!-- 定义流程引擎 -->
  <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
    <property name="processEngineConfiguration" ref="processEngineConfiguration" />
  </bean>

  <!-- 定义Service服务 -->
  <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
  <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
  <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
  <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
  <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
  <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService"/>
  <bean id="formService" factory-bean="processEngine" factory-method="getFormService"></bean>

SpringProcessEngineConfiguration需要注入DataSource,TransactionManager,
ProcessEngine需要注入SpringProcessEngineConfiguration
ProcessEngine 可以得到
RepositoryService
RuntimeService
TaskService
HistoryService
IdentityService
FormService

activiti的数据库表
ACT_RE_*: ‘RE’表示repository。
这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
ACT_RU_*: ‘RU’表示runtime。
这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。
Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。
这样运行时表可以一直很小速度很快。
ACT_ID_*: ‘ID’表示identity。
这些表包含身份信息,比如用户,组等等。
ACT_HI_*: ‘HI’表示history。
这些表包含历史数据,比如历史流程实例, 变量,任务等等。

开发activiti
使用eclipse插件,绘制流程定义文件,
生成 .bpmn,.png,打成压缩包*.zip

创建activiti自带的数据库表
    可以使用一个配置文件,配置数据库的jdbc连接信息,
    使用activiti的api自动创建表

创建业务数据表

创建参与人员的数据

在项目中部署流程,
    使用RepositoryService
    repositoryService.createDeployment()//创建一个流程部署
        .name(deployFile.getOriginalFilename())//流程部署的名称
        .addZipInputStream(new ZipInputStream(deployFile.getInputStream()))//添加zip输入流
        .deploy();//开始部署

业务流程操作

    提交申请

        // 启动流程, 根据流程定义*.bpmn里面定义的流程的id,启动具体的流程实例
        ProcessInstance pi= runtimeService.startProcessInstanceByKey("leavebill",variables); 
        // 根据流程实例Id查询任务
        Task task=taskService.createTaskQuery().processInstanceId(pi.getProcessInstanceId()).singleResult(); 
         // 完成 学生填写请假单任务        
        taskService.complete(task.getId()); 


    审核操作
        // 创建任务查询,根据taskId获得任务
        Task task=taskService.createTaskQuery() 
            .taskId(taskId) // 根据任务id查询
            .singleResult();

        Map<String,Object> variables=new HashMap<String,Object>();
        //取得角色用户登入的session对象
        MemberShip currentMemberShip=(MemberShip) session.getAttribute("currentMemberShip");
        //取出用户,角色信息
        User currentUser=currentMemberShip.getUser();
        Group currentGroup=currentMemberShip.getGroup();

        // 获取流程实例id
        String processInstanceId=task.getProcessInstanceId();
        // 设置用户id
        Authentication.setAuthenticatedUserId(currentUser.getFirstName()+currentUser.getLastName()+"["+currentGroup.getName()+"]"); 
        // 添加批注信息
        taskService.addComment(taskId, processInstanceId, comment); 
        // 完成任务
        taskService.complete(taskId, variables); 

请假流程

生成数据库表
    使用java代码生成
    activiti.cfg.xml存放数据库连接信息
<!-- 创建单例子的流程引擎的配置文件 -->
            <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
                <!-- 链接数据库配置 -->
                <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
                <!-- 转义的话,需要加入& = &amp; -->
                <property name="jdbcUrl" value="jdbc:mysql://localhost:3316/activiti?useUnicode=true&amp;characterEndocing=utf8"></property>
                <property name="jdbcUsername" value="root"></property>
                <property name="jdbcPassword" value=""></property>
                <!-- 创建表配置自动创建 -->
                <property name="databaseSchemaUpdate" value="true"></property>
            </bean>

        //通过让工作流引擎的全部配置对象来执行配置文件中的内容来创建流程引擎对象
        ProcessEngine processEngine = ProcessEngineConfiguration
                .createProcessEngineConfigurationFromResource(
                        "activiti.cfg.xml").buildProcessEngine();

        act_ge_property         
            属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录
            next.dbid       7501                4
            schema.history  create(5.20.0.2)    1
            schema.version  5.20.0.2            1
            schema.version  5.20.0.2            1

        [
            添加业务数据表
            DROP TABLE IF EXISTS `t_leave`;
            CREATE TABLE `t_leave` (
              `id` int(11) NOT NULL auto_increment,
              `userId` varchar(255) default NULL,
              `leaveDate` datetime default NULL,
              `leaveDays` int(11) default NULL,
              `leaveReason` text,
              `state` varchar(255) default NULL,
              `processInstanceId` int(11) default NULL,
              PRIMARY KEY  (`id`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
        ]
添加用户信息

    手动插入数据
        INSERT INTO `act_id_group` VALUES ('bz', null, '班主任', '');
        INSERT INTO `act_id_group` VALUES ('manager', null, '管理员', '');
        INSERT INTO `act_id_group` VALUES ('student', null, '学生', '');
        INSERT INTO `act_id_group` VALUES ('yz', null, '院长', '');
        INSERT INTO `act_id_group` VALUES ('zr', null, '主任', '');

        INSERT INTO `act_id_user` VALUES ('admin', null, 'old', 'noop', '123@qq.com', '123', '');
        INSERT INTO `act_id_user` VALUES ('lisi', null, '李', '四', '123@qq.com', '123', '');
        INSERT INTO `act_id_user` VALUES ('wangwu', null, '王', '五', '123@qq.com', '123', '');
        INSERT INTO `act_id_user` VALUES ('zhangsan', null, '张', '三', '123@qq.com', '123', '');
        INSERT INTO `act_id_user` VALUES ('zhaoliu', null, '赵', '六', '123@qq.com', '123', '');

        INSERT INTO `act_id_membership` VALUES ('lisi', 'bz');
        INSERT INTO `act_id_membership` VALUES ('admin', 'manager');
        INSERT INTO `act_id_membership` VALUES ('zhangsan', 'student');
        INSERT INTO `act_id_membership` VALUES ('zhaoliu', 'yz');
        INSERT INTO `act_id_membership` VALUES ('wangwu', 'zr');


    用户信息
        admin       manager     oldnoop     管理员 123
        lisi        bz          李四      班主任 123
        wangwu      zr          王五      主任  123
        zhangsan    student     张三      学生  123
        zhaoliu     yz          赵六      院长  123

        数据表
            act_id_group        用户组信息表
            act_id_info         用户扩展信息表
            act_id_membership       用户与用户组对应信息表
            act_id_user         用户信息表
            select u.ID_,g.ID_,concat(u.FIRST_,u.LAST_) as name,g.NAME_,u.PWD_ 
            from act_id_membership m 
            join act_id_user u on m.USER_ID_ =u.ID_ 
            join act_id_group g on m.GROUP_ID_=g.ID_;

流程图
    设计
    eclipse插件
    生成*.bpmn,*.png,
    生成*.zip


流程定义部署

    管理员登录系统
        admin,123

    部署流程实例

    数据库表数据
        act_ge_bytearray        二进制数据表
            "2",1,"leaveBill.png","1",0
            "3",1,"leaveBill.bpmn","1",0

        act_re_deployment       部署信息表
            1   leave.zip           2017-05-10 12:28:06

        act_re_model            流程设计模型部署表

        act_re_procdef          流程定义数据表
            leavebill:1:4   1   http://www.activiti.org/test    My process  leavebill   1   1   leaveBill.bpmn  leaveBill.png       0   1   1

流程实例运行

    学生登录系统
        zhangsan,123

        填写请假表单
            业务数据表t_leave
                3   zhangsan    2017-05-11 11:23:35 3   睡觉  未提交     

        提交申请
            业务数据表t_leave
                3   zhangsan    2017-05-11 11:23:35 3   睡觉  审核中 5021
                [执行对象id]    
            activiti数据表
                act_ru_*
                act_ru_execution
                    运行时流程 [执行实例] 表
                    [REV_,ACT_ID_ 2,usertask4]
                    5021    2   5021            leavebill:1:4       usertask4   1   0   1   0   1   2   
                act_ru_task
                    运行时任务节点表
                    5029    1   5021    5021    leavebill:1:4   审核【班主任】         usertask4               50  2017-05-11 11:24:37         1       pizhun.jsp
                act_ru_variable
                    运行时流程变量数据表
                    5024    1   string  leaveId 5021    5021                    3   
                act_ru_identitylink
                    运行时流程人员表,主要存储任务节点与参与者的相关信息
                    5022    1       starter 李四[班主任]     5021    
                    5030    1   bz  candidate       5029        

    班主任登录系统
        lisi,123

        办理任务
            activiti数据表
                act_ru_*
                act_ru_execution
                    运行时流程 [执行实例] 表
                    [REV_,ACT_ID_ 3,usertask2]
                    5021    3   5021            leavebill:1:4       usertask2   1   0   1   0   1   2       
                act_ru_task
                    运行时任务节点表
                    [NAME_,TASK_DEF_KEY_, 主任,usertask2]
                    5036    1   5021    5021    leavebill:1:4   主任          usertask2               50  2017-05-11 11:36:47         1       pizhun.jsp
                act_ru_variable
                    运行时流程变量数据表
                    5024    1   string  leaveId 5021    5021                    3   
                    5032    1   integer day     5021    5021                3   3   
                    5033    1   string  msg     5021    5021                    通过      
                act_ru_identitylink
                    运行时流程人员表,主要存储任务节点与参与者的相关信息
                    5022    1           starter     李四[班主任]     5021    
                    5037    1   zr      candidate                5036       

    主任登录系统
        办理任务

            activiti数据表
                act_ru_*正在执行数据表
                    act_ru_execution
                    act_ru_task
                    act_ru_variable
                    act_ru_identitylink
                    数据删除

                act_hi_*历史执行数据表
                    act_hi_procinst         历史流程实例表
                        5021    5021        leavebill:1:4   2017-05-11 11:24:36 2017-05-11 11:45:03 1227785 李四[班主任] startevent1 endevent1               
                    act_hi_actinst          历史节点表
                        5023    leavebill:1:4   5021    5021    startevent1             Start           startEvent      2017-05-11 11:24:36 2017-05-11 11:24:36 0   
                        5025    leavebill:1:4   5021    5021    usertask1   5026        学生提出申请  userTask        2017-05-11 11:24:36 2017-05-11 11:24:37 1118    
                        5028    leavebill:1:4   5021    5021    usertask4   5029        审核【班主任】 userTask        2017-05-11 11:24:37 2017-05-11 11:36:47 730662  
                        5034    leavebill:1:4   5021    5021    exclusivegateway1       Exclusive Gateway   exclusiveGateway        2017-05-11 11:36:47 2017-05-11 11:36:47 0   
                        5035    leavebill:1:4   5021    5021    usertask2   5036        主任  userTask        2017-05-11 11:36:47 2017-05-11 11:45:03 496784  
                        5040    leavebill:1:4   5021    5021    endevent1               End endEvent        2017-05-11 11:45:03 2017-05-11 11:45:03 0   
                    act_hi_taskinst         历史任务实例表
                        5026    leavebill:1:4   usertask1   5021    5021    学生提出申请                  2017-05-11 11:24:36     2017-05-11 11:24:37 1116    completed   50              
                        5029    leavebill:1:4   usertask4   5021    5021    审核【班主任】                 2017-05-11 11:24:37     2017-05-11 11:36:47 730661  completed   50      pizhun.jsp      
                        5036    leavebill:1:4   usertask2   5021    5021    主任                  2017-05-11 11:36:47     2017-05-11 11:45:03 496782  completed   50      pizhun.jsp      
                    act_hi_identitylink     历史流程人员表
                        5022        starter 李四[班主任]     5021
                        5039        participant 王五[主任]      5021
                    act_hi_varinst          历史变量表
                        5024    5021    5021        leaveId string  1               3       2017-05-11 11:24:36 2017-05-11 11:45:03
                        5032    5021    5021        day integer     1           3   3       2017-05-11 11:36:47 2017-05-11 11:45:03
                        5033    5021    5021        msg string      1               通过  2017-05-11 11:36:47 2017-05-11 11:45:03
                    act_hi_comment          历史意见表
                        5031    comment 2017-05-11 11:36:47 李四[班主任] 5029    5021    AddComment  可以啊 鍙互鍟?
                        5038    comment 2017-05-11 11:45:03 王五[主任]      5036    5021    AddComment  可以  鍙互
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值