From 4ba4ea4fcc559a746daf44f276867e97e580019e Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: 星期三, 15 一月 2025 16:56:09 +0800 Subject: [PATCH] update 升级warm-flow到1.6.0-m4 --- ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java | 26 +++++-------- ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwDefinitionController.java | 10 ++--- ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwDefinitionService.java | 2 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java | 57 +++++++++++++--------------- ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/config/WarmFlowConfig.java | 17 -------- pom.xml | 2 6 files changed, 44 insertions(+), 70 deletions(-) diff --git a/pom.xml b/pom.xml index 2993af4..82ed3a8 100644 --- a/pom.xml +++ b/pom.xml @@ -50,7 +50,7 @@ <!-- 闈㈠悜杩愯鏃剁殑D-ORM渚濊禆 --> <anyline.version>8.7.2-20241022</anyline.version> <!--宸ヤ綔娴侀厤缃�--> - <warm-flow.version>1.3.7</warm-flow.version> + <warm-flow.version>1.6.0-m4</warm-flow.version> <!-- 鎻掍欢鐗堟湰 --> <maven-jar-plugin.version>3.2.2</maven-jar-plugin.version> diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/config/WarmFlowConfig.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/config/WarmFlowConfig.java index 8bae951..08f1808 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/config/WarmFlowConfig.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/config/WarmFlowConfig.java @@ -1,12 +1,6 @@ package org.dromara.workflow.config; - -import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; -import org.dromara.warm.flow.core.config.WarmFlow; -import org.dromara.warm.flow.core.utils.IdUtils; -import org.dromara.warm.plugin.modes.sb.config.BeanConfig; import org.dromara.workflow.common.ConditionalOnEnable; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; /** @@ -16,16 +10,7 @@ */ @ConditionalOnEnable @Configuration -public class WarmFlowConfig extends BeanConfig { - - @Autowired - private IdentifierGenerator identifierGenerator; - - @Override - public void after(WarmFlow flowConfig) { - // 璁剧疆Mybatis-Plus榛樿涓婚敭鐢熸垚鍣� - IdUtils.setInstanceNative(() -> identifierGenerator.nextId(null).longValue()); - } +public class WarmFlowConfig { } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwDefinitionController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwDefinitionController.java index 1310da3..10d9de8 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwDefinitionController.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwDefinitionController.java @@ -104,7 +104,6 @@ @Log(title = "娴佺▼瀹氫箟", businessType = BusinessType.INSERT) @PutMapping("/publish/{id}") @RepeatSubmit() - @Transactional(rollbackFor = Exception.class) public R<Boolean> publish(@PathVariable Long id) { return R.ok(flwDefinitionService.publish(id)); } @@ -127,7 +126,6 @@ */ @Log(title = "娴佺▼瀹氫箟", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") - @Transactional(rollbackFor = Exception.class) public R<Void> remove(@PathVariable List<Long> ids) { return toAjax(flwDefinitionService.removeDef(ids)); } @@ -153,9 +151,8 @@ */ @Log(title = "娴佺▼瀹氫箟", businessType = BusinessType.IMPORT) @PostMapping("/importDef") - @Transactional(rollbackFor = Exception.class) public R<Boolean> importDef(MultipartFile file, String category) { - return R.ok(flwDefinitionService.importXml(file, category)); + return R.ok(flwDefinitionService.importJson(file, category)); } /** @@ -172,13 +169,13 @@ } /** - * 鑾峰彇娴佺▼瀹氫箟xml瀛楃涓� + * 鑾峰彇娴佺▼瀹氫箟JSON瀛楃涓� * * @param id 娴佺▼瀹氫箟id */ @GetMapping("/xmlString/{id}") public R<String> xmlString(@PathVariable Long id) { - return R.ok("鎿嶄綔鎴愬姛", defService.xmlString(id)); + return R.ok("鎿嶄綔鎴愬姛", defService.exportJson(id)); } /** @@ -189,6 +186,7 @@ */ @RepeatSubmit() @PutMapping("/active/{id}") + @Transactional(rollbackFor = Exception.class) public R<Boolean> active(@PathVariable Long id, @RequestParam boolean active) { return R.ok(active ? defService.active(id) : defService.unActive(id)); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwDefinitionService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwDefinitionService.java index 6b5ca59..1a2d29f 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwDefinitionService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwDefinitionService.java @@ -60,7 +60,7 @@ * @param category 鍒嗙被 * @return 缁撴灉 */ - boolean importXml(MultipartFile file, String category); + boolean importJson(MultipartFile file, String category); /** * 鍒犻櫎娴佺▼瀹氫箟 diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java index 4e72371..da547ef 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java @@ -3,22 +3,21 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; +import cn.hutool.core.io.IoUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.dom4j.Document; -import org.dom4j.io.OutputFormat; -import org.dom4j.io.XMLWriter; import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.json.utils.JsonUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.warm.flow.core.dto.FlowCombine; -import org.dromara.warm.flow.core.entity.Definition; +import org.dromara.warm.flow.core.dto.DefJson; import org.dromara.warm.flow.core.enums.NodeType; import org.dromara.warm.flow.core.enums.PublishStatus; import org.dromara.warm.flow.core.service.DefService; @@ -42,6 +41,8 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -120,6 +121,7 @@ * @param id 娴佺▼瀹氫箟id */ @Override + @Transactional(rollbackFor = Exception.class) public boolean publish(Long id) { List<FlowNode> flowNodes = flowNodeMapper.selectList(new LambdaQueryWrapper<FlowNode>().eq(FlowNode::getDefinitionId, id)); List<String> errorMsg = new ArrayList<>(); @@ -143,16 +145,20 @@ * @param file 鏂囦欢 */ @Override - public boolean importXml(MultipartFile file, String category) { - try { - FlowCombine combine = defService.readXml(file.getInputStream()); - // 娴佺▼瀹氫箟 - Definition definition = combine.getDefinition(); - definition.setCategory(category); - defService.importFlow(combine); + @Transactional(rollbackFor = Exception.class) + public boolean importJson(MultipartFile file, String category) { + try (InputStream inputStream = file.getInputStream()) { + byte[] fileBytes = inputStream.readAllBytes(); + String fileContent = new String(fileBytes, StandardCharsets.UTF_8); + DefJson defJson = JsonUtils.parseObject(fileContent, DefJson.class); + defJson.setCategory(category); + defService.importDef(defJson); + } catch (IOException e) { + log.error("璇诲彇鏂囦欢娴侀敊璇�: {}", e.getMessage(), e); + throw new IllegalStateException("鏂囦欢璇诲彇澶辫触锛岃妫�鏌ユ枃浠跺唴瀹�", e); } catch (Exception e) { log.error("瀵煎叆娴佺▼瀹氫箟閿欒: {}", e.getMessage(), e); - throw new RuntimeException(e); + throw new IllegalStateException("瀵煎叆娴佺▼瀹氫箟澶辫触", e); } return true; } @@ -166,24 +172,15 @@ */ @Override public void exportDef(Long id, HttpServletResponse response) throws IOException { - Document document = defService.exportXml(id); - // 璁剧疆鐢熸垚xml鐨勬牸寮� - OutputFormat of = OutputFormat.createPrettyPrint(); - // 璁剧疆缂栫爜鏍煎紡 - of.setEncoding("UTF-8"); - of.setIndent(true); - of.setIndent(" "); - of.setNewlines(true); - - // 鍒涘缓涓�涓獂ml鏂囨。缂栬緫鍣� - XMLWriter writer = new XMLWriter(response.getOutputStream(), of); - writer.setEscapeText(false); + byte[] data = defService.exportJson(id).getBytes(StandardCharsets.UTF_8); + String filename = "workflow_export_" + DateUtils.dateTimeNow() + ".json"; + // 璁剧疆鍝嶅簲澶村拰鍐呭绫诲瀷 response.reset(); - response.setCharacterEncoding("UTF-8"); - response.setContentType("application/x-msdownload"); - response.setHeader("Content-Disposition", "attachment;"); - writer.write(document); - writer.close(); + response.setCharacterEncoding(StandardCharsets.UTF_8.name()); + response.setContentType("application/json"); + response.setHeader("Content-Disposition", "attachment; filename=" + filename); + response.addHeader("Content-Length", "" + data.length); + IoUtil.write(response.getOutputStream(), false, data); } /** diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java index 7f09a45..f5153c8 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java @@ -19,13 +19,14 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.warm.flow.core.FlowFactory; +import org.dromara.warm.flow.core.FlowEngine; import org.dromara.warm.flow.core.constant.ExceptionCons; import org.dromara.warm.flow.core.dto.FlowParams; import org.dromara.warm.flow.core.entity.Definition; import org.dromara.warm.flow.core.entity.Instance; import org.dromara.warm.flow.core.entity.Task; import org.dromara.warm.flow.core.enums.NodeType; +import org.dromara.warm.flow.core.service.ChartService; import org.dromara.warm.flow.core.service.DefService; import org.dromara.warm.flow.core.service.InsService; import org.dromara.warm.flow.core.service.TaskService; @@ -51,7 +52,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.io.IOException; import java.util.*; import java.util.stream.Collectors; @@ -68,6 +68,7 @@ private final InsService insService; private final DefService defService; + private final ChartService chartService; private final TaskService taskService; private final FlowHisTaskMapper flowHisTaskMapper; private final FlowInstanceMapper flowInstanceMapper; @@ -248,7 +249,7 @@ //鎾ら攢 WorkflowUtils.backTask(message, instance.getId(), applyNodeCode, BusinessStatusEnum.CANCEL.getStatus(), BusinessStatusEnum.CANCEL.getStatus()); //鍒ゆ柇鎴栫鑺傜偣鏄惁鏈夊涓紝鍙繚鐣欎竴涓� - List<Task> currentTaskList = taskService.list(FlowFactory.newTask().setInstanceId(instance.getId())); + List<Task> currentTaskList = taskService.list(FlowEngine.newTask().setInstanceId(instance.getId())); if (CollUtil.isNotEmpty(currentTaskList)) { if (currentTaskList.size() > 1) { currentTaskList.remove(0); @@ -284,14 +285,14 @@ */ @Override public Map<String, Object> flowImage(String businessId) { - Map<String, Object> map = new HashMap<>(16); FlowInstance flowInstance = this.selectInstByBusinessId(businessId); - if (flowInstance == null) { + if (ObjectUtil.isNull(flowInstance)) { throw new ServiceException(ExceptionCons.NOT_FOUNT_INSTANCE); } + Long instanceId = flowInstance.getId(); //杩愯涓殑浠诲姟 List<FlowHisTaskVo> list = new ArrayList<>(); - List<FlowTask> flowTaskList = flwTaskService.selectByInstId(flowInstance.getId()); + List<FlowTask> flowTaskList = flwTaskService.selectByInstId(instanceId); if (CollUtil.isNotEmpty(flowTaskList)) { List<FlowHisTaskVo> flowHisTaskVos = BeanUtil.copyToList(flowTaskList, FlowHisTaskVo.class); for (FlowHisTaskVo flowHisTaskVo : flowHisTaskVos) { @@ -312,22 +313,15 @@ } //鍘嗗彶浠诲姟 LambdaQueryWrapper<FlowHisTask> wrapper = Wrappers.lambdaQuery(); - wrapper.eq(FlowHisTask::getInstanceId, flowInstance.getId()); + wrapper.eq(FlowHisTask::getInstanceId, instanceId); wrapper.eq(FlowHisTask::getNodeType, NodeType.BETWEEN.getKey()); wrapper.orderByDesc(FlowHisTask::getCreateTime).orderByDesc(FlowHisTask::getUpdateTime); List<FlowHisTask> flowHisTasks = flowHisTaskMapper.selectList(wrapper); if (CollUtil.isNotEmpty(flowHisTasks)) { list.addAll(BeanUtil.copyToList(flowHisTasks, FlowHisTaskVo.class)); } - - map.put("list", list); - try { - String flowChart = defService.flowChart(flowInstance.getId()); - map.put("image", flowChart); - } catch (IOException e) { - throw new RuntimeException(e); - } - return map; + String flowChart = chartService.chartIns(instanceId); + return Map.of("list", list, "image", flowChart); } /** -- Gitblit v1.9.3