仿钉钉流程设计-仿钉钉快搭模型 JSON数据的保存

This commit is contained in:
jason 2024-04-05 22:49:34 +08:00
parent d9758636b1
commit 32809c3edb
4 changed files with 49 additions and 12 deletions

View File

@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.simple;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModelNodeType;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
@ -12,6 +13,7 @@ import java.util.Map;
@Schema(description = "管理后台 - 仿钉钉流程设计模型节点 VO")
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class BpmSimpleModelNodeVO {
@Schema(description = "模型节点编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "StartEvent_1")

View File

@ -51,10 +51,24 @@ public interface BpmModelService {
* 保存流程模型的 BPMN XML
*
* @param id 编号
* @param bpmnXml BPMN XML
* @param xmlBytes BPMN XML bytes
*/
// TODO @芋艿可能要关注下
void saveModelBpmnXml(String id, String bpmnXml);
void saveModelBpmnXml(String id, byte[] xmlBytes);
/**
* 获得仿钉钉快搭模型的 JSON 数据
* @param id 编号
* @return JSON bytes
*/
byte[] getModelSimpleJson(String id);
/**
* 保存仿钉钉快搭模型的 JSON 数据
* @param id 编号
* @param jsonBytes JSON bytes
*/
void saveModelSimpleJson(String id, byte[] jsonBytes);
/**
* 修改流程模型

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.bpm.service.definition;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
@ -103,7 +104,7 @@ public class BpmModelServiceImpl implements BpmModelService {
// 保存流程定义
repositoryService.saveModel(model);
// 保存 BPMN XML
saveModelBpmnXml(model.getId(), bpmnXml);
saveModelBpmnXml(model.getId(), StrUtil.utf8Bytes(bpmnXml));
return model.getId();
}
@ -121,7 +122,7 @@ public class BpmModelServiceImpl implements BpmModelService {
// 更新模型
repositoryService.saveModel(model);
// 更新 BPMN XML
saveModelBpmnXml(model.getId(), updateReqVO.getBpmnXml());
saveModelBpmnXml(model.getId(), StrUtil.utf8Bytes(updateReqVO.getBpmnXml()));
}
@Override
@ -237,11 +238,24 @@ public class BpmModelServiceImpl implements BpmModelService {
}
@Override
public void saveModelBpmnXml(String id, String bpmnXml) {
if (StrUtil.isEmpty(bpmnXml)) {
public void saveModelBpmnXml(String id, byte[] xmlBytes) {
if (ArrayUtil.isEmpty(xmlBytes)) {
return;
}
repositoryService.addModelEditorSource(id, StrUtil.utf8Bytes(bpmnXml));
repositoryService.addModelEditorSource(id, xmlBytes);
}
@Override
public byte[] getModelSimpleJson(String id) {
return repositoryService.getModelEditorSourceExtra(id);
}
@Override
public void saveModelSimpleJson(String id, byte[] jsonBytes) {
if (ArrayUtil.isEmpty(jsonBytes)) {
return;
}
repositoryService.addModelEditorSourceExtra(id, jsonBytes);
}
/**

View File

@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.bpm.service.definition;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.simple.BpmSimpleModelNodeVO;
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.simple.BpmSimpleModelSaveReqVO;
import cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModelNodeType;
@ -52,9 +54,12 @@ public class BpmSimpleModelServiceImpl implements BpmSimpleModelService {
// // TODO BPMN XML 已经存在如何修改 ?? TODO add by 芋艿感觉一个流程只能二选一要么 bpmn要么 simple
// return Boolean.FALSE;
// }
// 暂时直接修改
// 1. JSON 转换成 bpmnModel
BpmnModel bpmnModel = BpmnModelUtils.convertSimpleModelToBpmnModel(model.getKey(), model.getName(), reqVO.getSimpleModelBody());
bpmModelService.saveModelBpmnXml(model.getId(), BpmnModelUtils.getBpmnXml(bpmnModel));
// 2.1 保存 Bpmn XML
bpmModelService.saveModelBpmnXml(model.getId(), StrUtil.utf8Bytes(BpmnModelUtils.getBpmnXml(bpmnModel)));
// 2.2 保存 JSON 数据
bpmModelService.saveModelSimpleJson(model.getId(), JsonUtils.toJsonByte(reqVO.getSimpleModelBody()));
return Boolean.TRUE;
}
@ -64,12 +69,14 @@ public class BpmSimpleModelServiceImpl implements BpmSimpleModelService {
if (model == null) {
throw exception(MODEL_NOT_EXISTS);
}
byte[] bpmnBytes = bpmModelService.getModelBpmnXML(modelId);
BpmnModel bpmnModel = BpmnModelUtils.getBpmnModel(bpmnBytes);
return convertBpmnModelToSimpleModel(bpmnModel);
// 暂时不用 bpmn json 有点复杂,
// 通过 ACT_RE_MODEL EDITOR_SOURCE_EXTRA_VALUE_ID_ 获取 仿钉钉快搭模型的JSON 数据
byte[] jsonBytes = bpmModelService.getModelSimpleJson(model.getId());
return JsonUtils.parseObject(jsonBytes, BpmSimpleModelNodeVO.class);
}
// TODO @jason一般要支持这个么感觉 bpmn json 支持会不会太复杂可以优先级低一点做下调研~
/**
* Bpmn Model 转换成 仿钉钉流程设计模型数据结构(json) 待完善
*