From a5aa11168ec17242f6c03c1b5cf02a8aeeb73166 Mon Sep 17 00:00:00 2001 From: songgaoshuai <1742057357@qq.com> Date: Tue, 6 Jun 2023 12:46:18 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E6=B7=BB=E5=8A=A0=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E8=BD=AC=E6=8D=A2=E4=B8=BA=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ActProcessDefinitionController.java | 11 +++++ .../service/IActProcessDefinitionService.java | 8 ++++ .../impl/ActProcessDefinitionServiceImpl.java | 40 +++++++++++++++++++ 3 files changed, 59 insertions(+) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java index bb3cf9304..4933b0937 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java @@ -112,4 +112,15 @@ public class ActProcessDefinitionController extends BaseController { public R migrationProcessDefinition(@PathVariable String currentProcessDefinitionId, @PathVariable String fromProcessDefinitionId) { return toAjax(iActProcessDefinitionService.migrationProcessDefinition(currentProcessDefinitionId, fromProcessDefinitionId)); } + + /** + * 流程定义转换为模型 + * + * @param processDefinitionId 流程定义id + */ + @Log(title = "流程定义管理", businessType = BusinessType.UPDATE) + @PutMapping("/convertToModel/{processDefinitionId}") + public R convertToModel(@NotEmpty(message = "流程定义id不能为空") @PathVariable String processDefinitionId) { + return toAjax(iActProcessDefinitionService.convertToModel(processDefinitionId)); + } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessDefinitionService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessDefinitionService.java index 9d3866f3c..cdbd8078f 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessDefinitionService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessDefinitionService.java @@ -70,4 +70,12 @@ public interface IActProcessDefinitionService { * @return 结果 */ boolean migrationProcessDefinition(String currentProcessDefinitionId, String fromProcessDefinitionId); + + /** + * 流程定义转换为模型 + * + * @param processDefinitionId 流程定义id + * @return 结果 + */ + boolean convertToModel(String processDefinitionId); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java index 396e2aacb..056d4a2c4 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java @@ -3,6 +3,10 @@ package org.dromara.workflow.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.ObjectUtil; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; @@ -14,10 +18,12 @@ import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.workflow.domain.bo.ProcessDefinitionBo; import org.dromara.workflow.domain.vo.ProcessDefinitionVo; import org.dromara.workflow.service.IActProcessDefinitionService; +import org.flowable.editor.constants.ModelDataJsonConstants; import org.flowable.engine.HistoryService; import org.flowable.engine.ProcessMigrationService; import org.flowable.engine.RepositoryService; import org.flowable.engine.repository.Deployment; +import org.flowable.engine.repository.Model; import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.repository.ProcessDefinitionQuery; import org.flowable.task.api.history.HistoricTaskInstance; @@ -247,4 +253,38 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer throw new ServiceException(e.getMessage()); } } + + /** + * 流程定义转换为模型 + * + * @param processDefinitionId 流程定义id + */ + @Override + public boolean convertToModel(String processDefinitionId) { + ProcessDefinition pd = repositoryService.createProcessDefinitionQuery() + .processDefinitionId(processDefinitionId).singleResult(); + InputStream inputStream = repositoryService.getResourceAsStream(pd.getDeploymentId(), pd.getResourceName()); + Model model = repositoryService.createModelQuery().modelKey(pd.getKey()).modelTenantId(LoginHelper.getTenantId()).singleResult(); + try { + if (ObjectUtil.isNotNull(model)) { + repositoryService.addModelEditorSource(model.getId(), IoUtil.readBytes(inputStream)); + } else { + Model modelData = repositoryService.newModel(); + modelData.setKey(pd.getKey()); + modelData.setName(pd.getName()); + modelData.setTenantId(pd.getTenantId()); + ObjectNode modelObjectNode = new ObjectMapper().createObjectNode(); + modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, pd.getName()); + modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, modelData.getVersion()); + modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, pd.getDescription()); + modelData.setMetaInfo(modelObjectNode.toString()); + repositoryService.saveModel(modelData); + repositoryService.addModelEditorSource(modelData.getId(), IoUtil.readBytes(inputStream)); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + throw new ServiceException(e.getMessage()); + } + } }