【弄nèng - Activiti6】Activiti6应用篇之模型管理

本文建议你熟悉Activiti之后在阅读,是Activiti的应用篇。直接上应用代码,包含模型查询,添加,删除,在线设计,导出model的xml文件等功能。Springboot搭建Activiti整合流程设计器 请查看这篇博客https://blog.csdn.net/yy756127197/article/details/101211510

后台服务基于Springboot2 + Mybatis-plus3 + Lombok + Swagger + Hutool工具类

1. Service代码

	/**
     * 添加
     * 
     * @param actReModel  Activiti数据表ACT_RE_MODEL
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public String save(ActReModelEntity actReModel) {
        String description = actReModel.getDescription();
        String key = actReModel.getKey();
        String name = actReModel.getName();
        //版本号
        int revision = 1;

        // 元数据
        ObjectNode modelNode = objectMapper.createObjectNode();
        modelNode.put(ModelDataJsonConstants.MODEL_NAME, name);
        modelNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description);
        modelNode.put(ModelDataJsonConstants.MODEL_REVISION, revision);
        // 模型
        Model model = repositoryService.newModel();
        model.setName(name);
        model.setKey(key);
        model.setMetaInfo(modelNode.toString());

        repositoryService.saveModel(model);
        String id = model.getId();

        // 保存模型编辑器源文件
        ObjectNode editorNode = objectMapper.createObjectNode();
        editorNode.put("id", "canvas");
        editorNode.put("resourceId", "canvas");
        ObjectNode stencilSetNode = objectMapper.createObjectNode();
        stencilSetNode.put("namespace",
                "http://b3mn.org/stencilset/bpmn2.0#");
        editorNode.put("stencilset", stencilSetNode);
        try {
            repositoryService.addModelEditorSource(id, editorNode.toString().getBytes("utf-8"));
        } catch (UnsupportedEncodingException e) {
            throw new YYException("保存模型编辑器源文件失败", e);
        }

        return id;
    }

    /**
     * 部署
     * @param id 模型ID
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void deploy(String id) {
        Model modelData = repositoryService.getModel(id);
        BpmnJsonConverter jsonConverter = new BpmnJsonConverter();
        JsonNode editor = null;
        try {
            editor = new ObjectMapper().readTree(repositoryService.getModelEditorSource(modelData.getId()));
        } catch (IOException e) {
            throw new YYException("部署解析失败", e);
        }
        BpmnModel bpmnModel = jsonConverter.convertToBpmnModel(editor);
        BpmnXMLConverter xmlConverter = new BpmnXMLConverter();
        byte[] bpmnBytes = xmlConverter.convertToXML(bpmnModel);

        String processName = modelData.getName();
        if (!StringUtils.endsWith(processName, ActivitiConstant.BPMN20)) {
            processName += ActivitiConstant.BPMN20;
        }
        ByteArrayInputStream in = new ByteArrayInputStream(bpmnBytes);
        Deployment deployment = repositoryService.createDeployment()
                .name(modelData.getName())
                .addInputStream(processName, in)
                .deploy();
    }

    /**
     * 导出
     * 
     * @param id   模型ID
     * @param type 导出类型
     * @param response
     */
    @Override
    public void export(String id, String type, HttpServletResponse response) {
        try {
            Model modelData = repositoryService.getModel(id);
            BpmnJsonConverter jsonConverter = new BpmnJsonConverter();
            byte[] modelEditorSource = repositoryService.getModelEditorSource(modelData.getId());
            JsonNode editor = new ObjectMapper().readTree(modelEditorSource);
            BpmnModel bpmnModel = jsonConverter.convertToBpmnModel(editor);
            String mainProcessId = bpmnModel.getMainProcess().getId();

            String filename = "";
            byte[] exportBytes = null;
            if (type.equals("xml")) {
                BpmnXMLConverter xmlConverter = new BpmnXMLConverter();
                exportBytes = xmlConverter.convertToXML(bpmnModel);
                filename = mainProcessId + ".bpmn20.xml";
            } else if (type.equals("json")) {
                exportBytes = modelEditorSource;
                filename = mainProcessId + ".json";

            }

            ByteArrayInputStream in = new ByteArrayInputStream(exportBytes);
            IOUtils.copy(in, response.getOutputStream());
            // filename = URLEncoder.encode(bpmnModel.getMainProcess().getName() + ".bpmn20.xml", "UTF-8");
            response.setHeader("Content-Disposition", "attachment; filename=" + filename);
            response.flushBuffer();
        } catch (Exception e) {
            throw new YYException("导出model的xml文件失败,模型ID:" + id, e);
        }
    }

    /**
     * 批量删除
     * 
     * @param ids 模型ID
     */
    @Override
    public void deleteBatch(String[] ids) {
        Optional.ofNullable(ids).ifPresent(item -> {
            Arrays.stream(item).forEach(id -> {
                repositoryService.deleteModel(id);
            });
        });
    }

2. ActReModelEntity

Activiti数据表ACT_RE_MODEL

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * <p>
 *
 * </p>
 *
 * @author 司马缸砸缸了
 * @since 2019-08-23
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("ACT_RE_MODEL")
public class ActReModelEntity implements Serializable {


    @TableId(value = "ID_")
    private String id;

    @ApiModelProperty(value = "乐观锁版本号")
    @TableField("REV_")
    private Integer rev;

    @ApiModelProperty(value = "模型的名称")
    @TableField("NAME_")
    private String name;

    @ApiModelProperty(value = "模型的关键字")
    @TableField("KEY_")
    private String key;

    @ApiModelProperty(value = "类型")
    @TableField("CATEGORY_")
    private String category;

    @ApiModelProperty(value = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField("CREATE_TIME_")
    private Timestamp createTime;

    @ApiModelProperty(value = "最后修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField("LAST_UPDATE_TIME_")
    private Timestamp lastUpdateTime;

    @ApiModelProperty(value = "版本,从1开始")
    @TableField("VERSION_")
    private Integer version;

    @ApiModelProperty(value = "数据元信息,json格式")
    @TableField("META_INFO_")
    private String metaInfo;

    @ApiModelProperty(value = "部署ID")
    @TableField("DEPLOYMENT_ID_")
    private String deploymentId;

    @ApiModelProperty(value = "编辑源值ID,是 ACT_GE_BYTEARRAY 表中的ID_值")
    @TableField("EDITOR_SOURCE_VALUE_ID_")
    private String editorSourceValueId;

    @ApiModelProperty(value = "编辑源额外值ID,是 ACT_GE_BYTEARRAY 表中的ID_值")
    @TableField("EDITOR_SOURCE_EXTRA_VALUE_ID_")
    private String editorSourceExtraValueId;

    @TableField("TENANT_ID_")
    private String tenantId;

    @TableField(exist = false)
    private String description;

}

源码地址

IT-CLOUD :IT服务管理平台,集成基础服务,中间件服务,监控告警服务等。
开源项目,持续不断更新中,喜欢请 Star~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值