From 651b2e140ba842126c4177df1b909b2b764ecdb8 Mon Sep 17 00:00:00 2001
From: gssong <1742057357@qq.com>
Date: 星期日, 31 三月 2024 15:34:27 +0800
Subject: [PATCH] add 添加表单配置

---
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java |   75 ++++++++++++++++++++++++++++++++-----
 1 files changed, 65 insertions(+), 10 deletions(-)

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 dafbad6..3ec2c47 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
@@ -7,6 +7,7 @@
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
 import org.apache.commons.io.IOUtils;
@@ -18,13 +19,18 @@
 import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.workflow.common.constant.FlowConstant;
 import org.dromara.workflow.domain.WfCategory;
+import org.dromara.workflow.domain.WfNodeConfig;
 import org.dromara.workflow.domain.bo.ProcessDefinitionBo;
+import org.dromara.workflow.domain.bo.WfDefinitionConfigBo;
 import org.dromara.workflow.domain.vo.ProcessDefinitionVo;
-import org.dromara.workflow.domain.vo.WfFormDefinitionVo;
+import org.dromara.workflow.domain.vo.WfDefinitionConfigVo;
 import org.dromara.workflow.service.IActProcessDefinitionService;
 import org.dromara.workflow.service.IWfCategoryService;
-import org.dromara.workflow.service.IWfFormDefinitionService;
+import org.dromara.workflow.service.IWfDefinitionConfigService;
+import org.dromara.workflow.service.IWfNodeConfigService;
+import org.dromara.workflow.utils.ModelUtils;
 import org.dromara.workflow.utils.QueryUtils;
+import org.flowable.bpmn.model.UserTask;
 import org.flowable.engine.ProcessMigrationService;
 import org.flowable.engine.RepositoryService;
 import org.flowable.engine.impl.bpmn.deployer.ResourceNameUtil;
@@ -38,6 +44,7 @@
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
@@ -54,7 +61,8 @@
     private final RepositoryService repositoryService;
     private final ProcessMigrationService processMigrationService;
     private final IWfCategoryService wfCategoryService;
