From cb13642e85a9d572d6f88f6ce7e3d7b0893dd713 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期五, 13 八月 2021 21:09:24 +0800
Subject: [PATCH] update 重写 OSS 模块相关实现 支持动态配置(页面配置)

---
 ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java                        |   28 ++
 ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageStrategy.java |   13 
 ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageStrategy.java         |   29 --
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java           |    6 
 ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageStrategy.java        |   32 --
 ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java                             |   36 ++-
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java             |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java     |   89 +++++++--
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java     |    2 
 ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java                         |   28 ++
 ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java              |  179 ++-----------------
 sql/oss.sql                                                                               |    1 
 ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageStrategy.java         |   41 +---
 ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageStrategy.java                  |    4 
 ruoyi-ui/src/views/system/oss/config.vue                                                  |    9 -
 ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageStrategy.java        |   34 +--
 16 files changed, 204 insertions(+), 329 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java
index f798ca2..60fed2a 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java
@@ -92,7 +92,7 @@
 	@Log(title = "浜戝瓨鍌ㄩ厤缃�", businessType = BusinessType.DELETE)
 	@DeleteMapping("/{ossConfigIds}")
 	public AjaxResult<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
-								   @PathVariable Integer[] ossConfigIds) {
+								   @PathVariable Long[] ossConfigIds) {
 		return toAjax(iSysOssConfigService.deleteWithValidByIds(Arrays.asList(ossConfigIds), true) ? 1 : 0);
 	}
 
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java
index 5b9da58..697e87f 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java
@@ -1,5 +1,10 @@
 package com.ruoyi.oss.constant;
 
+import com.ruoyi.oss.properties.CloudStorageProperties;
+
+import java.util.Arrays;
+import java.util.List;
+
 /**
  * 浜戝瓨鍌ㄥ父閲�
  *
@@ -8,13 +13,32 @@
 public class CloudConstant {
 
 	/**
+	 * OSS妯″潡KEY
+	 */
+	public static final String SYS_OSS_KEY = "sys_oss:";
+
+	/**
 	 * 浜戝瓨鍌ㄩ厤缃甂EY
 	 */
-	public final static String CLOUD_STORAGE_CONFIG_KEY = "sys.oss.cloudStorageService";
+	public static final String CLOUD_STORAGE_CONFIG_KEY = "CloudStorageConfig";
+
+	/**
+	 * 缂撳瓨閰嶇疆KEY
+	 */
+	public static final String CACHE_CONFIG_KEY = SYS_OSS_KEY + CLOUD_STORAGE_CONFIG_KEY;
 
 	/**
 	 * 棰勮鍒楄〃璧勬簮寮�鍏矺ey
 	 */
-	public final static String PEREVIEW_LIST_RESOURCE_KEY = "sys.oss.previewListResource";
+	public static final String PEREVIEW_LIST_RESOURCE_KEY = "sys.oss.previewListResource";
+
+	/**
+	 * 绯荤粺鏁版嵁ids
+	 */
+	public static final List<Integer> SYSTEM_DATA_IDS = Arrays.asList(1, 2, 3, 4);
+
+	public static String getPropertiesName(String key) {
+		return key + CloudStorageProperties.class.getSimpleName();
+	}
 
 }
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java
index 3191dc4..11a571c 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java
@@ -1,9 +1,10 @@
 package com.ruoyi.oss.enumd;
 
-import com.ruoyi.oss.service.impl.AliyunCloudStorageServiceImpl;
-import com.ruoyi.oss.service.impl.MinioCloudStorageServiceImpl;
-import com.ruoyi.oss.service.impl.QcloudCloudStorageServiceImpl;
-import com.ruoyi.oss.service.impl.QiniuCloudStorageServiceImpl;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.oss.service.impl.AliyunCloudStorageStrategy;
+import com.ruoyi.oss.service.impl.MinioCloudStorageStrategy;
+import com.ruoyi.oss.service.impl.QcloudCloudStorageStrategy;
+import com.ruoyi.oss.service.impl.QiniuCloudStorageStrategy;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
@@ -19,22 +20,22 @@
 	/**
 	 * 涓冪墰浜�
 	 */
-	QINIU("qiniu", QiniuCloudStorageServiceImpl.class),
+	QINIU("qiniu", QiniuCloudStorageStrategy.class),
 
 	/**
 	 * 闃块噷浜�
 	 */
