JeecgBoot集成camunda实现DMN实现班级决策案例

班级决策

Camunda 支持DMN1.3版本,在BPMN业务活动流程中,可通过业务规则任务调用DMN决策。DMN决策目的是想把业务代码和决策进行解耦,使决策分析人员只需关心决策即可。

需求描述

通过幼儿园学生年龄age和身高height分配不同的班级,决策表可随时修改。校长审核时向流程中传递决策表所需要的流程变量age、height。流程径流决策表后自动提交到相关班级老师审批。
决策规则说明

大于3岁并且身高高于70cm,可上幼儿园小班

大于等于5岁并且身高高于95cm,可上幼儿园中班

大于7岁并且身高高于120cm,可上幼儿园大班

BPMN建模

在这里插入图片描述

设计校长审核并进行分班的流程模型

在这里插入图片描述

规则任务节点的实施设置为DMN,并按照图中进行了配置

XML内容

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn">
  <bpmn:process id="Process_choice_class" name="班级决策" isExecutable="true">
    <bpmn:startEvent id="StartEvent_1">
      <bpmn:outgoing>Flow_0fss2gh</bpmn:outgoing>
    </bpmn:startEvent>
    <bpmn:sequenceFlow id="Flow_0fss2gh" sourceRef="StartEvent_1" targetRef="Activity_1nqmntb" />
    <bpmn:userTask id="Activity_1nqmntb" name="校长审核" camunda:assignee="${customer}">
      <bpmn:extensionElements>
        <camunda:formData>
          <camunda:formField id="age" label="年龄" type="long" defaultValue="1" />
          <camunda:formField id="height" label="身高" type="long" defaultValue="0" />
        </camunda:formData>
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_0fss2gh</bpmn:incoming>
      <bpmn:outgoing>Flow_1w7qdzj</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:sequenceFlow id="Flow_1w7qdzj" sourceRef="Activity_1nqmntb" targetRef="Activity_02itx7s" />
    <bpmn:businessRuleTask id="Activity_02itx7s" name="判断哪个班级" camunda:resultVariable="dmnResult" camunda:decisionRef="class-choice" camunda:mapDecisionResult="singleEntry">
      <bpmn:incoming>Flow_1w7qdzj</bpmn:incoming>
      <bpmn:outgoing>Flow_1hcuyt1</bpmn:outgoing>
    </bpmn:businessRuleTask>
    <bpmn:exclusiveGateway id="Gateway_1c2reel">
      <bpmn:incoming>Flow_1hcuyt1</bpmn:incoming>
      <bpmn:outgoing>Flow_1oukih7</bpmn:outgoing>
      <bpmn:outgoing>Flow_1dghuqc</bpmn:outgoing>
      <bpmn:outgoing>Flow_1ry0dxl</bpmn:outgoing>
    </bpmn:exclusiveGateway>
    <bpmn:sequenceFlow id="Flow_1hcuyt1" sourceRef="Activity_02itx7s" targetRef="Gateway_1c2reel">
      <bpmn:extensionElements>
        <camunda:executionListener delegateExpression="${myClassTask}" event="take" />
      </bpmn:extensionElements>
    </bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="Flow_1oukih7" name="dmnResult==1" sourceRef="Gateway_1c2reel" targetRef="Activity_0jlob3q">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${dmnResult ==1}</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:serviceTask id="Activity_0jlob3q" name="小班" camunda:delegateExpression="${myClassTask}">
      <bpmn:incoming>Flow_1oukih7</bpmn:incoming>
      <bpmn:outgoing>Flow_121bph1</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_1dghuqc" name="dmnResult==2" sourceRef="Gateway_1c2reel" targetRef="Activity_08vymo7">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${dmnResult ==2}</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:serviceTask id="Activity_08vymo7" name="中班" camunda:delegateExpression="${myClassTask}">
      <bpmn:incoming>Flow_1dghuqc</bpmn:incoming>
      <bpmn:outgoing>Flow_0bzrgdf</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_1ry0dxl" name="dmnResult==3" sourceRef="Gateway_1c2reel" targetRef="Activity_16865do">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${dmnResult ==3}</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:serviceTask id="Activity_16865do" name="大班" camunda:delegateExpression="${myClassTask}">
      <bpmn:incoming>Flow_1ry0dxl</bpmn:incoming>
      <bpmn:outgoing>Flow_0wftu8w</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:endEvent id="Event_1tksyrl">
      <bpmn:incoming>Flow_121bph1</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="Flow_121bph1" sourceRef="Activity_0jlob3q" targetRef="Event_1tksyrl" />
    <bpmn:endEvent id="Event_1u2u83d">
      <bpmn:incoming>Flow_0bzrgdf</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="Flow_0bzrgdf" sourceRef="Activity_08vymo7" targetRef="Event_1u2u83d" />
    <bpmn:endEvent id="Event_0gq7hhn">
      <bpmn:incoming>Flow_0wftu8w</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="Flow_0wftu8w" sourceRef="Activity_16865do" targetRef="Event_0gq7hhn" />
  </bpmn:process>
</bpmn:definitions>

