BPM:完善 task 委托的实现

This commit is contained in:
YunaiV 2024-03-18 19:24:07 +08:00
parent c4688d887c
commit b2b2b497b1
4 changed files with 29 additions and 36 deletions

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.bpm.enums.task; package cn.iocoder.yudao.module.bpm.enums.task;
import cn.hutool.core.util.StrUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@ -15,10 +16,11 @@ public enum BpmCommentTypeEnum {
APPROVE("1", "审批通过", ""), // 理由直接使用用户的评论 APPROVE("1", "审批通过", ""), // 理由直接使用用户的评论
REJECT("2", "不通过", ""), REJECT("2", "不通过", ""),
CANCEL("3", "已取消", ""), CANCEL("3", "已取消", ""),
BACK("4", "退回", ""), // 理由直接使用用户的评论 BACK("4", "退回", "{}"), // 直接使用用户填写的原因
DELEGATE("5", "委派", ""), DELEGATE_START("5", "委派发起", "[{}]将任务委派给[{}],委派理由为:{}"),
ADD_SIGN("6", "加签", "[{}]{}给了[{}],理由为:{}"), DELEGATE_END("6", "委派完成", "[{}]将任务委派给[{}],委派理由为:{}"),
SUB_SIGN("7", "减签", "[{}]操作了【减签】,审批人[{}]的任务被取消"), ADD_SIGN("7", "加签", "[{}]{}给了[{}],理由为:{}"),
SUB_SIGN("8", "减签", "[{}]操作了【减签】,审批人[{}]的任务被取消"),
; ;
/** /**
@ -36,4 +38,8 @@ public enum BpmCommentTypeEnum {
*/ */
private final String comment; private final String comment;
public String formatComment(Object... params) {
return StrUtil.format(comment, params);
}
} }

View File

