【缺陷修复】 当有修复连续自动通过节点,只有第一个节点自动通过

This commit is contained in:
jason 2024-12-13 22:04:28 +08:00
parent f6f46ada6c
commit 21c44a9b5e
1 changed files with 22 additions and 8 deletions

View File

@ -1047,10 +1047,14 @@ public class BpmTaskServiceImpl implements BpmTaskService {
public void afterCompletion(int transactionStatus) {
// 特殊情况部分情况下TransactionSynchronizationManager 注册 afterCommit 监听时不会被调用但是 afterCompletion 可以
// 例如说第一个 task 就是配置自动通过或者自动拒绝
if (ObjectUtil.notEqual(transactionStatus, TransactionSynchronization.STATUS_COMMITTED)) {
if (ObjectUtil.equal(transactionStatus, TransactionSynchronization.STATUS_ROLLED_BACK)) {
return;
}
// 特殊情况第一个 task 自动通过第二个任务创建事件时 transactionStatus 会为 STATUS_UNKNOWN不知道啥原因
if (ObjectUtil.equal(transactionStatus, TransactionSynchronization.STATUS_UNKNOWN)
&& getTask(task.getId()) == null) {
return;
}
// TODO 芋艿可以后续优化成 getSelf();
// 特殊情况一人工审核审批人为空根据配置是否要自动通过自动拒绝
if (ObjectUtil.equal(approveType, BpmUserTaskApproveTypeEnum.USER.getType())) {
// 如果有审批人或者拥有人则说明不满足情况一不自动通过不自动拒绝
@ -1058,19 +1062,19 @@ public class BpmTaskServiceImpl implements BpmTaskService {
return;
}
if (ObjectUtil.equal(assignEmptyHandlerType, BpmUserTaskAssignEmptyHandlerTypeEnum.APPROVE.getType())) {
SpringUtil.getBean(BpmTaskService.class).approveTask(null, new BpmTaskApproveReqVO()
getSelf().approveTask(null, new BpmTaskApproveReqVO()
.setId(task.getId()).setReason(BpmReasonEnum.ASSIGN_EMPTY_APPROVE.getReason()));
} else if (ObjectUtil.equal(assignEmptyHandlerType, BpmUserTaskAssignEmptyHandlerTypeEnum.REJECT.getType())) {
SpringUtil.getBean(BpmTaskService.class).rejectTask(null, new BpmTaskRejectReqVO()
getSelf().rejectTask(null, new BpmTaskRejectReqVO()
.setId(task.getId()).setReason(BpmReasonEnum.ASSIGN_EMPTY_REJECT.getReason()));
}
// 特殊情况二自动审核审批类型为自动通过不通过
} else {
if (ObjectUtil.equal(approveType, BpmUserTaskApproveTypeEnum.AUTO_APPROVE.getType())) {
SpringUtil.getBean(BpmTaskService.class).approveTask(null, new BpmTaskApproveReqVO()
getSelf().approveTask(null, new BpmTaskApproveReqVO()
.setId(task.getId()).setReason(BpmReasonEnum.APPROVE_TYPE_AUTO_APPROVE.getReason()));
} else if (ObjectUtil.equal(approveType, BpmUserTaskApproveTypeEnum.AUTO_REJECT.getType())) {
SpringUtil.getBean(BpmTaskService.class).rejectTask(null, new BpmTaskRejectReqVO()
getSelf().rejectTask(null, new BpmTaskRejectReqVO()
.setId(task.getId()).setReason(BpmReasonEnum.APPROVE_TYPE_AUTO_REJECT.getReason()));
}
}
@ -1108,9 +1112,19 @@ public class BpmTaskServiceImpl implements BpmTaskService {
public void processTaskAssigned(Task task) {
// 发送通知在事务提交时批量执行操作所以直接查询会无法查询到 ProcessInstance所以这里是通过监听事务的提交来实现
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
// 特殊情况部分情况下TransactionSynchronizationManager 注册 afterCommit 监听时不会被调用但是 afterCompletion 可以
// 例如说第一个 task 就是配置自动通过或者自动拒绝
@Override
public void afterCommit() {
public void afterCompletion(int transactionStatus) {
// 回滚情况直接返回
if (ObjectUtil.equal(transactionStatus, TransactionSynchronization.STATUS_ROLLED_BACK)) {
return;
}
// 特殊情况第一个 task 自动通过第二个任务设置审批人时 transactionStatus 会为 STATUS_UNKNOWN不知道啥原因
if (ObjectUtil.equal(transactionStatus, TransactionSynchronization.STATUS_UNKNOWN)
&& getTask(task.getId()) == null) {
return;
}
if (StrUtil.isEmpty(task.getAssignee())) {
log.error("[processTaskAssigned][taskId({}) 没有分配到负责人]", task.getId());
return;