修改 BPM流程 连续两次自动审批异常情况,

因事务之间调用导致异常,另起线程执行自动审批方法。
This commit is contained in:
furongxin 2024-09-04 11:02:01 +08:00
parent 9bae873382
commit 81123dbbea
2 changed files with 11 additions and 9 deletions

View File

@ -771,12 +771,12 @@ public class BpmTaskServiceImpl implements BpmTaskService {
// 如果任务拓展表已经是完成的状态则跳过 // 如果任务拓展表已经是完成的状态则跳过
BpmTaskExtDO taskExt = taskExtMapper.selectByTaskId(taskId); BpmTaskExtDO taskExt = taskExtMapper.selectByTaskId(taskId);
if (taskExt == null) { if (taskExt == null) {
log.error("[updateTaskExtCancel][taskId({}) 查找不到对应的记录,可能存在问题]", taskId); log.warn("[updateTaskExtCancel][taskId({}) 查找不到对应的记录,可能存在问题]", taskId);
return; return;
} }
// 如果已经是最终的结果则跳过 // 如果已经是最终的结果则跳过
if (BpmProcessInstanceResultEnum.isEndResult(taskExt.getResult())) { if (BpmProcessInstanceResultEnum.isEndResult(taskExt.getResult())) {
log.error("[updateTaskExtCancel][taskId({}) 处于结果({}),无需进行更新]", taskId, taskExt.getResult()); log.info("[updateTaskExtCancel][taskId({}) 处于结果({}),无需进行更新]", taskId, taskExt.getResult());
return; return;
} }
@ -791,9 +791,10 @@ public class BpmTaskServiceImpl implements BpmTaskService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateTaskExtAssign(Task task) { public void updateTaskExtAssign(Task task) {
// BpmTaskExtDO taskExtDO =
// new BpmTaskExtDO().setAssigneeUserId(NumberUtils.parseLong(task.getAssignee())).setTaskId(task.getId()); BpmTaskExtDO taskExtDO =
// taskExtMapper.updateByTaskId(taskExtDO); new BpmTaskExtDO().setAssigneeUserId(NumberUtils.parseLong(task.getAssignee())).setTaskId(task.getId());
taskExtMapper.updateByTaskId(taskExtDO);
// 发送通知在事务提交时批量执行操作所以直接查询会无法查询到 ProcessInstance所以这里是通过监听事务的提交来实现 // 发送通知在事务提交时批量执行操作所以直接查询会无法查询到 ProcessInstance所以这里是通过监听事务的提交来实现
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@ -820,7 +821,6 @@ public class BpmTaskServiceImpl implements BpmTaskService {
if(TransactionSynchronization.STATUS_COMMITTED == status){ if(TransactionSynchronization.STATUS_COMMITTED == status){
// ProcessInstance processInstance = processInstanceService.getProcessInstance(task.getProcessInstanceId());
BpmProcessInstanceExtDO processInstance = processInstanceService.getProcessInstanceDO(task.getProcessInstanceId()); BpmProcessInstanceExtDO processInstance = processInstanceService.getProcessInstanceDO(task.getProcessInstanceId());
// 如果当前审批人是流程发起人 // 如果当前审批人是流程发起人
@ -830,8 +830,9 @@ public class BpmTaskServiceImpl implements BpmTaskService {
BpmTaskApproveReqVO reqVO = new BpmTaskApproveReqVO(); BpmTaskApproveReqVO reqVO = new BpmTaskApproveReqVO();
reqVO.setId(task.getId()); reqVO.setId(task.getId());
reqVO.setReason(BpmConstants.AUTO_APPRAVAL); reqVO.setReason(BpmConstants.AUTO_APPRAVAL);
// 另起线程处理 任务通过 避免事务之间重复调用异常
new Thread(() -> approveTask(Long.valueOf(task.getAssignee()), reqVO)).start();
approveTask(Long.valueOf(task.getAssignee()), reqVO);
} else { } else {
// 判断不是加签状态的流程 // 判断不是加签状态的流程
@ -853,7 +854,8 @@ public class BpmTaskServiceImpl implements BpmTaskService {
BpmTaskApproveReqVO reqVO = new BpmTaskApproveReqVO(); BpmTaskApproveReqVO reqVO = new BpmTaskApproveReqVO();
reqVO.setId(task.getId()); reqVO.setId(task.getId());
reqVO.setReason(BpmConstants.AUTO_APPRAVAL); reqVO.setReason(BpmConstants.AUTO_APPRAVAL);
approveTask(Long.valueOf(task.getAssignee()), reqVO); // 另起线程处理 任务通过 避免事务之间重复调用异常
new Thread(() -> approveTask(Long.valueOf(task.getAssignee()), reqVO)).start();
} }
} }
} }