From dcc0f0ad2a85c4dfee77c3b732435a10c4569023 Mon Sep 17 00:00:00 2001 From: Starryi Date: Thu, 17 Feb 2022 14:47:16 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-66930=20=E3=80=90=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=95=86=E5=9F=8E=E9=A3=8E=E6=A0=BC=E4=BC=98=E5=8C=96=E3=80=91?= =?UTF-8?q?=E7=BD=91=E6=85=A2=E6=97=B6=E5=A4=9A=E6=AC=A1=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E5=87=BA=E7=8E=B0=E5=A4=9A=E4=B8=AA=E5=BC=B9?= =?UTF-8?q?=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 存在任务重复创建和执行的问题 【改动思路】 同上 --- .../mini/bridge/NativeProductBridge.java | 73 ++++++++++++++----- .../online/mini/bridge/NativeTaskBridge.java | 6 ++ 2 files changed, 62 insertions(+), 17 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/mini/bridge/NativeProductBridge.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/mini/bridge/NativeProductBridge.java index 0da415a5d..e6a4f720c 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/mini/bridge/NativeProductBridge.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/mini/bridge/NativeProductBridge.java @@ -37,10 +37,15 @@ import java.util.Set; * Created by Starryi on 2021/12/20 */ public class NativeProductBridge { + private static final Map createdComponentInstallationTasks = new HashMap<>(); + private static final Map createdComponentsPackageInstallationTasks = new HashMap<>(); + private static final Map createdTemplateThemeInstallationTasks = new HashMap<>(); + + private static final Map startedComponentInstallationTasks = new HashMap<>(); + private static final Map startedComponentsPackageInstallationTasks = new HashMap<>(); + private static final Map startedTemplateThemeInstallationTasks = new HashMap<>(); + private final Object window; - private static final Map executingComponentInstallationTasks = new HashMap<>(); - private static final Map executingComponentsPackageInstallationTasks = new HashMap<>(); - private static final Map executingTemplateThemeInstallationTasks = new HashMap<>(); private final Map> componentDownloadTaskStartListeners = new HashMap<>(); private final Map> componentsPackageDownloadTaskStartListeners = new HashMap<>(); @@ -115,7 +120,7 @@ public class NativeProductBridge { boolean isPackage = widget.isWidgetPackage(); Map executingDownloadTask = - isPackage ? executingComponentsPackageInstallationTasks : executingComponentInstallationTasks; + isPackage ? startedComponentsPackageInstallationTasks : startedComponentInstallationTasks; NativeTaskBridge task = executingDownloadTask.get(uuid); if (task != null) { task.checkJSEnvChange(this.window); @@ -131,9 +136,22 @@ public class NativeProductBridge { OnlineShareWidget widget = OnlineShareWidget.parseFromJSONObject(object); int childrenCount = object.optInt("pkgsize", 0); if (childrenCount > 0) { - return new ComponentsPackageInstallationTask(this, window, widget, childrenCount); + if (createdComponentsPackageInstallationTasks.containsKey(widget.getUuid())) { + return createdComponentsPackageInstallationTasks.get(widget.getUuid()); + } else { + ComponentsPackageInstallationTask task = new ComponentsPackageInstallationTask(this, window, widget, childrenCount); + createdComponentsPackageInstallationTasks.put(widget.getUuid(), task); + return task; + } + } else { - return new ComponentInstallationTask(this, window, widget); + if (createdComponentInstallationTasks.containsKey(widget.getUuid())) { + return createdComponentInstallationTasks.get(widget.getUuid()); + } else { + ComponentInstallationTask task = new ComponentInstallationTask(this, window, widget); + createdComponentInstallationTasks.put(widget.getUuid(), task); + return task; + } } } @@ -165,7 +183,7 @@ public class NativeProductBridge { @JsAccessible @JSBridge public Object getExecutingThemeDownloadTask(String themePath) { - NativeTaskBridge task = (NativeTaskBridge) executingTemplateThemeInstallationTasks.get(themePath); + NativeTaskBridge task = startedTemplateThemeInstallationTasks.get(themePath); if (task != null) { task.checkJSEnvChange(this.window); } @@ -176,7 +194,13 @@ public class NativeProductBridge { @JsAccessible @JSBridge public Object createTemplateThemeDownloadTask(String themePath) { - return new TemplateThemeInstallationTask(this, window, themePath); + if (createdTemplateThemeInstallationTasks.containsKey(themePath)) { + return createdTemplateThemeInstallationTasks.get(themePath); + } else { + TemplateThemeInstallationTask task = new TemplateThemeInstallationTask(this, window, themePath); + createdTemplateThemeInstallationTasks.put(themePath, task); + return task; + } } public static class ComponentInstallationTask extends NativeTaskBridge { @@ -217,6 +241,9 @@ public class NativeProductBridge { @JSBridge @Override public void execute() { + if (isExecuting) { + return; + } super.execute(); SwingUtilities.invokeLater(new Runnable() { @Override @@ -257,7 +284,7 @@ public class NativeProductBridge { @Override protected void fireStartEvent(String event) { - executingComponentInstallationTasks.put(widget.getUuid(), this); + startedComponentInstallationTasks.put(widget.getUuid(), this); Set startListeners = env.componentDownloadTaskStartListeners.get(widget.getUuid()); SafeJSFunctionInvoker.invoke(startListeners, env.window); super.fireStartEvent(event); @@ -265,13 +292,15 @@ public class NativeProductBridge { @Override protected void fireFailureEvent(String event) { - executingComponentInstallationTasks.remove(widget.getUuid()); + startedComponentInstallationTasks.remove(widget.getUuid()); + createdComponentInstallationTasks.remove(widget.getUuid()); super.fireFailureEvent(event); } @Override protected void fireSuccessEvent(String event) { - executingComponentInstallationTasks.remove(widget.getUuid()); + startedComponentInstallationTasks.remove(widget.getUuid()); + createdComponentInstallationTasks.remove(widget.getUuid()); super.fireSuccessEvent(event); } } @@ -317,6 +346,9 @@ public class NativeProductBridge { @JSBridge @Override public void execute() { + if (isExecuting) { + return; + } super.execute(); SwingUtilities.invokeLater(new Runnable() { @Override @@ -373,7 +405,7 @@ public class NativeProductBridge { @Override protected void fireStartEvent(String event) { - executingComponentsPackageInstallationTasks.put(widget.getUuid(), this); + startedComponentsPackageInstallationTasks.put(widget.getUuid(), this); super.fireStartEvent(event); Set startListeners = env.componentsPackageDownloadTaskStartListeners.get(widget.getUuid()); @@ -382,13 +414,15 @@ public class NativeProductBridge { @Override protected void fireFailureEvent(String event) { - executingComponentsPackageInstallationTasks.remove(widget.getUuid()); + startedComponentsPackageInstallationTasks.remove(widget.getUuid()); + createdComponentsPackageInstallationTasks.remove(widget.getUuid()); super.fireFailureEvent(event); } @Override protected void fireSuccessEvent(String event) { - executingComponentsPackageInstallationTasks.remove(widget.getUuid()); + startedComponentsPackageInstallationTasks.remove(widget.getUuid()); + createdComponentsPackageInstallationTasks.remove(widget.getUuid()); super.fireSuccessEvent(event); } } @@ -426,6 +460,9 @@ public class NativeProductBridge { @JSBridge @Override public void execute() { + if (isExecuting) { + return; + } super.execute(); SwingUtilities.invokeLater(new Runnable() { @Override @@ -452,7 +489,7 @@ public class NativeProductBridge { @Override protected void fireStartEvent(String event) { - executingTemplateThemeInstallationTasks.put(themePath, this); + startedTemplateThemeInstallationTasks.put(themePath, this); Set startListeners = env.themeDownloadTaskStartListeners.get(themePath); SafeJSFunctionInvoker.invoke(startListeners, env.window); super.fireStartEvent(event); @@ -460,13 +497,15 @@ public class NativeProductBridge { @Override protected void fireFailureEvent(String event) { - executingTemplateThemeInstallationTasks.remove(themePath); + startedTemplateThemeInstallationTasks.remove(themePath); + createdTemplateThemeInstallationTasks.remove(themePath); super.fireFailureEvent(event); } @Override protected void fireSuccessEvent(String event) { - executingTemplateThemeInstallationTasks.remove(themePath); + startedTemplateThemeInstallationTasks.remove(themePath); + createdTemplateThemeInstallationTasks.remove(themePath); super.fireSuccessEvent(event); } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/mini/bridge/NativeTaskBridge.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/mini/bridge/NativeTaskBridge.java index 06c26c018..2929a3540 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/mini/bridge/NativeTaskBridge.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/mini/bridge/NativeTaskBridge.java @@ -18,6 +18,7 @@ public class NativeTaskBridge implements MiniShopNativeTask { private Object window; protected final Set statusCbs = new HashSet<>(); + protected boolean isExecuting = false; public NativeTaskBridge(Object window) { this.window = window; @@ -49,6 +50,9 @@ public class NativeTaskBridge implements MiniShopNativeTask { @JsAccessible @Override public void execute() { + if (!isExecuting) { + isExecuting = true; + } } @JSBridge @@ -68,10 +72,12 @@ public class NativeTaskBridge implements MiniShopNativeTask { SafeJSFunctionInvoker.invoke(statusCbs, window, "PROGRESS", event); } protected void fireSuccessEvent(String event) { + isExecuting = false; MiniShopNativeTaskManager.getInstance().removeCompletedTask(this); SafeJSFunctionInvoker.invoke(statusCbs, window, "SUCCESS", event); } protected void fireFailureEvent(String event) { + isExecuting = false; MiniShopNativeTaskManager.getInstance().removeCompletedTask(this); SafeJSFunctionInvoker.invoke(statusCbs, window, "FAILURE", event); }