瀏覽代碼

update warm-flow 1.6.10 => 1.7.0 适配代码

疯狂的狮子Li 1 年之前
父節點
當前提交
21521e4d80

+ 1 - 1
pom.xml

@@ -55,7 +55,7 @@
         <!-- 面向运行时的D-ORM依赖 -->
         <anyline.version>8.7.2-20250101</anyline.version>
         <!--工作流配置-->
-        <warm-flow.version>1.6.10</warm-flow.version>
+        <warm-flow.version>1.7.0</warm-flow.version>
         <!-- mq配置 -->
         <rocketmq.version>2.3.0</rocketmq.version>
 

+ 7 - 14
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwCommonService.java

@@ -1,9 +1,11 @@
 package org.dromara.workflow.service;
 
+import org.dromara.warm.flow.core.entity.Instance;
 import org.dromara.warm.flow.core.entity.User;
 import org.dromara.warm.flow.core.service.UserService;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -45,17 +47,6 @@ public interface IFlwCommonService {
      */
     void sendMessage(String flowName, Long instId, List<String> messageType, String message);
 
-    /**
-     * 驳回
-     *
-     * @param message        审批意见
-     * @param instanceId     流程实例id
-     * @param targetNodeCode 目标节点
-     * @param flowStatus     流程状态
-     * @param flowHisStatus  节点操作状态
-     */
-    void backTask(String message, Long instanceId, String targetNodeCode, String flowStatus, String flowHisStatus);
-
     /**
      * 申请人节点编码
      *
@@ -65,9 +56,11 @@ public interface IFlwCommonService {
     String applyNodeCode(Long definitionId);
 
     /**
-     * 删除运行中的任务
+     * 合并变量
      *
-     * @param taskIds 任务id
+     * @param instance 流程实例
+     * @param variable 变量
      */
-    void deleteRunTask(List<Long> taskIds);
+    void mergeVariable(Instance instance, Map<String, Object> variable);
+
 }

+ 10 - 65
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java

@@ -2,7 +2,6 @@ package org.dromara.workflow.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -12,22 +11,17 @@ import org.dromara.common.core.utils.StringUtils;
 import org.dromara.resource.api.RemoteMailService;
 import org.dromara.resource.api.RemoteMessageService;
 import org.dromara.system.api.domain.vo.RemoteUserVo;
-import org.dromara.warm.flow.core.constant.ExceptionCons;
-import org.dromara.warm.flow.core.dto.FlowParams;
+import org.dromara.warm.flow.core.FlowEngine;
+import org.dromara.warm.flow.core.entity.Instance;
 import org.dromara.warm.flow.core.entity.Node;
 import org.dromara.warm.flow.core.entity.Task;
 import org.dromara.warm.flow.core.entity.User;
-import org.dromara.warm.flow.core.enums.NodeType;
 import org.dromara.warm.flow.core.enums.SkipType;
 import org.dromara.warm.flow.core.service.NodeService;
-import org.dromara.warm.flow.core.service.TaskService;
 import org.dromara.warm.flow.core.service.UserService;
-import org.dromara.warm.flow.core.utils.AssertUtil;
-import org.dromara.warm.flow.orm.entity.FlowNode;
+import org.dromara.warm.flow.core.utils.MapUtil;
 import org.dromara.warm.flow.orm.entity.FlowTask;
 import org.dromara.warm.flow.orm.entity.FlowUser;
-import org.dromara.warm.flow.orm.mapper.FlowNodeMapper;
-import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
 import org.dromara.workflow.common.ConditionalOnEnable;
 import org.dromara.workflow.common.enums.MessageTypeEnum;
 import org.dromara.workflow.common.enums.TaskAssigneeType;
@@ -51,10 +45,7 @@ import java.util.stream.Collectors;
 @Service
 public class FlwCommonServiceImpl implements IFlwCommonService {
 
-    private final FlowNodeMapper flowNodeMapper;
-    private final FlowTaskMapper flowTaskMapper;
     private final UserService userService;
-    private final TaskService taskService;
     private final NodeService nodeService;
 
     @DubboReference
@@ -180,44 +171,6 @@ public class FlwCommonServiceImpl implements IFlwCommonService {
         }
     }
 
-    /**
-     * 驳回
-     *
-     * @param message        审批意见
-     * @param instanceId     流程实例id
-     * @param targetNodeCode 目标节点
-     * @param flowStatus     流程状态
-     * @param flowHisStatus  节点操作状态
-     */
-    @Override
-    public void backTask(String message, Long instanceId, String targetNodeCode, String flowStatus, String flowHisStatus) {
-        IFlwTaskService flwTaskService = SpringUtils.getBean(IFlwTaskService.class);
-        List<FlowTask> list = flwTaskService.selectByInstId(instanceId);
-        if (CollUtil.isNotEmpty(list)) {
-            List<FlowTask> tasks = StreamUtils.filter(list, e -> e.getNodeCode().equals(targetNodeCode));
-            if (list.size() == tasks.size()) {
-                return;
-            }
-        }
-        for (FlowTask task : list) {
-            List<RemoteUserVo> userList = flwTaskService.currentTaskAllUser(task.getId());
-            FlowParams flowParams = FlowParams.build()
-                .nodeCode(targetNodeCode)
-                .message(message)
-                .skipType(SkipType.PASS.getKey())
-                .flowStatus(flowStatus)
-                .hisStatus(flowHisStatus)
-                .ignore(true);
-            //解决会签没权限问题
-            if (CollUtil.isNotEmpty(userList)) {
-                flowParams.handler(userList.get(0).getUserId().toString());
-            }
-            taskService.skip(task.getId(), flowParams);
-        }
-        //解决会签多人审批问题
-        backTask(message, instanceId, targetNodeCode, flowStatus, flowHisStatus);
-    }
-
     /**
      * 申请人节点编码
      *
@@ -226,26 +179,18 @@ public class FlwCommonServiceImpl implements IFlwCommonService {
      */
     @Override
     public String applyNodeCode(Long definitionId) {
-        //获取已发布的流程节点
-        List<FlowNode> flowNodes = flowNodeMapper.selectList(new LambdaQueryWrapper<FlowNode>().eq(FlowNode::getDefinitionId, definitionId));
-        AssertUtil.isTrue(CollUtil.isEmpty(flowNodes), ExceptionCons.NOT_PUBLISH_NODE);
-        Node startNode = flowNodes.stream().filter(t -> NodeType.isStart(t.getNodeType())).findFirst().orElse(null);
-        AssertUtil.isNull(startNode, ExceptionCons.LOST_START_NODE);
+        Node startNode = nodeService.getStartNode(definitionId);
         Node nextNode = nodeService.getNextNode(definitionId, startNode.getNodeCode(), null, SkipType.PASS.getKey());
         return nextNode.getNodeCode();
     }
 
