ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java
@@ -13,7 +13,6 @@ import org.apache.batik.transcoder.TranscoderInput; import org.apache.batik.transcoder.TranscoderOutput; import org.apache.batik.transcoder.image.PNGTranscoder; import org.apache.commons.io.IOUtils; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -34,7 +33,10 @@ import org.flowable.bpmn.model.Process; import org.flowable.bpmn.model.UserTask; import org.flowable.engine.RepositoryService; import org.flowable.engine.repository.*; import org.flowable.engine.repository.Deployment; import org.flowable.engine.repository.Model; import org.flowable.engine.repository.ModelQuery; import org.flowable.engine.repository.ProcessDefinition; import org.flowable.validation.ValidationError; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -46,7 +48,6 @@ import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -249,7 +250,7 @@ if (ArrayUtil.isEmpty(xmlBytes)) { throw new ServiceException("模型数据为空,请先设计流程定义模型,再进行部署!"); } if (JSONUtil.isTypeJSON(IOUtils.toString(xmlBytes, StandardCharsets.UTF_8.toString()))) { if (JSONUtil.isTypeJSON(new String(xmlBytes, StandardCharsets.UTF_8))) { byte[] bytes = ModelUtils.bpmnJsonToXmlBytes(xmlBytes); if (ArrayUtil.isEmpty(bytes)) { throw new ServiceException("模型不能为空,请至少设计一条主线流程!"); @@ -337,9 +338,7 @@ */ @Override public void exportZip(List<String> modelIds, HttpServletResponse response) { ZipOutputStream zos = null; try { zos = ZipUtil.getZipOutputStream(response.getOutputStream(), StandardCharsets.UTF_8); try (ZipOutputStream zos = ZipUtil.getZipOutputStream(response.getOutputStream(), StandardCharsets.UTF_8)) { // 压缩包文件名 String zipName = "模型不存在"; // 查询模型基本信息 @@ -347,7 +346,7 @@ Model model = repositoryService.getModel(modelId); byte[] xmlBytes = repositoryService.getModelEditorSource(modelId); if (ObjectUtil.isNotNull(model)) { if (JSONUtil.isTypeJSON(IOUtils.toString(xmlBytes, StandardCharsets.UTF_8.toString())) && ArrayUtil.isEmpty(ModelUtils.bpmnJsonToXmlBytes(xmlBytes))) { if (JSONUtil.isTypeJSON(new String(xmlBytes, StandardCharsets.UTF_8)) && ArrayUtil.isEmpty(ModelUtils.bpmnJsonToXmlBytes(xmlBytes))) { zipName = "模型不能为空,请至少设计一条主线流程!"; zos.putNextEntry(new ZipEntry(zipName + ".txt")); zos.write(zipName.getBytes(StandardCharsets.UTF_8)); @@ -367,19 +366,11 @@ } response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(zipName, StandardCharsets.UTF_8) + ".zip"); response.addHeader("Access-Control-Expose-Headers", "Content-Disposition"); // 刷出响应流 response.flushBuffer(); } catch (IOException e) { e.printStackTrace(); } finally { if (zos != null) { try { zos.closeEntry(); zos.close(); } catch (IOException e) { e.printStackTrace(); } } } } ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java
@@ -9,7 +9,6 @@ import cn.hutool.core.util.StrUtil; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import org.apache.commons.io.IOUtils; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; @@ -37,7 +36,6 @@ import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.impl.bpmn.deployer.ResourceNameUtil; 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; @@ -45,7 +43,10 @@ import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.*; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -161,7 +162,7 @@ @Override public String definitionImage(String processDefinitionId) { InputStream inputStream = repositoryService.getProcessDiagram(processDefinitionId); return Base64.encode(IOUtils.toByteArray(inputStream)); return Base64.encode(IoUtil.readBytes(inputStream)); } /** @@ -173,13 +174,8 @@ public String definitionXml(String processDefinitionId) { StringBuilder xml = new StringBuilder(); ProcessDefinition processDefinition = repositoryService.getProcessDefinition(processDefinitionId); InputStream inputStream; try { inputStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), processDefinition.getResourceName()); xml.append(IOUtils.toString(inputStream, StandardCharsets.UTF_8)); } catch (IOException e) { e.printStackTrace(); } InputStream inputStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), processDefinition.getResourceName()); xml.append(IoUtil.read(inputStream, StandardCharsets.UTF_8)); return xml.toString(); } ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java
@@ -3,11 +3,11 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.codec.Base64; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ObjectUtil; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; @@ -52,7 +52,6 @@ import org.springframework.transaction.annotation.Transactional; import java.awt.*; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.List; @@ -236,7 +235,7 @@ BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); CustomDefaultProcessDiagramGenerator diagramGenerator = new CustomDefaultProcessDiagramGenerator(); InputStream inputStream = diagramGenerator.generateDiagram(bpmnModel, "png", highLightedNodeList, highLightedFlows, activityFontName, labelFontName, annotationFontName, null, 1.0, true); return Base64.encode(IOUtils.toByteArray(inputStream)); return Base64.encode(IoUtil.readBytes(inputStream)); } /** @@ -282,14 +281,9 @@ map.put("taskList", taskList); List<ActHistoryInfoVo> historyTaskList = getHistoryTaskList(processInstanceId); map.put("historyList", historyTaskList); InputStream inputStream; try { inputStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), processDefinition.getResourceName()); xml.append(IOUtils.toString(inputStream, String.valueOf(StandardCharsets.UTF_8))); map.put("xml", xml.toString()); } catch (IOException e) { e.printStackTrace(); } InputStream inputStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), processDefinition.getResourceName()); xml.append(IoUtil.read(inputStream, StandardCharsets.UTF_8)); map.put("xml", xml.toString()); return map; }