SpringBoot +Activiti 根据模型Id,查询节点列表

本文基于:Activiti 模型管理

Model 模型管理需求:

在模型管理功能基础上添加动态配置外置表单,注意不是内置表单。

温馨提示:不管是内置表单还是外置表单,都是配置在指定模型的节点之上所有我们就必须更新模型Id查询指定模型涉及的节点列表信息。

Model 模型管理之新增表单配置功能:

SpringBoot +Activiti 根据模型Id,查询节点列表_第1张图片

选择转正流程模型,查看节点列表:

SpringBoot +Activiti 根据模型Id,查询节点列表_第2张图片 温馨提示:这里还欠缺将自定义表单绑定值指定节点上。这个功能会在后期 实现。

SpringBoot 之Activiti Model 模型管理后台

SpringBoot 添加流程模型节点查找控制器(NodeController

package com.zzg.controller;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.zzg.common.activiti.entity.NodeEntity;
import com.zzg.common.activiti.enums.NodeTypeEnum;
import com.zzg.common.vo.Resp;
import org.activiti.bpmn.model.*;
import org.activiti.editor.language.json.converter.BpmnJsonConverter;
import org.activiti.engine.HistoryService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Model;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.w3c.dom.Node;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 节点控制层
 */
@RequestMapping("/node")
@RestController
public class NodeController {
    private static Logger logger= LoggerFactory.getLogger(NodeController.class);

    @Autowired
    private HistoryService historyService;

    @Autowired
    private RepositoryService repositoryService;
    /**
     * 查找指定流程模型Id关联开始节点和用户任务节点
     * @param modelId
     */
    @PostMapping(value = "/findModelAssociationNode/{modelId}")
    public Resp> findModelAssociationNode(@PathVariable("modelId") String modelId) throws IOException {
        List list = new ArrayList<>();
        // 获取模型XML文件
        ObjectNode objectNode = (ObjectNode) new ObjectMapper().readTree(repositoryService.getModelEditorSource(modelId));
        BpmnModel bpmnModel = new BpmnJsonConverter().convertToBpmnModel(objectNode);
        //获得流程模型的所有节点
        Collection flowElements = bpmnModel.getMainProcess().getFlowElements();
        // 过滤序列流
        List filterFlowElements = flowElements.stream().filter(item -> {
            if(item instanceof  SequenceFlow){
                return false;
            }
            return true;
        }).collect(Collectors.toList());

        for(FlowElement e : filterFlowElements) {
            NodeEntity entity = new NodeEntity();
            String id = null;
            String name = null;
            String formKey = null;
            List formProperties = null;
            // 判断节点类型-- 用户任务节点
            if (e instanceof UserTask) {
                entity.setNodeTypeEnum(NodeTypeEnum.UserTask);
                // 节点Id
                id =((UserTask)e).getId();
                // 节点名称
                name = ((UserTask)e).getName();
                // 配置表单(外置表单)
                formKey = ((UserTask)e).getFormKey();
                // 配置表单(内置表单)
                formProperties = ((UserTask)e).getFormProperties();
            }
            // 判断节点类型 -- 开始任务
            if(e instanceof  StartEvent) {
                entity.setNodeTypeEnum(NodeTypeEnum.StartEvent);
                // 节点Id
                id =((StartEvent)e).getId();
                // 节点名称
                name = ((StartEvent)e).getName();
                // 配置表单(外置表单)
                formKey = ((StartEvent)e).getFormKey();
                // 配置表单(内置表单)
                formProperties = ((StartEvent)e).getFormProperties();
            }
            // 判断节点类型 -- 结束任务
            if(e instanceof  EndEvent) {
                entity.setNodeTypeEnum(NodeTypeEnum.EndEvent);
                // 节点Id
                id =((EndEvent)e).getId();
                // 节点名称
                name = ((EndEvent)e).getName();
            }
             entity.setId(id);
             entity.setName(name);
             entity.setFormKey(formKey);
             entity.setFormPropertys(formProperties);
             list.add(entity);
        }
        return Resp.OK(list);
    }
}

package com.zzg.common.activiti.entity;

import com.zzg.common.activiti.enums.NodeTypeEnum;
import org.activiti.bpmn.model.FormProperty;

import java.util.List;

/**
 * activiti 节点对象封装
 */
public class NodeEntity implements java.io.Serializable{

    private String id;

    private String name;

    /**
     * 外置表单
     */
    private String formKey;

    /**
     * 内置表单
     */
    private List formPropertys;

    private NodeTypeEnum nodeTypeEnum;

    public NodeTypeEnum getNodeTypeEnum() {
        return nodeTypeEnum;
    }

    public void setNodeTypeEnum(NodeTypeEnum nodeTypeEnum) {
        this.nodeTypeEnum = nodeTypeEnum;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getFormKey() {
        return formKey;
    }

    public void setFormKey(String formKey) {
        this.formKey = formKey;
    }

    public List getFormPropertys() {
        return formPropertys;
    }

    public void setFormPropertys(List formPropertys) {
        this.formPropertys = formPropertys;
    }
}

 

package com.zzg.common.activiti.enums;

/**
 * Activiti 节点枚举类型定义
 */
public enum NodeTypeEnum {
    StartEvent("开始节点", "start_event"), UserTask("用户任务", "user_task"), EndEvent("结束节点", "end_event");

    private String name;

    private String type;

    NodeTypeEnum(String name, String type) {
        this.name = name;
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

Model.html 页面添加表单配置前端代码:




    
    
    **系统 - Layui
    


流程名称:

你可能感兴趣的:(springBoot学习笔记,activiti,流程引擎,前端,Activiti)