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

dev
疯狂的狮子Li 7 months ago
parent bf6f18d7b8
commit 21521e4d80

@ -55,7 +55,7 @@
<!-- 面向运行时的D-ORM依赖 --> <!-- 面向运行时的D-ORM依赖 -->
<anyline.version>8.7.2-20250101</anyline.version> <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配置 --> <!-- mq配置 -->
<rocketmq.version>2.3.0</rocketmq.version> <rocketmq.version>2.3.0</rocketmq.version>

@ -1,9 +1,11 @@
package org.dromara.workflow.service; 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.entity.User;
import org.dromara.warm.flow.core.service.UserService; import org.dromara.warm.flow.core.service.UserService;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
/** /**
@ -45,17 +47,6 @@ public interface IFlwCommonService {
*/ */
void sendMessage(String flowName, Long instId, List<String> messageType, String message); 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); String applyNodeCode(Long definitionId);
/** /**
* *
* *
* @param taskIds id * @param instance
* @param variable
*/ */
void deleteRunTask(List<Long> taskIds); void mergeVariable(Instance instance, Map<String, Object> variable);
} }

@ -2,7 +2,6 @@ package org.dromara.workflow.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference; 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.RemoteMailService;
import org.dromara.resource.api.RemoteMessageService; import org.dromara.resource.api.RemoteMessageService;
import org.dromara.system.api.domain.vo.RemoteUserVo; import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.dromara.warm.flow.core.constant.ExceptionCons; import org.dromara.warm.flow.core.FlowEngine;
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.Node;
import org.dromara.warm.flow.core.entity.Task; import org.dromara.warm.flow.core.entity.Task;
import org.dromara.warm.flow.core.entity.User; 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.enums.SkipType;
import org.dromara.warm.flow.core.service.NodeService; 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.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.FlowTask;
import org.dromara.warm.flow.orm.entity.FlowUser; 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.ConditionalOnEnable;
import org.dromara.workflow.common.enums.MessageTypeEnum; import org.dromara.workflow.common.enums.MessageTypeEnum;
import org.dromara.workflow.common.enums.TaskAssigneeType; import org.dromara.workflow.common.enums.TaskAssigneeType;
@ -51,10 +45,7 @@ import java.util.stream.Collectors;
@Service @Service
public class FlwCommonServiceImpl implements IFlwCommonService { public class FlwCommonServiceImpl implements IFlwCommonService {
private final FlowNodeMapper flowNodeMapper;
private final FlowTaskMapper flowTaskMapper;
private final UserService userService; private final UserService userService;
private final TaskService taskService;
private final NodeService nodeService; private final NodeService nodeService;
@DubboReference @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 @Override
public String applyNodeCode(Long definitionId) { public String applyNodeCode(Long definitionId) {
//获取已发布的流程节点 Node startNode = nodeService.getStartNode(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 nextNode = nodeService.getNextNode(definitionId, startNode.getNodeCode(), null, SkipType.PASS.getKey()); Node nextNode = nodeService.getNextNode(definitionId, startNode.getNodeCode(), null, SkipType.PASS.getKey());
return nextNode.getNodeCode(); return nextNode.getNodeCode();
} }
/**
*
*
* @param taskIds id
*/
@Override @Override
public void deleteRunTask(List<Long> taskIds) { public void mergeVariable(Instance instance, Map<String, Object> variable) {
if (CollUtil.isEmpty(taskIds)) { if (MapUtil.isNotEmpty(variable)) {
return; 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);
} }
} }

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

@ -115,7 +115,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
if (ObjectUtil.isNotNull(flowInstance)) { if (ObjectUtil.isNotNull(flowInstance)) {
BusinessStatusEnum.checkStartStatus(flowInstance.getFlowStatus()); BusinessStatusEnum.checkStartStatus(flowInstance.getFlowStatus());
List<Task> taskList = taskService.list(new FlowTask().setInstanceId(flowInstance.getId())); List<Task> taskList = taskService.list(new FlowTask().setInstanceId(flowInstance.getId()));
taskService.mergeVariable(flowInstance, variables); flwCommonService.mergeVariable(flowInstance, variables);
insService.updateById(flowInstance); insService.updateById(flowInstance);
RemoteStartProcessReturn dto = new RemoteStartProcessReturn(); RemoteStartProcessReturn dto = new RemoteStartProcessReturn();
dto.setProcessInstanceId(taskList.get(0).getInstanceId()); dto.setProcessInstanceId(taskList.get(0).getInstanceId());
@ -220,7 +220,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
variableMap.remove(task.getNodeCode()); 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())); nextFlowNodes = StreamUtils.filter(nextFlowNodes, node -> NodeType.BETWEEN.getKey().equals(node.getNodeType()));
if (CollUtil.isNotEmpty(nextNodeList)) { 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); ExpressionUtil.evalVariable(buildNextTaskList, mergeVariable);
for (FlowNode flowNode : nextFlowNodes) { for (FlowNode flowNode : nextFlowNodes) {

Loading…
Cancel
Save