Browse Source

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

jason 1 year ago
parent
commit
32809c3edb

+ 2 - 0
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;
 
 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")

+ 16 - 2
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 {
      * 保存流程模型的 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);
 
     /**
      * 修改流程模型

+ 19 - 5
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelServiceImpl.java

@@ -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);
     }
 
     /**

+ 12 - 5
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;
 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) 待完善
      *