SpringBoot интегрирует рабочий процесс Flowable-1 (определение процесса рисования)

Spring Boot задняя часть Workflow
SpringBoot интегрирует рабочий процесс Flowable-1 (определение процесса рисования)

1. Введение

Из-за большого количества контента одна статья может быть не доделана, а следующая статья может быть разбита на несколько статей для введения.


Я полагаю, что многие люди слышали или узнали о рабочем процессе, и они часто сталкивались с ним в своей жизни, например, при утверждении системы открытого доступа. В настоящее время в Китае существует множество движков рабочего процесса, но большинство из них интегрированы со сторонними зарубежными движками для вторичной разработки.

2. Краткое введение в Flowable

Flowable — это легкий движок бизнес-процессов, написанный на Java. Процессор Flowable позволяет развертывать определения процессов BPMN 2.0 (отраслевой XML-стандарт для определения процессов), создавать экземпляры этих определений процессов, выполнять запросы и получать доступ к активным или историческим экземплярам процессов и связанным данным.

Flowable очень гибок при добавлении его в приложение/сервис/архитектуру. Вы можете встроить движок в свое приложение или службу, включив библиотеку Flowable, которая предоставляется в виде JAR-файла. Поскольку это JAR-файл, его можно легко добавить в любую среду Java: javase, контейнеры сервлетов, такие как Tomcat или Jetty, Spring, серверы javaee, такие как JBoss или WebSphere и т. д. В качестве альтернативы вы можете использовать потоковый restapi для связи по HTTP. Существуют также потоковые приложения (Flowable Modeler, Flowable Admin, Flowable IDM и Flowable Task), которые предоставляют готовые примеры пользовательских интерфейсов для работы с процессами и задачами.

Все методы настройки Flowable имеют одну общую черту — основной движок, который можно рассматривать как набор сервисов, предоставляющих API для управления и выполнения бизнес-процессов.[Отрывок из Flowable Начало работы]

在这里插入图片描述

3. Взгляните на эффект

【Управление определением процесса】

在这里插入图片描述

【Управление задачами - задачи】

在这里插入图片描述

【Управление задачами - Выполненные задачи】

在这里插入图片描述

【Управление задачами — Объем задач】

在这里插入图片描述

【Управление задачами - инициировано мной】

在这里插入图片描述

【Бизнес-список】

在这里插入图片描述

在这里插入图片描述

4. Создайте определение процесса (нарисуйте блок-схему)

В: Как нарисовать блок-схему? Чем вы рисуете? Ответ: Движок процессов Flowable позволяет развертывать определения процессов bpmn2.0, указывая на то, что определения процессов bpmn2.0 являются относительно общей спецификацией, поэтому существует множество инструментов, часто используемых инструментов разработки, таких как Eclpise, IDEA, их можно нарисовать. , Но я использовал инструмент пользовательского интерфейса, предоставленный Flowable, для рисования, или вы также можете использовать онлайн-инструмент, который я создал для рисования.

4.1 Создайте свой собственный сервис дизайнера процессов

Если вы хотите сами собрать Flowable-UI, это тоже удобнее, сначала скачайте файл, связанный с Flowable ресурсами, введитеFlowable.com/open-source…, а затем нажмите [Загрузить Flowable v6.x.x]. Загрузка представляет собой сжатый пакет, и после распаковки вы увидите следующую структуру каталогов.

├─database                                   # 数据库文件
│  ├─create        
│  └─upgrade  
├─docs                                       # 文档
├─libs                                       # 相关的jar
└─wars
   ├─flowable-rest.war                       # rest 服务(基于 SpringBoot)
   ├─flowable-ui.war                         # 流程ui设计器(基于 SpringBoot)
   └─data

В каталоге $/wars/flowable-ui.war видно, что это военный пакет, который можно поместить в tomcat или запустить с помощью команды

java -jar flowable-ui.war

По умолчанию используется порт 8080, вы можете изменить порт, для первого входа требуется учетная запись и пароль. Аккаунт: админ Пароль: тест

4.2 Использование службы онлайн-конструктора процессов

На самом деле, я также построил его на основе flowable-ui, я развернул его на своем студенческом сервере и предоставил адрес доступа к внешней сети следующим образом.

在这里插入图片描述

адрес:поток способный.UI.и Хоу Юй.цай/поток способный-пользовательский интерфейс…Аккаунт: админ Пароль: тест

4.3 Нарисуйте первую блок-схему

После входа в систему вы можете [Создать процесс] или [Импортировать процесс], как показано ниже. 在这里插入图片描述

Щелкните соответствующий процесс, чтобы перейти на страницу управления процессом.

在这里插入图片描述

Эффект, которого хочет достичь первая блок-схема:

提交流程
----主管审批?
	----主管拒绝,流程结束(失败)
	----主管同意
		----经理审批?
			----经理拒绝,流程结束(失败)
			----经理同意,流程结束(成功)

