update - 调整推送接口返回模型属性异常的问题

This commit is contained in:
wangli 2024-03-25 20:59:58 +08:00
parent ac718add6f
commit 73ba59e6dc
3 changed files with 28 additions and 15 deletions

View File

@ -270,8 +270,8 @@ public final class BpmnMetaParserHelper {
return Optional.empty();
}
public static Optional<ApprovalMethodEnum> getApprovalMethod(UserTask userTask) {
return defaultValid(userTask, CONFIG_APPROVAL_METHOD).map(element -> ApprovalMethodEnum.valueOf(element.getAttributeValue(null, ELEMENT_ATTRIBUTE_VALUE)));
public static Optional<ApprovalMethodEnum> getApprovalMethod(FlowElement flowElement) {
return defaultValid(flowElement, CONFIG_APPROVAL_METHOD).map(element -> ApprovalMethodEnum.valueOf(element.getAttributeValue(null, ELEMENT_ATTRIBUTE_VALUE)));
}
public static Optional<ApproverScopeEnum> getApproverScope(UserTask userTask) {

View File

@ -743,6 +743,8 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
node.setForecastAssigners(Collections.emptyList());
// 每个节点设置的按钮配置
getButtonConfig(bpmnModel.getMainProcess(), i.getId()).ifPresent(node::setButtonConf);
// 设置审批方式
getApprovalMethod(i).ifPresent(node::setApprovalMethod);
if (i instanceof UserTask) {
UserTask userTask = (UserTask) i;
node.setId(userTask.getId())
@ -766,8 +768,6 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
node.setNodeMode(BpmnFlowNodeMode.GENERAL);
}
// 设置审批方式
getApprovalMethod(userTask).ifPresent(node::setApprovalMethod);
if (Objects.equals(node.getApprovalMethod(), human)) {
// 推测当前节点的审批人,并且如果审批人为空,也会根据审批人为空的策略去找人
List<BpmnTaskDelegateAssigner> forecastAssigners =

View File

@ -13,6 +13,9 @@ import org.flowable.engine.HistoryService;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.flowable.engine.impl.persistence.entity.ActivityInstanceEntity;
import org.flowable.engine.impl.util.CommandContextUtil;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.flowable.task.service.delegate.DelegateTask;
import org.springframework.core.Ordered;
@ -20,6 +23,7 @@ import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -69,7 +73,7 @@ public class AutoOperatorEventListener implements BpmnTaskEventListener, Ordered
log.debug("AutoOperatorEventListener#onCreated...{}", delegateTask.getTaskDefinitionKey());
}
if (Objects.equals(NODE_STARTER.getType(), delegateTask.getId())) {
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(),
@ -80,21 +84,29 @@ public class AutoOperatorEventListener implements BpmnTaskEventListener, Ordered
taskService.complete(delegateTask.getId(), runtimeService.getVariables(delegateTask.getExecutionId()));
return;
}
Process mainProcess = repositoryService.getBpmnModel(delegateTask.getProcessDefinitionId()).getMainProcess();
UserTask userTask = (UserTask) mainProcess.getFlowElement(delegateTask.getTaskDefinitionKey());
// 优先判断节点的审批配置
// 检测节点自身配置是否有自动操作
checkApprovalMethod(delegateTask, userTask);
if (log.isDebugEnabled()) {
log.debug("AutoOperatorEventListener#onCreated...end: {}", delegateTask.getTaskDefinitionKey());
}
}
@Override
public void onAssigned(DelegateTask delegateTask) {
Process mainProcess = repositoryService.getBpmnModel(delegateTask.getProcessDefinitionId()).getMainProcess();
UserTask userTask = (UserTask) mainProcess.getFlowElement(delegateTask.getTaskDefinitionKey());
boolean exists = checkApproverExists(delegateTask, userTask, mainProcess);
if (exists) {
taskService.addComment(delegateTask.getId(), delegateTask.getProcessInstanceId(), COMMENT_TYPE_ADVICE,
"同一审批人,自动过审");
autoPass(delegateTask);
}
if (log.isDebugEnabled()) {
log.debug("AutoOperatorEventListener#onCreated...end: {}", delegateTask.getTaskDefinitionKey());
}
}
/**
@ -105,14 +117,15 @@ public class AutoOperatorEventListener implements BpmnTaskEventListener, Ordered
* @param mainProcess
*/
private boolean checkApproverExists(DelegateTask delegateTask, UserTask userTask, Process mainProcess) {
AtomicBoolean exists = new AtomicBoolean(false);
historyService.createHistoricActivityInstanceQuery()
.processInstanceId(delegateTask.getProcessInstanceId())
.orderByHistoricActivityInstanceStartTime()
.desc().list().stream()
ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration();
processEngineConfiguration.getActivityInstanceEntityManager()
.findActivityInstancesByProcessInstanceId(delegateTask.getProcessInstanceId(), false)
.stream()
.filter(i -> !Objects.equals(i.getActivityId(), userTask.getId()))
.filter(i -> Objects.equals(i.getActivityType(), "userTask"))
.findFirst()
.filter(i -> !Objects.equals(i.getActivityType(), "sequenceFlow"))
.max(Comparator.comparing(ActivityInstanceEntity::getStartTime))
.ifPresent(i -> {
// 与发起人比对
if (Objects.equals(NODE_STARTER.getType(), i.getActivityId())) {