REQ-3502: 过滤流程按钮
This commit is contained in:
parent
b570371b48
commit
ab6845816c
@ -4,11 +4,8 @@ import cn.axzo.msg.center.domain.entity.Todo;
|
||||
import cn.axzo.msg.center.message.service.card.interceptor.CardButtonInterceptor;
|
||||
import cn.axzo.msg.center.message.service.card.interceptor.CardButtonInterceptorFactory;
|
||||
import cn.axzo.msg.center.message.service.todo.card.TodoSyncCardService;
|
||||
import cn.axzo.msg.center.service.ButtonV3;
|
||||
import cn.axzo.msg.center.service.enums.BizCategoryEnum;
|
||||
import cn.axzo.msg.center.service.enums.TodoType;
|
||||
import cn.axzo.msg.center.service.pending.request.CardContent;
|
||||
import cn.axzo.msg.center.utils.desision.DecisionValue;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@ -35,14 +32,7 @@ class BizCardButtonInterceptorFactory implements CardButtonInterceptorFactory {
|
||||
log.warn("todo not found. identityCode={}", card.getBizParam());
|
||||
return null;
|
||||
}
|
||||
return new CardButtonInterceptor() {
|
||||
@Override
|
||||
public DecisionValue<Boolean> isVisibleOnCard(ButtonV3 button) {
|
||||
if (todo.getType() == TodoType.COPIED_TO_ME)
|
||||
return DecisionValue.decide(false);
|
||||
return DecisionValue.notSure();
|
||||
}
|
||||
};
|
||||
return new TodoCardButtonInterceptor(todo);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
package cn.axzo.msg.center.message.service.todo.card.biz;
|
||||
|
||||
import cn.axzo.msg.center.domain.entity.Todo;
|
||||
import cn.axzo.msg.center.message.service.card.interceptor.CardButtonInterceptor;
|
||||
import cn.axzo.msg.center.service.ButtonV3;
|
||||
import cn.axzo.msg.center.service.enums.TodoType;
|
||||
import cn.axzo.msg.center.utils.desision.DecisionValue;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
public class TodoCardButtonInterceptor implements CardButtonInterceptor {
|
||||
|
||||
protected final Todo todo;
|
||||
|
||||
@Override
|
||||
public DecisionValue<Boolean> isVisibleOnCard(ButtonV3 button) {
|
||||
// 抄送不显示任何按钮
|
||||
if (todo.getType() == TodoType.COPIED_TO_ME)
|
||||
return DecisionValue.decide(false);
|
||||
return DecisionValue.notSure();
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,34 +1,40 @@
|
||||
package cn.axzo.msg.center.message.service.todo.card.workflow;
|
||||
|
||||
import cn.axzo.msg.center.domain.entity.Todo;
|
||||
import cn.axzo.msg.center.message.service.card.interceptor.CardButtonInterceptor;
|
||||
import cn.axzo.msg.center.message.service.todo.card.biz.TodoCardButtonInterceptor;
|
||||
import cn.axzo.msg.center.service.ButtonV3;
|
||||
import cn.axzo.msg.center.service.enums.BizFinalStateEnum;
|
||||
import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
|
||||
import cn.axzo.msg.center.service.enums.RouterButtonSourceEnum;
|
||||
import cn.axzo.msg.center.service.enums.TodoType;
|
||||
import cn.axzo.msg.center.utils.desision.DecisionValue;
|
||||
import cn.axzo.workflow.common.enums.ButtonVisibleScopeEnum;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.BpmnButtonMetaInfo;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskButtonVo;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskButtonVo.BpmnButtonMetaInfoWithVisibleScope;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import static java.util.stream.Collectors.toSet;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
class WorkflowTodoCardButtonInterceptor implements CardButtonInterceptor {
|
||||
class WorkflowTodoCardButtonInterceptor extends TodoCardButtonInterceptor {
|
||||
|
||||
private final Todo todo;
|
||||
private final Supplier<BpmnTaskButtonVo> workflowButtonsProvider;
|
||||
private BpmnTaskButtonVo workflowButtons;
|
||||
|
||||
WorkflowTodoCardButtonInterceptor(Todo todo, Supplier<BpmnTaskButtonVo> workflowButtonsProvider) {
|
||||
super(todo);
|
||||
this.workflowButtonsProvider = workflowButtonsProvider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DecisionValue<Boolean> isPerformActionAvailable(ButtonV3 button) {
|
||||
BizFinalStateEnum state = findButtonClickState(button).orElse(null);
|
||||
@ -53,20 +59,26 @@ class WorkflowTodoCardButtonInterceptor implements CardButtonInterceptor {
|
||||
|
||||
@Override
|
||||
public DecisionValue<Boolean> isVisibleOnCard(ButtonV3 button) {
|
||||
if (todo.getState() == PendingMessageStateEnum.PROCESSING
|
||||
|| todo.getType() == TodoType.COPIED_TO_ME)
|
||||
DecisionValue<Boolean> decision = super.isVisibleOnCard(button);
|
||||
if (decision.isDecided())
|
||||
return decision;
|
||||
// 进行中隐藏所有按钮
|
||||
if (todo.getState() == PendingMessageStateEnum.PROCESSING)
|
||||
return DecisionValue.decide(false);
|
||||
if (button.getSource() == RouterButtonSourceEnum.CUSTOM)
|
||||
return DecisionValue.notSure();
|
||||
if (getWorkflowHideButtonKeys().contains(button.getCode()))
|
||||
return DecisionValue.decide(false);
|
||||
BpmnButtonMetaInfoWithVisibleScope workflowButton = findWorkflowButton(button).orElse(null);
|
||||
return DecisionValue.decide(workflowButton != null);
|
||||
// 如果找不到流程按钮, 说明不需要显示按钮
|
||||
if (workflowButton == null)
|
||||
return DecisionValue.decide(false);
|
||||
// 是否显示由待办模版控制
|
||||
return DecisionValue.notSure();
|
||||
}
|
||||
|
||||
@Override
|
||||
public DecisionValue<Boolean> isSenderShow(ButtonV3 button) {
|
||||
if (todo.getState() == PendingMessageStateEnum.PROCESSING ||
|
||||
todo.getType() == TodoType.COPIED_TO_ME)
|
||||
return DecisionValue.decide(false);
|
||||
if (button.getSource() == RouterButtonSourceEnum.CUSTOM)
|
||||
return DecisionValue.decide(false);
|
||||
BpmnButtonMetaInfoWithVisibleScope workflowButton = findWorkflowButton(button).orElse(null);
|
||||
@ -78,9 +90,6 @@ class WorkflowTodoCardButtonInterceptor implements CardButtonInterceptor {
|
||||
|
||||
@Override
|
||||
public DecisionValue<Boolean> isExecutorShow(ButtonV3 button) {
|
||||
if (todo.getState() == PendingMessageStateEnum.PROCESSING
|
||||
|| todo.getType() == TodoType.COPIED_TO_ME)
|
||||
return DecisionValue.decide(false);
|
||||
if (button.getSource() == RouterButtonSourceEnum.CUSTOM)
|
||||
return DecisionValue.notSure();
|
||||
BpmnButtonMetaInfoWithVisibleScope workflowButton = findWorkflowButton(button).orElse(null);
|
||||
@ -103,6 +112,16 @@ class WorkflowTodoCardButtonInterceptor implements CardButtonInterceptor {
|
||||
.findFirst();
|
||||
}
|
||||
|
||||
private Set<String> getWorkflowHideButtonKeys() {
|
||||
fetchWorkflowButtons();
|
||||
List<BpmnButtonMetaInfo> workflowHiddenButtons = workflowButtons.getCustomHiddenButtons();
|
||||
if (workflowHiddenButtons == null)
|
||||
workflowHiddenButtons = Collections.emptyList();
|
||||
return workflowHiddenButtons.stream()
|
||||
.map(BpmnButtonMetaInfo::getBtnKey)
|
||||
.collect(toSet());
|
||||
}
|
||||
|
||||
private void fetchWorkflowButtons() {
|
||||
if (workflowButtons == null)
|
||||
workflowButtons = workflowButtonsProvider.get();
|
||||
|
||||
@ -18,7 +18,7 @@ public class DecisionValue<T> {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T> DecisionValue<T> notSure() {
|
||||
return (DecisionValue<T>)NOT_SURE;
|
||||
return (DecisionValue<T>) NOT_SURE;
|
||||
}
|
||||
|
||||
public static <T> DecisionValue<T> decide(T value) {
|
||||
@ -26,11 +26,15 @@ public class DecisionValue<T> {
|
||||
}
|
||||
|
||||
public T orElse(Supplier<T> supplier) {
|
||||
return decision == Decision.DECIDED ? value : supplier.get();
|
||||
return isDecided() ? value : supplier.get();
|
||||
}
|
||||
|
||||
public T orElse(T value) {
|
||||
return decision == Decision.DECIDED ? this.value : value;
|
||||
return isDecided() ? this.value : value;
|
||||
}
|
||||
|
||||
public boolean isDecided() {
|
||||
return decision == Decision.DECIDED;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user