update(REQ-2324) - 修复自动过审的逻辑

This commit is contained in:
wangli 2024-06-03 16:00:58 +08:00
parent 9c25847053
commit 335d8f22eb
4 changed files with 22 additions and 29 deletions

View File

@ -1,6 +1,7 @@
package cn.axzo.workflow.core.engine.behavior;
import cn.axzo.workflow.core.engine.event.ExtTaskInstCreateEvent;
import cn.axzo.workflow.core.engine.event.ExtTaskInstUpdateEvent;
import lombok.extern.slf4j.Slf4j;
import org.flowable.bpmn.model.MapExceptionEntry;
import org.flowable.bpmn.model.ServiceTask;
@ -20,6 +21,7 @@ import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import java.util.List;
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.APPROVED;
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCESSING;
/**
* 自定义的服务任务活动行为处理器
@ -60,21 +62,21 @@ public class CustomServiceTaskDelegateExpressionActivityBehavior extends Service
// 添加 taskInst 扩展表数据
FlowableEventDispatcher eventDispatcher = processEngineConfiguration.getEventDispatcher();
eventDispatcher.dispatchEvent(new ExtTaskInstCreateEvent(execution.getProcessInstanceId(),
execution.getCurrentActivityId(), task.getId(), APPROVED),
execution.getCurrentActivityId(), task.getId(), PROCESSING),
processEngineConfiguration.getEngineCfgKey());
super.execute(execution);
}
// @Override
// public void leave(DelegateExecution execution) {
// CommandContext commandContext = CommandContextUtil.getCommandContext();
// ProcessEngineConfigurationImpl processEngineConfiguration =
// CommandContextUtil.getProcessEngineConfiguration(commandContext);
//
// FlowableEventDispatcher eventDispatcher = processEngineConfiguration.getEventDispatcher();
// eventDispatcher.dispatchEvent(new ExtTaskInstUpdateEvent(execution.getProcessInstanceId(),
// execution.getCurrentActivityId(), task.getId(), APPROVED),
// processEngineConfiguration.getEngineCfgKey());
// super.leave(execution);
// }
@Override
public void leave(DelegateExecution execution) {
CommandContext commandContext = CommandContextUtil.getCommandContext();
ProcessEngineConfigurationImpl processEngineConfiguration =
CommandContextUtil.getProcessEngineConfiguration(commandContext);
FlowableEventDispatcher eventDispatcher = processEngineConfiguration.getEventDispatcher();
eventDispatcher.dispatchEvent(new ExtTaskInstUpdateEvent(execution.getProcessInstanceId(),
execution.getCurrentActivityId(), task.getId(), APPROVED),
processEngineConfiguration.getEngineCfgKey());
super.leave(execution);
}
}

View File

@ -88,10 +88,11 @@ public class ExtTaskInstEventListener extends AbstractFlowableEventListener {
}
private void updateExtTaskInst(ExtTaskInstUpdateEvent event) {
// extAxHiTaskInstService.updateByTaskIdAndInstanceId(event.getTaskId(), event.getProcessInstanceId(),
// event.getAssignee(), event.getResultEnum());
// 利用引擎异步任务的重试能力, 去正确更新扩展任务表的状态
createAsyncJob(event);
extAxHiTaskInstService.updateByTaskIdAndInstanceId(event.getTaskId(), event.getProcessInstanceId(),
event.getAssignee(), event.getResultEnum());
// modify by wangli: 2024.6.4 移除异步任务因为异步会导致自动过审的判断逻辑中查询扩展表时数据不一致
// // 利用引擎异步任务的重试能力, 去正确更新扩展任务表的状态
// createAsyncJob(event);
}
private void createAsyncJob(ExtTaskInstUpdateEvent event) {

View File

@ -85,7 +85,7 @@ public class ExtAxHiTaskInstServiceImpl implements ExtAxHiTaskInstService {
LambdaUpdateWrapper<ExtAxHiTaskInst> wrapper = new LambdaUpdateWrapper<ExtAxHiTaskInst>()
.eq(ExtAxHiTaskInst::getTaskId, taskId)
.eq(ExtAxHiTaskInst::getProcInstId, processInstanceId)
// 可能由于事件消费时, 嵌套了引擎操作, 会引起一部分的消息顺序异常, 导致状态被异常变更
// 只能变更还是处理中的状态
.eq(ExtAxHiTaskInst::getStatus, PROCESSING.getStatus());
extAxHiTaskInstMapper.update(entity, wrapper);
}

View File

@ -88,17 +88,6 @@ public class AutoOperatorEvent_101_Listener extends AbstractBpmnEventListener<Ta
if (Objects.equals(NODE_STARTER.getType(), delegateTask.getTaskDefinitionKey())) {
createAsyncApproveJob(delegateTask);
/*BpmnTaskDelegateAssigner initiator = getContext().getInitiator(() -> BpmnTaskDelegateAssigner.toObjectCompatible(delegateTask.getVariable(INTERNAL_INITIATOR)));
if (Objects.nonNull(initiator)) {
delegateTask.setVariable(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId(),
initiator.toJson());
}
delegateTask.setTransientVariable(TASK_COMPLETE_OPERATION_TYPE + delegateTask.getId(),
APPROVED.getStatus());
// 直接完成
taskService.complete(delegateTask.getId(), runtimeService.getVariables(delegateTask.getExecutionId()));*/
return;
}
@ -106,6 +95,7 @@ public class AutoOperatorEvent_101_Listener extends AbstractBpmnEventListener<Ta
UserTask userTask = (UserTask) mainProcess.getFlowElement(delegateTask.getTaskDefinitionKey());
boolean exists = checkApproverExists(delegateTask, userTask, mainProcess);
log.info("是否需要自动过程判断 exists:{}", exists);
if (exists) {
taskService.addComment(delegateTask.getId(), delegateTask.getProcessInstanceId(), COMMENT_TYPE_ADVICE,
"同一审批人,自动过审");