From ab6845816c5b4396b3b907efd50be4b6bfbc43e8 Mon Sep 17 00:00:00 2001 From: yanglin Date: Tue, 14 Jan 2025 11:30:11 +0800 Subject: [PATCH] =?UTF-8?q?REQ-3502:=20=E8=BF=87=E6=BB=A4=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../biz/BizCardButtonInterceptorFactory.java | 12 +---- .../card/biz/TodoCardButtonInterceptor.java | 26 ++++++++++ .../WorkflowTodoCardButtonInterceptor.java | 49 +++++++++++++------ .../center/utils/desision/DecisionValue.java | 10 ++-- 4 files changed, 68 insertions(+), 29 deletions(-) create mode 100644 inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/biz/TodoCardButtonInterceptor.java diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/biz/BizCardButtonInterceptorFactory.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/biz/BizCardButtonInterceptorFactory.java index f5d83793..bb1f9c27 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/biz/BizCardButtonInterceptorFactory.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/biz/BizCardButtonInterceptorFactory.java @@ -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 isVisibleOnCard(ButtonV3 button) { - if (todo.getType() == TodoType.COPIED_TO_ME) - return DecisionValue.decide(false); - return DecisionValue.notSure(); - } - }; + return new TodoCardButtonInterceptor(todo); } } \ No newline at end of file diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/biz/TodoCardButtonInterceptor.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/biz/TodoCardButtonInterceptor.java new file mode 100644 index 00000000..a6116b95 --- /dev/null +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/biz/TodoCardButtonInterceptor.java @@ -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 isVisibleOnCard(ButtonV3 button) { + // 抄送不显示任何按钮 + if (todo.getType() == TodoType.COPIED_TO_ME) + return DecisionValue.decide(false); + return DecisionValue.notSure(); + } + +} \ No newline at end of file diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/workflow/WorkflowTodoCardButtonInterceptor.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/workflow/WorkflowTodoCardButtonInterceptor.java index d27e90e3..03f6f6a7 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/workflow/WorkflowTodoCardButtonInterceptor.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/workflow/WorkflowTodoCardButtonInterceptor.java @@ -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 workflowButtonsProvider; private BpmnTaskButtonVo workflowButtons; + WorkflowTodoCardButtonInterceptor(Todo todo, Supplier workflowButtonsProvider) { + super(todo); + this.workflowButtonsProvider = workflowButtonsProvider; + } + @Override public DecisionValue isPerformActionAvailable(ButtonV3 button) { BizFinalStateEnum state = findButtonClickState(button).orElse(null); @@ -53,20 +59,26 @@ class WorkflowTodoCardButtonInterceptor implements CardButtonInterceptor { @Override public DecisionValue isVisibleOnCard(ButtonV3 button) { - if (todo.getState() == PendingMessageStateEnum.PROCESSING - || todo.getType() == TodoType.COPIED_TO_ME) + DecisionValue 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 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 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 getWorkflowHideButtonKeys() { + fetchWorkflowButtons(); + List 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(); diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/utils/desision/DecisionValue.java b/inside-notices/src/main/java/cn/axzo/msg/center/utils/desision/DecisionValue.java index 8fcab4a9..29011a4e 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/utils/desision/DecisionValue.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/utils/desision/DecisionValue.java @@ -18,7 +18,7 @@ public class DecisionValue { @SuppressWarnings("unchecked") public static DecisionValue notSure() { - return (DecisionValue)NOT_SURE; + return (DecisionValue) NOT_SURE; } public static DecisionValue decide(T value) { @@ -26,11 +26,15 @@ public class DecisionValue { } public T orElse(Supplier 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; } } \ No newline at end of file