/**
* 完成任务
*
* @param command 完成信息
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void complete(CompleteTaskCommand command) {
ProcessTaskDO processTask = this.processTaskMapper.selectUnfinishedByTaskId(command.getTaskId());
if (processTask == null) {
throw new CustomGenericException(ResponseCode.TASK_NOT_FOUND);
}
if (processTask.getFeedback() && StringUtils.isBlank(command.getFeedback())) {
throw new CustomGenericException(ResponseCode.TASK_NEED_FEEDBACK);
}
JSONObject jsonObject = ConcurrentUserService.concurrentUser();
CompletableFuture.runAsync(() -> {
log.info("runAsync线程执行, 线程名:{},jsonObject:{}", Thread.currentThread().getName(), jsonObject);
// 开启事务
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
// 事物隔离级别,开启新事务
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
// 获得事务状态
TransactionStatus status = dataSourceTransactionManager.getTransaction(def);
try {
// 完成任务
if (CollectionUtil.isNotEmpty(command.getVariables())) {
this.taskService.complete(command.getTaskId(), command.getVariables());
} else {
this.taskService.complete(command.getTaskId());
}
processTask.setEndReason("正常完成");
if (processTask.getEndTime() == null) {
processTask.setEndTime(new Date());
}
processTask.setProcessInstanceId(command.getProcessInstanceId());
processTask.setFeedbackComment(command.getFeedback());
processTask.setStatus(ProcessTaskStatus.COMPLETED);
processTask.setExecutionUser(jsonObject.getStr("id"));
processTask.setVariable(JSONUtil.toJsonStr(command.getVariables()));
this.save(processTask);
} catch (Exception e) {
// 事务回滚
dataSourceTransactionManager.rollback(status);
log.error("完成任务时发生异常,入参:{}", JSONUtil.toJsonStr(command), e);
throw new RuntimeException("runAsync线程执行失败", e);
} finally {
// 手动提交
if (status.isNewTransaction() && !status.isCompleted()) {
dataSourceTransactionManager.commit(status);
}
}
});
}
CompletableFuture 手动事务,工作记录
最新推荐文章于 2025-06-30 01:00:00 发布