From f3207649fffad5b908c07a3035d71cbf0b767bd0 Mon Sep 17 00:00:00 2001
From: gssong <1742057357@qq.com>
Date: 星期六, 16 三月 2024 21:59:53 +0800
Subject: [PATCH] update 调整模型部署,模型导出批量导出,上传

---
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java |  107 ++++++++++++++++++++++++++++++-----------------------
 1 files changed, 60 insertions(+), 47 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 a06fb34..cc82e00 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
@@ -4,6 +4,7 @@
 import cn.hutool.core.codec.Base64;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.ObjectUtil;
 import lombok.RequiredArgsConstructor;
@@ -28,6 +29,7 @@
 import org.flowable.engine.repository.*;
 import org.flowable.task.api.history.HistoricTaskInstance;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
@@ -36,6 +38,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
 /**
@@ -265,59 +268,69 @@
      * @param file         鏂囦欢
      * @param categoryCode 鍒嗙被
      */
+    @SneakyThrows
     @Override
-    public boolean deployByFile(MultipartFile file, String categoryCode) {
-        try {
-            WfCategory wfCategory = wfCategoryService.queryByCategoryCode(categoryCode);
-            if (wfCategory == null) {
-                throw new ServiceException("娴佺▼鍒嗙被涓嶅瓨鍦�");
-            }
-            // 鏂囦欢鍚� = 娴佺▼鍚嶇О-娴佺▼key
-            String filename = file.getOriginalFilename();
-            assert filename != null;
-            String[] splitFilename = filename.substring(0, filename.lastIndexOf(".")).split("-");
-            if (splitFilename.length < 2) {
-                throw new ServiceException("娴佺▼鍒嗙被涓嶈兘涓虹┖(鏂囦欢鍚� = 娴佺▼鍚嶇О-娴佺▼key)");
-            }
-            //娴佺▼鍚嶇О
-            String processName = splitFilename[0];
-            //娴佺▼key
-            String processKey = splitFilename[1];
-            // 鏂囦欢鍚庣紑鍚�
-            String suffix = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
-            InputStream inputStream = file.getInputStream();
-            Deployment deployment;
-            if (FlowConstant.ZIP.equals(suffix)) {
-                DeploymentBuilder builder = repositoryService.createDeployment();
-                deployment = builder.addZipInputStream(new ZipInputStream(inputStream))
-                    .tenantId(TenantHelper.getTenantId())
-                    .name(processName).key(processKey).category(categoryCode).deploy();
-            } else {
-                String[] list = ResourceNameUtil.BPMN_RESOURCE_SUFFIXES;
-                boolean flag = false;
-                for (String str : list) {
-                    if (filename.contains(str)) {
-                        flag = true;
-                        break;
-                    }
-                }
-                if (flag) {
+    @Transactional(rollbackFor = Exception.class)
+    public void deployByFile(MultipartFile file, String categoryCode) {
+
+        WfCategory wfCategory = wfCategoryService.queryByCategoryCode(categoryCode);
+        if (wfCategory == null) {
+            throw new ServiceException("娴佺▼鍒嗙被涓嶅瓨鍦�");
+        }
+        // 鏂囦欢鍚庣紑鍚�
+        String suffix = FileUtil.extName(file.getOriginalFilename());
+        InputStream inputStream = file.getInputStream();
+        if (FlowConstant.ZIP.equalsIgnoreCase(suffix)) {
+            ZipInputStream zipInputStream = null;
+            try {
+                zipInputStream = new ZipInputStream(inputStream);
+                ZipEntry zipEntry;
+                while ((zipEntry = zipInputStream.getNextEntry()) != null) {
+                    String filename = zipEntry.getName();
+                    String[] splitFilename = filename.substring(0, filename.lastIndexOf(".")).split("-");
+                    //娴佺▼鍚嶇О
+                    String processName = splitFilename[0];
+                    //娴佺▼key
+                    String processKey = splitFilename[1];
                     DeploymentBuilder builder = repositoryService.createDeployment();
-                    deployment = builder.addInputStream(filename, inputStream)
+                    Deployment deployment = builder.addInputStream(filename, zipInputStream)
                         .tenantId(TenantHelper.getTenantId())
                         .name(processName).key(processKey).category(categoryCode).deploy();
-                } else {
-                    throw new ServiceException("鏂囦欢绫诲瀷涓婁紶閿欒锛�");
+                    ProcessDefinition definition = QueryUtils.definitionQuery().deploymentId(deployment.getId()).singleResult();
+                    repositoryService.setProcessDefinitionCategory(definition.getId(), categoryCode);
+                    zipInputStream.closeEntry();
+                }
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            } finally {
+                if (zipInputStream != null) {
+                    zipInputStream.close();
                 }
             }
-            // 鏇存柊鍒嗙被
-            ProcessDefinition definition = QueryUtils.definitionQuery().deploymentId(deployment.getId()).singleResult();
-            repositoryService.setProcessDefinitionCategory(definition.getId(), categoryCode);
-
-            return true;
-        } catch (IOException e) {
-            e.printStackTrace();
-            throw new ServiceException("閮ㄧ讲澶辫触" + e.getMessage());
+        } else {
+            String originalFilename = file.getOriginalFilename();
+            String bpmnResourceSuffix = ResourceNameUtil.BPMN_RESOURCE_SUFFIXES[0];
+            if (originalFilename.contains(bpmnResourceSuffix)) {
+                // 鏂囦欢鍚� = 娴佺▼鍚嶇О-娴佺▼key
+                String[] splitFilename = originalFilename.substring(0, originalFilename.lastIndexOf(".")).split("-");
+                if (splitFilename.length < 2) {
+                    throw new ServiceException("鏂囦欢鍚� = 娴佺▼鍚嶇О-娴佺▼KEY");
+                }
+                //娴佺▼鍚嶇О
+                String processName = splitFilename[0];
+                //娴佺▼key
+                String processKey = splitFilename[1];
+                DeploymentBuilder builder = repositoryService.createDeployment();
+                Deployment deployment = builder.addInputStream(originalFilename, inputStream)
+                    .tenantId(TenantHelper.getTenantId())
+                    .name(processName).key(processKey).category(categoryCode).deploy();
+                // 鏇存柊鍒嗙被
+                ProcessDefinition definition = QueryUtils.definitionQuery().deploymentId(deployment.getId()).singleResult();
+                repositoryService.setProcessDefinitionCategory(definition.getId(), categoryCode);
+            } else {
+                throw new ServiceException("鏂囦欢绫诲瀷涓婁紶閿欒锛�");
+            }
         }
+
     }
 }

--
Gitblit v1.9.3