add 添加获取节点接口
This commit is contained in:
parent
c4ef053958
commit
21c12a791a
@ -12,6 +12,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.warm.flow.core.entity.Node;
|
||||
import org.dromara.warm.flow.orm.entity.FlowNode;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
import org.dromara.workflow.domain.bo.*;
|
||||
import org.dromara.workflow.domain.vo.FlowHisTaskVo;
|
||||
@ -127,6 +128,16 @@ public class FlwTaskController extends BaseController {
|
||||
return R.ok(flwTaskService.selectById(taskId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取下一节点信息
|
||||
*
|
||||
* @param bo 参数
|
||||
*/
|
||||
@PostMapping("/getNextNodeList")
|
||||
public R<List<FlowNode>> getNextNodeList(@RequestBody FlowNextNodeBo bo) {
|
||||
return R.ok(flwTaskService.getNextNodeList(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 终止任务
|
||||
*
|
||||
|
@ -0,0 +1,38 @@
|
||||
package org.dromara.workflow.domain.bo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 下一节点信息
|
||||
*
|
||||
* @author may
|
||||
*/
|
||||
@Data
|
||||
public class FlowNextNodeBo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
/**
|
||||
* 任务id
|
||||
*/
|
||||
private String taskId;
|
||||
|
||||
/**
|
||||
* 流程变量
|
||||
*/
|
||||
private Map<String, Object> variables;
|
||||
|
||||
public Map<String, Object> getVariables() {
|
||||
if (variables == null) {
|
||||
return new HashMap<>(16);
|
||||
}
|
||||
variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue()));
|
||||
return variables;
|
||||
}
|
||||
}
|
@ -178,6 +178,11 @@ public class FlowTaskVo implements Serializable {
|
||||
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy")
|
||||
private String createByName;
|
||||
|
||||
/**
|
||||
* 是否为申请人节点
|
||||
*/
|
||||
private boolean applyNode;
|
||||
|
||||
/**
|
||||
* 按钮权限
|
||||
*/
|
||||
|
@ -133,6 +133,14 @@ public interface IFlwTaskService {
|
||||
*/
|
||||
FlowTaskVo selectById(Long taskId);
|
||||
|
||||
/**
|
||||
* 获取下一节点信息
|
||||
*
|
||||
* @param bo 参数
|
||||
* @return 结果
|
||||
*/
|
||||
List<FlowNode> getNextNodeList(FlowNextNodeBo bo);
|
||||
|
||||
/**
|
||||
* 按照任务id查询任务
|
||||
*
|
||||
|
@ -30,6 +30,8 @@ import org.dromara.warm.flow.core.entity.*;
|
||||
import org.dromara.warm.flow.core.enums.NodeType;
|
||||
import org.dromara.warm.flow.core.enums.SkipType;
|
||||
import org.dromara.warm.flow.core.service.*;
|
||||
import org.dromara.warm.flow.core.utils.ExpressionUtil;
|
||||
import org.dromara.warm.flow.core.utils.MapUtil;
|
||||
import org.dromara.warm.flow.orm.entity.*;
|
||||
import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper;
|
||||
import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper;
|
||||
@ -45,6 +47,7 @@ import org.dromara.workflow.handler.FlowProcessEventHandler;
|
||||
import org.dromara.workflow.handler.WorkflowPermissionHandler;
|
||||
import org.dromara.workflow.mapper.FlwCategoryMapper;
|
||||
import org.dromara.workflow.mapper.FlwTaskMapper;
|
||||
import org.dromara.workflow.service.IFlwTaskAssigneeService;
|
||||
import org.dromara.workflow.service.IFlwTaskService;
|
||||
import org.dromara.workflow.utils.WorkflowUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -81,6 +84,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
private final FlwTaskMapper flwTaskMapper;
|
||||
private final FlwCategoryMapper flwCategoryMapper;
|
||||
private final FlowNodeMapper flowNodeMapper;
|
||||
private final IFlwTaskAssigneeService flwTaskAssigneeService;
|
||||
|
||||
/**
|
||||
* 启动任务
|
||||
@ -491,13 +495,49 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
flowTaskVo.setBusinessId(instance.getBusinessId());
|
||||
//设置按钮权限
|
||||
FlowNode flowNode = getByNodeCode(flowTaskVo.getNodeCode(), instance.getDefinitionId());
|
||||
if (ObjectUtil.isNotNull(flowNode)) {
|
||||
flowTaskVo.setButtonList(flowTaskVo.getButtonList(flowNode.getExt()));
|
||||
flowTaskVo.setNodeRatio(flowNode.getNodeRatio());
|
||||
if (ObjectUtil.isNull(flowNode)) {
|
||||
throw new NullPointerException("当前【" + flowTaskVo.getNodeCode() + "】节点编码不存在");
|
||||
}
|
||||
flowTaskVo.setButtonList(flowTaskVo.getButtonList(flowNode.getExt()));
|
||||
flowTaskVo.setNodeRatio(flowNode.getNodeRatio());
|
||||
flowTaskVo.setApplyNode(flowNode.getNodeCode().equals(WorkflowUtils.applyNodeCode(task.getDefinitionId())));
|
||||
return flowTaskVo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取下一节点信息
|
||||
*
|
||||
* @param bo 参数
|
||||
*/
|
||||
@Override
|
||||
public List<FlowNode> getNextNodeList(FlowNextNodeBo bo) {
|
||||
String taskId = bo.getTaskId();
|
||||
Map<String, Object> variables = bo.getVariables();
|
||||
Task task = taskService.getById(taskId);
|
||||
Instance instance = insService.getById(task.getInstanceId());
|
||||
Definition definition = defService.getById(task.getDefinitionId());
|
||||
//获取下一节点列表
|
||||
List<Node> nextNodeList = nodeService.getNextNodeList(task.getDefinitionId(), task.getNodeCode(), null, SkipType.PASS.getKey(), variables);
|
||||
if (CollUtil.isNotEmpty(nextNodeList)) {
|
||||
//构建以下节点数据
|
||||
List<Task> buildTaskList = StreamUtils.toList(nextNodeList, node -> taskService.addTask(node, instance, definition, null));
|
||||
//办理人变量替换
|
||||
ExpressionUtil.evalVariable(buildTaskList, MapUtil.mergeAll(instance.getVariableMap(), variables));
|
||||
for (Node nextNode : nextNodeList) {
|
||||
buildTaskList.stream().filter(t -> t.getNodeCode().equals(nextNode.getNodeCode())).findFirst().ifPresent(t -> {
|
||||
nextNode.setPermissionFlag(StringUtils.join(t.getPermissionList(), StringUtils.SEPARATOR));
|
||||
});
|
||||
}
|
||||
List<FlowNode> flowNodes = BeanUtil.copyToList(nextNodeList, FlowNode.class);
|
||||
for (FlowNode flowNode : flowNodes) {
|
||||
if (StringUtils.isNotBlank(flowNode.getPermissionFlag())) {
|
||||
flwTaskAssigneeService.fetchUsersByStorageId(flowNode.getPermissionFlag());
|
||||
}
|
||||
}
|
||||
}
|
||||
return BeanUtil.copyToList(nextNodeList, FlowNode.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 按照任务id查询任务
|
||||
*
|
||||
@ -580,10 +620,11 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
}
|
||||
|
||||
Long taskId = bo.getTaskId();
|
||||
FlowTaskVo flowTaskVo = selectById(taskId);
|
||||
Task task = taskService.getById(taskId);
|
||||
FlowNode flowNode = getByNodeCode(task.getNodeCode(), task.getDefinitionId());
|
||||
if ("addSignature".equals(taskOperation) || "reductionSignature".equals(taskOperation)) {
|
||||
if (flowTaskVo.getNodeRatio().compareTo(BigDecimal.ZERO) == 0) {
|
||||
throw new ServiceException(flowTaskVo.getNodeName() + "不是会签节点!");
|
||||
if (flowNode.getNodeRatio().compareTo(BigDecimal.ZERO) == 0) {
|
||||
throw new ServiceException(task.getNodeName() + "不是会签节点!");
|
||||
}
|
||||
}
|
||||
// 设置任务状态并执行对应的任务操作
|
||||
|
Loading…
x
Reference in New Issue
Block a user