ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

复习步骤24-28 规则引擎Drools(3)Activiti整合Drools

2019-05-09 14:52:13  阅读:511  来源: 互联网

标签:24 Drools bpmn activiti Activiti sale engine drl import


            规则引擎Drools(3)Activiti整合Drools

 制订业务

  • 金卡7折
  • 银卡8折

测试规则

设计流程

Activiti整合Drools,drl文件部署,要注意三点如下:

1在activiti.cxf.xml中加入下标签

2.在JAVA部署时将我们要部署的drl文件进行部署,如下

 

3. 匹配参数要JAVA 中JUEL注入

 

测试流程图;

 

测试

1.1 新建 activiti.cxf.xml(加Drools有效标签,祥见上上图), 流程图sale.bpmn

1.2 新建sale.drl,并修改sale.bpmn,给匹配销售规则节点加输入参数,和匹配结果结果参数(是个数组)

1.3  再新建相关的类其他,

1.4整个过程如下:

项目结构如下:

注意事项:将 Activiti整合Drools,drl文件部署,要注意三点如下都弄好后

 

根据流程图:执行SaleMain的main方法 我们部署完 bpmn,drl文件后,流程先走到录入销售信息,然后执行如下代码

  // 完成第一个任务并设置销售参数

        Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();

        // 设置参数

        Map<String, Object> vars = new HashMap<String, Object>();

        Member m = new Member();

        m.setIdentity("gold");

        m.setAmount(100);

        vars.put("member", m);

        System.out.println("当前节点任务名"+task.getName());//当前节点任务名录入销售信息

        //在跳到下一个节点即匹配销售规则节点节点前设置好参数 member JUEL

        taskService.complete(task.getId(), vars);

       /*

        因为流程bpmndrl是同时加入流程的.addClasspathResource("sale.bpmn").addClasspathResource("sale.drl").deploy();

        所以在进入 匹配销售规则节点时

        会按照我们juel注入的参数member对象,按照sale.bpmn activiti:ruleVariablesInput="${member}" 自动根据sale.drl进行匹配

        并将匹配新的对象(因为sale.drl配置规则打折后更新了对象)放入 sale.bpmn 设置的数组参数  activiti:resultVariable="members" 中

       

        然后会自动执行Service Task对应的自定义类com.xiangshuai.act.c27.OutputDelegate

         @Override

    public void execute(DelegateExecution exe) {

        System.out.println("结果输出类");

        List<Member> members = (List<Member>)exe.getVariable("members");

        for(Member m : members) {

            System.out.println("客户身份:" + m.getIdentity() + ", 消费金额:" + m.getAmount() + ", 优惠后金额:" + m.getResult());

        }

    }

 

        */

 

 

总测试类:

SaleMain.java

package com.xiangshuai.act.c27;

 

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngines;

import org.activiti.engine.RepositoryService;

import org.activiti.engine.RuntimeService;

import org.activiti.engine.TaskService;

import org.activiti.engine.delegate.DelegateExecution;

import org.activiti.engine.repository.Deployment;

import org.activiti.engine.repository.ProcessDefinition;

import org.activiti.engine.runtime.ProcessInstance;

import org.activiti.engine.task.Task;

 

/**

 * @author lqx

 * 文件在 E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤24-28 规则引擎Drools(3)Activiti整合Drools

  或 我的网盘\我的笔记\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤24-28 规则引擎Drools(3)Activiti整合Drools

 *

 */

public class SaleMain {

 

    public static void main(String[] args) {

        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

        // 存储服务

        RepositoryService rs = engine.getRepositoryService();

        // 运行时服务

        RuntimeService runService = engine.getRuntimeService();

        // 任务服务

        TaskService taskService = engine.getTaskService();

        Deployment dep = rs.createDeployment()

                .addClasspathResource("sale.bpmn")

                .addClasspathResource("sale.drl").deploy();

        ProcessDefinition pd = rs.createProcessDefinitionQuery()

                .deploymentId(dep.getId()).singleResult();

        ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

       

        // 完成第一个任务并设置销售参数

        Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();

        // 设置参数

        Map<String, Object> vars = new HashMap<String, Object>();

        Member m = new Member();

        m.setIdentity("gold");

        m.setAmount(100);

        vars.put("member", m);

        System.out.println("当前节点任务名"+task.getName());//当前节点任务名录入销售信息

        //在跳到下一个节点即匹配销售规则节点节点前设置好参数 member JUEL

        taskService.complete(task.getId(), vars);

       /*

        因为流程bpmndrl是同时加入流程的.addClasspathResource("sale.bpmn").addClasspathResource("sale.drl").deploy();

        所以在进入 匹配销售规则节点时

        会按照我们juel注入的参数member对象,按照sale.bpmn activiti:ruleVariablesInput="${member}" 自动根据sale.drl进行匹配

        并将匹配新的对象(因为sale.drl配置规则打折后更新了对象)放入 sale.bpmn 设置的数组参数  activiti:resultVariable="members" 中

       

        然后会自动执行Service Task对应的自定义类com.xiangshuai.act.c27.OutputDelegate

         @Override

    public void execute(DelegateExecution exe) {

        System.out.println("结果输出类");

        List<Member> members = (List<Member>)exe.getVariable("members");

        for(Member m : members) {

            System.out.println("客户身份:" + m.getIdentity() + ", 消费金额:" + m.getAmount() + ", 优惠后金额:" + m.getResult());

        }

    }

 

        */

    }

 

}

 

标签:24,Drools,bpmn,activiti,Activiti,sale,engine,drl,import
来源: https://blog.csdn.net/xiangshuai198807/article/details/90034086

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有