@ -18,9 +18,7 @@ public enum BpmTaskStatustEnum {
REJECT(3, "审批不通过"), REJECT(3, "审批不通过"),
CANCEL(4, "已取消"), CANCEL(4, "已取消"),
// ========== 流程任务独有的状态 ========== RETURN(5, "已退回"),
BACK(5, "已驳回"), // 退回
DELEGATE(6, "委派中"), DELEGATE(6, "委派中"),
/** /**
@ -64,7 +62,7 @@ public enum BpmTaskStatustEnum {
public static boolean isEndStatus(Integer status) { public static boolean isEndStatus(Integer status) {
return ObjectUtils.equalsAny(status, return ObjectUtils.equalsAny(status,
APPROVE.getStatus(), REJECT.getStatus(), CANCEL.getStatus(), APPROVE.getStatus(), REJECT.getStatus(), CANCEL.getStatus(),
BACK.getStatus(), APPROVING.getStatus()); RETURN.getStatus(), APPROVING.getStatus());
} }
} }

View File

@ -1,10 +1,9 @@
package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Schema(description = "管理后台 - 委派流程任务的 Request VO") @Schema(description = "管理后台 - 委派流程任务的 Request VO")
@Data @Data

View File

@ -285,21 +285,16 @@ public class BpmTaskServiceImpl implements BpmTaskService {
private void approveDelegateTask(BpmTaskApproveReqVO reqVO, Task task) { private void approveDelegateTask(BpmTaskApproveReqVO reqVO, Task task) {
// 1. 添加审批意见 // 1. 添加审批意见
AdminUserRespDTO currentUser = adminUserApi.getUser(WebFrameworkUtils.getLoginUserId()); AdminUserRespDTO currentUser = adminUserApi.getUser(WebFrameworkUtils.getLoginUserId());
AdminUserRespDTO sourceApproveUser = adminUserApi.getUser(NumberUtils.parseLong(task.getOwner())); AdminUserRespDTO ownerUser = adminUserApi.getUser(NumberUtils.parseLong(task.getOwner())); // 发起委托的用户
Assert.notNull(sourceApproveUser, "委派任务找不到原审批人,需要检查数据"); Assert.notNull(ownerUser, "委派任务找不到原审批人,需要检查数据");
String comment = StrUtil.format("[{}]完成委派任务,任务重新回到[{}]手中,审批意见为:{}", currentUser.getNickname(), taskService.addComment(reqVO.getId(), task.getProcessInstanceId(), BpmCommentTypeEnum.DELEGATE_END.getType(),
sourceApproveUser.getNickname(), reqVO.getReason()); BpmCommentTypeEnum.DELEGATE_END.formatComment(currentUser.getNickname(), ownerUser.getNickname(), reqVO.getReason()));
taskService.addComment(reqVO.getId(), task.getProcessInstanceId(),
BpmCommentTypeEnum.DELEGATE.getType().toString(), comment);
// 2.1 调用 resolveTask 完成任务 // 2.1 调用 resolveTask 完成任务
// 底层调用 TaskHelper.changeTaskAssignee(task, task.getOwner()) owner 设置为 assignee // 底层调用 TaskHelper.changeTaskAssignee(task, task.getOwner()) owner 设置为 assignee
taskService.resolveTask(task.getId()); taskService.resolveTask(task.getId());
// 2.2 更新任务拓展表为处理中 // 2.2 更新 task 状态 + 原因
// taskExtMapper.updateByTaskId( updateTaskStatusAndReason(task.getId(), BpmTaskStatustEnum.RUNNING.getStatus(), reqVO.getReason());
// new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.RUNNING.getResult())
// .setReason(reqVO.getReason()));
updateTaskStatus(task.getId(), BpmTaskStatustEnum.RUNNING.getStatus());
} }
@Override @Override
@ -352,8 +347,8 @@ public class BpmTaskServiceImpl implements BpmTaskService {
* @param status 状态 * @param status 状态
* @param reason 理由审批通过审批不通过的理由 * @param reason 理由审批通过审批不通过的理由
*/ */
private void updateTaskStatus(String id, Integer status, String reason) { private void updateTaskStatusAndReason(String id, Integer status, String reason) {
taskService.setVariableLocal(id, BpmConstants.TASK_VARIABLE_STATUS, status); updateTaskStatus(id, status);
taskService.setVariableLocal(id, BpmConstants.TASK_VARIABLE_REASON, reason); taskService.setVariableLocal(id, BpmConstants.TASK_VARIABLE_REASON, reason);
} }
@ -585,10 +580,10 @@ public class BpmTaskServiceImpl implements BpmTaskService {
return; return;
} }
// 2.1 添加评论 // 2.1 添加评论
taskService.addComment(task.getId(), currentTask.getProcessInstanceId(), taskService.addComment(task.getId(), currentTask.getProcessInstanceId(), BpmCommentTypeEnum.BACK.getType(),
BpmCommentTypeEnum.BACK.getType(), reqVO.getReason()); BpmCommentTypeEnum.BACK.formatComment(reqVO.getReason()));
// 2.2 更新 task 状态 + 原因 // 2.2 更新 task 状态 + 原因
updateTaskStatus(task.getId(), BpmTaskStatustEnum.BACK.getStatus(), reqVO.getReason()); updateTaskStatusAndReason(task.getId(), BpmTaskStatustEnum.RETURN.getStatus(), reqVO.getReason());
}); });
// 3. 执行驳回 // 3. 执行驳回
@ -602,6 +597,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void delegateTask(Long userId, BpmTaskDelegateReqVO reqVO) { public void delegateTask(Long userId, BpmTaskDelegateReqVO reqVO) {
String taskId = reqVO.getId();
// 1.1 校验任务 // 1.1 校验任务
Task task = validateTaskCanDelegate(userId, reqVO); Task task = validateTaskCanDelegate(userId, reqVO);
// 1.2 校验目标用户存在 // 1.2 校验目标用户存在
@ -612,21 +608,15 @@ public class BpmTaskServiceImpl implements BpmTaskService {
// 2. 添加审批意见 // 2. 添加审批意见
AdminUserRespDTO currentUser = adminUserApi.getUser(userId); AdminUserRespDTO currentUser = adminUserApi.getUser(userId);
String comment = StrUtil.format("[{}]将任务委派给[{}],委派理由为:{}", currentUser.getNickname(), taskService.addComment(taskId, task.getProcessInstanceId(), BpmCommentTypeEnum.DELEGATE_START.getType(),
delegateUser.getNickname(), reqVO.getReason()); BpmCommentTypeEnum.DELEGATE_START.formatComment(currentUser.getNickname(), delegateUser.getNickname(), reqVO.getReason()));
String taskId = reqVO.getId();
taskService.addComment(taskId, task.getProcessInstanceId(),
BpmCommentTypeEnum.DELEGATE.getType().toString(), comment);
// 3.1 设置任务所有人 (owner) 为原任务的处理人 (assignee) // 3.1 设置任务所有人 (owner) 为原任务的处理人 (assignee)
taskService.setOwner(taskId, task.getAssignee()); taskService.setOwner(taskId, task.getAssignee());
// 3.2 执行委派将任务委派给 receiveId // 3.2 执行委派将任务委派给 receiveId
taskService.delegateTask(taskId, reqVO.getDelegateUserId().toString()); taskService.delegateTask(taskId, reqVO.getDelegateUserId().toString());
// 3.3 更新任务拓展表为委派 // 3.3 更新 task 状态 + 原因
// taskExtMapper.updateByTaskId( updateTaskStatusAndReason(taskId, BpmTaskStatustEnum.DELEGATE.getStatus(), reqVO.getReason());
// new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.DELEGATE.getResult())
// .setReason(reqVO.getReason()));
updateTaskStatus(taskId, BpmTaskStatustEnum.DELEGATE.getStatus());
} }
/** /**