-	ALIYUN("aliyun", AliyunCloudStorageServiceImpl.class),
+	ALIYUN("aliyun", AliyunCloudStorageStrategy.class),
 
 	/**
 	 * 鑵捐浜�
 	 */
-	QCLOUD("qcloud", QcloudCloudStorageServiceImpl.class),
+	QCLOUD("qcloud", QcloudCloudStorageStrategy.class),
 
 	/**
 	 * minio
 	 */
-	MINIO("minio", MinioCloudStorageServiceImpl.class);
+	MINIO("minio", MinioCloudStorageStrategy.class);
 
 	private final String value;
 
@@ -48,4 +49,15 @@
 		}
 		return null;
 	}
+
+	public static String getServiceName(String value) {
+		for (CloudServiceEnumd clazz : values()) {
+			if (clazz.getValue().equals(value)) {
+				return StringUtils.uncapitalize(clazz.getServiceClass().getSimpleName());
+			}
+		}
+		return null;
+	}
+
+
 }
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java
index 90e21ab..ea64b27 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java
@@ -1,15 +1,16 @@
 package com.ruoyi.oss.factory;
 
 import cn.hutool.core.convert.Convert;
-import cn.hutool.core.lang.Assert;
-import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.JsonUtils;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.reflect.ReflectUtils;
 import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.oss.constant.CloudConstant;
 import com.ruoyi.oss.enumd.CloudServiceEnumd;
 import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.service.ICloudStorageService;
+import com.ruoyi.oss.properties.CloudStorageProperties;
+import com.ruoyi.oss.service.ICloudStorageStrategy;
 
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -27,26 +28,37 @@
 		OssFactory.redisCache = SpringUtils.getBean(RedisCache.class);
 	}
 
-	private static final Map<String, ICloudStorageService> SERVICES = new ConcurrentHashMap<>();
+	private static final Map<String, ICloudStorageStrategy> SERVICES = new ConcurrentHashMap<>();
 
