update - 切换记录任务关联的审批人的实现方式, 采用字符串直接存 act_hi_varinst 表.

This commit is contained in:
wangli 2024-04-08 17:47:46 +08:00
parent d0c996bc56
commit f202d283d4
11 changed files with 40 additions and 40 deletions

View File

@ -187,9 +187,10 @@ public class CustomUserTaskActivityBehavior extends UserTaskActivityBehavior {
ExpressionManager expressionManager, DelegateExecution execution,
ProcessEngineConfigurationImpl processEngineConfiguration) {
if (Objects.equals(NODE_STARTER.getType(), execution.getCurrentActivityId())) {
BpmnTaskDelegateAssigner assigner = execution.getVariable(INTERNAL_INITIATOR,
BpmnTaskDelegateAssigner.class);
assignee = assigner.buildAssigneeId();
BpmnTaskDelegateAssigner assigner = BpmnTaskDelegateAssigner.toObjectCompatible(execution.getVariable(INTERNAL_INITIATOR));
if (Objects.nonNull(assigner)) {
assignee = assigner.buildAssigneeId();
}
}
super.handleAssignments(taskService, assignee, owner, candidateUsers, candidateGroups, task,
expressionManager, execution, processEngineConfiguration);

View File

@ -149,10 +149,10 @@ public class CustomCarbonCopyUserSelectorCmd implements Command<List<BpmnTaskDel
.singleResult();
if (Objects.isNull(historicVariableInstance)) {
RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
BpmnTaskDelegateAssigner assigner = (BpmnTaskDelegateAssigner) runtimeService.getVariable(processInstanceId, INTERNAL_INITIATOR);
BpmnTaskDelegateAssigner assigner = BpmnTaskDelegateAssigner.toObjectCompatible(runtimeService.getVariable(processInstanceId, INTERNAL_INITIATOR));
assigners.add(assigner);
} else {
assigners.add((BpmnTaskDelegateAssigner) historicVariableInstance.getValue());
assigners.add(BpmnTaskDelegateAssigner.toObjectCompatible(historicVariableInstance.getValue()));
}
break;
case approver:

View File

@ -110,8 +110,7 @@ public class EngineExecutionStartListener implements ExecutionListener {
&& (Objects.equals(NODE_TASK, nodeType.get()) || Objects.equals(NODE_BUSINESS, nodeType.get()) || Objects.equals(NODE_STARTER, nodeType.get()))) {
if (Objects.equals(NODE_STARTER, nodeType.get())) {
// UserTask 多实例, 该变量用于引擎
BpmnTaskDelegateAssigner initiator = execution.getVariable(INTERNAL_INITIATOR,
BpmnTaskDelegateAssigner.class);
BpmnTaskDelegateAssigner initiator = BpmnTaskDelegateAssigner.toObjectCompatible(execution.getVariable(INTERNAL_INITIATOR));
// 仅用于节点人员快照
execution.setVariable(INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + currentActivityId,

View File

@ -135,7 +135,7 @@ public class EngineProcessInstanceEventListener extends AbstractFlowableEngineEv
.processInstanceId(event.getProcessInstanceId())
.includeProcessVariables().singleResult();
BpmnTaskDelegateAssigner assigner =
(BpmnTaskDelegateAssigner) processInstance.getProcessVariables().getOrDefault(INTERNAL_INITIATOR, null);
BpmnTaskDelegateAssigner.toObjectCompatible(processInstance.getProcessVariables().get(INTERNAL_INITIATOR));
if (Objects.isNull(assigner)) {
return;
}

View File

@ -48,12 +48,12 @@ public class InternalExtAxTaskInstEvent_min_Listener implements BpmnTaskEventLis
// 记录发起人
if (Objects.equals(delegateTask.getTaskDefinitionKey(), NODE_STARTER.getType())) {
BpmnTaskDelegateAssigner assigner =
(BpmnTaskDelegateAssigner) runtimeService.getVariable(delegateTask.getProcessInstanceId(),
INTERNAL_INITIATOR);
BpmnTaskDelegateAssigner.toObjectCompatible(runtimeService.getVariable(delegateTask.getProcessInstanceId(),
INTERNAL_INITIATOR));
if (Objects.isNull(assigner)) {
// 兼容历史数据
assigner = (BpmnTaskDelegateAssigner) runtimeService.getVariable(delegateTask.getProcessInstanceId(),
OLD_INTERNAL_INITIATOR);
assigner = BpmnTaskDelegateAssigner.toObjectCompatible(runtimeService.getVariable(delegateTask.getProcessInstanceId(),
OLD_INTERNAL_INITIATOR));
}
assignee = assigner.buildAssigneeId();
} else {

View File

@ -278,7 +278,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
}
}
dto.getVariables().put(INTERNAL_INITIATOR, dto.getInitiator());
dto.getVariables().put(INTERNAL_INITIATOR, dto.getInitiator().toJson());
dto.getVariables().put(BIZ_ORG_RELATION, dto.getCooperationOrg());
dto.getVariables().put(WORKFLOW_ENGINE_VERSION, serviceVersion);
dto.getVariables().put(PENDING_TEMPLATE_VARIABLE, dto.getPendingVariables());
@ -323,7 +323,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
if (Objects.equals(SuspensionState.SUSPENDED.getStateCode(), definition.getSuspensionState())) {
throw new WorkflowEngineException(PROCESS_DEFINITION_IS_SUSPENDED, dto.getProcessDefinitionKey());
}
dto.getVariables().put(INTERNAL_INITIATOR, dto.getInitiator());
dto.getVariables().put(INTERNAL_INITIATOR, dto.getInitiator().toJson());
// 创建流程实例
// 设置流程实例的开始人参考https://wenku.baidu.com/view/5538062e7a563c1ec5da50e2524de518964bd3f9.html
@ -544,12 +544,12 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
processInstance.getProcessDefinitionId());
}
BpmnTaskDelegateAssigner assigner = null;
Object tempAssigner = null;
String version = null;
if (dto.getHasVariable()) {
assigner = (BpmnTaskDelegateAssigner) processInstance.getProcessVariables().get(INTERNAL_INITIATOR);
if (Objects.isNull(assigner)) {
assigner = (BpmnTaskDelegateAssigner) processInstance.getProcessVariables().get(OLD_INTERNAL_INITIATOR);
tempAssigner = processInstance.getProcessVariables().get(INTERNAL_INITIATOR);
if (Objects.isNull(tempAssigner)) {
tempAssigner = processInstance.getProcessVariables().get(OLD_INTERNAL_INITIATOR);
}
version = (String) processInstance.getProcessVariables().get(WORKFLOW_ENGINE_VERSION);
@ -559,13 +559,14 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
for (HistoricVariableInstance i : variableInstances) {
if (Objects.equals(i.getVariableName(), INTERNAL_INITIATOR) || Objects.equals(i.getVariableName(),
OLD_INTERNAL_INITIATOR)) {
assigner = (BpmnTaskDelegateAssigner) i.getValue();
tempAssigner = i.getValue();
}
if (Objects.equals(i.getVariableName(), WORKFLOW_ENGINE_VERSION)) {
version = (String) i.getValue();
}
}
}
if (Objects.isNull(version)) {
version = FLOW_SERVER_VERSION_121;
}
@ -578,7 +579,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId());
return instanceConverter.toVo(processInstance, processDefinition, getButtonConfig(bpmnModel.getMainProcess())
, assigner, version, categoryService.get(BPM_MODEL_CATEGORY,
, BpmnTaskDelegateAssigner.toObjectCompatible(tempAssigner), version, categoryService.get(BPM_MODEL_CATEGORY,
processInstance.getProcessDefinitionKey()), runningTasks);
}

View File

@ -56,7 +56,7 @@ public class BasedInitiatorLeaderTaskAssigneeSelector extends AbstractBpmnTaskAs
ApproverScopeDTO scopeDto) {
// 获取发起人
BpmnTaskDelegateAssigner initiator =
(BpmnTaskDelegateAssigner) execution.getVariables().getOrDefault(INTERNAL_INITIATOR, null);
BpmnTaskDelegateAssigner.toObjectCompatible(execution.getVariables().get(INTERNAL_INITIATOR));
if (Objects.isNull(initiator)) {
return super.invokeService(flowElement, execution, scopeDto);
}

View File

@ -236,8 +236,10 @@ public class RocketMqMessagePushEventListener implements BpmnMessagePushEventLis
.filter(e -> Objects.nonNull(e.getKey()) && Objects.nonNull(e.getValue()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
BpmnTaskDelegateAssigner initiator = (BpmnTaskDelegateAssigner) originVariables.getOrDefault(INTERNAL_INITIATOR,
new BpmnTaskDelegateAssigner());
BpmnTaskDelegateAssigner initiator = BpmnTaskDelegateAssigner.toObjectCompatible(originVariables.get(INTERNAL_INITIATOR));
if (Objects.isNull(initiator)) {
initiator = new BpmnTaskDelegateAssigner();
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
variables.put(INTERNAL_INITIATOR, initiator);
variables.put(VAR_PROCESS_TENANT_ID, event.getTenantId());

View File

@ -70,8 +70,7 @@ public class RocketMqBpmnProcessEventListener implements BpmnProcessEventListene
.setProcessDefinitionId(event.getProcessDefinitionId())
.setProcessDefinitionKey(((ExecutionEntityImpl) event.getEntity()).getProcessDefinitionKey())
.setProcessDefinitionVersion(((ExecutionEntityImpl) event.getEntity()).getProcessDefinitionVersion())
.setInitiator(((ExecutionEntityImpl) event.getEntity()).getVariable(INTERNAL_INITIATOR,
BpmnTaskDelegateAssigner.class))
.setInitiator(BpmnTaskDelegateAssigner.toObjectCompatible(((ExecutionEntityImpl) event.getEntity()).getVariable(INTERNAL_INITIATOR)))
.setVariables(((ExecutionEntityImpl) event.getEntity()).getVariables())
.setStartTime(((ExecutionEntityImpl) event.getEntity()).getStartTime())
.setTenantId(((ExecutionEntityImpl) event.getEntity()).getTenantId())
@ -107,8 +106,7 @@ public class RocketMqBpmnProcessEventListener implements BpmnProcessEventListene
.setProcessDefinitionId(((ExecutionEntityImpl) event.getEntity()).getProcessDefinitionId())
.setProcessDefinitionKey(((ExecutionEntityImpl) event.getEntity()).getProcessDefinitionKey())
.setProcessDefinitionVersion(((ExecutionEntityImpl) event.getEntity()).getProcessDefinitionVersion())
.setInitiator(((ExecutionEntityImpl) event.getEntity()).getVariable(INTERNAL_INITIATOR,
BpmnTaskDelegateAssigner.class))
.setInitiator(BpmnTaskDelegateAssigner.toObjectCompatible(((ExecutionEntityImpl) event.getEntity()).getVariable(INTERNAL_INITIATOR)))
.setVariables(((ExecutionEntityImpl) event.getEntity()).getVariables())
.setStartTime(((ExecutionEntityImpl) event.getEntity()).getStartTime())
.setTenantId(((ExecutionEntityImpl) event.getEntity()).getTenantId())
@ -145,7 +143,7 @@ public class RocketMqBpmnProcessEventListener implements BpmnProcessEventListene
.setProcessDefinitionId(event.getProcessDefinitionId())
.setProcessDefinitionKey(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getProcessDefinitionKey())
.setProcessDefinitionVersion(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getProcessDefinitionVersion())
.setInitiator(((FlowableProcessCancelledEventImpl) event).getExecution().getVariable(INTERNAL_INITIATOR, BpmnTaskDelegateAssigner.class))
.setInitiator(BpmnTaskDelegateAssigner.toObjectCompatible(((FlowableProcessCancelledEventImpl) event).getExecution().getVariable(INTERNAL_INITIATOR)))
.setVariables(((FlowableProcessCancelledEventImpl) event).getExecution().getVariables())
.setStartTime(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getStartTime())
.setTenantId(((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId())
@ -182,7 +180,7 @@ public class RocketMqBpmnProcessEventListener implements BpmnProcessEventListene
.setProcessDefinitionId(event.getProcessDefinitionId())
.setProcessDefinitionKey(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getProcessDefinitionKey())
.setProcessDefinitionVersion(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getProcessDefinitionVersion())
.setInitiator(((FlowableProcessCancelledEventImpl) event).getExecution().getVariable(INTERNAL_INITIATOR, BpmnTaskDelegateAssigner.class))
.setInitiator(BpmnTaskDelegateAssigner.toObjectCompatible(((FlowableProcessCancelledEventImpl) event).getExecution().getVariable(INTERNAL_INITIATOR)))
.setVariables(((FlowableProcessCancelledEventImpl) event).getExecution().getVariables())
.setStartTime(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getStartTime())
.setTenantId(((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId())
@ -214,7 +212,7 @@ public class RocketMqBpmnProcessEventListener implements BpmnProcessEventListene
.setProcessDefinitionId(event.getProcessDefinitionId())
.setProcessDefinitionKey(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getProcessDefinitionKey())
.setProcessDefinitionVersion(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getProcessDefinitionVersion())
.setInitiator(((FlowableProcessCancelledEventImpl) event).getExecution().getVariable(INTERNAL_INITIATOR, BpmnTaskDelegateAssigner.class))
.setInitiator(BpmnTaskDelegateAssigner.toObjectCompatible(((FlowableProcessCancelledEventImpl) event).getExecution().getVariable(INTERNAL_INITIATOR)))
.setVariables(((FlowableProcessCancelledEventImpl) event).getExecution().getVariables())
.setStartTime(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getStartTime())
.setTenantId(((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId())
@ -259,8 +257,7 @@ public class RocketMqBpmnProcessEventListener implements BpmnProcessEventListene
.setProcessDefinitionId(event.getProcessDefinitionId())
.setProcessDefinitionKey(((ExecutionEntityImpl) event.getEntity()).getProcessDefinitionKey())
.setProcessDefinitionVersion(((ExecutionEntityImpl) event.getEntity()).getProcessDefinitionVersion())
.setInitiator(((ExecutionEntityImpl) event.getEntity()).getVariable(INTERNAL_INITIATOR,
BpmnTaskDelegateAssigner.class))
.setInitiator(BpmnTaskDelegateAssigner.toObjectCompatible(((ExecutionEntityImpl) event.getEntity()).getVariable(INTERNAL_INITIATOR)))
.setVariables(((ExecutionEntityImpl) event.getEntity()).getVariables())
.setStartTime(((ExecutionEntityImpl) event.getEntity()).getStartTime())
.setTenantId(((ExecutionEntityImpl) event.getEntity()).getTenantId())

View File

@ -79,10 +79,11 @@ public class AutoOperatorEvent_103_Listener implements BpmnTaskEventListener, Or
}
if (Objects.equals(NODE_STARTER.getType(), delegateTask.getTaskDefinitionKey())) {
BpmnTaskDelegateAssigner initiator = delegateTask.getVariable(INTERNAL_INITIATOR,
BpmnTaskDelegateAssigner.class);
delegateTask.setVariable(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId(),
initiator.toJson());
BpmnTaskDelegateAssigner initiator = 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());
// 直接完成
@ -129,9 +130,8 @@ public class AutoOperatorEvent_103_Listener implements BpmnTaskEventListener, Or
.ifPresent(i -> {
// 与发起人比对
if (Objects.equals(NODE_STARTER.getType(), i.getActivityId())) {
BpmnTaskDelegateAssigner initiator = delegateTask.getVariable(INTERNAL_INITIATOR,
BpmnTaskDelegateAssigner.class);
if (initiator.comparePersonIdToOther(delegateTask.getAssignee())) {
BpmnTaskDelegateAssigner initiator = BpmnTaskDelegateAssigner.toObjectCompatible(delegateTask.getVariable(INTERNAL_INITIATOR));
if (Objects.nonNull(initiator) && initiator.comparePersonIdToOther(delegateTask.getAssignee())) {
exists.compareAndSet(false, true);
}
} else {

View File

@ -122,7 +122,7 @@ public class RocketMqBpmnTaskEvent_101_Listener implements BpmnTaskEventListener
.setCurrentElementKey(delegateTask.getTaskDefinitionKey())
.setCurrentElementName(delegateTask.getName())
.setProcessDefinitionId(delegateTask.getProcessDefinitionId())
.setInitiator(delegateTask.getVariable(INTERNAL_INITIATOR, BpmnTaskDelegateAssigner.class))
.setInitiator(BpmnTaskDelegateAssigner.toObjectCompatible(delegateTask.getVariable(INTERNAL_INITIATOR)))
.setApprover(BpmnTaskDelegateAssigner.toObjectCompatible(
delegateTask.getVariable(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId())))
.setVariables(delegateTask.getVariables())