xuezizhuo 1 жил өмнө
parent
commit
2fb5aae657

+ 18 - 8
ruoyi-admin/src/main/java/com/ruoyi/web/controller/BpmProcessController.java

@@ -1,21 +1,18 @@
 package com.ruoyi.web.controller;
 
 import java.util.List;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.ruoyi.common.annotation.Anonymous;
 import com.ruoyi.system.entity.BpmProcess;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -115,5 +112,18 @@ public class BpmProcessController extends BaseController {
         return toAjax(bpmProcessService.bpmBackups(bpmProcess));
     }
 
+    /**
+     * 导出流程文件文件xml/bpmn格式
+     */
+    @ApiOperation(value = "导出流程文件文件")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "processId",value = "编号",dataType = "Long"),
+            @ApiImplicitParam(name = "fileType",value = "文件类型",dataType = "String")
+    })
+    @GetMapping("/export")
+    public void export(@RequestParam("processId") Long processId,@RequestParam("fileType") String fileType, HttpServletRequest request, HttpServletResponse response){
+        bpmProcessService.export(processId,fileType,request,response);
+    }
+
 
 }

+ 0 - 18
ruoyi-common/src/main/java/com/ruoyi/common/config/datasource/config/RedisDataClear.java

@@ -1,18 +0,0 @@
-package com.ruoyi.common.config.datasource.config;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.stereotype.Component;
-
-@Component
-
-public class RedisDataClear implements CommandLineRunner {
-    @Autowired
-    private RedisTemplate redisTemplate;
-
-    @Override
-    public void run(String... args) throws Exception {
-        redisTemplate.getConnectionFactory().getConnection().flushDb();
-    }
-}

+ 8 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IBpmProcessService.java

@@ -2,6 +2,8 @@ package com.ruoyi.system.service;
 
 import com.ruoyi.system.entity.BpmProcess;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 /**
@@ -66,4 +68,10 @@ public interface IBpmProcessService {
      * @return
      */
     public int bpmBackups(BpmProcess bpmProcess);
+
+    /**
+     * 导出流程文件
+     */
+    void export(Long processId,String fileType, HttpServletRequest request, HttpServletResponse response);
+
 }

+ 48 - 2
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BpmProcessServiceImpl.java

@@ -1,7 +1,8 @@
 package com.ruoyi.system.service.impl;
 
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
+import java.io.OutputStream;
+import java.io.StringReader;
+import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.util.Base64;
 import java.util.List;
@@ -13,6 +14,18 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.system.mapper.BpmProcessMapper;
 import com.ruoyi.system.service.IBpmProcessService;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
 
 /**
  * 流程定义Service业务层处理
@@ -63,6 +76,9 @@ public class BpmProcessServiceImpl implements IBpmProcessService {
         bpmProcess.setCreateTime(DateUtils.getNowDate());
         bpmProcess.setCreateBy(SecurityUtils.getUsername());
         bpmProcess.setProcessVersion(0L);
+
+        System.err.println(bpmProcess.getProcessXmlContent().getBytes(StandardCharsets.UTF_8).toString());
+
         return bpmProcessMapper.insertBpmProcess(bpmProcess);
     }
 
@@ -117,4 +133,34 @@ public class BpmProcessServiceImpl implements IBpmProcessService {
         bpmProcess.setProcessVersion(1L);  // 设置为历史版本,备份状态
         return bpmProcessMapper.insertBpmProcess(bpmProcess);
     }
+
+    @Override
+    public void export(Long processId,String fileType, HttpServletRequest request, HttpServletResponse response) {
+        BpmProcess process = bpmProcessMapper.selectBpmProcessByProcessId(processId);
+        String fileName = process.getProcessName()+"."+fileType;
+        try {
+            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
+            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
+            Document doc = dBuilder.parse(new InputSource(new StringReader(process.getProcessXmlContent())));
+            // 规范化XML结构
+            doc.getDocumentElement().normalize();
+            // 创建转换器以生成XML
+            TransformerFactory transformerFactory = TransformerFactory.newInstance();
+            Transformer transformer = transformerFactory.newTransformer();
+            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+            DOMSource source = new DOMSource(doc);
+            // 创建输出流,将XML写入响应
+            OutputStream outputStream = response.getOutputStream();
+            response.setContentType("application/xml");
+            String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
+            response.setHeader("Content-Disposition", "attachment; filename="+encodedFileName);
+            // 将XML写入响应输出流
+            StreamResult result = new StreamResult(outputStream);
+            transformer.transform(source, result);
+            System.out.println("XML file downloaded");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
 }