После входа в визуальный редактор необходимо понять следующие ключевые моменты:流程标识(启动流程的Key),名称(流程的名称),数据对象(存储流程的数据变量等)

在这里插入图片描述

Использование глобальных объектов данных

Позже вы можете получить всю информацию об определениях в блок-схеме через код объекта BpmnModel.

在这里插入图片描述

Добавить стартовое событие

在这里插入图片描述

Добавить активность пользователя (одобрение пользователем)

在这里插入图片描述

Добавить шлюз

在这里插入图片描述

Добавить конечное событие

在这里插入图片描述

Установите идентификатор первичного ключа [Утверждение руководителя], назначьте пользователей и т. д.

1. Идентификатор первичного ключа: его можно комбинировать с бизнес-требованиями, и бизнес может выполнять различные бизнес-операции в соответствии с разными этапами. 2. Назначение пользователей: для удобства здесь напрямую выбирается фиксированное значение.Группа кандидатов здесь представляет собой идентификатор роли конкретной бизнес-системы, чтобы добиться эффекта утверждения разных ролей разными процессами.

在这里插入图片描述

Установите условия потока [Шлюз]

Поле ввода условия соединения поддерживает выражения EL, поэтому вы можете использовать【Условия согласия】: Заполните здесь{} [Условия согласия]: Заполните здесь{executeType == 'YES'} означает, что переменная executeType передается при утверждении руководителем, и когда значение переменной executeType равно YES, переход к следующему шагу (утверждение менеджером)

在这里插入图片描述

[Условия отклонения]: Заполнение здесь ${executeType == 'NO'} означает, что переменная executeType передается, когда супервизор одобряет, и когда значение переменной executeType равно NO, процесс завершается.

在这里插入图片描述

