From cf058e17f7a6add700fe2143429820670a6e99d4 Mon Sep 17 00:00:00 2001 From: ruying408 <1877972603@qq.com> Date: Sat, 27 Jul 2024 15:25:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=8F=92=E4=BB=B6=E8=8E=B7=E5=8F=96=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/file/FileUploadStrategyFactory.java | 18 +++++++--------- ...tegy.java => CloudFileUploadStrategy.java} | 21 ++++++++++++------- .../file/strategy/FileUploadStrategy.java | 7 +++---- .../strategy/LocalFileUploadStrategy.java | 7 ++++--- .../plugin/service/CoolPluginService.java | 11 +++++++--- .../service/DynamicJarLoaderService.java | 6 +++--- 6 files changed, 39 insertions(+), 31 deletions(-) rename src/main/java/com/cool/core/file/strategy/{OssFileUploadStrategy.java => CloudFileUploadStrategy.java} (54%) diff --git a/src/main/java/com/cool/core/file/FileUploadStrategyFactory.java b/src/main/java/com/cool/core/file/FileUploadStrategyFactory.java index 34a9063..ccbc7f4 100644 --- a/src/main/java/com/cool/core/file/FileUploadStrategyFactory.java +++ b/src/main/java/com/cool/core/file/FileUploadStrategyFactory.java @@ -2,7 +2,6 @@ package com.cool.core.file; import static com.cool.core.plugin.consts.PluginConsts.uploadHook; -import cn.hutool.core.lang.Dict; import cn.hutool.core.util.ObjUtil; import com.cool.core.exception.CoolPreconditions; import com.cool.core.file.strategy.FileUploadStrategy; @@ -25,16 +24,11 @@ public class FileUploadStrategyFactory { final private CoolPluginService coolPluginService; - public FileUploadStrategy getStrategy() { - PluginInfoEntity pluginInfoEntity = coolPluginService.getPluginInfoEntityByHook(uploadHook); - return getStrategy(pluginInfoEntity); - } - private FileUploadStrategy getStrategy(PluginInfoEntity pluginInfoEntity) { if (ObjUtil.isEmpty(pluginInfoEntity)) { return applicationContext.getBean("localFileUploadStrategy", FileUploadStrategy.class); } - return applicationContext.getBean("ossFileUploadStrategy", FileUploadStrategy.class); + return applicationContext.getBean("cloudFileUploadStrategy", FileUploadStrategy.class); } public Object upload(MultipartFile[] files, HttpServletRequest request) { @@ -49,9 +43,11 @@ public class FileUploadStrategyFactory { } public Object getMode() { - FileUploadStrategy strategy = getStrategy(); - UpLoadModeType upLoadModeType = strategy.getMode(); - return Dict.create().set("mode", upLoadModeType.getMode().value()) - .set("type", upLoadModeType.getType()); + PluginInfoEntity pluginInfoEntity = coolPluginService.getPluginInfoEntityByHook(uploadHook); + String key = null; + if (ObjUtil.isNotEmpty(pluginInfoEntity)) { + key = pluginInfoEntity.getKey(); + } + return getStrategy(pluginInfoEntity).getMode(key); } } \ No newline at end of file diff --git a/src/main/java/com/cool/core/file/strategy/OssFileUploadStrategy.java b/src/main/java/com/cool/core/file/strategy/CloudFileUploadStrategy.java similarity index 54% rename from src/main/java/com/cool/core/file/strategy/OssFileUploadStrategy.java rename to src/main/java/com/cool/core/file/strategy/CloudFileUploadStrategy.java index a9e4384..4e449a0 100644 --- a/src/main/java/com/cool/core/file/strategy/OssFileUploadStrategy.java +++ b/src/main/java/com/cool/core/file/strategy/CloudFileUploadStrategy.java @@ -1,17 +1,17 @@ package com.cool.core.file.strategy; import com.cool.core.config.FileModeEnum; -import com.cool.core.file.UpLoadModeType; import com.cool.core.util.CoolPluginInvokers; import com.cool.modules.plugin.entity.PluginInfoEntity; import jakarta.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.util.Map; +import java.util.Objects; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; -import java.io.IOException; - -@Component("ossFileUploadStrategy") -public class OssFileUploadStrategy implements FileUploadStrategy { +@Component("cloudFileUploadStrategy") +public class CloudFileUploadStrategy implements FileUploadStrategy { @Override public Object upload(MultipartFile[] files, HttpServletRequest request, PluginInfoEntity pluginInfoEntity) @@ -20,7 +20,14 @@ public class OssFileUploadStrategy implements FileUploadStrategy { } @Override - public UpLoadModeType getMode() { - return new UpLoadModeType(FileModeEnum.CLOUD); + public Map getMode(String key) { + try{ + Object mode = CoolPluginInvokers.invoke(key, "getMode"); + if (Objects.nonNull(mode)) { + return (Map) mode; + } + } catch (Exception ignore){} + return Map.of("mode", FileModeEnum.CLOUD.value(), + "type", FileModeEnum.CLOUD.type()); } } diff --git a/src/main/java/com/cool/core/file/strategy/FileUploadStrategy.java b/src/main/java/com/cool/core/file/strategy/FileUploadStrategy.java index fa72664..47bd605 100644 --- a/src/main/java/com/cool/core/file/strategy/FileUploadStrategy.java +++ b/src/main/java/com/cool/core/file/strategy/FileUploadStrategy.java @@ -1,13 +1,12 @@ package com.cool.core.file.strategy; -import com.cool.core.file.UpLoadModeType; import com.cool.modules.plugin.entity.PluginInfoEntity; import jakarta.servlet.http.HttpServletRequest; -import org.springframework.web.multipart.MultipartFile; - import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Map; +import org.springframework.web.multipart.MultipartFile; public interface FileUploadStrategy { @@ -22,7 +21,7 @@ public interface FileUploadStrategy { * * @return 上传模式 */ - UpLoadModeType getMode(); + Map getMode(String key); default boolean isAbsolutePath(String pathStr) { Path path = Paths.get(pathStr); diff --git a/src/main/java/com/cool/core/file/strategy/LocalFileUploadStrategy.java b/src/main/java/com/cool/core/file/strategy/LocalFileUploadStrategy.java index ae7274d..4e927e7 100644 --- a/src/main/java/com/cool/core/file/strategy/LocalFileUploadStrategy.java +++ b/src/main/java/com/cool/core/file/strategy/LocalFileUploadStrategy.java @@ -8,13 +8,13 @@ import com.cool.core.config.FileModeEnum; import com.cool.core.config.LocalFileProperties; import com.cool.core.exception.CoolException; import com.cool.core.exception.CoolPreconditions; -import com.cool.core.file.UpLoadModeType; import com.cool.modules.plugin.entity.PluginInfoEntity; import jakarta.servlet.http.HttpServletRequest; import java.io.File; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.Objects; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -70,7 +70,8 @@ public class LocalFileUploadStrategy implements FileUploadStrategy { * * @return 上传模式 */ - public UpLoadModeType getMode() { - return new UpLoadModeType(FileModeEnum.LOCAL); + public Map getMode(String key) { + return Map.of("mode", FileModeEnum.LOCAL.value(), + "type", FileModeEnum.LOCAL.type()); } } diff --git a/src/main/java/com/cool/core/plugin/service/CoolPluginService.java b/src/main/java/com/cool/core/plugin/service/CoolPluginService.java index 8b1fe0c..61aef19 100644 --- a/src/main/java/com/cool/core/plugin/service/CoolPluginService.java +++ b/src/main/java/com/cool/core/plugin/service/CoolPluginService.java @@ -102,9 +102,12 @@ public class CoolPluginService { // 把 ApplicationContext 对象传递打插件类中,使其在插件中也能正常使用spring bean对象 CoolPluginInvokers.setApplicationContext(pluginJson.getKey()); } catch (PersistenceException persistenceException) { - // 唯一键冲突 - CoolPreconditions.returnData( - new CoolPreconditions.ReturnData(1, "插件已存在,继续安装将覆盖")); + if (persistenceException.getMessage().contains("Duplicate entry")) { + // 唯一键冲突 + CoolPreconditions.returnData( + new CoolPreconditions.ReturnData(1, "插件已存在,继续安装将覆盖")); + } + CoolPreconditions.alwaysThrow(persistenceException.getMessage()); } catch (CoolException e) { FileUtil.del(jarFile); throw e; @@ -188,6 +191,8 @@ public class CoolPluginService { // 重新加载配置不更新 pluginInfo.setConfig(one.getConfig()); pluginInfo.getPluginJson().setConfig(one.getConfig()); + // 设置插件配置 + CoolPluginInvokers.setPluginJson(pluginInfo.getKey(), pluginInfo); CopyOptions options = CopyOptions.create().setIgnoreNullValue(true); // 忽略无变更,无需更新的字段 ignoreNoChange(pluginInfo, one); diff --git a/src/main/java/com/cool/core/plugin/service/DynamicJarLoaderService.java b/src/main/java/com/cool/core/plugin/service/DynamicJarLoaderService.java index 97a24df..8b5ff52 100644 --- a/src/main/java/com/cool/core/plugin/service/DynamicJarLoaderService.java +++ b/src/main/java/com/cool/core/plugin/service/DynamicJarLoaderService.java @@ -127,9 +127,9 @@ public class DynamicJarLoaderService { DynamicJarClassLoader dynamicJarClassLoader, boolean force) { if (!force && pluginMap.containsKey(key)) { - dynamicJarClassLoader.unload(); - CoolPreconditions.returnData( - new CoolPreconditions.ReturnData(1, "插件已存在,继续安装将覆盖")); +// dynamicJarClassLoader.unload(); +// CoolPreconditions.returnData( +// new CoolPreconditions.ReturnData(1, "插件已存在,继续安装将覆盖")); } if (ObjUtil.isNotEmpty(key)) { pluginMap.remove(key);