DMN建模

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/" xmlns:camunda="http://camunda.org/schema/1.0/dmn" xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/" xmlns:dmndi="https://www.omg.org/spec/DMN/20191111/DMNDI/" exporter="Camunda Modeler" exporterVersion="4.11.1" expressionLanguage="https://www.omg.org/spec/DMN/20191111/FEEL/" id="Definitions_appoaprif5r90c" name="DRD" namespace="http://camunda.org/schema/1.0/dmn" typeLanguage="https://www.omg.org/spec/DMN/20191111/FEEL/">
  <decision id="class-choice" name="班级判断">
    <decisionTable aggregation="MAX" hitPolicy="COLLECT" id="DecisionTable_xxe918s1gxq" preferredOrientation="Rule-as-Row">
      <input camunda:inputVariable="A" id="Input_A" label="年龄">
        <inputExpression id="InputExpression_A" typeRef="integer">
          <text>age</text>
        </inputExpression>
      </input>
      <input id="InputClause_1pmyqs4" label="身高">
        <inputExpression id="LiteralExpression_1g9go56" typeRef="number">
          <text>height</text>
        </inputExpression>
      </input>
      <output id="Output_A" label="选择班级" name="dmnResult" typeRef="number"/>
      <rule id="DecisionRule_14e302t">
        <description>大于3岁并且身高高于70cm,可上幼儿园小班</description>
        <inputEntry id="UnaryTests_10f17a9">
          <text>&gt;3</text>
        </inputEntry>
        <inputEntry id="UnaryTests_1juonnl">
          <text>&gt;70</text>
        </inputEntry>
        <outputEntry id="LiteralExpression_0sv3naw">
          <text>1</text>
        </outputEntry>
      </rule>
      <rule id="DecisionRule_1dzzwnr">
        <description>大于等于5岁并且身高高于95cm,可上幼儿园中班</description>
        <inputEntry id="UnaryTests_0m4kz9f">
          <text>&gt;=5</text>
        </inputEntry>
        <inputEntry id="UnaryTests_12y1rvm">
          <text>&gt;=96</text>
        </inputEntry>
        <outputEntry id="LiteralExpression_0wovhui">
          <text>2</text>
        </outputEntry>
      </rule>
      <rule id="DecisionRule_1rgvsjm">
        <description>大于7岁并且身高高于120cm,可上幼儿园大班</description>
        <inputEntry id="UnaryTests_0g02yle">
          <text>&gt;7</text>
        </inputEntry>
        <inputEntry id="UnaryTests_0xhd2bf">
          <text>&gt;120</text>
        </inputEntry>
        <outputEntry id="LiteralExpression_0f71spy">
          <text>3</text>
        </outputEntry>
      </rule>
    </decisionTable>
  </decision>
  <dmndi:DMNDI>
    <dmndi:DMNDiagram>
      <dmndi:DMNShape dmnElementRef="Definitions_hrsxxe918s1gxq" id="DMNShape_8kn0lmvopu7" isCollapsed="false">
        <dc:Bounds height="80" width="180" x="160" y="280"/>
      </dmndi:DMNShape>
    </dmndi:DMNDiagram>
  </dmndi:DMNDI>
</definitions>

演示情况

在这里插入图片描述

校长提交表单数据,发起流程。 将年龄和身高传给决策表进行班级的选择判断。

在这里插入图片描述

预览流程的运行情况。JeecgFlow 找到Camunda站点进行体验。

Jeecg和Camunda都是具有BPM(Business Process Management)功能的平台,但它们在某些方面存在一些区别。 1. 功能特点: - Jeecg:Jeecg是一个低代码开发平台,提供了简单易用的BPM功能。它支持流程建模、流程实例管理、任务分配和处理、流程监控和报表生成等基本的BPM功能。Jeecg注重于快速开发和易用性,适合中小型项目和简单的业务流程管理。 - CamundaCamunda是一个功能强大的开源BPM平台,提供了完整的BPMN 2.0规范支持。它具有丰富的流程引擎功能,包括流程定义、流程实例管理、任务处理、决策管理、事件驱动等。Camunda还提供了支持CMMN(Case Management Model and Notation)和DMNDecision Model and Notation)的功能,适用于复杂的业务流程管理和决策支持。 2. 技术栈和扩展性: - Jeecg:Jeecg基于Java语言开发,采用Spring Boot和MyBatis等主流框架,具有良好的集成能力和扩展性。开发人员可以利用Jeecg提供的代码生成器和插件机制快速构建基于BPM的应用。Jeecg还提供了丰富的可视化界面和组件,使得开发人员可以快速定制和扩展应用。 - CamundaCamunda也是基于Java语言开发的,采用了自己独立的流程引擎Camunda提供了丰富的API和扩展点,可以与各种Java框架和工具进行集成,如Spring、Spring Boot、Java EE等。Camunda还提供了REST API和Java API,方便开发人员进行自定义开发和扩展。 3. 社区支持和生态系统: - Jeecg:Jeecg拥有活跃的开源社区和用户群体,提供了丰富的文档、示例和支持。Jeecg生态系统较为成熟,有许多第三方插件和扩展可供选择。 - CamundaCamunda也拥有庞大的开源社区和用户群体,具有活跃的社区支持和更新频率。Camunda生态系统丰富,有许多扩展和集成库可用,例如Camunda Modeler和Camunda Cockpit等。 综上所述,Jeecg和Camunda在功能特点、技术栈和扩展性、社区支持和生态系统等方面存在一些差异。选择适合自身需求的BPM平台需要综合考虑项目规模、复杂度、技术要求和可扩展性等因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值