【代码评审】工作流:审批详情新接口的 review

This commit is contained in:
YunaiV 2024-10-03 11:10:14 +08:00
parent abea0edf23
commit 61549f13c0
11 changed files with 17 additions and 25 deletions

View File

@ -15,6 +15,7 @@ import java.util.Arrays;
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public enum BpmProcessInstanceStatusEnum implements IntArrayValuable { public enum BpmProcessInstanceStatusEnum implements IntArrayValuable {
NOT_START(-1, "未开始"), NOT_START(-1, "未开始"),
RUNNING(1, "审批中"), RUNNING(1, "审批中"),
APPROVE(2, "审批通过"), APPROVE(2, "审批通过"),

View File

@ -11,7 +11,6 @@ import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessI
import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceCopyDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceCopyDO;
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceCopyService; import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceCopyService;
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@ -43,8 +42,6 @@ public class BpmProcessInstanceCopyController {
private BpmProcessInstanceCopyService processInstanceCopyService; private BpmProcessInstanceCopyService processInstanceCopyService;
@Resource @Resource
private BpmProcessInstanceService processInstanceService; private BpmProcessInstanceService processInstanceService;
@Resource
private BpmTaskService taskService;
@Resource @Resource
private AdminUserApi adminUserApi; private AdminUserApi adminUserApi;
@ -60,9 +57,7 @@ public class BpmProcessInstanceCopyController {
return success(new PageResult<>(pageResult.getTotal())); return success(new PageResult<>(pageResult.getTotal()));
} }
// 拼接返回 TODO @芋艿这个 taskName 查询是不是可以不用 保存的时候 taskName 已经存了, review 一下 不知道有什么特殊场景 // 拼接返回
// Map<String, String> taskNameMap = taskService.getTaskNameByTaskIds(
// convertSet(pageResult.getList(), BpmProcessInstanceCopyDO::getTaskId));
Map<String, HistoricProcessInstance> processInstanceMap = processInstanceService.getHistoricProcessInstanceMap( Map<String, HistoricProcessInstance> processInstanceMap = processInstanceService.getHistoricProcessInstanceMap(
convertSet(pageResult.getList(), BpmProcessInstanceCopyDO::getProcessInstanceId)); convertSet(pageResult.getList(), BpmProcessInstanceCopyDO::getProcessInstanceId));
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(pageResult.getList(), Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(pageResult.getList(),
@ -70,7 +65,6 @@ public class BpmProcessInstanceCopyController {
return success(BeanUtils.toBean(pageResult, BpmProcessInstanceCopyRespVO.class, copyVO -> { return success(BeanUtils.toBean(pageResult, BpmProcessInstanceCopyRespVO.class, copyVO -> {
MapUtils.findAndThen(userMap, Long.valueOf(copyVO.getCreator()), user -> copyVO.setCreatorName(user.getNickname())); MapUtils.findAndThen(userMap, Long.valueOf(copyVO.getCreator()), user -> copyVO.setCreatorName(user.getNickname()));
MapUtils.findAndThen(userMap, copyVO.getStartUserId(), user -> copyVO.setStartUserName(user.getNickname())); MapUtils.findAndThen(userMap, copyVO.getStartUserId(), user -> copyVO.setStartUserName(user.getNickname()));
// MapUtils.findAndThen(taskNameMap, copyVO.getTaskId(), copyVO::setTaskName);
MapUtils.findAndThen(processInstanceMap, copyVO.getProcessInstanceId(), MapUtils.findAndThen(processInstanceMap, copyVO.getProcessInstanceId(),
processInstance -> copyVO.setProcessInstanceStartTime(DateUtils.of(processInstance.getStartTime()))); processInstance -> copyVO.setProcessInstanceStartTime(DateUtils.of(processInstance.getStartTime())));
})); }));

View File

@ -42,6 +42,7 @@ public class BpmApprovalDetailRespVO {
private List<ApprovalTaskInfo> tasks; private List<ApprovalTaskInfo> tasks;
@Schema(description = "候选人用户列表") @Schema(description = "候选人用户列表")
// TODO @jasoncandidateUserList => candidateUsers保持和 tasks 的命名风格一致哈
private List<User> candidateUserList; // 用于未运行任务节点 private List<User> candidateUserList; // 用于未运行任务节点
} }

View File

@ -6,9 +6,6 @@ import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.AssertTrue; import jakarta.validation.constraints.AssertTrue;
import lombok.Data; import lombok.Data;
/**
* @author jason
*/
@Schema(description = "管理后台 - 表单字段权限 Request VO") @Schema(description = "管理后台 - 表单字段权限 Request VO")
@Data @Data
public class BpmFormFieldsPermissionReqVO { public class BpmFormFieldsPermissionReqVO {

View File

@ -102,16 +102,19 @@ public class BpmTaskCandidateInvoker {
String param = BpmnModelUtils.parseCandidateParam(execution.getCurrentFlowElement()); String param = BpmnModelUtils.parseCandidateParam(execution.getCurrentFlowElement());
// 1.1 计算任务的候选人 // 1.1 计算任务的候选人
Set<Long> userIds = getCandidateStrategy(strategy).calculateUsers(execution, param); Set<Long> userIds = getCandidateStrategy(strategy).calculateUsers(execution, param);
// 1.2 候选人为空时根据审批人为空的配置补充 removeDisableUsers(userIds);
// 1.2 移除被禁用的用户
removeDisableUsers(userIds);
// 2. 候选人为空时根据审批人为空的配置补充
if (CollUtil.isEmpty(userIds)) { if (CollUtil.isEmpty(userIds)) {
userIds = getCandidateStrategy(BpmTaskCandidateStrategyEnum.ASSIGN_EMPTY.getStrategy()) userIds = getCandidateStrategy(BpmTaskCandidateStrategyEnum.ASSIGN_EMPTY.getStrategy())
.calculateUsers(execution, param); .calculateUsers(execution, param);
// ASSIGN_EMPTY 策略不需要移除被禁用的用户原因是再移除可能会出现更没审批人了
} }
// 1.3 移除发起人的用户
removeStartUserIfSkip(execution, userIds);
// 2. 移除被禁用的用户 TODO @芋艿 移除禁用的用户是否应该放在 1.1 之后 // 3. 移除发起人的用户
// removeDisableUsers(userIds); @芋艿 把这个移到了 BpmTaskCandidateStrategy 下面 看一下是否可以 removeStartUserIfSkip(execution, userIds);
return userIds; return userIds;
} }

View File

@ -61,7 +61,6 @@ public interface BpmTaskCandidateStrategy {
return users; return users;
} }
/** /**
* 基于流程实例获得任务的候选用户们 * 基于流程实例获得任务的候选用户们
* <p> * <p>
@ -79,7 +78,6 @@ public interface BpmTaskCandidateStrategy {
return users; return users;
} }
/** /**
* 移除被禁用的用户 * 移除被禁用的用户
* *
@ -87,7 +85,4 @@ public interface BpmTaskCandidateStrategy {
*/ */
void removeDisableUsers(Set<Long> users); void removeDisableUsers(Set<Long> users);
// TODO @芋艿后续可以抽象一个 calculateUsers(String param)默认 calculateUsers calculateUsers 调用它
// TODO @芋艿 加了 review 一下
} }

View File

@ -38,7 +38,7 @@ public class BpmTaskCandidateAssignEmptyStrategy extends BpmTaskCandidateAbstrac
// 情况一指定人员审批 // 情况一指定人员审批
Integer assignEmptyHandlerType = BpmnModelUtils.parseAssignEmptyHandlerType(execution.getCurrentFlowElement()); Integer assignEmptyHandlerType = BpmnModelUtils.parseAssignEmptyHandlerType(execution.getCurrentFlowElement());
if (Objects.equals(assignEmptyHandlerType, BpmUserTaskAssignEmptyHandlerTypeEnum.ASSIGN_USER.getType())) { if (Objects.equals(assignEmptyHandlerType, BpmUserTaskAssignEmptyHandlerTypeEnum.ASSIGN_USER.getType())) {
HashSet<Long> users = new HashSet<>(BpmnModelUtils.parseAssignEmptyHandlerUserIds(execution.getCurrentFlowElement())); Set<Long> users = new HashSet<>(BpmnModelUtils.parseAssignEmptyHandlerUserIds(execution.getCurrentFlowElement()));
removeDisableUsers(users); removeDisableUsers(users);
return users; return users;
} }

View File

@ -58,6 +58,7 @@ public class BpmTaskCandidateStartUserDeptLeaderMultiStrategy extends BpmTaskCan
return new HashSet<>(); return new HashSet<>();
} }
Set<Long> users = getMultiLevelDeptLeaderIds(toList(dept.getId()), Integer.valueOf(param)); // 参数是部门的层级 Set<Long> users = getMultiLevelDeptLeaderIds(toList(dept.getId()), Integer.valueOf(param)); // 参数是部门的层级
// TODO @jason这里 removeDisableUsers 的原因是啥呀
removeDisableUsers(users); removeDisableUsers(users);
return users; return users;
} }

View File

@ -96,7 +96,7 @@ public interface BpmProcessInstanceService {
/** /**
* 获取审批详情 * 获取审批详情
* <p> * <p>
* 可以是准备发起的流程, 进行中的流程, 已经结束的流程 * 可以是准备发起的流程进行中的流程已经结束的流程
* *
* @param loginUserId 登录人的用户编号 * @param loginUserId 登录人的用户编号
* @param reqVO 请求信息 * @param reqVO 请求信息

View File

@ -27,9 +27,9 @@ public class AlreadyRunApproveNodeRespBO {
private Set<String> runNodeIds; private Set<String> runNodeIds;
/** /**
* 正在运行的节点的审批信息 ( key: activityId. value: 审批信息 ) * 正在运行的节点的审批信息key: activityId, value: 审批信息
* <p> * <p>
* 用于依次审批 需要加上候选人信息 * 用于依次审批需要加上候选人信息
*/ */
private Map<String, ApprovalNodeInfo> runningApprovalNodes; private Map<String, ApprovalNodeInfo> runningApprovalNodes;