BPM:完善相关的代码注释

This commit is contained in:
YunaiV 2024-03-26 08:38:59 +08:00
parent cc27652f86
commit 3b8dee4963
8 changed files with 31 additions and 29 deletions

View File

@ -11,7 +11,7 @@ import lombok.Getter;
*/ */
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public enum BpmTaskStatustEnum { public enum BpmTaskStatusEnum {
RUNNING(1, "审批中"), RUNNING(1, "审批中"),
APPROVE(2, "审批通过"), APPROVE(2, "审批通过"),

View File

@ -93,7 +93,7 @@ public class BpmTaskController {
@GetMapping("manager-page") @GetMapping("manager-page")
@Operation(summary = "获取全部任务的分页", description = "用于【流程任务】菜单") @Operation(summary = "获取全部任务的分页", description = "用于【流程任务】菜单")
@PreAuthorize("@ss.hasPermission('bpm:task:mananger-query')") @PreAuthorize("@ss.hasPermission('bpm:task:mananger-query')")
public CommonResult<PageResult<BpmTaskRespVO>> getDoneTaskPage(@Valid BpmTaskPageReqVO pageVO) { public CommonResult<PageResult<BpmTaskRespVO>> getTaskManagerPage(@Valid BpmTaskPageReqVO pageVO) {
PageResult<HistoricTaskInstance> pageResult = taskService.getTaskPage(getLoginUserId(), pageVO); PageResult<HistoricTaskInstance> pageResult = taskService.getTaskPage(getLoginUserId(), pageVO);
if (CollUtil.isEmpty(pageResult.getList())) { if (CollUtil.isEmpty(pageResult.getList())) {
return success(PageResult.empty()); return success(PageResult.empty());

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; package cn.iocoder.yudao.module.bpm.dal.dataobject.oa;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatustEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*; import lombok.*;
@ -57,7 +57,7 @@ public class BpmOALeaveDO extends BaseDO {
/** /**
* 审批结果 * 审批结果
* *
* 枚举 {@link BpmTaskStatustEnum} * 枚举 {@link BpmTaskStatusEnum}
* 考虑到简单所以直接复用了 BpmProcessInstanceStatusEnum 枚举也可以自己定义一个枚举哈 * 考虑到简单所以直接复用了 BpmProcessInstanceStatusEnum 枚举也可以自己定义一个枚举哈
*/ */
private Integer status; private Integer status;

View File

@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum; import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum;
import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils; import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
@ -77,6 +78,7 @@ public class BpmTaskCandidateInvoker {
* @param execution 执行任务 * @param execution 执行任务
* @return 用户编号集合 * @return 用户编号集合
*/ */
@DataPermission(enable = false) // 忽略数据权限避免因为过滤导致找不到候选人
public Set<Long> calculateUsers(DelegateExecution execution) { public Set<Long> calculateUsers(DelegateExecution execution) {
Integer strategy = BpmnModelUtils.parseCandidateStrategy(execution.getCurrentFlowElement()); Integer strategy = BpmnModelUtils.parseCandidateStrategy(execution.getCurrentFlowElement());
String param = BpmnModelUtils.parseCandidateParam(execution.getCurrentFlowElement()); String param = BpmnModelUtils.parseCandidateParam(execution.getCurrentFlowElement());

View File

@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeaveCreateReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeavePageReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeavePageReqVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO;
import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOALeaveMapper; import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOALeaveMapper;
import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatustEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -48,7 +48,7 @@ public class BpmOALeaveServiceImpl implements BpmOALeaveService {
// 插入 OA 请假单 // 插入 OA 请假单
long day = LocalDateTimeUtil.between(createReqVO.getStartTime(), createReqVO.getEndTime()).toDays(); long day = LocalDateTimeUtil.between(createReqVO.getStartTime(), createReqVO.getEndTime()).toDays();
BpmOALeaveDO leave = BeanUtils.toBean(createReqVO, BpmOALeaveDO.class) BpmOALeaveDO leave = BeanUtils.toBean(createReqVO, BpmOALeaveDO.class)
.setUserId(userId).setDay(day).setStatus(BpmTaskStatustEnum.RUNNING.getStatus()); .setUserId(userId).setDay(day).setStatus(BpmTaskStatusEnum.RUNNING.getStatus());
leaveMapper.insert(leave); leaveMapper.insert(leave);
// 发起 BPM 流程 // 发起 BPM 流程

View File

@ -17,7 +17,7 @@ import cn.iocoder.yudao.module.bpm.convert.task.BpmTaskConvert;
import cn.iocoder.yudao.module.bpm.enums.task.BpmCommentTypeEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmCommentTypeEnum;
import cn.iocoder.yudao.module.bpm.enums.task.BpmDeleteReasonEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmDeleteReasonEnum;
import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskSignTypeEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskSignTypeEnum;
import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatustEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum;
import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmConstants; import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmConstants;
import cn.iocoder.yudao.module.bpm.service.definition.BpmModelService; import cn.iocoder.yudao.module.bpm.service.definition.BpmModelService;
import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService;
@ -202,7 +202,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
// 情况三审批普通的任务大多数情况下都是这样 // 情况三审批普通的任务大多数情况下都是这样
// 3.1 更新 task 状态原因 // 3.1 更新 task 状态原因
updateTaskStatusAndReason(task.getId(), BpmTaskStatustEnum.APPROVE.getStatus(), reqVO.getReason()); updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.APPROVE.getStatus(), reqVO.getReason());
// 3.2 添加评论 // 3.2 添加评论
taskService.addComment(task.getId(), task.getProcessInstanceId(), BpmCommentTypeEnum.APPROVE.getType(), taskService.addComment(task.getId(), task.getProcessInstanceId(), BpmCommentTypeEnum.APPROVE.getType(),
BpmCommentTypeEnum.APPROVE.formatComment(reqVO.getReason())); BpmCommentTypeEnum.APPROVE.formatComment(reqVO.getReason()));
@ -230,14 +230,14 @@ public class BpmTaskServiceImpl implements BpmTaskService {
*/ */
private void approveAfterSignTask(Task task, BpmTaskApproveReqVO reqVO) { private void approveAfterSignTask(Task task, BpmTaskApproveReqVO reqVO) {
// 更新父 task 状态 + 原因 // 更新父 task 状态 + 原因
updateTaskStatusAndReason(task.getId(), BpmTaskStatustEnum.APPROVING.getStatus(), reqVO.getReason()); updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.APPROVING.getStatus(), reqVO.getReason());
// 2. 激活子任务 // 2. 激活子任务
List<Task> childrenTaskList = getTaskListByParentTaskId(task.getId()); List<Task> childrenTaskList = getTaskListByParentTaskId(task.getId());
for (Task childrenTask : childrenTaskList) { for (Task childrenTask : childrenTaskList) {
taskService.resolveTask(childrenTask.getId()); taskService.resolveTask(childrenTask.getId());
// 更新子 task 状态 // 更新子 task 状态
updateTaskStatus(childrenTask.getId(), BpmTaskStatustEnum.RUNNING.getStatus()); updateTaskStatus(childrenTask.getId(), BpmTaskStatusEnum.RUNNING.getStatus());
} }
} }
@ -261,7 +261,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
// 1.2 只处理加签的父任务 // 1.2 只处理加签的父任务
Task parentTask = validateTaskExist(parentTaskId); Task parentTask = validateTaskExist(parentTaskId);
String scopeType = parentTask.getScopeType(); String scopeType = parentTask.getScopeType();
if (BpmTaskSignTypeEnum.of(scopeType) == null){ if (BpmTaskSignTypeEnum.of(scopeType) == null) {
return; return;
} }
@ -275,17 +275,17 @@ public class BpmTaskServiceImpl implements BpmTaskService {
// 3.1.1 owner 重新赋值给父任务的 assignee这样它就可以被审批 // 3.1.1 owner 重新赋值给父任务的 assignee这样它就可以被审批
taskService.resolveTask(parentTaskId); taskService.resolveTask(parentTaskId);
// 3.1.2 更新流程任务 status // 3.1.2 更新流程任务 status
updateTaskStatus(parentTaskId, BpmTaskStatustEnum.RUNNING.getStatus()); updateTaskStatus(parentTaskId, BpmTaskStatusEnum.RUNNING.getStatus());
// 3.2 情况二处理向向后加签 // 3.2 情况二处理向向后加签
} else if (BpmTaskSignTypeEnum.AFTER.getType().equals(scopeType)) { } else if (BpmTaskSignTypeEnum.AFTER.getType().equals(scopeType)) {
// 只有 parentTask 处于 APPROVING 的情况下才可以继续 complete 完成 // 只有 parentTask 处于 APPROVING 的情况下才可以继续 complete 完成
// 否则一个未审批的 parentTask 任务在加签出来的任务都被减签的情况下就直接完成审批这样会存在问题 // 否则一个未审批的 parentTask 任务在加签出来的任务都被减签的情况下就直接完成审批这样会存在问题
Integer status = (Integer) parentTask.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS); Integer status = (Integer) parentTask.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS);
if (ObjectUtil.notEqual(status, BpmTaskStatustEnum.APPROVING.getStatus())) { if (ObjectUtil.notEqual(status, BpmTaskStatusEnum.APPROVING.getStatus())) {
return; return;
} }
// 3.2.2 完成自己因为它已经没有子任务所以也可以完成 // 3.2.2 完成自己因为它已经没有子任务所以也可以完成
updateTaskStatus(parentTaskId, BpmTaskStatustEnum.APPROVE.getStatus()); updateTaskStatus(parentTaskId, BpmTaskStatusEnum.APPROVE.getStatus());
taskService.complete(parentTaskId); taskService.complete(parentTaskId);
} }
@ -311,7 +311,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
// 底层调用 TaskHelper.changeTaskAssignee(task, task.getOwner()) owner 设置为 assignee // 底层调用 TaskHelper.changeTaskAssignee(task, task.getOwner()) owner 设置为 assignee
taskService.resolveTask(task.getId()); taskService.resolveTask(task.getId());
// 2.2 更新 task 状态 + 原因 // 2.2 更新 task 状态 + 原因
updateTaskStatusAndReason(task.getId(), BpmTaskStatustEnum.RUNNING.getStatus(), reqVO.getReason()); updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.RUNNING.getStatus(), reqVO.getReason());
} }
@Override @Override
@ -326,7 +326,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
} }
// 2.1 更新流程实例为不通过 // 2.1 更新流程实例为不通过
updateTaskStatusAndReason(task.getId(), BpmTaskStatustEnum.REJECT.getStatus(), reqVO.getReason()); updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.REJECT.getStatus(), reqVO.getReason());
// 2.2 添加评论 // 2.2 添加评论
taskService.addComment(task.getId(), task.getProcessInstanceId(), BpmCommentTypeEnum.REJECT.getType(), taskService.addComment(task.getId(), task.getProcessInstanceId(), BpmCommentTypeEnum.REJECT.getType(),
BpmCommentTypeEnum.REJECT.formatComment(reqVO.getReason())); BpmCommentTypeEnum.REJECT.formatComment(reqVO.getReason()));
@ -378,7 +378,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
log.error("[updateTaskStatusWhenCreated][taskId({}) 已经有状态({})]", task.getId(), status); log.error("[updateTaskStatusWhenCreated][taskId({}) 已经有状态({})]", task.getId(), status);
return; return;
} }
updateTaskStatus(task.getId(), BpmTaskStatustEnum.RUNNING.getStatus()); updateTaskStatus(task.getId(), BpmTaskStatusEnum.RUNNING.getStatus());
} }
@Override @Override
@ -392,11 +392,11 @@ public class BpmTaskServiceImpl implements BpmTaskService {
// 2. 更新 task 状态 + 原因 // 2. 更新 task 状态 + 原因
Integer status = (Integer) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS); Integer status = (Integer) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS);
if (BpmTaskStatustEnum.isEndStatus(status)) { if (BpmTaskStatusEnum.isEndStatus(status)) {
log.error("[updateTaskStatusWhenCanceled][taskId({}) 处于结果({}),无需进行更新]", taskId, status); log.error("[updateTaskStatusWhenCanceled][taskId({}) 处于结果({}),无需进行更新]", taskId, status);
return; return;
} }
updateTaskStatusAndReason(taskId, BpmTaskStatustEnum.CANCEL.getStatus(), BpmDeleteReasonEnum.CANCEL_BY_SYSTEM.getReason()); updateTaskStatusAndReason(taskId, BpmTaskStatusEnum.CANCEL.getStatus(), BpmDeleteReasonEnum.CANCEL_BY_SYSTEM.getReason());
// 补充说明由于 Task 被删除成 HistoricTask 无法通过 taskService.addComment 添加理由所以无法存储具体的取消理由 // 补充说明由于 Task 被删除成 HistoricTask 无法通过 taskService.addComment 添加理由所以无法存储具体的取消理由
} }
@ -525,7 +525,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
taskService.addComment(task.getId(), currentTask.getProcessInstanceId(), BpmCommentTypeEnum.RETURN.getType(), taskService.addComment(task.getId(), currentTask.getProcessInstanceId(), BpmCommentTypeEnum.RETURN.getType(),
BpmCommentTypeEnum.RETURN.formatComment(reqVO.getReason())); BpmCommentTypeEnum.RETURN.formatComment(reqVO.getReason()));
// 2.2 更新 task 状态 + 原因 // 2.2 更新 task 状态 + 原因
updateTaskStatusAndReason(task.getId(), BpmTaskStatustEnum.RETURN.getStatus(), reqVO.getReason()); updateTaskStatusAndReason(task.getId(), BpmTaskStatusEnum.RETURN.getStatus(), reqVO.getReason());
}); });
// 3. 执行驳回 // 3. 执行驳回
@ -562,7 +562,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
taskService.delegateTask(taskId, reqVO.getDelegateUserId().toString()); taskService.delegateTask(taskId, reqVO.getDelegateUserId().toString());
// 3.3 更新 task 状态 // 3.3 更新 task 状态
// 为什么不更新原因因为原因目前主要给审批通过不通过时使用 // 为什么不更新原因因为原因目前主要给审批通过不通过时使用
updateTaskStatus(taskId, BpmTaskStatustEnum.DELEGATE.getStatus()); updateTaskStatus(taskId, BpmTaskStatusEnum.DELEGATE.getStatus());
} }
@Override @Override
@ -616,7 +616,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
taskService.saveTask(taskEntity); taskService.saveTask(taskEntity);
// 2.6 更新 task 状态为 WAIT只有在向前加签的时候 // 2.6 更新 task 状态为 WAIT只有在向前加签的时候
if (reqVO.getType().equals(BpmTaskSignTypeEnum.BEFORE.getType())) { if (reqVO.getType().equals(BpmTaskSignTypeEnum.BEFORE.getType())) {
updateTaskStatus(taskEntity.getId(), BpmTaskStatustEnum.WAIT.getStatus()); updateTaskStatus(taskEntity.getId(), BpmTaskStatusEnum.WAIT.getStatus());
} }
// 3. 创建加签任务 // 3. 创建加签任务
@ -703,7 +703,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
// 3. 向后前签设置子任务的状态为 WAIT因为需要等父任务审批完 // 3. 向后前签设置子任务的状态为 WAIT因为需要等父任务审批完
if (BpmTaskSignTypeEnum.AFTER.getType().equals(parentTask.getScopeType())) { if (BpmTaskSignTypeEnum.AFTER.getType().equals(parentTask.getScopeType())) {
updateTaskStatus(task.getId(), BpmTaskStatustEnum.WAIT.getStatus()); updateTaskStatus(task.getId(), BpmTaskStatusEnum.WAIT.getStatus());
} }
} }
@ -727,7 +727,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
childTaskList.add(task); childTaskList.add(task);
// 2.2 更新子任务为已取消 // 2.2 更新子任务为已取消
String cancelReason = StrUtil.format("任务被取消,原因:由于[{}]操作[减签]", cancelUser.getNickname()); String cancelReason = StrUtil.format("任务被取消,原因:由于[{}]操作[减签]", cancelUser.getNickname());
childTaskList.forEach(childTask -> updateTaskStatusAndReason(childTask.getId(), BpmTaskStatustEnum.CANCEL.getStatus(), cancelReason)); childTaskList.forEach(childTask -> updateTaskStatusAndReason(childTask.getId(), BpmTaskStatusEnum.CANCEL.getStatus(), cancelReason));
// 2.2 删除任务和所有子任务 // 2.2 删除任务和所有子任务
taskService.deleteTasks(convertList(childTaskList, Task::getId)); taskService.deleteTasks(convertList(childTaskList, Task::getId));

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.crm.util; package cn.iocoder.yudao.module.crm.util;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatustEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum;
import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum; import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum;
/** /**
@ -17,9 +17,9 @@ public class CrmAuditStatusUtils {
* @param bpmResult BPM 审批结果 * @param bpmResult BPM 审批结果
*/ */
public static Integer convertBpmResultToAuditStatus(Integer bpmResult) { public static Integer convertBpmResultToAuditStatus(Integer bpmResult) {
Integer auditStatus = BpmTaskStatustEnum.APPROVE.getStatus().equals(bpmResult) ? CrmAuditStatusEnum.APPROVE.getStatus() Integer auditStatus = BpmTaskStatusEnum.APPROVE.getStatus().equals(bpmResult) ? CrmAuditStatusEnum.APPROVE.getStatus()
: BpmTaskStatustEnum.REJECT.getStatus().equals(bpmResult) ? CrmAuditStatusEnum.REJECT.getStatus() : BpmTaskStatusEnum.REJECT.getStatus().equals(bpmResult) ? CrmAuditStatusEnum.REJECT.getStatus()
: BpmTaskStatustEnum.CANCEL.getStatus().equals(bpmResult) ? BpmTaskStatustEnum.CANCEL.getStatus() : null; : BpmTaskStatusEnum.CANCEL.getStatus().equals(bpmResult) ? BpmTaskStatusEnum.CANCEL.getStatus() : null;
Assert.notNull(auditStatus, "BPM 审批结果({}) 转换失败", bpmResult); Assert.notNull(auditStatus, "BPM 审批结果({}) 转换失败", bpmResult);
return auditStatus; return auditStatus;
} }

View File

@ -99,7 +99,7 @@ public class AuthController {
// 1.1 获得用户信息 // 1.1 获得用户信息
AdminUserDO user = userService.getUser(getLoginUserId()); AdminUserDO user = userService.getUser(getLoginUserId());
if (user == null) { if (user == null) {
return null; return success(null);
} }
// 1.2 获得角色列表 // 1.2 获得角色列表