|
@@ -189,25 +189,27 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void approveTask(Long userId, @Valid BpmTaskApproveReqVO reqVO) {
|
|
|
- // 校验任务存在
|
|
|
- Task task = checkTask(userId, reqVO.getId());
|
|
|
- // 校验流程实例存在
|
|
|
+ // 1.1 校验任务存在
|
|
|
+ Task task = validateTask(userId, reqVO.getId());
|
|
|
+ // 1.2 校验流程实例存在
|
|
|
ProcessInstance instance = processInstanceService.getProcessInstance(task.getProcessInstanceId());
|
|
|
if (instance == null) {
|
|
|
throw exception(PROCESS_INSTANCE_NOT_EXISTS);
|
|
|
}
|
|
|
- //被委派的任务,不调用 complete 去完成任务
|
|
|
+
|
|
|
+ // 情况一:被委派的任务,不调用 complete 去完成任务
|
|
|
if (DelegationState.PENDING.equals(task.getDelegationState())) {
|
|
|
- this.approveDelegateTask(reqVO, task);
|
|
|
- } else {
|
|
|
- // 完成任务,审批通过
|
|
|
- taskService.complete(task.getId(), instance.getProcessVariables());
|
|
|
-
|
|
|
- // 更新任务拓展表为通过
|
|
|
- taskExtMapper.updateByTaskId(
|
|
|
- new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.APPROVE.getResult())
|
|
|
- .setReason(reqVO.getReason()));
|
|
|
+ approveDelegateTask(reqVO, task);
|
|
|
+ return;
|
|
|
}
|
|
|
+
|
|
|
+ // 情况二:自己审批的任务,调用 complete 去完成任务
|
|
|
+ // 完成任务,审批通过
|
|
|
+ taskService.complete(task.getId(), instance.getProcessVariables());
|
|
|
+ // 更新任务拓展表为通过
|
|
|
+ taskExtMapper.updateByTaskId(
|
|
|
+ new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.APPROVE.getResult())
|
|
|
+ .setReason(reqVO.getReason()));
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -217,19 +219,19 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
|
|
* @param task 当前被审批的任务
|
|
|
*/
|
|
|
private void approveDelegateTask(BpmTaskApproveReqVO reqVO, Task task) {
|
|
|
- // 添加审批意见
|
|
|
+ // 1. 添加审批意见
|
|
|
AdminUserRespDTO currentUser = adminUserApi.getUser(WebFrameworkUtils.getLoginUserId());
|
|
|
- //原审批人
|
|
|
AdminUserRespDTO sourceApproveUser = adminUserApi.getUser(NumberUtils.parseLong(task.getOwner()));
|
|
|
Assert.notNull(sourceApproveUser, "委派任务找不到原审批人,需要检查数据");
|
|
|
- //添加审批意见
|
|
|
String comment = StrUtil.format("[{}]完成委派任务,任务重新回到[{}]手中,审批意见为:{}", currentUser.getNickname(),
|
|
|
sourceApproveUser.getNickname(), reqVO.getReason());
|
|
|
- taskService.addComment(reqVO.getId(), task.getProcessInstanceId(), BpmProcessInstanceResultEnum.DELEGATE.getResult().toString(), comment);
|
|
|
- //调用 resolveTask 完成任务,底层调用 TaskHelper.changeTaskAssignee(task, task.getOwner());
|
|
|
- //将 owner 设置为 assignee
|
|
|
+ taskService.addComment(reqVO.getId(), task.getProcessInstanceId(),
|
|
|
+ BpmProcessInstanceResultEnum.DELEGATE.getResult().toString(), comment);
|
|
|
+
|
|
|
+ // 2.1 调用 resolveTask 完成任务。
|
|
|
+ // 底层调用 TaskHelper.changeTaskAssignee(task, task.getOwner()):将 owner 设置为 assignee
|
|
|
taskService.resolveTask(task.getId());
|
|
|
- // 更新任务拓展表为【处理中】
|
|
|
+ // 2.2 更新任务拓展表为【处理中】
|
|
|
taskExtMapper.updateByTaskId(
|
|
|
new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.PROCESS.getResult())
|
|
|
.setReason(reqVO.getReason()));
|
|
@@ -238,7 +240,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void rejectTask(Long userId, @Valid BpmTaskRejectReqVO reqVO) {
|
|
|
- Task task = checkTask(userId, reqVO.getId());
|
|
|
+ Task task = validateTask(userId, reqVO.getId());
|
|
|
// 校验流程实例存在
|
|
|
ProcessInstance instance = processInstanceService.getProcessInstance(task.getProcessInstanceId());
|
|
|
if (instance == null) {
|
|
@@ -257,7 +259,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
|
|
@Override
|
|
|
public void updateTaskAssignee(Long userId, BpmTaskUpdateAssigneeReqVO reqVO) {
|
|
|
// 校验任务存在
|
|
|
- Task task = checkTask(userId, reqVO.getId());
|
|
|
+ Task task = validateTask(userId, reqVO.getId());
|
|
|
// 更新负责人
|
|
|
updateTaskAssignee(task.getId(), reqVO.getAssigneeUserId());
|
|
|
}
|
|
@@ -273,13 +275,13 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
|
|
* @param userId 用户 id
|
|
|
* @param taskId task id
|
|
|
*/
|
|
|
- private Task checkTask(Long userId, String taskId) {
|
|
|
+ private Task validateTask(Long userId, String taskId) {
|
|
|
Task task = getTask(taskId);
|
|
|
if (task == null) {
|
|
|
- throw exception(TASK_COMPLETE_FAIL_NOT_EXISTS);
|
|
|
+ throw exception(TASK_NOT_EXISTS);
|
|
|
}
|
|
|
if (!Objects.equals(userId, NumberUtils.parseLong(task.getAssignee()))) {
|
|
|
- throw exception(TASK_COMPLETE_FAIL_ASSIGN_NOT_SELF);
|
|
|
+ throw exception(TASK_OPERATE_FAIL_ASSIGN_NOT_SELF);
|
|
|
}
|
|
|
return task;
|
|
|
}
|
|
@@ -358,24 +360,6 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
|
|
return task;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 校验任务是否合法
|
|
|
- *
|
|
|
- * @param taskId 任务编号
|
|
|
- * @return 任务
|
|
|
- */
|
|
|
- private Task validateTask(String taskId) {
|
|
|
- // 当前任务 task
|
|
|
- Task task = getTask(taskId);
|
|
|
- if (task == null) {
|
|
|
- throw exception(TASK_NOT_EXISTS);
|
|
|
- }
|
|
|
- if (task.isSuspended()) {
|
|
|
- throw exception(TASK_IS_PENDING);
|
|
|
- }
|
|
|
- return task;
|
|
|
- }
|
|
|
-
|
|
|
private HistoricTaskInstance getHistoricTask(String id) {
|
|
|
return historyService.createHistoricTaskInstanceQuery().taskId(id).singleResult();
|
|
|
}
|
|
@@ -406,9 +390,12 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void returnTask(BpmTaskReturnReqVO reqVO) {
|
|
|
+ public void returnTask(Long userId, BpmTaskReturnReqVO reqVO) {
|
|
|
// 1.1 当前任务 task
|
|
|
- Task task = validateTask(reqVO.getId());
|
|
|
+ Task task = validateTask(userId, reqVO.getId());
|
|
|
+ if (task.isSuspended()) {
|
|
|
+ throw exception(TASK_IS_PENDING);
|
|
|
+ }
|
|
|
// 1.2 校验源头和目标节点的关系,并返回目标元素
|
|
|
FlowElement targetElement = validateTargetTaskCanReturn(task.getTaskDefinitionKey(), reqVO.getTargetDefinitionKey(), task.getProcessDefinitionId());
|
|
|
|
|
@@ -484,24 +471,29 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void delegateTask(BpmTaskDelegateReqVO reqVO,Long userId) {
|
|
|
- // 校验任务
|
|
|
- Task task = this.validateTaskDelegate(reqVO);
|
|
|
- // 添加审批意见
|
|
|
- AdminUserRespDTO currentUser = adminUserApi.getUser(userId);
|
|
|
+ public void delegateTask(BpmTaskDelegateReqVO reqVO, Long userId) {
|
|
|
+ // 1.1 校验任务
|
|
|
+ Task task = validateTaskCanDelegate(userId, reqVO);
|
|
|
+ // 1.2 校验目标用户存在
|
|
|
AdminUserRespDTO delegateUser = adminUserApi.getUser(reqVO.getDelegateUserId());
|
|
|
if (delegateUser == null) {
|
|
|
- throw exception(TASK_DELEGATE_USER_NULL);
|
|
|
+ throw exception(TASK_DELEGATE_FAIL_USER_NOT_EXISTS);
|
|
|
}
|
|
|
+
|
|
|
+ // 2. 添加审批意见
|
|
|
+ AdminUserRespDTO currentUser = adminUserApi.getUser(userId);
|
|
|
String comment = StrUtil.format("[{}]将任务委派给[{}],委派理由为:{}", currentUser.getNickname(),
|
|
|
delegateUser.getNickname(), reqVO.getReason());
|
|
|
String taskId = reqVO.getId();
|
|
|
- taskService.addComment(taskId, task.getProcessInstanceId(), BpmProcessInstanceResultEnum.DELEGATE.getResult().toString(), comment);
|
|
|
- // 设置任务所有人 (owner) 为原任务的处理人 (assignee)
|
|
|
+ // TODO 海:后面改;感觉 comment 应该 type 做个枚举;不和 result 耦合在一起;
|
|
|
+ taskService.addComment(taskId, task.getProcessInstanceId(),
|
|
|
+ BpmProcessInstanceResultEnum.DELEGATE.getResult().toString(), comment);
|
|
|
+
|
|
|
+ // 3.1 设置任务所有人 (owner) 为原任务的处理人 (assignee)
|
|
|
taskService.setOwner(taskId, task.getAssignee());
|
|
|
- // 执行委派,将任务委派给 receiveId
|
|
|
+ // 3.2 执行委派,将任务委派给 receiveId
|
|
|
taskService.delegateTask(taskId, reqVO.getDelegateUserId().toString());
|
|
|
- // 更新任务拓展表为【委派】
|
|
|
+ // 3.3 更新任务拓展表为【委派】
|
|
|
taskExtMapper.updateByTaskId(
|
|
|
new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.DELEGATE.getResult())
|
|
|
.setReason(reqVO.getReason()));
|
|
@@ -510,16 +502,18 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
|
|
/**
|
|
|
* 校验任务委派参数
|
|
|
*
|
|
|
+ * @param userId 用户编号
|
|
|
* @param reqVO 任务编号,接收人ID
|
|
|
* @return 当前任务信息
|
|
|
*/
|
|
|
- private Task validateTaskDelegate(BpmTaskDelegateReqVO reqVO) {
|
|
|
+ private Task validateTaskCanDelegate(Long userId, BpmTaskDelegateReqVO reqVO) {
|
|
|
// 校验任务
|
|
|
- Task task = checkTask(WebFrameworkUtils.getLoginUserId(), reqVO.getId());
|
|
|
- //校验当前审批人和被委派人不是同一人
|
|
|
+ Task task = validateTask(userId, reqVO.getId());
|
|
|
+ // 校验当前审批人和被委派人不是同一人
|
|
|
if (task.getAssignee().equals(reqVO.getDelegateUserId().toString())) {
|
|
|
- throw exception(TASK_DELEGATE_USER_REPEAT);
|
|
|
+ throw exception(TASK_DELEGATE_FAIL_USER_REPEAT);
|
|
|
}
|
|
|
return task;
|
|
|
}
|
|
|
+
|
|
|
}
|