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.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.common.web.core.BaseController;
|
import org.dromara.common.web.core.BaseController;
|
||||||
import org.dromara.warm.flow.core.entity.Node;
|
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.common.ConditionalOnEnable;
|
||||||
import org.dromara.workflow.domain.bo.*;
|
import org.dromara.workflow.domain.bo.*;
|
||||||
import org.dromara.workflow.domain.vo.FlowHisTaskVo;
|
import org.dromara.workflow.domain.vo.FlowHisTaskVo;
|
||||||
@ -127,6 +128,16 @@ public class FlwTaskController extends BaseController {
|
|||||||
return R.ok(flwTaskService.selectById(taskId));
|
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")
|
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy")
|
||||||
private String createByName;
|
private String createByName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否为申请人节点
|
||||||
|
*/
|
||||||
|
private boolean applyNode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 按钮权限
|
* 按钮权限
|
||||||
*/
|
*/
|
||||||
|
@ -133,6 +133,14 @@ public interface IFlwTaskService {
|
|||||||
*/
|
*/
|
||||||
FlowTaskVo selectById(Long taskId);
|
FlowTaskVo selectById(Long taskId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取下一节点信息
|
||||||
|
*
|
||||||
|
* @param bo 参数
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
List<FlowNode> getNextNodeList(FlowNextNodeBo bo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 按照任务id查询任务
|
* 按照任务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.NodeType;
|
||||||
import org.dromara.warm.flow.core.enums.SkipType;
|
import org.dromara.warm.flow.core.enums.SkipType;
|
||||||
import org.dromara.warm.flow.core.service.*;
|
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.entity.*;
|
||||||
import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper;
|
import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper;
|
||||||
import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper;
|
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.handler.WorkflowPermissionHandler;
|
||||||
import org.dromara.workflow.mapper.FlwCategoryMapper;
|
import org.dromara.workflow.mapper.FlwCategoryMapper;
|
||||||
import org.dromara.workflow.mapper.FlwTaskMapper;
|
import org.dromara.workflow.mapper.FlwTaskMapper;
|
||||||
|
import org.dromara.workflow.service.IFlwTaskAssigneeService;
|
||||||
import org.dromara.workflow.service.IFlwTaskService;
|
import org.dromara.workflow.service.IFlwTaskService;
|
||||||
import org.dromara.workflow.utils.WorkflowUtils;
|
import org.dromara.workflow.utils.WorkflowUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -81,6 +84,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
private final FlwTaskMapper flwTaskMapper;
|
private final FlwTaskMapper flwTaskMapper;
|
||||||
private final FlwCategoryMapper flwCategoryMapper;
|
private final FlwCategoryMapper flwCategoryMapper;
|
||||||
private final FlowNodeMapper flowNodeMapper;
|
private final FlowNodeMapper flowNodeMapper;
|
||||||
|
private final IFlwTaskAssigneeService flwTaskAssigneeService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 启动任务
|
* 启动任务
|
||||||
@ -491,13 +495,49 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
flowTaskVo.setBusinessId(instance.getBusinessId());
|
flowTaskVo.setBusinessId(instance.getBusinessId());
|
||||||
//设置按钮权限
|
//设置按钮权限
|
||||||
FlowNode flowNode = getByNodeCode(flowTaskVo.getNodeCode(), instance.getDefinitionId());
|
FlowNode flowNode = getByNodeCode(flowTaskVo.getNodeCode(), instance.getDefinitionId());
|
||||||
if (ObjectUtil.isNotNull(flowNode)) {
|
if (ObjectUtil.isNull(flowNode)) {
|
||||||
|
throw new NullPointerException("当前【" + flowTaskVo.getNodeCode() + "】节点编码不存在");
|
||||||
|
}
|
||||||
flowTaskVo.setButtonList(flowTaskVo.getButtonList(flowNode.getExt()));
|
flowTaskVo.setButtonList(flowTaskVo.getButtonList(flowNode.getExt()));
|
||||||
flowTaskVo.setNodeRatio(flowNode.getNodeRatio());
|
flowTaskVo.setNodeRatio(flowNode.getNodeRatio());
|
||||||
}
|
flowTaskVo.setApplyNode(flowNode.getNodeCode().equals(WorkflowUtils.applyNodeCode(task.getDefinitionId())));
|
||||||
return flowTaskVo;
|
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查询任务
|
* 按照任务id查询任务
|
||||||
*
|
*
|
||||||
@ -580,10 +620,11 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Long taskId = bo.getTaskId();
|
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 ("addSignature".equals(taskOperation) || "reductionSignature".equals(taskOperation)) {
|
||||||
if (flowTaskVo.getNodeRatio().compareTo(BigDecimal.ZERO) == 0) {
|
if (flowNode.getNodeRatio().compareTo(BigDecimal.ZERO) == 0) {
|
||||||
throw new ServiceException(flowTaskVo.getNodeName() + "不是会签节点!");
|
throw new ServiceException(task.getNodeName() + "不是会签节点!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 设置任务状态并执行对应的任务操作
|
// 设置任务状态并执行对应的任务操作
|
||||||
|
Loading…
x
Reference in New Issue
Block a user