-	public static ICloudStorageService instance() {
-		String type = Convert.toStr(redisCache.getCacheObject(Constants.SYS_CONFIG_KEY + CloudConstant.CLOUD_STORAGE_CONFIG_KEY));
+	public static ICloudStorageStrategy instance() {
+		String type = Convert.toStr(redisCache.getCacheObject(CloudConstant.CACHE_CONFIG_KEY));
 		if (StringUtils.isEmpty(type)) {
 			throw new OssException("鏂囦欢瀛樺偍鏈嶅姟绫诲瀷鏃犳硶鎵惧埌!");
 		}
 		return instance(type);
 	}
 
-	public static ICloudStorageService instance(String type) {
-		ICloudStorageService service = SERVICES.get(type);
+	public static ICloudStorageStrategy instance(String type) {
+		ICloudStorageStrategy service = SERVICES.get(type);
 		if (service == null) {
-			service = (ICloudStorageService) SpringUtils.getBean(CloudServiceEnumd.getServiceClass(type));
+			Object json = redisCache.getCacheObject(CloudConstant.SYS_OSS_KEY + type);
+			CloudStorageProperties properties = JsonUtils.parseObject(json.toString(), CloudStorageProperties.class);
+			String beanName = CloudServiceEnumd.getServiceName(type);
+			ICloudStorageStrategy bean = (ICloudStorageStrategy) ReflectUtils.newInstance(CloudServiceEnumd.getServiceClass(type), properties);
+			SpringUtils.registerBean(beanName, bean);
+			service = SpringUtils.getBean(beanName);
+			SERVICES.put(type, bean);
 		}
 		return service;
 	}
 
-	public static void register(String type, ICloudStorageService iCloudStorageService) {
-		Assert.notNull(type, "type can't be null");
-		SERVICES.put(type, iCloudStorageService);
+	public static void destroy(String type) {
+		ICloudStorageStrategy service = SERVICES.get(type);
+		if (service == null) {
+			return;
+		}
+		SpringUtils.unregisterBean(CloudServiceEnumd.getServiceName(type));
+		SERVICES.remove(type);
 	}
+
 }
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java
index 64784a0..d1bafde 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java
@@ -1,9 +1,6 @@
 package com.ruoyi.oss.properties;
 
 import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
 
 /**
  * OSS浜戝瓨鍌� 閰嶇疆灞炴��
@@ -11,177 +8,41 @@
  * @author Lion Li
  */
 @Data
-@Component
-@ConfigurationProperties(prefix = "cloud-storage")
 public class CloudStorageProperties {
 
-	private Boolean previewListImage;
-
-	private QiniuProperties qiniu;
-
-	private AliyunProperties aliyun;
-
-	private QcloudProperties qcloud;
-
-	private MinioProperties minio;
+	/**
+	 * 鍩熷悕
+	 */
+	private String endpoint;
 
 	/**
-	 * 闃块噷浜� 閰嶇疆灞炴��
-	 *
-	 * @author Lion Li
+	 * 鍓嶇紑
 	 */
-	@Data
-	@NoArgsConstructor
-	public static class AliyunProperties {
-
-		/**
-		 * 闃块噷浜戠粦瀹氱殑鍩熷悕
-		 */
-		private String endpoint;
-
-		/**
-		 * 闃块噷浜戣矾寰勫墠缂�
-		 */
-		private String prefix;
-
-		/**
-		 * 闃块噷浜慉ccessKeyId
-		 */
-		private String accessKeyId;
-
-		/**
-		 * 闃块噷浜慉ccessKeySecret
-		 */
-		private String accessKeySecret;
-
-		/**
-		 * 闃块噷浜態ucketName
-		 */
-		private String bucketName;
-
-	}
+	private String prefix;
 
 	/**
-	 * Minio 閰嶇疆灞炴��
-	 *
-	 * @author Lion Li
+	 * ACCESS_KEY
 	 */
-	@Data
-	@NoArgsConstructor
-	public static class MinioProperties {
-
-		/**
-		 * minio鍩熷悕
-		 */
-		private String endpoint;
-
-		/**
-		 * minio ACCESS_KEY
-		 */
-		private String accessKey;
-
-		/**
-		 * minio SECRET_KEY
-		 */
-		private String secretKey;
-
-		/**
-		 * minio 瀛樺偍绌洪棿鍚�
-		 */
-		private String bucketName;
-
-	}
+	private String accessKey;
 
 	/**
-	 * 鑵捐浜慍OS 閰嶇疆灞炴��
-	 *
-	 * @author Lion Li
+	 * SECRET_KEY
 	 */
-	@Data
-	@NoArgsConstructor
-	public static class QcloudProperties {
-
-		/**
-		 * 鑵捐浜戠粦瀹氱殑鍩熷悕
-		 */
-		private String endpoint;
-
-		/**
-		 * 鑵捐浜戣矾寰勫墠缂�
-		 */
-		private String prefix;
-
-		/**
-		 * 鑵捐浜慡ecretId
-		 */
-		private String secretId;
-
-		/**
-		 * 鑵捐浜慡ecretKey
-		 */
-		private String secretKey;
-
-		/**
-		 * 鑵捐浜態ucketName
-		 */
-		private String bucketName;
-
-		/**
-		 * 涓冪墰鏄惁浣跨敤https
-		 */
-		private Boolean isHttps;
-
-		/**
-		 * 鑵捐浜慍OS鎵�灞炲湴鍖�
-		 */
-		private String region;
-
-	}
+	private String secretKey;
 
 	/**
-	 * 涓冪墰浜� 閰嶇疆灞炴��
-	 *
-	 * @author Lion Li
+	 * 瀛樺偍绌洪棿鍚�
 	 */
-	@Data
-	@NoArgsConstructor
-	public static class QiniuProperties {
+	private String bucketName;
 
-		/**
-		 * 涓冪墰缁戝畾鐨勫煙鍚�
-		 */
-		private String domain;
+	/**
+	 * 瀛樺偍鍖哄煙
+	 */
+	private String region;
 
-		/**
-		 * 涓冪墰璺緞鍓嶇紑
-		 */
-		private String prefix;
-
-		/**
-		 * 涓冪墰ACCESS_KEY
-		 */
-		private String accessKey;
-
-		/**
-		 * 涓冪墰SECRET_KEY
-		 */
-		private String secretKey;
-
-		/**
-		 * 涓冪墰瀛樺偍绌洪棿鍚�
-		 */
-		private String bucketName;
-
-		/**
-		 * 涓冪墰瀛樺偍鍖哄煙
-		 */
-		private String region;
-
-		/**
-		 * 涓冪墰鏄惁浣跨敤https
-		 */
-		private Boolean isHttps;
-
-	}
+	/**
+	 * 鏄惁https锛圷=鏄�,N=鍚︼級
+	 */
+	private String isHttps;
 
 }
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageStrategy.java
similarity index 95%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageStrategy.java
index a23c1f5..6f8ed85 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageStrategy.java
@@ -5,11 +5,11 @@
 import java.io.InputStream;
 
 /**
- * 浜戝瓨鍌ㄦ湇鍔℃帴鍙�
+ * 浜戝瓨鍌ㄧ瓥鐣�
  *
  * @author Lion Li
  */
-public interface ICloudStorageService {
+public interface ICloudStorageStrategy {
 
 	void createBucket();
 
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageService.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageStrategy.java
similarity index 79%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageService.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageStrategy.java
index 9bd0013..ec4dc37 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageService.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageStrategy.java
@@ -5,18 +5,20 @@
 import cn.hutool.core.util.IdUtil;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.oss.entity.UploadResult;
-import com.ruoyi.oss.service.ICloudStorageService;
-import org.springframework.beans.factory.InitializingBean;
+import com.ruoyi.oss.properties.CloudStorageProperties;
+import com.ruoyi.oss.service.ICloudStorageStrategy;
 
 import java.io.InputStream;
 import java.util.Date;
 
 /**
- * 浜戝瓨鍌�(鏀寔涓冪墰銆侀樋閲屼簯銆佽吘璁簯銆乵inio)
+ * 浜戝瓨鍌ㄧ瓥鐣�(鏀寔涓冪墰銆侀樋閲屼簯銆佽吘璁簯銆乵inio)
  *
  * @author Lion Li
  */
-public abstract class AbstractCloudStorageService implements ICloudStorageService, InitializingBean {
+public abstract class AbstractCloudStorageStrategy implements ICloudStorageStrategy {
+
+	protected CloudStorageProperties properties;
 
 	@Override
 	public abstract void createBucket();
@@ -53,9 +55,6 @@
 
 	@Override
 	public abstract UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType);
-
-	@Override
-	public abstract void afterPropertiesSet() throws Exception;
 
 	@Override
 	public abstract String getEndpointLink();
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageStrategy.java
similarity index 76%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageServiceImpl.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageStrategy.java
index 2abde1c..11c3476 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageServiceImpl.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageStrategy.java
@@ -1,6 +1,5 @@
 package com.ruoyi.oss.service.impl;
 
-import com.ruoyi.common.utils.StringUtils;
 import com.aliyun.oss.ClientConfiguration;
 import com.aliyun.oss.OSSClient;
 import com.aliyun.oss.common.auth.DefaultCredentialProvider;
@@ -8,42 +7,32 @@
 import com.aliyun.oss.model.CreateBucketRequest;
 import com.aliyun.oss.model.ObjectMetadata;
 import com.aliyun.oss.model.PutObjectRequest;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.oss.entity.UploadResult;
 import com.ruoyi.oss.enumd.CloudServiceEnumd;
 import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.factory.OssFactory;
 import com.ruoyi.oss.properties.CloudStorageProperties;
-import com.ruoyi.oss.properties.CloudStorageProperties.AliyunProperties;
-import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Service;
+import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
 
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 
 /**
- * 闃块噷浜戝瓨鍌�
+ * 闃块噷浜戝瓨鍌ㄧ瓥鐣�
  *
  * @author Lion Li
  */
-@Lazy
-@Service
-public class AliyunCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
+public class AliyunCloudStorageStrategy extends AbstractCloudStorageStrategy {
 
 	private final OSSClient client;
-	private final AliyunProperties properties;
 
-	@Autowired
-	public AliyunCloudStorageServiceImpl(CloudStorageProperties properties) {
-		this.properties = properties.getAliyun();
+	public AliyunCloudStorageStrategy(CloudStorageProperties cloudStorageProperties) {
+		properties = cloudStorageProperties;
 		try {
 			ClientConfiguration configuration = new ClientConfiguration();
 			DefaultCredentialProvider credentialProvider = new DefaultCredentialProvider(
-				this.properties.getAccessKeyId(),
-				this.properties.getAccessKeySecret());
-			client = new OSSClient(this.properties.getEndpoint(), credentialProvider, configuration);
+				properties.getAccessKey(), properties.getSecretKey());
+			client = new OSSClient(properties.getEndpoint(), credentialProvider, configuration);
 			createBucket();
 		} catch (Exception e) {
 			throw new IllegalArgumentException("闃块噷浜戝瓨鍌ㄩ厤缃敊璇�! 璇锋鏌ョ郴缁熼厤缃�!");
@@ -105,11 +94,6 @@
 	@Override
 	public UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType) {
 		return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
-	}
-
-	@Override
-	public void afterPropertiesSet() throws Exception {
-		OssFactory.register(getServiceType(), this);
 	}
 
 	@Override
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageStrategy.java
similarity index 85%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageStrategy.java
index 375307b..9edb421 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageStrategy.java
@@ -5,39 +5,29 @@
 import com.ruoyi.oss.enumd.CloudServiceEnumd;
 import com.ruoyi.oss.enumd.PolicyType;
 import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.factory.OssFactory;
 import com.ruoyi.oss.properties.CloudStorageProperties;
-import com.ruoyi.oss.properties.CloudStorageProperties.MinioProperties;
-import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
+import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
 import io.minio.*;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
 import org.springframework.http.MediaType;
-import org.springframework.stereotype.Service;
 
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 
 /**
- * minio瀛樺偍
+ * minio瀛樺偍绛栫暐
  *
  * @author Lion Li
  */
-@Lazy
-@Service
-public class MinioCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
+public class MinioCloudStorageStrategy extends AbstractCloudStorageStrategy {
 
 	private final MinioClient minioClient;
-	private final MinioProperties properties;
 
-	@Autowired
-	public MinioCloudStorageServiceImpl(CloudStorageProperties properties) {
-		this.properties = properties.getMinio();
+	public MinioCloudStorageStrategy(CloudStorageProperties cloudStorageProperties) {
+		properties = cloudStorageProperties;
 		try {
 			minioClient = MinioClient.builder()
-				.endpoint(this.properties.getEndpoint())
-				.credentials(this.properties.getAccessKey(), this.properties.getSecretKey())
+				.endpoint(properties.getEndpoint())
+				.credentials(properties.getAccessKey(), properties.getSecretKey())
 				.build();
 			createBucket();
 		} catch (Exception e) {
@@ -110,11 +100,6 @@
 	@Override
 	public UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType) {
 		return upload(inputStream, getPath("", suffix), contentType);
-	}
-
-	@Override
-	public void afterPropertiesSet() throws Exception {
-		OssFactory.register(getServiceType(), this);
 	}
 
 	@Override
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageStrategy.java
similarity index 77%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageServiceImpl.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageStrategy.java
index 523dff6..c30dcbd 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageServiceImpl.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageStrategy.java
@@ -1,6 +1,5 @@
 package com.ruoyi.oss.service.impl;
 
-import com.ruoyi.common.utils.StringUtils;
 import com.qcloud.cos.COSClient;
 import com.qcloud.cos.ClientConfig;
 import com.qcloud.cos.auth.BasicCOSCredentials;
@@ -8,45 +7,35 @@
 import com.qcloud.cos.http.HttpProtocol;
 import com.qcloud.cos.model.*;
 import com.qcloud.cos.region.Region;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.oss.entity.UploadResult;
 import com.ruoyi.oss.enumd.CloudServiceEnumd;
 import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.factory.OssFactory;
 import com.ruoyi.oss.properties.CloudStorageProperties;
-import com.ruoyi.oss.properties.CloudStorageProperties.QcloudProperties;
-import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Service;
+import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
 
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 
 /**
- * 鑵捐浜戝瓨鍌�
+ * 鑵捐浜戝瓨鍌ㄧ瓥鐣�
  *
  * @author Lion Li
  */
-@Lazy
-@Service
-public class QcloudCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
+public class QcloudCloudStorageStrategy extends AbstractCloudStorageStrategy {
 
 	private final COSClient client;
-	private final QcloudProperties properties;
 
-	@Autowired
-	public QcloudCloudStorageServiceImpl(CloudStorageProperties properties) {
-		this.properties = properties.getQcloud();
+	public QcloudCloudStorageStrategy(CloudStorageProperties cloudStorageProperties) {
+		properties = cloudStorageProperties;
 		try {
 			COSCredentials credentials = new BasicCOSCredentials(
-				this.properties.getSecretId(),
-				this.properties.getSecretKey());
+				properties.getAccessKey(), properties.getSecretKey());
 			// 鍒濆鍖栧鎴风閰嶇疆
 			ClientConfig clientConfig = new ClientConfig();
 			// 璁剧疆bucket鎵�鍦ㄧ殑鍖哄煙锛屽崕鍗楋細gz 鍗庡寳锛歵j 鍗庝笢锛歴h
-			clientConfig.setRegion(new Region(this.properties.getRegion()));
-			if (this.properties.getIsHttps()) {
+			clientConfig.setRegion(new Region(properties.getRegion()));
+			if ("Y".equals(properties.getIsHttps())) {
 				clientConfig.setHttpProtocol(HttpProtocol.https);
 			} else {
 				clientConfig.setHttpProtocol(HttpProtocol.http);
@@ -113,11 +102,6 @@
 	@Override
 	public UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType) {
 		return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
-	}
-
-	@Override
-	public void afterPropertiesSet() throws Exception {
-		OssFactory.register(getServiceType(),this);
 	}
 
 	@Override
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageStrategy.java
similarity index 70%
rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageServiceImpl.java
rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageStrategy.java
index f7b4d4e..ef22513 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageServiceImpl.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageStrategy.java
@@ -10,51 +10,37 @@
 import com.ruoyi.oss.entity.UploadResult;
 import com.ruoyi.oss.enumd.CloudServiceEnumd;
 import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.factory.OssFactory;
 import com.ruoyi.oss.properties.CloudStorageProperties;
-import com.ruoyi.oss.properties.CloudStorageProperties.QiniuProperties;
-import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Service;
+import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy;
 
 import java.io.InputStream;
 
 /**
- * 涓冪墰浜戝瓨鍌�
+ * 涓冪墰浜戝瓨鍌ㄧ瓥鐣�
  *
  * @author Lion Li
  */
-@Lazy
-@Service
-public class QiniuCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
+public class QiniuCloudStorageStrategy extends AbstractCloudStorageStrategy {
 
 	private final UploadManager uploadManager;
 	private final BucketManager bucketManager;
 	private final String token;
-	private final QiniuProperties properties;
 
-	@Autowired
-	public QiniuCloudStorageServiceImpl(CloudStorageProperties properties) {
-		this.properties = properties.getQiniu();
+	public QiniuCloudStorageStrategy(CloudStorageProperties cloudStorageProperties) {
+		properties = cloudStorageProperties;
 		try {
-			Configuration config = new Configuration(getRegion(this.properties.getRegion()));
+			Configuration config = new Configuration(getRegion(properties.getRegion()));
 			// https璁剧疆
 			config.useHttpsDomains = false;
-			if (this.properties.getIsHttps() != null) {
-				config.useHttpsDomains = this.properties.getIsHttps();
-			}
+			config.useHttpsDomains = "Y".equals(properties.getIsHttps());
 			uploadManager = new UploadManager(config);
-			Auth auth = Auth.create(
-				this.properties.getAccessKey(),
-				this.properties.getSecretKey());
-			String bucketName = this.properties.getBucketName();
+			Auth auth = Auth.create(properties.getAccessKey(), properties.getSecretKey());
+			String bucketName = properties.getBucketName();
 			token = auth.uploadToken(bucketName);
 			bucketManager = new BucketManager(auth, config);
 
 			if (!ArrayUtil.contains(bucketManager.buckets(), bucketName)) {
-				bucketManager.createBucket(bucketName, this.properties.getRegion());
+				bucketManager.createBucket(bucketName, properties.getRegion());
 			}
 		} catch (Exception e) {
 			throw new IllegalArgumentException("涓冪墰浜戝瓨鍌ㄩ厤缃敊璇�! 璇锋鏌ョ郴缁熼厤缃�!");
@@ -116,13 +102,8 @@
 	}
 
 	@Override
-	public void afterPropertiesSet() throws Exception {
-		OssFactory.register(getServiceType(),this);
-	}
-
-	@Override
 	public String getEndpointLink() {
-		return properties.getDomain();
+		return properties.getEndpoint();
 	}
 
 	private Region getRegion(String region) {
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java
index 2de440f..f1ece65 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java
@@ -48,7 +48,7 @@
 	 * @param isValid 鏄惁鏍¢獙,true-鍒犻櫎鍓嶆牎楠�,false-涓嶆牎楠�
 	 * @return
 	 */
-	Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid);
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
 	/**
 	 * 鍚敤鍋滅敤鐘舵��
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java
index 95f0869..49bf1fa 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java
@@ -2,7 +2,6 @@
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -10,23 +9,26 @@
 import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
 import com.ruoyi.common.core.page.PagePlus;
 import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.exception.CustomException;
+import com.ruoyi.common.utils.JsonUtils;
 import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.oss.constant.CloudConstant;
-import com.ruoyi.system.domain.SysConfig;
+import com.ruoyi.oss.factory.OssFactory;
 import com.ruoyi.system.domain.SysOssConfig;
 import com.ruoyi.system.domain.bo.SysOssConfigBo;
 import com.ruoyi.system.domain.vo.SysOssConfigVo;
 import com.ruoyi.system.mapper.SysOssConfigMapper;
-import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.ISysOssConfigService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.PostConstruct;
 import java.util.Collection;
+import java.util.List;
 
 /**
  * 浜戝瓨鍌ㄩ厤缃甋ervice涓氬姟灞傚鐞�
@@ -39,7 +41,22 @@
 @Service
 public class SysOssConfigServiceImpl extends ServicePlusImpl<SysOssConfigMapper, SysOssConfig, SysOssConfigVo> implements ISysOssConfigService {
 
-	private final ISysConfigService iSysConfigService;
+	private final RedisCache redisCache;
+
+	/**
+	 * 椤圭洰鍚姩鏃讹紝鍒濆鍖栧弬鏁板埌缂撳瓨锛屽姞杞介厤缃被
+	 */
+	@PostConstruct
+	public void init() {
+		List<SysOssConfig> list = list();
+		for (SysOssConfig config : list) {
+			String configKey = config.getConfigKey();
+			if ("0".equals(config.getStatus())) {
+				redisCache.setCacheObject(CloudConstant.CACHE_CONFIG_KEY, configKey);
+			}
+			redisCache.setCacheObject(getCacheKey(configKey), JsonUtils.toJsonString(config));
+		}
+	}
 
     @Override
     public SysOssConfigVo queryById(Integer ossConfigId){
@@ -63,16 +80,29 @@
 
     @Override
     public Boolean insertByBo(SysOssConfigBo bo) {
-        SysOssConfig add = BeanUtil.toBean(bo, SysOssConfig.class);
-        validEntityBeforeSave(add);
-        return save(add);
+        SysOssConfig config = BeanUtil.toBean(bo, SysOssConfig.class);
+        validEntityBeforeSave(config);
+        boolean flag = save(config);
+		if (flag) {
+			redisCache.setCacheObject(
+				getCacheKey(config.getConfigKey()),
+				JsonUtils.toJsonString(config));
+		}
+		return flag;
     }
 
     @Override
     public Boolean updateByBo(SysOssConfigBo bo) {
-        SysOssConfig update = BeanUtil.toBean(bo, SysOssConfig.class);
-        validEntityBeforeSave(update);
-        return updateById(update);
+        SysOssConfig config = BeanUtil.toBean(bo, SysOssConfig.class);
+        validEntityBeforeSave(config);
+		boolean flag = updateById(config);
+		if (flag) {
+			OssFactory.destroy(config.getConfigKey());
+			redisCache.setCacheObject(
+				getCacheKey(config.getConfigKey()),
+				JsonUtils.toJsonString(config));
+		}
+		return flag;
     }
 
     /**
@@ -86,13 +116,21 @@
     }
 
     @Override
-    public Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid) {
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
     	if(isValid) {
-			if (CollUtil.containsAny(ids, CollUtil.newArrayList(1, 2, 3, 4))) {
+			if (CollUtil.containsAny(ids, CloudConstant.SYSTEM_DATA_IDS)) {
 				throw new CustomException("绯荤粺鍐呯疆, 涓嶅彲鍒犻櫎!");
 			}
 		}
-        return removeByIds(ids);
+        boolean flag = removeByIds(ids);
+    	if (flag) {
+			for (Long configId : ids) {
+				SysOssConfig config = getById(configId);
+				OssFactory.destroy(config.getConfigKey());
+				redisCache.deleteObject(getCacheKey(config.getConfigKey()));
+			}
+		}
+    	return flag;
     }
 
 	/**
@@ -115,18 +153,23 @@
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public int updateOssConfigStatus(SysOssConfigBo bo) {
-    	SysConfig sysConfig = iSysConfigService.getOne(new LambdaQueryWrapper<SysConfig>()
-				.eq(SysConfig::getConfigKey, CloudConstant.CLOUD_STORAGE_CONFIG_KEY));
-    	if(ObjectUtil.isNotNull(sysConfig)){
-    		sysConfig.setConfigValue(bo.getConfigKey());
-    		iSysConfigService.updateConfig(sysConfig);
-		} else {
-    		throw new CustomException("缂哄皯'浜戝瓨鍌ㄩ厤缃甂EY'鍙傛暟!");
-		}
 		SysOssConfig sysOssConfig = BeanUtil.toBean(bo, SysOssConfig.class);
-		baseMapper.update(null, new LambdaUpdateWrapper<SysOssConfig>()
+		int row = baseMapper.update(null, new LambdaUpdateWrapper<SysOssConfig>()
 			.set(SysOssConfig::getStatus, "1"));
-		return baseMapper.updateById(sysOssConfig);
+		row += baseMapper.updateById(sysOssConfig);
+		if (row > 0) {
+			redisCache.setCacheObject(CloudConstant.CACHE_CONFIG_KEY, sysOssConfig.getConfigKey());
+		}
+		return row;
 	}
 
+	/**
+	 * 璁剧疆cache key
+	 *
+	 * @param configKey 鍙傛暟閿�
+	 * @return 缂撳瓨閿甼ey
+	 */
+	private String getCacheKey(String configKey) {
+		return CloudConstant.SYS_OSS_KEY + configKey;
+	}
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java
index 771834a..28f0f16 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java
@@ -10,7 +10,7 @@
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.oss.entity.UploadResult;
 import com.ruoyi.oss.factory.OssFactory;
-import com.ruoyi.oss.service.ICloudStorageService;
+import com.ruoyi.oss.service.ICloudStorageStrategy;
 import com.ruoyi.system.domain.SysOss;
 import com.ruoyi.system.domain.bo.SysOssBo;
 import com.ruoyi.system.domain.vo.SysOssVo;
@@ -56,7 +56,7 @@
 	public SysOss upload(MultipartFile file) {
 		String originalfileName = file.getOriginalFilename();
 		String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
-		ICloudStorageService storage = OssFactory.instance();
+		ICloudStorageStrategy storage = OssFactory.instance();
 		UploadResult uploadResult;
 		try {
 			uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType());
@@ -81,7 +81,7 @@
 		}
 		List<SysOss> list = listByIds(ids);
 		for (SysOss sysOss : list) {
-			ICloudStorageService storage = OssFactory.instance(sysOss.getService());
+			ICloudStorageStrategy storage = OssFactory.instance(sysOss.getService());
 			storage.delete(sysOss.getUrl());
 		}
 		return removeByIds(ids);
diff --git a/ruoyi-ui/src/views/system/oss/config.vue b/ruoyi-ui/src/views/system/oss/config.vue
index 89580ec..c6ea3a6 100644
--- a/ruoyi-ui/src/views/system/oss/config.vue
+++ b/ruoyi-ui/src/views/system/oss/config.vue
@@ -158,15 +158,6 @@
         <el-form-item label="鍩�" prop="region">
           <el-input v-model="form.region" placeholder="璇疯緭鍏ュ煙" />
         </el-form-item>
-        <el-form-item label="鐘舵��">
-          <el-radio-group v-model="form.status">
-            <el-radio
-              v-for="dict in statusOptions"
-              :key="dict.dictValue"
-              :label="dict.dictValue"
-            >{{dict.dictLabel}}</el-radio>
-          </el-radio-group>
-        </el-form-item>
         <el-form-item label="澶囨敞" prop="remark">
           <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
         </el-form-item>
diff --git a/sql/oss.sql b/sql/oss.sql
index a86641e..2ecfacf 100644
--- a/sql/oss.sql
+++ b/sql/oss.sql
@@ -40,7 +40,6 @@
     primary key (oss_config_id)
 ) engine=innodb comment='浜戝瓨鍌ㄩ厤缃〃';
 
-insert into sys_config values(10, 'OSS浜戝瓨鍌ㄦ湇鍔″晢',       'sys.oss.cloudStorageService',      'minio',          'Y', 'admin', sysdate(), '', null, 'OSS浜戝瓨鍌ㄦ湇鍔″晢(qiniu:涓冪墰浜�, aliyun:闃块噷浜�, qcloud:鑵捐浜�, minio: Minio)');
 insert into sys_config values(11, 'OSS棰勮鍒楄〃璧勬簮寮�鍏�',   'sys.oss.previewListResource',      'true',           'Y', 'admin', sysdate(), '', null, 'true:寮�鍚�, false:鍏抽棴');
 
 insert into sys_menu values('118',  '鏂囦欢绠$悊', '1',   '10', 'oss',     'system/oss/index',      1, 0, 'C', '0', '0', 'system:oss:list',      'upload',       'admin', sysdate(), '', null, '鏂囦欢绠$悊鑿滃崟');

--
Gitblit v1.9.3