update 升级warm-flow1.7.0
update 调整流程撤销 remove 删除无用代码
This commit is contained in:
parent
eac7f1b4e2
commit
5a8dc8e1cf
2
pom.xml
2
pom.xml
@ -49,7 +49,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>
|
||||||
|
|
||||||
<!-- 插件版本 -->
|
<!-- 插件版本 -->
|
||||||
<maven-jar-plugin.version>3.2.2</maven-jar-plugin.version>
|
<maven-jar-plugin.version>3.2.2</maven-jar-plugin.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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -48,17 +50,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);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 申请人节点编码
|
* 申请人节点编码
|
||||||
*
|
*
|
||||||
@ -68,9 +59,10 @@ 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);
|
||||||
}
|
}
|
||||||
|
@ -12,8 +12,9 @@ import org.dromara.common.core.utils.StringUtils;
|
|||||||
import org.dromara.common.mail.utils.MailUtils;
|
import org.dromara.common.mail.utils.MailUtils;
|
||||||
import org.dromara.common.sse.dto.SseMessageDto;
|
import org.dromara.common.sse.dto.SseMessageDto;
|
||||||
import org.dromara.common.sse.utils.SseMessageUtils;
|
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.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.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;
|
||||||
@ -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.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.AssertUtil;
|
||||||
|
import org.dromara.warm.flow.core.utils.MapUtil;
|
||||||
import org.dromara.warm.flow.orm.entity.FlowNode;
|
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;
|
||||||
@ -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();
|
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.core.utils.StringUtils;
|
|||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
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.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;
|
||||||
@ -185,7 +185,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean deleteByBusinessIds(List<Long> businessIds) {
|
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)) {
|
if (CollUtil.isEmpty(flowInstances)) {
|
||||||
log.warn("未找到对应的流程实例信息,无法执行删除操作。");
|
log.warn("未找到对应的流程实例信息,无法执行删除操作。");
|
||||||
return false;
|
return false;
|
||||||
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -112,7 +112,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);
|
||||||
StartProcessReturnDTO dto = new StartProcessReturnDTO();
|
StartProcessReturnDTO dto = new StartProcessReturnDTO();
|
||||||
dto.setProcessInstanceId(taskList.get(0).getInstanceId());
|
dto.setProcessInstanceId(taskList.get(0).getInstanceId());
|
||||||
@ -217,7 +217,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
variableMap.remove(task.getNodeCode());
|
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()));
|
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…
x
Reference in New Issue
Block a user