update - 切换记录任务关联的审批人的实现方式, 采用字符串直接存 act_hi_varinst 表.
This commit is contained in:
parent
21260d382b
commit
d0c996bc56
@ -168,8 +168,31 @@ public class BpmnTaskDelegateAssigner implements Serializable {
|
||||
.setTenantId(tenantId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
public String toJson() {
|
||||
return JSON.toJSONString(this);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 兼容版本间的不同类型转换成审批人模型
|
||||
*
|
||||
* @param request 目前存在两种类型,一种为 BpmnTaskDelegateAssigner 实例对象, 另一种为 String 类型的 JSON 数据
|
||||
* @return
|
||||
*/
|
||||
public static BpmnTaskDelegateAssigner toObjectCompatible(Object request) {
|
||||
if (Objects.isNull(request)) {
|
||||
return null;
|
||||
}
|
||||
if (request instanceof BpmnTaskDelegateAssigner) {
|
||||
return (BpmnTaskDelegateAssigner) request;
|
||||
} else if (request instanceof String) {
|
||||
return toObject((String) request);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static BpmnTaskDelegateAssigner toObject(String jsonStr) {
|
||||
return JSON.parseObject(jsonStr, BpmnTaskDelegateAssigner.class);
|
||||
}
|
||||
}
|
||||
|
||||
@ -181,8 +181,7 @@ public class CustomCarbonCopyUserSelectorCmd implements Command<List<BpmnTaskDel
|
||||
assginerSnapshot =
|
||||
variableInstanceMap.getOrDefault(OLD_INTERNAL_TASK_RELATION_ASSIGNEE_INFO_SNAPSHOT + vo.getTaskId(), null);
|
||||
}
|
||||
BpmnTaskDelegateAssigner assigner = Objects.nonNull(assginerSnapshot) ?
|
||||
(BpmnTaskDelegateAssigner) assginerSnapshot.getValue() : null;
|
||||
BpmnTaskDelegateAssigner assigner = BpmnTaskDelegateAssigner.toObjectCompatible(assginerSnapshot.getValue());
|
||||
if (Objects.nonNull(assigner) && !Objects.equals(assigner.buildAssigneeId(), NO_ASSIGNEE)) {
|
||||
assigners.add(assigner);
|
||||
}
|
||||
|
||||
@ -20,7 +20,7 @@ import org.flowable.task.service.impl.persistence.entity.HistoricTaskInstanceEnt
|
||||
import org.flowable.task.service.impl.persistence.entity.TaskEntity;
|
||||
import org.flowable.variable.service.HistoricVariableService;
|
||||
import org.flowable.variable.service.impl.persistence.entity.HistoricVariableInstanceEntity;
|
||||
import org.flowable.variable.service.impl.types.SerializableType;
|
||||
import org.flowable.variable.service.impl.types.StringType;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
@ -129,10 +129,9 @@ public class CustomCommentTaskCmd implements Command<Void>, Serializable {
|
||||
historicVariableInstance.setExecutionId(task.getExecutionId());
|
||||
historicVariableInstance.setProcessInstanceId(processInstance.getId());
|
||||
historicVariableInstance.setName(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + task.getId());
|
||||
SerializableType variableType =
|
||||
new SerializableType(processEngineConfiguration.isSerializableVariableTypeTrackDeserializedObjects());
|
||||
StringType variableType = new StringType(processEngineConfiguration.getMaxLengthString());
|
||||
historicVariableInstance.setVariableType(variableType);
|
||||
historicVariableInstance.setBytes(objectToByteArray(operator));
|
||||
historicVariableInstance.setTextValue(operator.toJson());
|
||||
historicVariableInstance.setCreateTime(new Date());
|
||||
historicVariableInstance.setLastUpdatedTime(new Date());
|
||||
historicVariableService.insertHistoricVariableInstance(historicVariableInstance);
|
||||
|
||||
@ -302,7 +302,7 @@ public class CustomTaskHelper {
|
||||
task.setTransientVariable(TASK_COMPLETE_OPERATION_TYPE + task.getId(), extTaskInstStatus);
|
||||
|
||||
// 设置快照信息
|
||||
task.setVariable(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + task.getId(), assigner);
|
||||
task.setVariable(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + task.getId(), assigner.toJson());
|
||||
|
||||
// 完成临时节点
|
||||
taskService.complete(task.getId());
|
||||
|
||||
@ -386,8 +386,10 @@ public class BpmnProcessTaskServiceImpl implements BpmnProcessTaskService {
|
||||
variableInstanceMap.getOrDefault(OLD_INTERNAL_TASK_RELATION_ASSIGNEE_INFO_SNAPSHOT + vo.getTaskId(), null);
|
||||
}
|
||||
|
||||
BpmnTaskDelegateAssigner assigner = Objects.nonNull(assginerSnapshot) ?
|
||||
(BpmnTaskDelegateAssigner) assginerSnapshot.getValue() : null;
|
||||
BpmnTaskDelegateAssigner assigner = null;
|
||||
if (Objects.nonNull(assginerSnapshot)) {
|
||||
assigner = BpmnTaskDelegateAssigner.toObjectCompatible(assginerSnapshot.getValue());
|
||||
}
|
||||
if (Objects.nonNull(assigner) && !Objects.equals(assigner.buildAssigneeId(), NO_ASSIGNEE)) {
|
||||
vo.setAssigneeSnapshot(assigner);
|
||||
}
|
||||
@ -462,7 +464,7 @@ public class BpmnProcessTaskServiceImpl implements BpmnProcessTaskService {
|
||||
vos.stream().map(i -> INTERNAL_TASK_RELATION_ASSIGNEE_INFO + i.getTaskId()).collect(Collectors.toList());
|
||||
Map<String, VariableInstance> instanceMap = runtimeService.getVariableInstances(processInstanceId,
|
||||
snapshotTaskIds);
|
||||
vos.forEach(i -> i.setAssigner((BpmnTaskDelegateAssigner) instanceMap.get(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + i.getTaskId()).getValue()));
|
||||
vos.forEach(i -> i.setAssigner(BpmnTaskDelegateAssigner.toObjectCompatible(instanceMap.get(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + i.getTaskId()).getValue())));
|
||||
return vos;
|
||||
}
|
||||
|
||||
|
||||
@ -82,7 +82,7 @@ public class AutoOperatorEvent_103_Listener implements BpmnTaskEventListener, Or
|
||||
BpmnTaskDelegateAssigner initiator = delegateTask.getVariable(INTERNAL_INITIATOR,
|
||||
BpmnTaskDelegateAssigner.class);
|
||||
delegateTask.setVariable(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId(),
|
||||
initiator);
|
||||
initiator.toJson());
|
||||
delegateTask.setTransientVariable(TASK_COMPLETE_OPERATION_TYPE + delegateTask.getId(),
|
||||
APPROVED.getStatus());
|
||||
// 直接完成
|
||||
@ -257,25 +257,9 @@ public class AutoOperatorEvent_103_Listener implements BpmnTaskEventListener, Or
|
||||
private void autoPass(DelegateTask delegateTask) {
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration();
|
||||
CommandExecutor commandExecutor = processEngineConfiguration.getCommandExecutor();
|
||||
BpmnTaskDelegateAssigner assigner =
|
||||
delegateTask.getVariable(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId(),
|
||||
BpmnTaskDelegateAssigner.class);
|
||||
BpmnTaskDelegateAssigner assigner = BpmnTaskDelegateAssigner.toObjectCompatible(
|
||||
delegateTask.getVariable(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId()));
|
||||
commandExecutor.execute(new CustomApproveTaskCmd(delegateTask.getId(), null, "自动通过",
|
||||
Collections.emptyList(), assigner, null));
|
||||
|
||||
|
||||
// if (log.isDebugEnabled()) {
|
||||
// log.debug("AutoOperatorEventListener#autoPass...{}", delegateTask.getTaskDefinitionKey());
|
||||
// }
|
||||
// taskService.addComment(delegateTask.getId(), delegateTask.getProcessInstanceId(),
|
||||
// COMMENT_TYPE_OPERATION_DESC,
|
||||
// "自动通过");
|
||||
// delegateTask.setTransientVariable(TASK_COMPLETE_OPERATION_TYPE + delegateTask.getId(), APPROVED
|
||||
// .getStatus());
|
||||
// taskService.complete(delegateTask.getId(), runtimeService.getVariables(delegateTask.getExecutionId
|
||||
// ()));
|
||||
// if (log.isDebugEnabled()) {
|
||||
// log.debug("AutoOperatorEventListener#autoPass...end: {}", delegateTask.getTaskDefinitionKey());
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@ -123,8 +123,8 @@ public class RocketMqBpmnTaskEvent_101_Listener implements BpmnTaskEventListener
|
||||
.setCurrentElementName(delegateTask.getName())
|
||||
.setProcessDefinitionId(delegateTask.getProcessDefinitionId())
|
||||
.setInitiator(delegateTask.getVariable(INTERNAL_INITIATOR, BpmnTaskDelegateAssigner.class))
|
||||
.setApprover(delegateTask.getVariable(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId(),
|
||||
BpmnTaskDelegateAssigner.class))
|
||||
.setApprover(BpmnTaskDelegateAssigner.toObjectCompatible(
|
||||
delegateTask.getVariable(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId())))
|
||||
.setVariables(delegateTask.getVariables())
|
||||
.setStartTime(delegateTask.getCreateTime())
|
||||
.setTenantId(delegateTask.getTenantId());
|
||||
|
||||
@ -53,7 +53,7 @@ public class SnapshotBpmnTaskTaskEvent_100_Listener implements BpmnTaskEventList
|
||||
.findFirst()
|
||||
.ifPresent(i -> {
|
||||
// 保存每个 taskId 的审批人
|
||||
delegateTask.setVariable(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId(), i);
|
||||
delegateTask.setVariable(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId(), i.toJson());
|
||||
// 业务指定审批人时, 添加 operationDesc
|
||||
if (Objects.equals(DUMMY_ASSIGNEE_ID, i.buildAssigneeId_1_2_1())) {
|
||||
taskService.addComment(delegateTask.getId(), delegateTask.getProcessInstanceId(),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user