-    /**
-     * 删除运行中的任务
-     *
-     * @param taskIds 任务id
-     */
     @Override
-    public void deleteRunTask(List<Long> taskIds) {
-        if (CollUtil.isEmpty(taskIds)) {
-            return;
+    public void mergeVariable(Instance instance, Map<String, Object> variable) {
+        if (MapUtil.isNotEmpty(variable)) {
+            String variableStr = instance.getVariable();
+            Map<String, Object> deserialize = FlowEngine.jsonConvert.strToMap(variableStr);
+            deserialize.putAll(variable);
+            instance.setVariable(FlowEngine.jsonConvert.objToStr(deserialize));
         }
-        userService.deleteByTaskIds(taskIds);
-        flowTaskMapper.deleteByIds(taskIds);
     }
 }

+ 11 - 14
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java

@@ -19,13 +19,13 @@ 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.system.api.domain.vo.RemoteUserVo;
-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.enums.SkipType;
 import org.dromara.warm.flow.core.service.ChartService;
 import org.dromara.warm.flow.core.service.DefService;
 import org.dromara.warm.flow.core.service.InsService;
@@ -244,19 +244,16 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
                 throw new ServiceException(ExceptionCons.NOT_FOUNT_DEF);
             }
             String message = bo.getMessage();
+            String userIdStr = LoginHelper.getUserIdStr();
             BusinessStatusEnum.checkCancelStatus(instance.getFlowStatus());
-            String applyNodeCode = flwCommonService.applyNodeCode(definition.getId());
-            //撤销
-            flwCommonService.backTask(message, instance.getId(), applyNodeCode, BusinessStatusEnum.CANCEL.getStatus(), BusinessStatusEnum.CANCEL.getStatus());
-            //判断或签节点是否有多个,只保留一个
-            List<Task> currentTaskList = taskService.list(FlowEngine.newTask().setInstanceId(instance.getId()));
-            if (CollUtil.isNotEmpty(currentTaskList)) {
-                if (currentTaskList.size() > 1) {
-                    currentTaskList.remove(0);
-                    flwCommonService.deleteRunTask(StreamUtils.toList(currentTaskList, Task::getId));
-                }
-            }
-
+            FlowParams flowParams = FlowParams.build()
+                .message(message)
+                .skipType(SkipType.PASS.getKey())
+                .flowStatus(BusinessStatusEnum.CANCEL.getStatus())
+                .hisStatus(BusinessStatusEnum.CANCEL.getStatus())
+                .handler(userIdStr)
+                .ignore(true);
+            taskService.revoke(instance.getId(), flowParams);
         } catch (Exception e) {
             log.error("撤销失败: {}", e.getMessage(), e);
             throw new ServiceException(e.getMessage());
@@ -363,7 +360,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
     public void setVariable(Long instanceId, Map<String, Object> variable) {
         Instance instance = insService.getById(instanceId);
         if (instance != null) {
-            taskService.mergeVariable(instance, variable);
+            flwCommonService.mergeVariable(instance, variable);
             insService.updateById(instance);
         }
     }

+ 3 - 3
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java

@@ -115,7 +115,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
         if (ObjectUtil.isNotNull(flowInstance)) {
             BusinessStatusEnum.checkStartStatus(flowInstance.getFlowStatus());
             List<Task> taskList = taskService.list(new FlowTask().setInstanceId(flowInstance.getId()));
-            taskService.mergeVariable(flowInstance, variables);
+            flwCommonService.mergeVariable(flowInstance, variables);
             insService.updateById(flowInstance);
             RemoteStartProcessReturn dto = new RemoteStartProcessReturn();
             dto.setProcessInstanceId(taskList.get(0).getInstanceId());
@@ -220,7 +220,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
                 variableMap.remove(task.getNodeCode());
             }
         }
-        taskService.mergeVariable(inst, variableMap);
+        flwCommonService.mergeVariable(inst, variableMap);
     }
 
     /**
@@ -597,7 +597,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
         nextFlowNodes = StreamUtils.filter(nextFlowNodes, node -> NodeType.BETWEEN.getKey().equals(node.getNodeType()));
         if (CollUtil.isNotEmpty(nextNodeList)) {
             //构建以下节点数据
-            List<Task> buildNextTaskList = StreamUtils.toList(nextNodeList, node -> taskService.addTask(node, instance, definition, null));
+            List<Task> buildNextTaskList = StreamUtils.toList(nextNodeList, node -> taskService.addTask(node, instance, definition, FlowParams.build()));
             //办理人变量替换
             ExpressionUtil.evalVariable(buildNextTaskList, mergeVariable);
             for (FlowNode flowNode : nextFlowNodes) {