update 优化权限办理人获取
This commit is contained in:
parent
4eba739bbd
commit
da0d28445c
@ -12,7 +12,6 @@ import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
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.common.web.core.BaseController;
|
||||
import org.dromara.warm.flow.core.dto.FlowParams;
|
||||
import org.dromara.warm.flow.core.entity.HisTask;
|
||||
@ -26,7 +25,6 @@ import org.dromara.workflow.domain.bo.*;
|
||||
import org.dromara.workflow.domain.vo.FlowHisTaskVo;
|
||||
import org.dromara.workflow.domain.vo.FlowTaskVo;
|
||||
import org.dromara.workflow.service.IFlwTaskService;
|
||||
import org.dromara.workflow.utils.WorkflowUtils;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@ -173,9 +171,7 @@ public class FlwTaskController extends BaseController {
|
||||
@PostMapping("/delegateTask")
|
||||
public R<Void> delegateTask(@Validated({AddGroup.class}) @RequestBody FlowDelegateBo bo) {
|
||||
FlowParams flowParams = new FlowParams();
|
||||
flowParams.addHandlers(Collections.singletonList(USER.getCode()+bo.getUserId()));
|
||||
flowParams.handler(LoginHelper.getUserIdStr());
|
||||
flowParams.permissionFlag(WorkflowUtils.permissionList());
|
||||
flowParams.addHandlers(bo.getUserIdentifierList());
|
||||
flowParams.message(bo.getMessage());
|
||||
flowParams.hisStatus(TaskStatusEnum.DEPUTE.getStatus());
|
||||
return toAjax(taskService.depute(bo.getTaskId(), flowParams));
|
||||
@ -191,9 +187,7 @@ public class FlwTaskController extends BaseController {
|
||||
@PostMapping("/transferTask")
|
||||
public R<Void> transferTask(@Validated({AddGroup.class}) @RequestBody FlowTransferBo bo) {
|
||||
FlowParams flowParams = new FlowParams();
|
||||
flowParams.addHandlers(Collections.singletonList(USER.getCode()+bo.getUserId()));
|
||||
flowParams.handler(LoginHelper.getUserIdStr());
|
||||
flowParams.permissionFlag(WorkflowUtils.permissionList());
|
||||
flowParams.addHandlers(bo.getUserIdentifierList());
|
||||
flowParams.message(bo.getMessage());
|
||||
flowParams.hisStatus(TaskStatusEnum.TRANSFER.getStatus());
|
||||
return toAjax(taskService.transfer(bo.getTaskId(), flowParams));
|
||||
@ -209,9 +203,7 @@ public class FlwTaskController extends BaseController {
|
||||
@PostMapping("/addSignature")
|
||||
public R<Void> addSignature(@Validated({AddGroup.class}) @RequestBody AddSignatureBo bo) {
|
||||
FlowParams flowParams = new FlowParams();
|
||||
flowParams.addHandlers(StreamUtils.toList(bo.getUserIds(),u->USER.getCode()+u));
|
||||
flowParams.handler(LoginHelper.getUserIdStr());
|
||||
flowParams.permissionFlag(WorkflowUtils.permissionList());
|
||||
flowParams.addHandlers(bo.getUserIdentifierList());
|
||||
flowParams.message(bo.getMessage());
|
||||
flowParams.hisStatus(TaskStatusEnum.SIGN.getStatus());
|
||||
return toAjax(taskService.addSignature(bo.getTaskId(), flowParams));
|
||||
@ -228,8 +220,6 @@ public class FlwTaskController extends BaseController {
|
||||
public R<Void> reductionSignature(@Validated({AddGroup.class}) @RequestBody ReductionSignatureBo bo) {
|
||||
FlowParams flowParams = new FlowParams();
|
||||
flowParams.reductionHandlers(StreamUtils.toList(bo.getUserIds(),u->USER.getCode()+u));
|
||||
flowParams.handler(LoginHelper.getUserIdStr());
|
||||
flowParams.permissionFlag(WorkflowUtils.permissionList());
|
||||
flowParams.message(bo.getMessage());
|
||||
flowParams.hisStatus(TaskStatusEnum.SIGN_OFF.getStatus());
|
||||
return toAjax(taskService.reductionSignature(bo.getTaskId(), flowParams));
|
||||
@ -275,5 +265,4 @@ public class FlwTaskController extends BaseController {
|
||||
return R.ok(flwTaskService.getBackTaskNode(instanceId));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -2,12 +2,15 @@ package org.dromara.workflow.domain.bo;
|
||||
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
import static org.dromara.common.core.enums.TaskAssigneeEnum.USER;
|
||||
|
||||
/**
|
||||
* 加签请求对象
|
||||
*
|
||||
@ -35,4 +38,17 @@ public class AddSignatureBo implements Serializable {
|
||||
* 意见
|
||||
*/
|
||||
private String message;
|
||||
|
||||
/**
|
||||
* 获取包含用户标识符的列表
|
||||
* <p>
|
||||
* 该方法将用户代码(由 `USER.getCode()` 获取)与 `userIds` 列表中的每个用户ID拼接,
|
||||
* 然后返回一个新的列表,其中每个元素都是用户代码与用户ID的拼接结果
|
||||
*
|
||||
* @return 返回一个列表,其中每个元素是由用户代码和用户ID拼接而成的字符串
|
||||
*/
|
||||
public List<String> getUserIdentifierList() {
|
||||
return StreamUtils.toList(userIds, userId -> USER.getCode() + userId);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -6,6 +6,10 @@ import org.dromara.common.core.validate.AddGroup;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static org.dromara.common.core.enums.TaskAssigneeEnum.USER;
|
||||
|
||||
/**
|
||||
* 委派任务请求对象
|
||||
@ -34,4 +38,17 @@ public class FlowDelegateBo implements Serializable {
|
||||
* 意见
|
||||
*/
|
||||
private String message;
|
||||
|
||||
/**
|
||||
* 获取包含用户标识符的列表
|
||||
* <p>
|
||||
* 该方法将用户的代码(由 `USER.getCode()` 获取)与当前用户的 ID(`userId`)进行拼接,
|
||||
* 然后返回一个包含该拼接结果的单一元素列表
|
||||
*
|
||||
* @return 返回一个列表,列表中包含一个字符串元素,该元素是由用户代码和用户ID拼接而成
|
||||
*/
|
||||
public List<String> getUserIdentifierList() {
|
||||
return Collections.singletonList(USER.getCode() + userId);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -6,6 +6,10 @@ import org.dromara.common.core.validate.AddGroup;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static org.dromara.common.core.enums.TaskAssigneeEnum.USER;
|
||||
|
||||
/**
|
||||
* 终转办务请求对象
|
||||
@ -34,4 +38,17 @@ public class FlowTransferBo implements Serializable {
|
||||
* 意见
|
||||
*/
|
||||
private String message;
|
||||
|
||||
/**
|
||||
* 获取包含用户标识符的列表
|
||||
* <p>
|
||||
* 该方法将用户的代码(由 `USER.getCode()` 获取)与当前用户的 ID(`userId`)进行拼接,
|
||||
* 然后返回一个包含该拼接结果的单一元素列表
|
||||
*
|
||||
* @return 返回一个列表,列表中包含一个字符串元素,该元素是由用户代码和用户ID拼接而成
|
||||
*/
|
||||
public List<String> getUserIdentifierList() {
|
||||
return Collections.singletonList(USER.getCode() + userId);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ import org.dromara.common.core.domain.dto.UserDTO;
|
||||
import org.dromara.common.core.enums.BusinessStatusEnum;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.service.AssigneeService;
|
||||
import org.dromara.common.core.utils.SpringUtils;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
@ -34,6 +35,7 @@ import org.dromara.workflow.domain.vo.FlowTaskVo;
|
||||
import org.dromara.workflow.domain.vo.WfCopy;
|
||||
import org.dromara.workflow.domain.vo.WfDefinitionConfigVo;
|
||||
import org.dromara.workflow.handler.FlowProcessEventHandler;
|
||||
import org.dromara.workflow.handler.WorkflowPermissionHandler;
|
||||
import org.dromara.workflow.mapper.FlwTaskMapper;
|
||||
import org.dromara.workflow.service.IFlwInstanceService;
|
||||
import org.dromara.workflow.service.IFlwTaskService;
|
||||
@ -109,7 +111,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService {
|
||||
FlowParams flowParams = new FlowParams();
|
||||
flowParams.flowCode(wfDefinitionConfigVo.getProcessKey());
|
||||
flowParams.variable(startProcessBo.getVariables());
|
||||
flowParams.handler(userId);
|
||||
flowParams.flowStatus(BusinessStatusEnum.DRAFT.getStatus());
|
||||
Instance instance;
|
||||
try {
|
||||
@ -160,8 +161,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService {
|
||||
flowParams.variable(completeTaskBo.getVariables());
|
||||
flowParams.skipType(SkipType.PASS.getKey());
|
||||
flowParams.message(completeTaskBo.getMessage());
|
||||
flowParams.handler(userId);
|
||||
flowParams.permissionFlag(WorkflowUtils.permissionList());
|
||||
flowParams.flowStatus(BusinessStatusEnum.WAITING.getStatus()).hisStatus(TaskStatusEnum.PASS.getStatus());
|
||||
// 执行任务跳转,并根据返回的处理人设置下一步处理人
|
||||
setHandler(taskService.skip(taskId, flowParams), flowTask, wfCopyList);
|
||||
@ -260,7 +259,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService {
|
||||
public TableDataInfo<FlowTaskVo> getPageByTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
|
||||
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
|
||||
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
|
||||
queryWrapper.in("t.processed_by", WorkflowUtils.permissionList());
|
||||
queryWrapper.in("t.processed_by", SpringUtils.getBean(WorkflowPermissionHandler.class).permissions());
|
||||
queryWrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus());
|
||||
Page<FlowTaskVo> page = flwTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper);
|
||||
return TableDataInfo.build(page);
|
||||
@ -363,9 +362,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService {
|
||||
}
|
||||
flowParams.hisStatus(TaskStatusEnum.BACK.getStatus());
|
||||
flowParams.message(bo.getMessage());
|
||||
flowParams.handler(userId);
|
||||
flowParams.nodeCode(bo.getNodeCode());
|
||||
flowParams.permissionFlag(WorkflowUtils.permissionList());
|
||||
Instance instance = taskService.skip(taskId, flowParams);
|
||||
setHandler(instance, flowTasks.get(0), null);
|
||||
flowProcessEventHandler.processHandler(definition.getFlowCode(),
|
||||
@ -409,9 +406,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService {
|
||||
//流程定义
|
||||
Definition definition = defService.getById(flowTask.getDefinitionId());
|
||||
FlowParams flowParams = new FlowParams();
|
||||
flowParams.handler(LoginHelper.getUserIdStr());
|
||||
flowParams.message(bo.getComment());
|
||||
flowParams.permissionFlag(WorkflowUtils.permissionList());
|
||||
flowParams.flowStatus(BusinessStatusEnum.TERMINATION.getStatus())
|
||||
.hisStatus(TaskStatusEnum.TERMINATION.getStatus());
|
||||
taskService.termination(bo.getTaskId(), flowParams);
|
||||
|
@ -4,17 +4,13 @@ import cn.hutool.core.collection.CollUtil;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.common.core.domain.dto.UserDTO;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.core.utils.SpringUtils;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.warm.flow.core.entity.User;
|
||||
import org.dromara.warm.flow.orm.entity.FlowUser;
|
||||
import org.dromara.common.core.enums.TaskAssigneeEnum;
|
||||
import org.dromara.workflow.service.IWfTaskAssigneeService;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static org.dromara.common.core.enums.TaskAssigneeEnum.USER;
|
||||
|
||||
@ -26,36 +22,6 @@ import static org.dromara.common.core.enums.TaskAssigneeEnum.USER;
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class WorkflowUtils {
|
||||
|
||||
/**
|
||||
* 当前用户所有权限
|
||||
*
|
||||
* @return 权限列表
|
||||
*/
|
||||
public static List<String> permissionList() {
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
Long userId = loginUser.getUserId();
|
||||
Long deptId = loginUser.getDeptId();
|
||||
// 使用一个流来构建权限列表
|
||||
return Stream.of(
|
||||
// 角色权限前缀
|
||||
loginUser.getRoles().stream()
|
||||
.map(role -> TaskAssigneeEnum.ROLE.getCode() + role.getRoleId()),
|
||||
|
||||
// 岗位权限前缀
|
||||
Stream.ofNullable(loginUser.getPosts())
|
||||
.flatMap(Collection::stream)
|
||||
.map(post -> TaskAssigneeEnum.POST.getCode() + post.getPostId()),
|
||||
|
||||
// 用户和部门权限
|
||||
Stream.of(
|
||||
USER.getCode() + userId,
|
||||
TaskAssigneeEnum.DEPT.getCode() + deptId
|
||||
)
|
||||
)
|
||||
.flatMap(stream -> stream)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取办理人
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user