-    private final IWfFormDefinitionService iWfFormDefinitionService;
+    private final IWfDefinitionConfigService iWfDefinitionConfigService;
+    private final IWfNodeConfigService iWfNodeConfigService;
 
     /**
      * 鍒嗛〉鏌ヨ
@@ -85,7 +93,7 @@
         }
         if (CollUtil.isNotEmpty(definitionList)) {
             List<String> ids = StreamUtils.toList(definitionList, ProcessDefinition::getId);
-            List<WfFormDefinitionVo> wfFormDefinitionVos = iWfFormDefinitionService.queryList(ids);
+            List<WfDefinitionConfigVo> wfDefinitionConfigVos = iWfDefinitionConfigService.queryList(ids);
             for (ProcessDefinition processDefinition : definitionList) {
                 ProcessDefinitionVo processDefinitionVo = BeanUtil.toBean(processDefinition, ProcessDefinitionVo.class);
                 if (CollUtil.isNotEmpty(deploymentList)) {
@@ -94,8 +102,8 @@
                         processDefinitionVo.setDeploymentTime(e.getDeploymentTime());
                     });
                 }
-                if (CollUtil.isNotEmpty(wfFormDefinitionVos)) {
-                    wfFormDefinitionVos.stream().filter(e -> e.getDefinitionId().equals(processDefinition.getId())).findFirst().ifPresent(processDefinitionVo::setWfFormDefinitionVo);
+                if (CollUtil.isNotEmpty(wfDefinitionConfigVos)) {
+                    wfDefinitionConfigVos.stream().filter(e -> e.getDefinitionId().equals(processDefinition.getId())).findFirst().ifPresent(processDefinitionVo::setWfDefinitionConfigVo);
                 }
                 processDefinitionVoList.add(processDefinitionVo);
             }
@@ -125,7 +133,7 @@
         }
         if (CollUtil.isNotEmpty(definitionList)) {
             List<String> ids = StreamUtils.toList(definitionList, ProcessDefinition::getId);
-            List<WfFormDefinitionVo> wfFormDefinitionVos = iWfFormDefinitionService.queryList(ids);
+            List<WfDefinitionConfigVo> wfDefinitionConfigVos = iWfDefinitionConfigService.queryList(ids);
             for (ProcessDefinition processDefinition : definitionList) {
                 ProcessDefinitionVo processDefinitionVo = BeanUtil.toBean(processDefinition, ProcessDefinitionVo.class);
                 if (CollUtil.isNotEmpty(deploymentList)) {
@@ -133,8 +141,8 @@
                     deploymentList.stream().filter(e -> e.getId().equals(processDefinition.getDeploymentId())).findFirst().ifPresent(e -> {
                         processDefinitionVo.setDeploymentTime(e.getDeploymentTime());
                     });
-                    if (CollUtil.isNotEmpty(wfFormDefinitionVos)) {
-                        wfFormDefinitionVos.stream().filter(e -> e.getDefinitionId().equals(processDefinition.getId())).findFirst().ifPresent(processDefinitionVo::setWfFormDefinitionVo);
+                    if (CollUtil.isNotEmpty(wfDefinitionConfigVos)) {
+                        wfDefinitionConfigVos.stream().filter(e -> e.getDefinitionId().equals(processDefinition.getId())).findFirst().ifPresent(processDefinitionVo::setWfDefinitionConfigVo);
                     }
                 }
                 processDefinitionVoList.add(processDefinitionVo);
@@ -192,7 +200,9 @@
             //鍒犻櫎娴佺▼瀹氫箟
             repositoryService.deleteDeployment(deploymentId);
             //鍒犻櫎琛ㄥ崟閰嶇疆
-            iWfFormDefinitionService.getByDefId(processDefinitionId);
+            iWfDefinitionConfigService.deleteByDefIds(Collections.singletonList(processDefinitionId));
+            //鍒犻櫎鑺傜偣閰嶇疆
+            iWfNodeConfigService.deleteByDefIds(Collections.singletonList(processDefinitionId));
             return true;
         } catch (Exception e) {
             e.printStackTrace();
@@ -313,12 +323,14 @@
                     String processName = splitFilename[0];
                     //娴佺▼key
                     String processKey = splitFilename[1];
+                    ProcessDefinition oldProcessDefinition = QueryUtils.definitionQuery().processDefinitionKey(processKey).latestVersion().singleResult();
                     DeploymentBuilder builder = repositoryService.createDeployment();
                     Deployment deployment = builder.addInputStream(filename, zipInputStream)
                         .tenantId(TenantHelper.getTenantId())
                         .name(processName).key(processKey).category(categoryCode).deploy();
                     ProcessDefinition definition = QueryUtils.definitionQuery().deploymentId(deployment.getId()).singleResult();
                     repositoryService.setProcessDefinitionCategory(definition.getId(), categoryCode);
+                    setForm(oldProcessDefinition, definition);
                     zipInputStream.closeEntry();
                 }
             } catch (IOException e) {
@@ -341,6 +353,8 @@
                 String processName = splitFilename[0];
                 //娴佺▼key
                 String processKey = splitFilename[1];
+                ProcessDefinition oldProcessDefinition = QueryUtils.definitionQuery().processDefinitionKey(processKey).latestVersion().singleResult();
+
                 DeploymentBuilder builder = repositoryService.createDeployment();
                 Deployment deployment = builder.addInputStream(originalFilename, inputStream)
                     .tenantId(TenantHelper.getTenantId())
@@ -348,10 +362,51 @@
                 // 鏇存柊鍒嗙被
                 ProcessDefinition definition = QueryUtils.definitionQuery().deploymentId(deployment.getId()).singleResult();
                 repositoryService.setProcessDefinitionCategory(definition.getId(), categoryCode);
+                setForm(oldProcessDefinition, definition);
+
             } else {
                 throw new ServiceException("鏂囦欢绫诲瀷涓婁紶閿欒锛�");
             }
         }
 
     }
+
+    /**
+     * 璁剧疆琛ㄥ崟鍐呭
+     *
+     * @param oldProcessDefinition 閮ㄧ讲鍓嶆渶鏂版祦绋嬪畾涔�
+     * @param definition           閮ㄧ讲鍚庢渶鏂版祦绋嬪畾涔�
+     */
+    private void setForm(ProcessDefinition oldProcessDefinition, ProcessDefinition definition) {
+        //鏇存柊娴佺▼瀹氫箟琛ㄥ崟
+        if (oldProcessDefinition != null) {
+            WfDefinitionConfigVo definitionVo = iWfDefinitionConfigService.getByDefId(oldProcessDefinition.getId());
+            if (definitionVo != null) {
+                WfDefinitionConfigBo wfFormDefinition = new WfDefinitionConfigBo();
+                wfFormDefinition.setDefinitionId(definition.getId());
+                wfFormDefinition.setProcessKey(definition.getKey());
+                wfFormDefinition.setFormId(ObjectUtil.isNotNull(definitionVo.getFormId()) ? definitionVo.getFormId() : null);
+                wfFormDefinition.setRemark(definitionVo.getRemark());
+                iWfDefinitionConfigService.saveOrUpdate(wfFormDefinition);
+            }
+        }
+        //鏇存柊娴佺▼鑺傜偣閰嶇疆琛ㄥ崟
+        List<UserTask> userTasks = ModelUtils.getuserTaskFlowElements(definition.getId());
+        List<WfNodeConfig> wfNodeConfigList = new ArrayList<>();
+        for (UserTask userTask : userTasks) {
+            if (StringUtils.isNotBlank(userTask.getFormKey()) && userTask.getFormKey().contains(StrUtil.COLON)) {
+                WfNodeConfig wfNodeConfig = new WfNodeConfig();
+                wfNodeConfig.setNodeId(userTask.getId());
+                wfNodeConfig.setNodeName(userTask.getName());
+                wfNodeConfig.setDefinitionId(definition.getId());
+                String[] split = userTask.getFormKey().split(StrUtil.COLON);
+                wfNodeConfig.setFormType(split[0]);
+                wfNodeConfig.setFormId(Long.valueOf(split[1]));
+                wfNodeConfigList.add(wfNodeConfig);
+            }
+        }
+        if (CollUtil.isNotEmpty(wfNodeConfigList)) {
+            iWfNodeConfigService.saveOrUpdate(wfNodeConfigList);
+        }
+    }
 }

--
Gitblit v1.9.3