From 5a8dc8e1cfc1999ef677b75da3417d48d96eaa87 Mon Sep 17 00:00:00 2001
From: gssong <1742057357@qq.com>
Date: Sat, 10 May 2025 15:51:17 +0800
Subject: [PATCH] =?UTF-8?q?update=20=E5=8D=87=E7=BA=A7warm-flow1.7.0=20upd?=
=?UTF-8?q?ate=20=E8=B0=83=E6=95=B4=E6=B5=81=E7=A8=8B=E6=92=A4=E9=94=80=20?=
=?UTF-8?q?remove=20=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
.../workflow/service/IFlwCommonService.java | 20 ++-----
.../service/impl/FlwCommonServiceImpl.java | 56 +++----------------
.../service/impl/FlwInstanceServiceImpl.java | 27 ++++-----
.../service/impl/FlwTaskServiceImpl.java | 6 +-
5 files changed, 31 insertions(+), 80 deletions(-)
diff --git a/pom.xml b/pom.xml
index ebec03645..a9b5296e8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,7 +49,7 @@
8.7.2-20250101
- 1.6.10
+ 1.7.0
3.2.2
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwCommonService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwCommonService.java
index 73201f43f..4d3540b91 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwCommonService.java
+++ b/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;
/**
@@ -48,17 +50,6 @@ public interface IFlwCommonService {
*/
void sendMessage(String flowName, Long instId, List 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);
-
/**
* 申请人节点编码
*
@@ -68,9 +59,10 @@ public interface IFlwCommonService {
String applyNodeCode(Long definitionId);
/**
- * 删除运行中的任务
+ * 合并变量
*
- * @param taskIds 任务id
+ * @param instance 流程实例
+ * @param variable 变量
*/
- void deleteRunTask(List taskIds);
+ void mergeVariable(Instance instance, Map variable);
}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java
index df4893d9b..5c77d2c08 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCommonServiceImpl.java
@@ -12,8 +12,9 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mail.utils.MailUtils;
import org.dromara.common.sse.dto.SseMessageDto;
import org.dromara.common.sse.utils.SseMessageUtils;
+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.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;
@@ -23,6 +24,7 @@ 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.core.utils.MapUtil;
import org.dromara.warm.flow.orm.entity.FlowNode;
import org.dromara.warm.flow.orm.entity.FlowTask;
import org.dromara.warm.flow.orm.entity.FlowUser;
@@ -177,42 +179,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 list = flwTaskService.selectByInstId(instanceId);
- if (CollUtil.isNotEmpty(list)) {
- List tasks = StreamUtils.filter(list, e -> e.getNodeCode().equals(targetNodeCode));
- if (list.size() == tasks.size()) {
- return;
- }
- }
- for (FlowTask task : list) {
- List 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);
- }
/**
* 申请人节点编码
@@ -231,17 +197,13 @@ public class FlwCommonServiceImpl implements IFlwCommonService {
return nextNode.getNodeCode();
}
- /**
- * 删除运行中的任务
- *
- * @param taskIds 任务id
- */
@Override
- public void deleteRunTask(List taskIds) {
- if (CollUtil.isEmpty(taskIds)) {
- return;
+ public void mergeVariable(Instance instance, Map variable) {
+ if (MapUtil.isNotEmpty(variable)) {
+ String variableStr = instance.getVariable();
+ Map deserialize = FlowEngine.jsonConvert.strToMap(variableStr);
+ deserialize.putAll(variable);
+ instance.setVariable(FlowEngine.jsonConvert.objToStr(deserialize));
}
- userService.deleteByTaskIds(taskIds);
- flowTaskMapper.deleteByIds(taskIds);
}
}
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 2aa95484f..e50744005 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,13 @@ import org.dromara.common.core.utils.StringUtils;
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.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;
@@ -185,7 +185,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
@Override
@Transactional(rollbackFor = Exception.class)
public boolean deleteByBusinessIds(List businessIds) {
- List flowInstances = flowInstanceMapper.selectList(new LambdaQueryWrapper().in(FlowInstance::getBusinessId, StreamUtils.toList(businessIds,Convert::toStr)));
+ List flowInstances = flowInstanceMapper.selectList(new LambdaQueryWrapper().in(FlowInstance::getBusinessId, StreamUtils.toList(businessIds, Convert::toStr)));
if (CollUtil.isEmpty(flowInstances)) {
log.warn("未找到对应的流程实例信息,无法执行删除操作。");
return false;
@@ -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 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 variable) {
Instance instance = insService.getById(instanceId);
if (instance != null) {
- taskService.mergeVariable(instance, variable);
+ flwCommonService.mergeVariable(instance, variable);
insService.updateById(instance);
}
}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
index 5685ac3dc..77c7fcecf 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
@@ -112,7 +112,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
if (ObjectUtil.isNotNull(flowInstance)) {
BusinessStatusEnum.checkStartStatus(flowInstance.getFlowStatus());
List taskList = taskService.list(new FlowTask().setInstanceId(flowInstance.getId()));
- taskService.mergeVariable(flowInstance, variables);
+ flwCommonService.mergeVariable(flowInstance, variables);
insService.updateById(flowInstance);
StartProcessReturnDTO dto = new StartProcessReturnDTO();
dto.setProcessInstanceId(taskList.get(0).getInstanceId());
@@ -217,7 +217,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
variableMap.remove(task.getNodeCode());
}
}
- taskService.mergeVariable(inst, variableMap);
+ flwCommonService.mergeVariable(inst, variableMap);
}
/**
@@ -594,7 +594,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
nextFlowNodes = StreamUtils.filter(nextFlowNodes, node -> NodeType.BETWEEN.getKey().equals(node.getNodeType()));
if (CollUtil.isNotEmpty(nextNodeList)) {
// 构建以下节点数据
- List buildNextTaskList = StreamUtils.toList(nextNodeList, node -> taskService.addTask(node, instance, definition, null));
+ List buildNextTaskList = StreamUtils.toList(nextNodeList, node -> taskService.addTask(node, instance, definition, FlowParams.build()));
// 办理人变量替换
ExpressionUtil.evalVariable(buildNextTaskList, mergeVariable);
for (FlowNode flowNode : nextFlowNodes) {