После последней загрузки появляется "Выйти из процесса 1.bpmn20.xml», содержимое выглядит следующим образом

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">
  <process id="Leave1" name="请假流程1" isExecutable="true">
    <documentation>Leave描述信息1</documentation>
    <dataObject id="businessDataViewUri" name="业务数据视图链接" itemSubjectRef="xsd:string">
      <extensionElements>
        <flowable:value>/workflow/leave-info</flowable:value>
      </extensionElements>
    </dataObject>
    <dataObject id="businessNotifyUri" name="业务通知链接" itemSubjectRef="xsd:string">
      <extensionElements>
        <flowable:value>/workflow/test/leave/workflow-notify</flowable:value>
      </extensionElements>
    </dataObject>
    <startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent>
    <userTask id="zgsp1" name="主管审批" flowable:candidateGroups="847922232536731648" flowable:formFieldValidation="true"></userTask>
    <sequenceFlow id="sid-28954DF2-874B-43D5-9057-AD04F13D11BC" sourceRef="startEvent1" targetRef="zgsp1"></sequenceFlow>
    <exclusiveGateway id="sid-CFB93847-6029-435E-892E-7FC34AE2A425"></exclusiveGateway>
    <sequenceFlow id="sid-8C1A8676-53FC-4A62-920D-24F38C57B603" sourceRef="zgsp1" targetRef="sid-CFB93847-6029-435E-892E-7FC34AE2A425"></sequenceFlow>
    <userTask id="jlsp1" name="经理审批" flowable:candidateGroups="847922477412782081" flowable:formFieldValidation="true"></userTask>
    <endEvent id="sid-00609504-6F1A-48AE-AA66-058B01A367FB"></endEvent>
    <exclusiveGateway id="sid-E68077F0-E0AA-49DA-B0C2-BE8A0693E151"></exclusiveGateway>
    <sequenceFlow id="sid-3F6C0888-623F-42C2-8F06-397C83F44DCE" sourceRef="jlsp1" targetRef="sid-E68077F0-E0AA-49DA-B0C2-BE8A0693E151"></sequenceFlow>
    <endEvent id="sid-96443FBA-145F-43DE-AE91-D11B5A0115F2"></endEvent>
    <endEvent id="sid-8DE7ABDB-F814-41D5-B1EC-FE0628D7D810"></endEvent>
    <sequenceFlow id="sid-21A1CF4B-19B7-4DE1-A777-C2C4764A6D05" name="拒绝" sourceRef="sid-CFB93847-6029-435E-892E-7FC34AE2A425" targetRef="sid-00609504-6F1A-48AE-AA66-058B01A367FB">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${executeType == 'NO'}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="sid-F7498CFB-1603-4E64-A788-92CBCBBEC794" name="拒绝" sourceRef="sid-E68077F0-E0AA-49DA-B0C2-BE8A0693E151" targetRef="sid-8DE7ABDB-F814-41D5-B1EC-FE0628D7D810">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${executeType == 'NO'}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="sid-8866076B-0723-41A2-AACF-DDC7B06226D9" name="同意" sourceRef="sid-E68077F0-E0AA-49DA-B0C2-BE8A0693E151" targetRef="sid-96443FBA-145F-43DE-AE91-D11B5A0115F2">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${executeType == 'YES'}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="sid-27560005-7B06-4F2D-BD9A-7FE27C7410A0" name="同意" sourceRef="sid-CFB93847-6029-435E-892E-7FC34AE2A425" targetRef="jlsp1">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${executeType == 'YES'}]]></conditionExpression>
    </sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_Leave1">
    <bpmndi:BPMNPlane bpmnElement="Leave1" id="BPMNPlane_Leave1">
      <bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1">
        <omgdc:Bounds height="30.0" width="30.0" x="100.0" y="163.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="zgsp1" id="BPMNShape_zgsp1">
        <omgdc:Bounds height="80.0" width="100.0" x="210.0" y="138.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="sid-CFB93847-6029-435E-892E-7FC34AE2A425" id="BPMNShape_sid-CFB93847-6029-435E-892E-7FC34AE2A425">
        <omgdc:Bounds height="40.0" width="40.0" x="390.0" y="158.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="jlsp1" id="BPMNShape_jlsp1">
        <omgdc:Bounds height="80.0" width="100.0" x="525.0" y="138.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="sid-00609504-6F1A-48AE-AA66-058B01A367FB" id="BPMNShape_sid-00609504-6F1A-48AE-AA66-058B01A367FB">
        <omgdc:Bounds height="28.0" width="28.0" x="396.0" y="270.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="sid-E68077F0-E0AA-49DA-B0C2-BE8A0693E151" id="BPMNShape_sid-E68077F0-E0AA-49DA-B0C2-BE8A0693E151">
        <omgdc:Bounds height="40.0" width="40.0" x="720.0" y="158.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="sid-96443FBA-145F-43DE-AE91-D11B5A0115F2" id="BPMNShape_sid-96443FBA-145F-43DE-AE91-D11B5A0115F2">
        <omgdc:Bounds height="28.0" width="28.0" x="840.0" y="164.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="sid-8DE7ABDB-F814-41D5-B1EC-FE0628D7D810" id="BPMNShape_sid-8DE7ABDB-F814-41D5-B1EC-FE0628D7D810">
        <omgdc:Bounds height="28.0" width="28.0" x="726.0" y="270.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="sid-F7498CFB-1603-4E64-A788-92CBCBBEC794" id="BPMNEdge_sid-F7498CFB-1603-4E64-A788-92CBCBBEC794">
        <omgdi:waypoint x="740.0" y="197.9405984919887"></omgdi:waypoint>
        <omgdi:waypoint x="740.0" y="270.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-21A1CF4B-19B7-4DE1-A777-C2C4764A6D05" id="BPMNEdge_sid-21A1CF4B-19B7-4DE1-A777-C2C4764A6D05">
        <omgdi:waypoint x="410.0" y="197.9405984919887"></omgdi:waypoint>
        <omgdi:waypoint x="410.0" y="270.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-8866076B-0723-41A2-AACF-DDC7B06226D9" id="BPMNEdge_sid-8866076B-0723-41A2-AACF-DDC7B06226D9">
        <omgdi:waypoint x="759.9412576686476" y="178.0"></omgdi:waypoint>
        <omgdi:waypoint x="840.0" y="178.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-27560005-7B06-4F2D-BD9A-7FE27C7410A0" id="BPMNEdge_sid-27560005-7B06-4F2D-BD9A-7FE27C7410A0">
        <omgdi:waypoint x="429.94395820712947" y="178.0"></omgdi:waypoint>
        <omgdi:waypoint x="524.9999999999847" y="178.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-28954DF2-874B-43D5-9057-AD04F13D11BC" id="BPMNEdge_sid-28954DF2-874B-43D5-9057-AD04F13D11BC">
        <omgdi:waypoint x="129.94999913076796" y="178.0"></omgdi:waypoint>
        <omgdi:waypoint x="209.99999999998067" y="178.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-8C1A8676-53FC-4A62-920D-24F38C57B603" id="BPMNEdge_sid-8C1A8676-53FC-4A62-920D-24F38C57B603">
        <omgdi:waypoint x="309.9499999999581" y="178.0"></omgdi:waypoint>
        <omgdi:waypoint x="390.0" y="178.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-3F6C0888-623F-42C2-8F06-397C83F44DCE" id="BPMNEdge_sid-3F6C0888-623F-42C2-8F06-397C83F44DCE">
        <omgdi:waypoint x="624.9499999998898" y="178.0"></omgdi:waypoint>
        <omgdi:waypoint x="720.0" y="178.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

На этом этапе была нарисована первая простая блок-схема. В следующем блоге будет представлена ​​реализация кода интеграции Flowable на основе SpringBoot согласно блок-схеме.


Программист [ Houyu ] — разработчик серверной части Java, который занимается программированием и любит технологии. Время от времени делитесь ИТ-навыками и галантереей! !Добро пожаловать, чтобы обратить внимание на «IT Loading», общедоступный аккаунт, который производит только галантерею и настоящий бой.