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.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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
@ -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());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取办理人
|
* 获取办理人
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user