Commit f088fdff84ca3eff266e034d63b13d1f7df5e6ec
1 parent
8649b285
code review:委托逻辑
Showing
6 changed files
with
70 additions
and
74 deletions
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java
| @@ -43,15 +43,13 @@ public interface ErrorCodeConstants { | @@ -43,15 +43,13 @@ public interface ErrorCodeConstants { | ||
| 43 | ErrorCode PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF = new ErrorCode(1_009_004_002, "流程取消失败,该流程不是你发起的"); | 43 | ErrorCode PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF = new ErrorCode(1_009_004_002, "流程取消失败,该流程不是你发起的"); |
| 44 | 44 | ||
| 45 | // ========== 流程任务 1-009-005-000 ========== | 45 | // ========== 流程任务 1-009-005-000 ========== |
| 46 | - ErrorCode TASK_COMPLETE_FAIL_NOT_EXISTS = new ErrorCode(1_009_005_000, "审批任务失败,原因:该任务不处于未审批"); | ||
| 47 | - ErrorCode TASK_COMPLETE_FAIL_ASSIGN_NOT_SELF = new ErrorCode(1_009_005_001, "审批任务失败,原因:该任务的审批人不是你"); | 46 | + ErrorCode TASK_OPERATE_FAIL_ASSIGN_NOT_SELF = new ErrorCode(1_009_005_001, "操作失败,原因:该任务的审批人不是你"); |
| 48 | ErrorCode TASK_NOT_EXISTS = new ErrorCode(1_009_005_002, "流程任务不存在"); | 47 | ErrorCode TASK_NOT_EXISTS = new ErrorCode(1_009_005_002, "流程任务不存在"); |
| 49 | ErrorCode TASK_IS_PENDING = new ErrorCode(1_009_005_003, "当前任务处于挂起状态,不能操作"); | 48 | ErrorCode TASK_IS_PENDING = new ErrorCode(1_009_005_003, "当前任务处于挂起状态,不能操作"); |
| 50 | ErrorCode TASK_TARGET_NODE_NOT_EXISTS = new ErrorCode(1_009_005_004, " 目标节点不存在"); | 49 | ErrorCode TASK_TARGET_NODE_NOT_EXISTS = new ErrorCode(1_009_005_004, " 目标节点不存在"); |
| 51 | - ErrorCode TASK_RETURN_FAIL_NO_RETURN_TASK = new ErrorCode(1_009_005_005, "回退任务失败,选择回退的节点没有需要回滚的任务!请重新选择其他任务节点"); | ||
| 52 | ErrorCode TASK_RETURN_FAIL_SOURCE_TARGET_ERROR = new ErrorCode(1_009_005_006, "回退任务失败,目标节点是在并行网关上或非同一路线上,不可跳转"); | 50 | ErrorCode TASK_RETURN_FAIL_SOURCE_TARGET_ERROR = new ErrorCode(1_009_005_006, "回退任务失败,目标节点是在并行网关上或非同一路线上,不可跳转"); |
| 53 | - ErrorCode TASK_DELEGATE_USER_REPEAT = new ErrorCode(1_009_005_007, "任务委派失败,委派人和当前审批人为同一人"); | ||
| 54 | - ErrorCode TASK_DELEGATE_USER_NULL = new ErrorCode(1_009_005_008, "任务委派失败,被委派人不存在"); | 51 | + ErrorCode TASK_DELEGATE_FAIL_USER_REPEAT = new ErrorCode(1_009_005_007, "任务委派失败,委派人和当前审批人为同一人"); |
| 52 | + ErrorCode TASK_DELEGATE_FAIL_USER_NOT_EXISTS = new ErrorCode(1_009_005_008, "任务委派失败,被委派人不存在"); | ||
| 55 | 53 | ||
| 56 | // ========== 流程任务分配规则 1-009-006-000 ========== | 54 | // ========== 流程任务分配规则 1-009-006-000 ========== |
| 57 | ErrorCode TASK_ASSIGN_RULE_EXISTS = new ErrorCode(1_009_006_000, "流程({}) 的任务({}) 已经存在分配规则"); | 55 | ErrorCode TASK_ASSIGN_RULE_EXISTS = new ErrorCode(1_009_006_000, "流程({}) 的任务({}) 已经存在分配规则"); |
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceResultEnum.java
| @@ -20,8 +20,7 @@ public enum BpmProcessInstanceResultEnum { | @@ -20,8 +20,7 @@ public enum BpmProcessInstanceResultEnum { | ||
| 20 | 20 | ||
| 21 | // ========== 流程任务独有的状态 ========== | 21 | // ========== 流程任务独有的状态 ========== |
| 22 | 22 | ||
| 23 | - BACK(5, "退回/驳回"), | ||
| 24 | - | 23 | + BACK(5, "驳回"), // 退回 |
| 25 | DELEGATE(6, "委派"); | 24 | DELEGATE(6, "委派"); |
| 26 | 25 | ||
| 27 | /** | 26 | /** |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java
| @@ -87,14 +87,15 @@ public class BpmTaskController { | @@ -87,14 +87,15 @@ public class BpmTaskController { | ||
| 87 | @Operation(summary = "回退任务", description = "用于【流程详情】的【回退】按钮") | 87 | @Operation(summary = "回退任务", description = "用于【流程详情】的【回退】按钮") |
| 88 | @PreAuthorize("@ss.hasPermission('bpm:task:update')") | 88 | @PreAuthorize("@ss.hasPermission('bpm:task:update')") |
| 89 | public CommonResult<Boolean> returnTask(@Valid @RequestBody BpmTaskReturnReqVO reqVO) { | 89 | public CommonResult<Boolean> returnTask(@Valid @RequestBody BpmTaskReturnReqVO reqVO) { |
| 90 | - taskService.returnTask(reqVO); | 90 | + taskService.returnTask(getLoginUserId(), reqVO); |
| 91 | return success(true); | 91 | return success(true); |
| 92 | } | 92 | } |
| 93 | 93 | ||
| 94 | @PutMapping("/delegate") | 94 | @PutMapping("/delegate") |
| 95 | - @Operation(summary = "委派任务", description = "用于【流程详情】的【委派】按钮,和向前加签有点像,和向前加签的唯一的区别是没有单独创立任务") | ||
| 96 | - @PreAuthorize("@ss.hasPermission('bpm:task:delegate')") | 95 | + @Operation(summary = "委派任务", description = "用于【流程详情】的【委派】按钮。和向前【加签】有点像,唯一区别是【委托】没有单独创立任务") |
| 96 | + @PreAuthorize("@ss.hasPermission('bpm:task:update')") | ||
| 97 | public CommonResult<Boolean> delegateTask(@Valid @RequestBody BpmTaskDelegateReqVO reqVO) { | 97 | public CommonResult<Boolean> delegateTask(@Valid @RequestBody BpmTaskDelegateReqVO reqVO) { |
| 98 | + // TODO @海:, 后面要有空格 | ||
| 98 | taskService.delegateTask(reqVO,getLoginUserId()); | 99 | taskService.delegateTask(reqVO,getLoginUserId()); |
| 99 | return success(true); | 100 | return success(true); |
| 100 | } | 101 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskDelegateReqVO.java
| @@ -14,11 +14,12 @@ public class BpmTaskDelegateReqVO { | @@ -14,11 +14,12 @@ public class BpmTaskDelegateReqVO { | ||
| 14 | @NotEmpty(message = "任务编号不能为空") | 14 | @NotEmpty(message = "任务编号不能为空") |
| 15 | private String id; | 15 | private String id; |
| 16 | 16 | ||
| 17 | - @Schema(description = "被委派人ID", requiredMode = Schema.RequiredMode.REQUIRED,example = "1") | ||
| 18 | - @NotNull(message = "被委派人ID不能为空") | 17 | + @Schema(description = "被委派人 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| 18 | + @NotNull(message = "被委派人 ID 不能为空") | ||
| 19 | private Long delegateUserId; | 19 | private Long delegateUserId; |
| 20 | 20 | ||
| 21 | - @Schema(description = "委派原因", requiredMode = Schema.RequiredMode.REQUIRED,example = "做不了决定,需要你先帮忙瞅瞅") | 21 | + @Schema(description = "委派原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "做不了决定,需要你先帮忙瞅瞅") |
| 22 | @NotEmpty(message = "委派原因不能为空") | 22 | @NotEmpty(message = "委派原因不能为空") |
| 23 | private String reason; | 23 | private String reason; |
| 24 | + | ||
| 24 | } | 25 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java
| @@ -133,15 +133,18 @@ public interface BpmTaskService { | @@ -133,15 +133,18 @@ public interface BpmTaskService { | ||
| 133 | /** | 133 | /** |
| 134 | * 将任务回退到指定的 targetDefinitionKey 位置 | 134 | * 将任务回退到指定的 targetDefinitionKey 位置 |
| 135 | * | 135 | * |
| 136 | + * @param userId 用户编号 | ||
| 136 | * @param reqVO 回退的任务key和当前所在的任务ID | 137 | * @param reqVO 回退的任务key和当前所在的任务ID |
| 137 | */ | 138 | */ |
| 138 | - void returnTask(BpmTaskReturnReqVO reqVO); | 139 | + void returnTask(Long userId, BpmTaskReturnReqVO reqVO); |
| 139 | 140 | ||
| 141 | + // TODO @海:userId 放前面 | ||
| 140 | /** | 142 | /** |
| 141 | * 将指定任务委派给其他人处理,等接收人处理后再回到原审批人手中审批 | 143 | * 将指定任务委派给其他人处理,等接收人处理后再回到原审批人手中审批 |
| 142 | * | 144 | * |
| 143 | * @param reqVO 被委派人和被委派的任务编号理由参数 | 145 | * @param reqVO 被委派人和被委派的任务编号理由参数 |
| 144 | - * @param userId 委派人ID | 146 | + * @param userId 用户编号 |
| 145 | */ | 147 | */ |
| 146 | void delegateTask(BpmTaskDelegateReqVO reqVO, Long userId); | 148 | void delegateTask(BpmTaskDelegateReqVO reqVO, Long userId); |
| 149 | + | ||
| 147 | } | 150 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
| @@ -189,25 +189,27 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -189,25 +189,27 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 189 | @Override | 189 | @Override |
| 190 | @Transactional(rollbackFor = Exception.class) | 190 | @Transactional(rollbackFor = Exception.class) |
| 191 | public void approveTask(Long userId, @Valid BpmTaskApproveReqVO reqVO) { | 191 | public void approveTask(Long userId, @Valid BpmTaskApproveReqVO reqVO) { |
| 192 | - // 校验任务存在 | ||
| 193 | - Task task = checkTask(userId, reqVO.getId()); | ||
| 194 | - // 校验流程实例存在 | 192 | + // 1.1 校验任务存在 |
| 193 | + Task task = validateTask(userId, reqVO.getId()); | ||
| 194 | + // 1.2 校验流程实例存在 | ||
| 195 | ProcessInstance instance = processInstanceService.getProcessInstance(task.getProcessInstanceId()); | 195 | ProcessInstance instance = processInstanceService.getProcessInstance(task.getProcessInstanceId()); |
| 196 | if (instance == null) { | 196 | if (instance == null) { |
| 197 | throw exception(PROCESS_INSTANCE_NOT_EXISTS); | 197 | throw exception(PROCESS_INSTANCE_NOT_EXISTS); |
| 198 | } | 198 | } |
| 199 | - //被委派的任务,不调用 complete 去完成任务 | 199 | + |
| 200 | + // 情况一:被委派的任务,不调用 complete 去完成任务 | ||
| 200 | if (DelegationState.PENDING.equals(task.getDelegationState())) { | 201 | if (DelegationState.PENDING.equals(task.getDelegationState())) { |
| 201 | - this.approveDelegateTask(reqVO, task); | ||
| 202 | - } else { | ||
| 203 | - // 完成任务,审批通过 | ||
| 204 | - taskService.complete(task.getId(), instance.getProcessVariables()); | ||
| 205 | - | ||
| 206 | - // 更新任务拓展表为通过 | ||
| 207 | - taskExtMapper.updateByTaskId( | ||
| 208 | - new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.APPROVE.getResult()) | ||
| 209 | - .setReason(reqVO.getReason())); | 202 | + approveDelegateTask(reqVO, task); |
| 203 | + return; | ||
| 210 | } | 204 | } |
| 205 | + | ||
| 206 | + // 情况二:自己审批的任务,调用 complete 去完成任务 | ||
| 207 | + // 完成任务,审批通过 | ||
| 208 | + taskService.complete(task.getId(), instance.getProcessVariables()); | ||
| 209 | + // 更新任务拓展表为通过 | ||
| 210 | + taskExtMapper.updateByTaskId( | ||
| 211 | + new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.APPROVE.getResult()) | ||
| 212 | + .setReason(reqVO.getReason())); | ||
| 211 | } | 213 | } |
| 212 | 214 | ||
| 213 | /** | 215 | /** |
| @@ -217,19 +219,19 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -217,19 +219,19 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 217 | * @param task 当前被审批的任务 | 219 | * @param task 当前被审批的任务 |
| 218 | */ | 220 | */ |
| 219 | private void approveDelegateTask(BpmTaskApproveReqVO reqVO, Task task) { | 221 | private void approveDelegateTask(BpmTaskApproveReqVO reqVO, Task task) { |
| 220 | - // 添加审批意见 | 222 | + // 1. 添加审批意见 |
| 221 | AdminUserRespDTO currentUser = adminUserApi.getUser(WebFrameworkUtils.getLoginUserId()); | 223 | AdminUserRespDTO currentUser = adminUserApi.getUser(WebFrameworkUtils.getLoginUserId()); |
| 222 | - //原审批人 | ||
| 223 | AdminUserRespDTO sourceApproveUser = adminUserApi.getUser(NumberUtils.parseLong(task.getOwner())); | 224 | AdminUserRespDTO sourceApproveUser = adminUserApi.getUser(NumberUtils.parseLong(task.getOwner())); |
| 224 | Assert.notNull(sourceApproveUser, "委派任务找不到原审批人,需要检查数据"); | 225 | Assert.notNull(sourceApproveUser, "委派任务找不到原审批人,需要检查数据"); |
| 225 | - //添加审批意见 | ||
| 226 | String comment = StrUtil.format("[{}]完成委派任务,任务重新回到[{}]手中,审批意见为:{}", currentUser.getNickname(), | 226 | String comment = StrUtil.format("[{}]完成委派任务,任务重新回到[{}]手中,审批意见为:{}", currentUser.getNickname(), |
| 227 | sourceApproveUser.getNickname(), reqVO.getReason()); | 227 | sourceApproveUser.getNickname(), reqVO.getReason()); |
| 228 | - taskService.addComment(reqVO.getId(), task.getProcessInstanceId(), BpmProcessInstanceResultEnum.DELEGATE.getResult().toString(), comment); | ||
| 229 | - //调用 resolveTask 完成任务,底层调用 TaskHelper.changeTaskAssignee(task, task.getOwner()); | ||
| 230 | - //将 owner 设置为 assignee | 228 | + taskService.addComment(reqVO.getId(), task.getProcessInstanceId(), |
| 229 | + BpmProcessInstanceResultEnum.DELEGATE.getResult().toString(), comment); | ||
| 230 | + | ||
| 231 | + // 2.1 调用 resolveTask 完成任务。 | ||
| 232 | + // 底层调用 TaskHelper.changeTaskAssignee(task, task.getOwner()):将 owner 设置为 assignee | ||
| 231 | taskService.resolveTask(task.getId()); | 233 | taskService.resolveTask(task.getId()); |
| 232 | - // 更新任务拓展表为【处理中】 | 234 | + // 2.2 更新任务拓展表为【处理中】 |
| 233 | taskExtMapper.updateByTaskId( | 235 | taskExtMapper.updateByTaskId( |
| 234 | new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()) | 236 | new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()) |
| 235 | .setReason(reqVO.getReason())); | 237 | .setReason(reqVO.getReason())); |
| @@ -238,7 +240,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -238,7 +240,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 238 | @Override | 240 | @Override |
| 239 | @Transactional(rollbackFor = Exception.class) | 241 | @Transactional(rollbackFor = Exception.class) |
| 240 | public void rejectTask(Long userId, @Valid BpmTaskRejectReqVO reqVO) { | 242 | public void rejectTask(Long userId, @Valid BpmTaskRejectReqVO reqVO) { |
| 241 | - Task task = checkTask(userId, reqVO.getId()); | 243 | + Task task = validateTask(userId, reqVO.getId()); |
| 242 | // 校验流程实例存在 | 244 | // 校验流程实例存在 |
| 243 | ProcessInstance instance = processInstanceService.getProcessInstance(task.getProcessInstanceId()); | 245 | ProcessInstance instance = processInstanceService.getProcessInstance(task.getProcessInstanceId()); |
| 244 | if (instance == null) { | 246 | if (instance == null) { |
| @@ -257,7 +259,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -257,7 +259,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 257 | @Override | 259 | @Override |
| 258 | public void updateTaskAssignee(Long userId, BpmTaskUpdateAssigneeReqVO reqVO) { | 260 | public void updateTaskAssignee(Long userId, BpmTaskUpdateAssigneeReqVO reqVO) { |
| 259 | // 校验任务存在 | 261 | // 校验任务存在 |
| 260 | - Task task = checkTask(userId, reqVO.getId()); | 262 | + Task task = validateTask(userId, reqVO.getId()); |
| 261 | // 更新负责人 | 263 | // 更新负责人 |
| 262 | updateTaskAssignee(task.getId(), reqVO.getAssigneeUserId()); | 264 | updateTaskAssignee(task.getId(), reqVO.getAssigneeUserId()); |
| 263 | } | 265 | } |
| @@ -273,13 +275,13 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -273,13 +275,13 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 273 | * @param userId 用户 id | 275 | * @param userId 用户 id |
| 274 | * @param taskId task id | 276 | * @param taskId task id |
| 275 | */ | 277 | */ |
| 276 | - private Task checkTask(Long userId, String taskId) { | 278 | + private Task validateTask(Long userId, String taskId) { |
| 277 | Task task = getTask(taskId); | 279 | Task task = getTask(taskId); |
| 278 | if (task == null) { | 280 | if (task == null) { |
| 279 | - throw exception(TASK_COMPLETE_FAIL_NOT_EXISTS); | 281 | + throw exception(TASK_NOT_EXISTS); |
| 280 | } | 282 | } |
| 281 | if (!Objects.equals(userId, NumberUtils.parseLong(task.getAssignee()))) { | 283 | if (!Objects.equals(userId, NumberUtils.parseLong(task.getAssignee()))) { |
| 282 | - throw exception(TASK_COMPLETE_FAIL_ASSIGN_NOT_SELF); | 284 | + throw exception(TASK_OPERATE_FAIL_ASSIGN_NOT_SELF); |
| 283 | } | 285 | } |
| 284 | return task; | 286 | return task; |
| 285 | } | 287 | } |
| @@ -358,24 +360,6 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -358,24 +360,6 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 358 | return task; | 360 | return task; |
| 359 | } | 361 | } |
| 360 | 362 | ||
| 361 | - /** | ||
| 362 | - * 校验任务是否合法 | ||
| 363 | - * | ||
| 364 | - * @param taskId 任务编号 | ||
| 365 | - * @return 任务 | ||
| 366 | - */ | ||
| 367 | - private Task validateTask(String taskId) { | ||
| 368 | - // 当前任务 task | ||
| 369 | - Task task = getTask(taskId); | ||
| 370 | - if (task == null) { | ||
| 371 | - throw exception(TASK_NOT_EXISTS); | ||
| 372 | - } | ||
| 373 | - if (task.isSuspended()) { | ||
| 374 | - throw exception(TASK_IS_PENDING); | ||
| 375 | - } | ||
| 376 | - return task; | ||
| 377 | - } | ||
| 378 | - | ||
| 379 | private HistoricTaskInstance getHistoricTask(String id) { | 363 | private HistoricTaskInstance getHistoricTask(String id) { |
| 380 | return historyService.createHistoricTaskInstanceQuery().taskId(id).singleResult(); | 364 | return historyService.createHistoricTaskInstanceQuery().taskId(id).singleResult(); |
| 381 | } | 365 | } |
| @@ -406,9 +390,12 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -406,9 +390,12 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 406 | 390 | ||
| 407 | @Override | 391 | @Override |
| 408 | @Transactional(rollbackFor = Exception.class) | 392 | @Transactional(rollbackFor = Exception.class) |
| 409 | - public void returnTask(BpmTaskReturnReqVO reqVO) { | 393 | + public void returnTask(Long userId, BpmTaskReturnReqVO reqVO) { |
| 410 | // 1.1 当前任务 task | 394 | // 1.1 当前任务 task |
| 411 | - Task task = validateTask(reqVO.getId()); | 395 | + Task task = validateTask(userId, reqVO.getId()); |
| 396 | + if (task.isSuspended()) { | ||
| 397 | + throw exception(TASK_IS_PENDING); | ||
| 398 | + } | ||
| 412 | // 1.2 校验源头和目标节点的关系,并返回目标元素 | 399 | // 1.2 校验源头和目标节点的关系,并返回目标元素 |
| 413 | FlowElement targetElement = validateTargetTaskCanReturn(task.getTaskDefinitionKey(), reqVO.getTargetDefinitionKey(), task.getProcessDefinitionId()); | 400 | FlowElement targetElement = validateTargetTaskCanReturn(task.getTaskDefinitionKey(), reqVO.getTargetDefinitionKey(), task.getProcessDefinitionId()); |
| 414 | 401 | ||
| @@ -484,24 +471,29 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -484,24 +471,29 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 484 | 471 | ||
| 485 | @Override | 472 | @Override |
| 486 | @Transactional(rollbackFor = Exception.class) | 473 | @Transactional(rollbackFor = Exception.class) |
| 487 | - public void delegateTask(BpmTaskDelegateReqVO reqVO,Long userId) { | ||
| 488 | - // 校验任务 | ||
| 489 | - Task task = this.validateTaskDelegate(reqVO); | ||
| 490 | - // 添加审批意见 | ||
| 491 | - AdminUserRespDTO currentUser = adminUserApi.getUser(userId); | 474 | + public void delegateTask(BpmTaskDelegateReqVO reqVO, Long userId) { |
| 475 | + // 1.1 校验任务 | ||
| 476 | + Task task = validateTaskCanDelegate(userId, reqVO); | ||
| 477 | + // 1.2 校验目标用户存在 | ||
| 492 | AdminUserRespDTO delegateUser = adminUserApi.getUser(reqVO.getDelegateUserId()); | 478 | AdminUserRespDTO delegateUser = adminUserApi.getUser(reqVO.getDelegateUserId()); |
| 493 | if (delegateUser == null) { | 479 | if (delegateUser == null) { |
| 494 | - throw exception(TASK_DELEGATE_USER_NULL); | 480 | + throw exception(TASK_DELEGATE_FAIL_USER_NOT_EXISTS); |
| 495 | } | 481 | } |
| 482 | + | ||
| 483 | + // 2. 添加审批意见 | ||
| 484 | + AdminUserRespDTO currentUser = adminUserApi.getUser(userId); | ||
| 496 | String comment = StrUtil.format("[{}]将任务委派给[{}],委派理由为:{}", currentUser.getNickname(), | 485 | String comment = StrUtil.format("[{}]将任务委派给[{}],委派理由为:{}", currentUser.getNickname(), |
| 497 | delegateUser.getNickname(), reqVO.getReason()); | 486 | delegateUser.getNickname(), reqVO.getReason()); |
| 498 | String taskId = reqVO.getId(); | 487 | String taskId = reqVO.getId(); |
| 499 | - taskService.addComment(taskId, task.getProcessInstanceId(), BpmProcessInstanceResultEnum.DELEGATE.getResult().toString(), comment); | ||
| 500 | - // 设置任务所有人 (owner) 为原任务的处理人 (assignee) | 488 | + // TODO 海:后面改;感觉 comment 应该 type 做个枚举;不和 result 耦合在一起; |
| 489 | + taskService.addComment(taskId, task.getProcessInstanceId(), | ||
| 490 | + BpmProcessInstanceResultEnum.DELEGATE.getResult().toString(), comment); | ||
| 491 | + | ||
| 492 | + // 3.1 设置任务所有人 (owner) 为原任务的处理人 (assignee) | ||
| 501 | taskService.setOwner(taskId, task.getAssignee()); | 493 | taskService.setOwner(taskId, task.getAssignee()); |
| 502 | - // 执行委派,将任务委派给 receiveId | 494 | + // 3.2 执行委派,将任务委派给 receiveId |
| 503 | taskService.delegateTask(taskId, reqVO.getDelegateUserId().toString()); | 495 | taskService.delegateTask(taskId, reqVO.getDelegateUserId().toString()); |
| 504 | - // 更新任务拓展表为【委派】 | 496 | + // 3.3 更新任务拓展表为【委派】 |
| 505 | taskExtMapper.updateByTaskId( | 497 | taskExtMapper.updateByTaskId( |
| 506 | new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.DELEGATE.getResult()) | 498 | new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.DELEGATE.getResult()) |
| 507 | .setReason(reqVO.getReason())); | 499 | .setReason(reqVO.getReason())); |
| @@ -510,16 +502,18 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -510,16 +502,18 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 510 | /** | 502 | /** |
| 511 | * 校验任务委派参数 | 503 | * 校验任务委派参数 |
| 512 | * | 504 | * |
| 505 | + * @param userId 用户编号 | ||
| 513 | * @param reqVO 任务编号,接收人ID | 506 | * @param reqVO 任务编号,接收人ID |
| 514 | * @return 当前任务信息 | 507 | * @return 当前任务信息 |
| 515 | */ | 508 | */ |
| 516 | - private Task validateTaskDelegate(BpmTaskDelegateReqVO reqVO) { | 509 | + private Task validateTaskCanDelegate(Long userId, BpmTaskDelegateReqVO reqVO) { |
| 517 | // 校验任务 | 510 | // 校验任务 |
| 518 | - Task task = checkTask(WebFrameworkUtils.getLoginUserId(), reqVO.getId()); | ||
| 519 | - //校验当前审批人和被委派人不是同一人 | 511 | + Task task = validateTask(userId, reqVO.getId()); |
| 512 | + // 校验当前审批人和被委派人不是同一人 | ||
| 520 | if (task.getAssignee().equals(reqVO.getDelegateUserId().toString())) { | 513 | if (task.getAssignee().equals(reqVO.getDelegateUserId().toString())) { |
| 521 | - throw exception(TASK_DELEGATE_USER_REPEAT); | 514 | + throw exception(TASK_DELEGATE_FAIL_USER_REPEAT); |
| 522 | } | 515 | } |
| 523 | return task; | 516 | return task; |
| 524 | } | 517 | } |
| 518 | + | ||
| 525 | } | 519 | } |