mirror of
				https://github.com/dromara/RuoYi-Vue-Plus.git
				synced 2025-11-04 16:23:42 +08:00 
			
		
		
		
	update 升级warm-flow1.7.0
update 调整流程撤销 remove 删除无用代码
This commit is contained in:
		
							
								
								
									
										2
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								pom.xml
									
									
									
									
									
								
							@@ -49,7 +49,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>
 | 
			
		||||
 | 
			
		||||
        <!-- 插件版本 -->
 | 
			
		||||
        <maven-jar-plugin.version>3.2.2</maven-jar-plugin.version>
 | 
			
		||||
 
 | 
			
		||||
@@ -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<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);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 申请人节点编码
 | 
			
		||||
     *
 | 
			
		||||
@@ -68,9 +59,10 @@ 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);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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<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<UserDTO> 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<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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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<Long> businessIds) {
 | 
			
		||||
        List<FlowInstance> flowInstances = flowInstanceMapper.selectList(new LambdaQueryWrapper<FlowInstance>().in(FlowInstance::getBusinessId, StreamUtils.toList(businessIds,Convert::toStr)));
 | 
			
		||||
        List<FlowInstance> flowInstances = flowInstanceMapper.selectList(new LambdaQueryWrapper<FlowInstance>().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<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);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -112,7 +112,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);
 | 
			
		||||
            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<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) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user