update 优化权限办理人获取

This commit is contained in:
AprilWind 2024-12-04 11:49:47 +08:00
parent 4eba739bbd
commit da0d28445c
6 changed files with 56 additions and 56 deletions

View File

@ -12,7 +12,6 @@ import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType; import org.dromara.common.log.enums.BusinessType;
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.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.warm.flow.core.dto.FlowParams; import org.dromara.warm.flow.core.dto.FlowParams;
import org.dromara.warm.flow.core.entity.HisTask; 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.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowTaskVo; import org.dromara.workflow.domain.vo.FlowTaskVo;
import org.dromara.workflow.service.IFlwTaskService; import org.dromara.workflow.service.IFlwTaskService;
import org.dromara.workflow.utils.WorkflowUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -173,9 +171,7 @@ public class FlwTaskController extends BaseController {
@PostMapping("/delegateTask") @PostMapping("/delegateTask")
public R<Void> delegateTask(@Validated({AddGroup.class}) @RequestBody FlowDelegateBo bo) { public R<Void> delegateTask(@Validated({AddGroup.class}) @RequestBody FlowDelegateBo bo) {
FlowParams flowParams = new FlowParams(); FlowParams flowParams = new FlowParams();
flowParams.addHandlers(Collections.singletonList(USER.getCode()+bo.getUserId())); flowParams.addHandlers(bo.getUserIdentifierList());
flowParams.handler(LoginHelper.getUserIdStr());
flowParams.permissionFlag(WorkflowUtils.permissionList());
flowParams.message(bo.getMessage()); flowParams.message(bo.getMessage());
flowParams.hisStatus(TaskStatusEnum.DEPUTE.getStatus()); flowParams.hisStatus(TaskStatusEnum.DEPUTE.getStatus());
return toAjax(taskService.depute(bo.getTaskId(), flowParams)); return toAjax(taskService.depute(bo.getTaskId(), flowParams));
@ -191,9 +187,7 @@ public class FlwTaskController extends BaseController {
@PostMapping("/transferTask") @PostMapping("/transferTask")
public R<Void> transferTask(@Validated({AddGroup.class}) @RequestBody FlowTransferBo bo) { public R<Void> transferTask(@Validated({AddGroup.class}) @RequestBody FlowTransferBo bo) {
FlowParams flowParams = new FlowParams(); FlowParams flowParams = new FlowParams();
flowParams.addHandlers(Collections.singletonList(USER.getCode()+bo.getUserId())); flowParams.addHandlers(bo.getUserIdentifierList());
flowParams.handler(LoginHelper.getUserIdStr());
flowParams.permissionFlag(WorkflowUtils.permissionList());
flowParams.message(bo.getMessage()); flowParams.message(bo.getMessage());
flowParams.hisStatus(TaskStatusEnum.TRANSFER.getStatus()); flowParams.hisStatus(TaskStatusEnum.TRANSFER.getStatus());
return toAjax(taskService.transfer(bo.getTaskId(), flowParams)); return toAjax(taskService.transfer(bo.getTaskId(), flowParams));
@ -209,9 +203,7 @@ public class FlwTaskController extends BaseController {
@PostMapping("/addSignature") @PostMapping("/addSignature")
public R<Void> addSignature(@Validated({AddGroup.class}) @RequestBody AddSignatureBo bo) { public R<Void> addSignature(@Validated({AddGroup.class}) @RequestBody AddSignatureBo bo) {
FlowParams flowParams = new FlowParams(); FlowParams flowParams = new FlowParams();
flowParams.addHandlers(StreamUtils.toList(bo.getUserIds(),u->USER.getCode()+u)); flowParams.addHandlers(bo.getUserIdentifierList());
flowParams.handler(LoginHelper.getUserIdStr());
flowParams.permissionFlag(WorkflowUtils.permissionList());
flowParams.message(bo.getMessage()); flowParams.message(bo.getMessage());
flowParams.hisStatus(TaskStatusEnum.SIGN.getStatus()); flowParams.hisStatus(TaskStatusEnum.SIGN.getStatus());
return toAjax(taskService.addSignature(bo.getTaskId(), flowParams)); 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) { public R<Void> reductionSignature(@Validated({AddGroup.class}) @RequestBody ReductionSignatureBo bo) {
FlowParams flowParams = new FlowParams(); FlowParams flowParams = new FlowParams();
flowParams.reductionHandlers(StreamUtils.toList(bo.getUserIds(),u->USER.getCode()+u)); flowParams.reductionHandlers(StreamUtils.toList(bo.getUserIds(),u->USER.getCode()+u));
flowParams.handler(LoginHelper.getUserIdStr());
flowParams.permissionFlag(WorkflowUtils.permissionList());
flowParams.message(bo.getMessage()); flowParams.message(bo.getMessage());
flowParams.hisStatus(TaskStatusEnum.SIGN_OFF.getStatus()); flowParams.hisStatus(TaskStatusEnum.SIGN_OFF.getStatus());
return toAjax(taskService.reductionSignature(bo.getTaskId(), flowParams)); return toAjax(taskService.reductionSignature(bo.getTaskId(), flowParams));
@ -275,5 +265,4 @@ public class FlwTaskController extends BaseController {
return R.ok(flwTaskService.getBackTaskNode(instanceId)); return R.ok(flwTaskService.getBackTaskNode(instanceId));
} }
} }

View File

@ -2,12 +2,15 @@ package org.dromara.workflow.domain.bo;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; 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; private String message;
/**
* 获取包含用户标识符的列表
* <p>
* 该方法将用户代码 `USER.getCode()` 获取 `userIds` 列表中的每个用户ID拼接
* 然后返回一个新的列表其中每个元素都是用户代码与用户ID的拼接结果
*
* @return 返回一个列表其中每个元素是由用户代码和用户ID拼接而成的字符串
*/
public List<String> getUserIdentifierList() {
return StreamUtils.toList(userIds, userId -> USER.getCode() + userId);
}
} }

View File

@ -6,6 +6,10 @@ import org.dromara.common.core.validate.AddGroup;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; 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; private String message;
/**
* 获取包含用户标识符的列表
* <p>
* 该方法将用户的代码 `USER.getCode()` 获取与当前用户的 ID`userId`进行拼接
* 然后返回一个包含该拼接结果的单一元素列表
*
* @return 返回一个列表列表中包含一个字符串元素该元素是由用户代码和用户ID拼接而成
*/
public List<String> getUserIdentifierList() {
return Collections.singletonList(USER.getCode() + userId);
}
} }

View File

@ -6,6 +6,10 @@ import org.dromara.common.core.validate.AddGroup;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; 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; private String message;
/**
* 获取包含用户标识符的列表
* <p>
* 该方法将用户的代码 `USER.getCode()` 获取与当前用户的 ID`userId`进行拼接
* 然后返回一个包含该拼接结果的单一元素列表
*
* @return 返回一个列表列表中包含一个字符串元素该元素是由用户代码和用户ID拼接而成
*/
public List<String> getUserIdentifierList() {
return Collections.singletonList(USER.getCode() + userId);
}
} }

View File

@ -12,6 +12,7 @@ import org.dromara.common.core.domain.dto.UserDTO;
import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.service.AssigneeService; 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.StreamUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; 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.WfCopy;
import org.dromara.workflow.domain.vo.WfDefinitionConfigVo; import org.dromara.workflow.domain.vo.WfDefinitionConfigVo;
import org.dromara.workflow.handler.FlowProcessEventHandler; import org.dromara.workflow.handler.FlowProcessEventHandler;
import org.dromara.workflow.handler.WorkflowPermissionHandler;
import org.dromara.workflow.mapper.FlwTaskMapper; import org.dromara.workflow.mapper.FlwTaskMapper;
import org.dromara.workflow.service.IFlwInstanceService; import org.dromara.workflow.service.IFlwInstanceService;
import org.dromara.workflow.service.IFlwTaskService; import org.dromara.workflow.service.IFlwTaskService;
@ -109,7 +111,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService {
FlowParams flowParams = new FlowParams(); FlowParams flowParams = new FlowParams();
flowParams.flowCode(wfDefinitionConfigVo.getProcessKey()); flowParams.flowCode(wfDefinitionConfigVo.getProcessKey());
flowParams.variable(startProcessBo.getVariables()); flowParams.variable(startProcessBo.getVariables());
flowParams.handler(userId);
flowParams.flowStatus(BusinessStatusEnum.DRAFT.getStatus()); flowParams.flowStatus(BusinessStatusEnum.DRAFT.getStatus());
Instance instance; Instance instance;
try { try {
@ -160,8 +161,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService {
flowParams.variable(completeTaskBo.getVariables()); flowParams.variable(completeTaskBo.getVariables());
flowParams.skipType(SkipType.PASS.getKey()); flowParams.skipType(SkipType.PASS.getKey());
flowParams.message(completeTaskBo.getMessage()); flowParams.message(completeTaskBo.getMessage());
flowParams.handler(userId);
flowParams.permissionFlag(WorkflowUtils.permissionList());
flowParams.flowStatus(BusinessStatusEnum.WAITING.getStatus()).hisStatus(TaskStatusEnum.PASS.getStatus()); flowParams.flowStatus(BusinessStatusEnum.WAITING.getStatus()).hisStatus(TaskStatusEnum.PASS.getStatus());
// 执行任务跳转并根据返回的处理人设置下一步处理人 // 执行任务跳转并根据返回的处理人设置下一步处理人
setHandler(taskService.skip(taskId, flowParams), flowTask, wfCopyList); 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) { public TableDataInfo<FlowTaskVo> getPageByTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo); QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey()); 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()); queryWrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus());
Page<FlowTaskVo> page = flwTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper); Page<FlowTaskVo> page = flwTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper);
return TableDataInfo.build(page); return TableDataInfo.build(page);
@ -363,9 +362,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService {
} }
flowParams.hisStatus(TaskStatusEnum.BACK.getStatus()); flowParams.hisStatus(TaskStatusEnum.BACK.getStatus());
flowParams.message(bo.getMessage()); flowParams.message(bo.getMessage());
flowParams.handler(userId);
flowParams.nodeCode(bo.getNodeCode()); flowParams.nodeCode(bo.getNodeCode());
flowParams.permissionFlag(WorkflowUtils.permissionList());
Instance instance = taskService.skip(taskId, flowParams); Instance instance = taskService.skip(taskId, flowParams);
setHandler(instance, flowTasks.get(0), null); setHandler(instance, flowTasks.get(0), null);
flowProcessEventHandler.processHandler(definition.getFlowCode(), flowProcessEventHandler.processHandler(definition.getFlowCode(),
@ -409,9 +406,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService {
//流程定义 //流程定义
Definition definition = defService.getById(flowTask.getDefinitionId()); Definition definition = defService.getById(flowTask.getDefinitionId());
FlowParams flowParams = new FlowParams(); FlowParams flowParams = new FlowParams();
flowParams.handler(LoginHelper.getUserIdStr());
flowParams.message(bo.getComment()); flowParams.message(bo.getComment());
flowParams.permissionFlag(WorkflowUtils.permissionList());
flowParams.flowStatus(BusinessStatusEnum.TERMINATION.getStatus()) flowParams.flowStatus(BusinessStatusEnum.TERMINATION.getStatus())
.hisStatus(TaskStatusEnum.TERMINATION.getStatus()); .hisStatus(TaskStatusEnum.TERMINATION.getStatus());
taskService.termination(bo.getTaskId(), flowParams); taskService.termination(bo.getTaskId(), flowParams);

View File

@ -4,17 +4,13 @@ import cn.hutool.core.collection.CollUtil;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.dromara.common.core.domain.dto.UserDTO; 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.core.utils.SpringUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.warm.flow.core.entity.User; import org.dromara.warm.flow.core.entity.User;
import org.dromara.warm.flow.orm.entity.FlowUser; import org.dromara.warm.flow.orm.entity.FlowUser;
import org.dromara.common.core.enums.TaskAssigneeEnum;
import org.dromara.workflow.service.IWfTaskAssigneeService; import org.dromara.workflow.service.IWfTaskAssigneeService;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.dromara.common.core.enums.TaskAssigneeEnum.USER; 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) @NoArgsConstructor(access = AccessLevel.PRIVATE)
public class WorkflowUtils { 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());
}
/** /**
* 获取办理人 * 获取办理人
* *