Commit 32809c3edb78b52df98970887ca03be5a1af7855

Authored by jason
1 parent d9758636

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

yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/simple/BpmSimpleModelNodeVO.java
@@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.simple; @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.simple;
2 2
3 import cn.iocoder.yudao.framework.common.validation.InEnum; 3 import cn.iocoder.yudao.framework.common.validation.InEnum;
4 import cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModelNodeType; 4 import cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModelNodeType;
  5 +import com.fasterxml.jackson.annotation.JsonInclude;
5 import io.swagger.v3.oas.annotations.media.Schema; 6 import io.swagger.v3.oas.annotations.media.Schema;
6 import jakarta.validation.constraints.NotEmpty; 7 import jakarta.validation.constraints.NotEmpty;
7 import jakarta.validation.constraints.NotNull; 8 import jakarta.validation.constraints.NotNull;
@@ -12,6 +13,7 @@ import java.util.Map; @@ -12,6 +13,7 @@ import java.util.Map;
12 13
13 @Schema(description = "管理后台 - 仿钉钉流程设计模型节点 VO") 14 @Schema(description = "管理后台 - 仿钉钉流程设计模型节点 VO")
14 @Data 15 @Data
  16 +@JsonInclude(JsonInclude.Include.NON_NULL)
15 public class BpmSimpleModelNodeVO { 17 public class BpmSimpleModelNodeVO {
16 18
17 @Schema(description = "模型节点编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "StartEvent_1") 19 @Schema(description = "模型节点编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "StartEvent_1")
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelService.java
@@ -51,10 +51,24 @@ public interface BpmModelService { @@ -51,10 +51,24 @@ public interface BpmModelService {
51 * 保存流程模型的 BPMN XML 51 * 保存流程模型的 BPMN XML
52 * 52 *
53 * @param id 编号 53 * @param id 编号
54 - * @param bpmnXml BPMN XML 54 + * @param xmlBytes BPMN XML bytes
55 */ 55 */
56 // TODO @芋艿:可能要关注下; 56 // TODO @芋艿:可能要关注下;
57 - void saveModelBpmnXml(String id, String bpmnXml); 57 + void saveModelBpmnXml(String id, byte[] xmlBytes);
  58 +
  59 + /**
  60 + * 获得仿钉钉快搭模型的 JSON 数据
  61 + * @param id 编号
  62 + * @return JSON bytes
  63 + */
  64 + byte[] getModelSimpleJson(String id);
  65 +
  66 + /**
  67 + * 保存仿钉钉快搭模型的 JSON 数据
  68 + * @param id 编号
  69 + * @param jsonBytes JSON bytes
  70 + */
  71 + void saveModelSimpleJson(String id, byte[] jsonBytes);
58 72
59 /** 73 /**
60 * 修改流程模型 74 * 修改流程模型
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelServiceImpl.java
1 package cn.iocoder.yudao.module.bpm.service.definition; 1 package cn.iocoder.yudao.module.bpm.service.definition;
2 2
  3 +import cn.hutool.core.util.ArrayUtil;
3 import cn.hutool.core.util.StrUtil; 4 import cn.hutool.core.util.StrUtil;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 import cn.iocoder.yudao.framework.common.util.json.JsonUtils; 6 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
@@ -103,7 +104,7 @@ public class BpmModelServiceImpl implements BpmModelService { @@ -103,7 +104,7 @@ public class BpmModelServiceImpl implements BpmModelService {
103 // 保存流程定义 104 // 保存流程定义
104 repositoryService.saveModel(model); 105 repositoryService.saveModel(model);
105 // 保存 BPMN XML 106 // 保存 BPMN XML
106 - saveModelBpmnXml(model.getId(), bpmnXml); 107 + saveModelBpmnXml(model.getId(), StrUtil.utf8Bytes(bpmnXml));
107 return model.getId(); 108 return model.getId();
108 } 109 }
109 110
@@ -121,7 +122,7 @@ public class BpmModelServiceImpl implements BpmModelService { @@ -121,7 +122,7 @@ public class BpmModelServiceImpl implements BpmModelService {
121 // 更新模型 122 // 更新模型
122 repositoryService.saveModel(model); 123 repositoryService.saveModel(model);
123 // 更新 BPMN XML 124 // 更新 BPMN XML
124 - saveModelBpmnXml(model.getId(), updateReqVO.getBpmnXml()); 125 + saveModelBpmnXml(model.getId(), StrUtil.utf8Bytes(updateReqVO.getBpmnXml()));
125 } 126 }
126 127
127 @Override 128 @Override
@@ -237,11 +238,24 @@ public class BpmModelServiceImpl implements BpmModelService { @@ -237,11 +238,24 @@ public class BpmModelServiceImpl implements BpmModelService {
237 } 238 }
238 239
239 @Override 240 @Override
240 - public void saveModelBpmnXml(String id, String bpmnXml) {  
241 - if (StrUtil.isEmpty(bpmnXml)) { 241 + public void saveModelBpmnXml(String id, byte[] xmlBytes) {
  242 + if (ArrayUtil.isEmpty(xmlBytes)) {
242 return; 243 return;
243 } 244 }
244 - repositoryService.addModelEditorSource(id, StrUtil.utf8Bytes(bpmnXml)); 245 + repositoryService.addModelEditorSource(id, xmlBytes);
  246 + }
  247 +
  248 + @Override
  249 + public byte[] getModelSimpleJson(String id) {
  250 + return repositoryService.getModelEditorSourceExtra(id);
  251 + }
  252 +
  253 + @Override
  254 + public void saveModelSimpleJson(String id, byte[] jsonBytes) {
  255 + if (ArrayUtil.isEmpty(jsonBytes)) {
  256 + return;
  257 + }
  258 + repositoryService.addModelEditorSourceExtra(id, jsonBytes);
245 } 259 }
246 260
247 /** 261 /**
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmSimpleModelServiceImpl.java
@@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.bpm.service.definition; @@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.bpm.service.definition;
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.lang.Assert; 4 import cn.hutool.core.lang.Assert;
5 import cn.hutool.core.map.MapUtil; 5 import cn.hutool.core.map.MapUtil;
  6 +import cn.hutool.core.util.StrUtil;
  7 +import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
6 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.simple.BpmSimpleModelNodeVO; 8 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.simple.BpmSimpleModelNodeVO;
7 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.simple.BpmSimpleModelSaveReqVO; 9 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.simple.BpmSimpleModelSaveReqVO;
8 import cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModelNodeType; 10 import cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModelNodeType;
@@ -52,9 +54,12 @@ public class BpmSimpleModelServiceImpl implements BpmSimpleModelService { @@ -52,9 +54,12 @@ public class BpmSimpleModelServiceImpl implements BpmSimpleModelService {
52 // // TODO BPMN XML 已经存在。如何修改 ?? TODO add by 芋艿:感觉一个流程,只能二选一,要么 bpmn、要么 simple 54 // // TODO BPMN XML 已经存在。如何修改 ?? TODO add by 芋艿:感觉一个流程,只能二选一,要么 bpmn、要么 simple
53 // return Boolean.FALSE; 55 // return Boolean.FALSE;
54 // } 56 // }
55 - // 暂时直接修改 57 + // 1. JSON 转换成 bpmnModel
56 BpmnModel bpmnModel = BpmnModelUtils.convertSimpleModelToBpmnModel(model.getKey(), model.getName(), reqVO.getSimpleModelBody()); 58 BpmnModel bpmnModel = BpmnModelUtils.convertSimpleModelToBpmnModel(model.getKey(), model.getName(), reqVO.getSimpleModelBody());
57 - bpmModelService.saveModelBpmnXml(model.getId(), BpmnModelUtils.getBpmnXml(bpmnModel)); 59 + // 2.1 保存 Bpmn XML
  60 + bpmModelService.saveModelBpmnXml(model.getId(), StrUtil.utf8Bytes(BpmnModelUtils.getBpmnXml(bpmnModel)));
  61 + // 2.2 保存 JSON 数据
  62 + bpmModelService.saveModelSimpleJson(model.getId(), JsonUtils.toJsonByte(reqVO.getSimpleModelBody()));
58 return Boolean.TRUE; 63 return Boolean.TRUE;
59 } 64 }
60 65
@@ -64,12 +69,14 @@ public class BpmSimpleModelServiceImpl implements BpmSimpleModelService { @@ -64,12 +69,14 @@ public class BpmSimpleModelServiceImpl implements BpmSimpleModelService {
64 if (model == null) { 69 if (model == null) {
65 throw exception(MODEL_NOT_EXISTS); 70 throw exception(MODEL_NOT_EXISTS);
66 } 71 }
67 - byte[] bpmnBytes = bpmModelService.getModelBpmnXML(modelId);  
68 - BpmnModel bpmnModel = BpmnModelUtils.getBpmnModel(bpmnBytes);  
69 - return convertBpmnModelToSimpleModel(bpmnModel); 72 + // 暂时不用 bpmn 转 json, 有点复杂,
  73 + // 通过 ACT_RE_MODEL 表 EDITOR_SOURCE_EXTRA_VALUE_ID_ 获取 仿钉钉快搭模型的JSON 数据
  74 + byte[] jsonBytes = bpmModelService.getModelSimpleJson(model.getId());
  75 + return JsonUtils.parseObject(jsonBytes, BpmSimpleModelNodeVO.class);
70 } 76 }
71 77
72 // TODO @jason:一般要支持这个么?感觉 bpmn 转 json 支持会不会太复杂。可以优先级低一点,做下调研~ 78 // TODO @jason:一般要支持这个么?感觉 bpmn 转 json 支持会不会太复杂。可以优先级低一点,做下调研~
  79 +
73 /** 80 /**
74 * Bpmn Model 转换成 仿钉钉流程设计模型数据结构(json) 待完善 81 * Bpmn Model 转换成 仿钉钉流程设计模型数据结构(json) 待完善
75 * 82 *