From 089e288a6e55d2ae527ad733bbb8b8b5eaad6107 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期日, 18 七月 2021 18:20:21 +0800
Subject: [PATCH] update 使用 策略+工厂 重写OSS模块

---
 ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageService.java |   47 ++
 ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QcloudProperties.java                   |   45 +++
 ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java     |   54 ++-
 ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java                       |   36 ++
 ruoyi-oss/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java             |   54 ++-
 ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java                |   52 ++-
 ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java                            |   40 ++
 ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageServiceImpl.java    |   66 ++-
 ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QiniuProperties.java                    |   40 ++
 ruoyi-oss/src/main/resources/mapper/system/SysOssMapper.xml                              |   25 
 ruoyi-oss/src/main/java/com/ruoyi/system/service/ISysOssService.java                     |   16 
 /dev/null                                                                                |   30 --
 ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java                        |   39 --
 ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java             |   25 +
 ruoyi-oss/pom.xml                                                                        |    4 
 ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageServiceImpl.java     |   66 ++-
 ruoyi-oss/src/main/java/com/ruoyi/oss/properties/AliyunProperties.java                   |   40 ++
 ruoyi-oss/src/main/java/com/ruoyi/oss/properties/MinioProperties.java                    |   40 ++
 ruoyi-oss/src/main/java/com/ruoyi/system/mapper/SysOssMapper.java                        |    3 
 sql/oss.sql                                                                              |   24 +
 ruoyi-oss/src/main/java/com/ruoyi/system/domain/SysOss.java                              |   31 +
 ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageServiceImpl.java    |   54 ++-
 ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java                  |   10 
 23 files changed, 602 insertions(+), 239 deletions(-)

diff --git a/ruoyi-oss/pom.xml b/ruoyi-oss/pom.xml
index ad8197c..9d9fe21 100644
--- a/ruoyi-oss/pom.xml
+++ b/ruoyi-oss/pom.xml
@@ -22,6 +22,10 @@
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-common</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-system</artifactId>
+        </dependency>
 
         <dependency>
             <groupId>com.qiniu</groupId>
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/config/CloudStorageConfig.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/config/CloudStorageConfig.java
deleted file mode 100644
index c0f7ee9..0000000
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/config/CloudStorageConfig.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.ruoyi.oss.config;
-
-import lombok.Data;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-
-import java.io.Serializable;
-
-/**
- * 浜戝瓨鍌ㄩ厤缃俊鎭�
- */
-@Data
-@Configuration
-@ConfigurationProperties(prefix = "cloud-storage")
-public class CloudStorageConfig implements Serializable {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 绫诲瀷 1锛氫竷鐗� 2锛氶樋閲屼簯 3锛氳吘璁簯 4: minio
-	 */
-	private Integer type;
-
-	/**
-	 * 涓冪墰缁戝畾鐨勫煙鍚�
-	 */
-	private String domain;
-
-	/**
-	 * 涓冪墰璺緞鍓嶇紑
-	 */
-	private String prefix;
-
-	/**
-	 * 涓冪墰ACCESS_KEY
-	 */
-	private String accessKey;
-
-	/**
-	 * 涓冪墰SECRET_KEY
-	 */
-	private String secretKey;
-
-	/**
-	 * 涓冪墰瀛樺偍绌洪棿鍚�
-	 */
-	private String bucketName;
-
-	/**
-	 * 鑵捐浜慉ppId
-	 */
-	private Integer qcloudAppId;
-
-	/**
-	 * 鑵捐浜慡ecretId
-	 */
-	private String qcloudSecretId;
-
-	/**
-	 * 鑵捐浜慡ecretKey
-	 */
-	private String qcloudSecretKey;
-
-	/**
-	 * 鑵捐浜慍OS鎵�灞炲湴鍖�
-	 */
-	private String qcloudRegion;
-
-}
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 ac4dff5..fcb2ef8 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,43 +1,16 @@
 package com.ruoyi.oss.constant;
 
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-
+/**
+ * 浜戝瓨鍌ㄥ父閲�
+ *
+ * @author Lion Li
+ */
 public class CloudConstant {
 
 	/**
 	 * 浜戝瓨鍌ㄩ厤缃甂EY
 	 */
-	public final static String CLOUD_STORAGE_CONFIG_KEY = "sys.oss.cloud-storage";
+	public final static String CLOUD_STORAGE_CONFIG_KEY = "sys.oss.cloudStorageService";
 
-	/**
-	 * 浜戞湇鍔″晢
-	 */
-	@Getter
-	@AllArgsConstructor
-	public enum CloudService {
 
-		/**
-		 * 涓冪墰浜�
-		 */
-		QINIU(1),
-
-		/**
-		 * 闃块噷浜�
-		 */
-		ALIYUN(2),
-
-		/**
-		 * 鑵捐浜�
-		 */
-		QCLOUD(3),
-
-		/**
-		 * minio
-		 */
-		MINIO(4);
-
-		private final int value;
-	}
 }
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
new file mode 100644
index 0000000..56e0906
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java
@@ -0,0 +1,36 @@
+package com.ruoyi.oss.enumd;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 浜戝瓨鍌ㄦ湇鍔″晢鏋氫妇
+ *
+ * @author LionLi
+ */
+@Getter
+@AllArgsConstructor
+public enum CloudServiceEnumd {
+
+	/**
+	 * 涓冪墰浜�
+	 */
+	QINIU("qiniu"),
+
+	/**
+	 * 闃块噷浜�
+	 */
+	ALIYUN("aliyun"),
+
+	/**
+	 * 鑵捐浜�
+	 */
+	QCLOUD("qcloud"),
+
+	/**
+	 * minio
+	 */
+	MINIO("minio");
+
+	private final String value;
+}
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
new file mode 100644
index 0000000..b549d21
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java
@@ -0,0 +1,40 @@
+package com.ruoyi.oss.factory;
+
+import cn.hutool.core.lang.Assert;
+import com.ruoyi.common.utils.spring.SpringUtils;
+import com.ruoyi.oss.constant.CloudConstant;
+import com.ruoyi.oss.service.ICloudStorageService;
+import com.ruoyi.system.service.ISysConfigService;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 鏂囦欢涓婁紶Factory
+ *
+ * @author Lion Li
+ */
+public class OssFactory {
+
+    private static ISysConfigService sysConfigService;
+
+	static {
+		OssFactory.sysConfigService = SpringUtils.getBean(ISysConfigService.class);
+	}
+
+	private static final Map<String, ICloudStorageService> SERVICES = new ConcurrentHashMap<>();
+
+	public static ICloudStorageService instance() {
+		String type = sysConfigService.selectConfigByKey(CloudConstant.CLOUD_STORAGE_CONFIG_KEY);
+		return SERVICES.get(type);
+	}
+
+	public static ICloudStorageService instance(String type) {
+		return SERVICES.get(type);
+	}
+
+	public static void register(String type, ICloudStorageService iCloudStorageService) {
+		Assert.notNull(type, "type can't be null");
+		SERVICES.put(type, iCloudStorageService);
+	}
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/AliyunProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/AliyunProperties.java
new file mode 100644
index 0000000..b642f9c
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/AliyunProperties.java
@@ -0,0 +1,40 @@
+package com.ruoyi.oss.properties;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 闃块噷浜� 閰嶇疆灞炴��
+ *
+ * @author Lion Li
+ */
+@Data
+@NoArgsConstructor
+public class AliyunProperties {
+
+	/**
+	 * 闃块噷浜戠粦瀹氱殑鍩熷悕
+	 */
+	private String endpoint;
+
+	/**
+	 * 闃块噷浜戣矾寰勫墠缂�
+	 */
+	private String prefix;
+
+	/**
+	 * 闃块噷浜慉ccessKeyId
+	 */
+	private String accessKeyId;
+
+	/**
+	 * 闃块噷浜慉ccessKeySecret
+	 */
+	private String accessKeySecret;
+
+	/**
+	 * 闃块噷浜態ucketName
+	 */
+	private String bucketName;
+
+}
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
new file mode 100644
index 0000000..b8c38c1
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java
@@ -0,0 +1,25 @@
+package com.ruoyi.oss.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * OSS浜戝瓨鍌� 閰嶇疆灞炴��
+ *
+ * @author Lion Li
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "cloud-storage")
+public class CloudStorageProperties {
+
+	private QiniuProperties qiniu;
+
+	private AliyunProperties aliyun;
+
+	private QcloudProperties qcloud;
+
+	private MinioProperties minio;
+
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/MinioProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/MinioProperties.java
new file mode 100644
index 0000000..94313d4
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/MinioProperties.java
@@ -0,0 +1,40 @@
+package com.ruoyi.oss.properties;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * Minio 閰嶇疆灞炴��
+ *
+ * @author Lion Li
+ */
+@Data
+@NoArgsConstructor
+public class MinioProperties {
+
+	/**
+	 * 涓冪墰缁戝畾鐨勫煙鍚�
+	 */
+	private String endpoint;
+
+	/**
+	 * 涓冪墰璺緞鍓嶇紑
+	 */
+	private String prefix;
+
+	/**
+	 * 涓冪墰ACCESS_KEY
+	 */
+	private String accessKey;
+
+	/**
+	 * 涓冪墰SECRET_KEY
+	 */
+	private String secretKey;
+
+	/**
+	 * 涓冪墰瀛樺偍绌洪棿鍚�
+	 */
+	private String bucketName;
+
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QcloudProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QcloudProperties.java
new file mode 100644
index 0000000..c6d17d9
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QcloudProperties.java
@@ -0,0 +1,45 @@
+package com.ruoyi.oss.properties;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 鑵捐浜慍OS 閰嶇疆灞炴��
+ *
+ * @author Lion Li
+ */
+@Data
+@NoArgsConstructor
+public class QcloudProperties {
+
+	/**
+	 * 鑵捐浜戠粦瀹氱殑鍩熷悕
+	 */
+	private String domain;
+
+	/**
+	 * 鑵捐浜戣矾寰勫墠缂�
+	 */
+	private String prefix;
+
+	/**
+	 * 鑵捐浜慡ecretId
+	 */
+	private String secretId;
+
+	/**
+	 * 鑵捐浜慡ecretKey
+	 */
+	private String secretKey;
+
+	/**
+	 * 鑵捐浜態ucketName
+	 */
+	private String bucketName;
+
+	/**
+	 * 鑵捐浜慍OS鎵�灞炲湴鍖�
+	 */
+	private String region;
+
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QiniuProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QiniuProperties.java
new file mode 100644
index 0000000..f671c5a
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QiniuProperties.java
@@ -0,0 +1,40 @@
+package com.ruoyi.oss.properties;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 涓冪墰浜� 閰嶇疆灞炴��
+ *
+ * @author Lion Li
+ */
+@Data
+@NoArgsConstructor
+public class QiniuProperties {
+
+	/**
+	 * 涓冪墰缁戝畾鐨勫煙鍚�
+	 */
+	private String domain;
+
+	/**
+	 * 涓冪墰璺緞鍓嶇紑
+	 */
+	private String prefix;
+
+	/**
+	 * 涓冪墰ACCESS_KEY
+	 */
+	private String accessKey;
+
+	/**
+	 * 涓冪墰SECRET_KEY
+	 */
+	private String secretKey;
+
+	/**
+	 * 涓冪墰瀛樺偍绌洪棿鍚�
+	 */
+	private String bucketName;
+
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java
index 19d623a..a6a29c7 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java
@@ -2,9 +2,19 @@
 
 import java.io.InputStream;
 
+/**
+ * 浜戝瓨鍌ㄦ湇鍔℃帴鍙�
+ *
+ * @author Lion Li
+ */
 public interface ICloudStorageService {
 
 	/**
+	 * 鑾峰彇鏈嶅姟鍟嗙被鍨�
+	 */
+	String getServiceType();
+
+	/**
 	 * 鏂囦欢璺緞
 	 *
 	 * @param prefix 鍓嶇紑
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/AbstractCloudStorageService.java
index cbdbd93..a154670 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/AbstractCloudStorageService.java
@@ -1,36 +1,55 @@
 package com.ruoyi.oss.service.abstractd;
 
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
-import com.ruoyi.oss.config.CloudStorageConfig;
 import com.ruoyi.oss.service.ICloudStorageService;
-import com.ruoyi.oss.utils.DateUtils;
+import org.springframework.beans.factory.InitializingBean;
 
-import java.util.UUID;
+import java.io.InputStream;
+import java.util.Date;
 
 /**
  * 浜戝瓨鍌�(鏀寔涓冪墰銆侀樋閲屼簯銆佽吘璁簯銆乵inio)
+ *
+ * @author Lion Li
  */
-public abstract class AbstractCloudStorageService implements ICloudStorageService {
+public abstract class AbstractCloudStorageService implements ICloudStorageService, InitializingBean {
 
-	/**
-	 * 浜戝瓨鍌ㄩ厤缃俊鎭�
-	 */
-	protected CloudStorageConfig config;
-
-	public int getServiceType() {
-		return config.getType();
-	}
+	@Override
+	public abstract String getServiceType();
 
 	@Override
 	public String getPath(String prefix, String suffix) {
 		// 鐢熸垚uuid
-		String uuid = UUID.randomUUID().toString().replaceAll("-", "");
+		String uuid = IdUtil.fastSimpleUUID();
 		// 鏂囦欢璺緞
-		String path = DateUtils.dateTime() + "/" + uuid;
+		String path = DateUtil.format(new Date(), "yyyyMMdd") + "/" + uuid;
 		if (StrUtil.isNotBlank(prefix)) {
 			path = prefix + "/" + path;
 		}
 		return path + suffix;
 	}
 
+	@Override
+	public abstract String upload(byte[] data, String path);
+
+	@Override
+	public abstract void delete(String path);
+
+	@Override
+	public String upload(InputStream inputStream, String path) {
+		byte[] data = IoUtil.readBytes(inputStream);
+		return this.upload(data, path);
+	}
+
+	@Override
+	public abstract String uploadSuffix(byte[] data, String suffix);
+
+	@Override
+	public abstract String uploadSuffix(InputStream inputStream, String suffix);
+
+	@Override
+	public abstract void afterPropertiesSet() throws Exception;
 }
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/AliyunCloudStorageServiceImpl.java
index 8fbe16c..a0782fe 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/AliyunCloudStorageServiceImpl.java
@@ -1,28 +1,47 @@
 package com.ruoyi.oss.service.impl;
 
+import com.aliyun.oss.ClientConfiguration;
 import com.aliyun.oss.OSSClient;
-import com.ruoyi.oss.config.CloudStorageConfig;
+import com.aliyun.oss.common.auth.DefaultCredentialProvider;
+import com.ruoyi.oss.enumd.CloudServiceEnumd;
 import com.ruoyi.oss.exception.OssException;
+import com.ruoyi.oss.factory.OssFactory;
+import com.ruoyi.oss.properties.AliyunProperties;
+import com.ruoyi.oss.properties.CloudStorageProperties;
 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 java.io.ByteArrayInputStream;
 import java.io.InputStream;
 
 /**
  * 闃块噷浜戝瓨鍌�
+ *
+ * @author Lion Li
  */
-public class AliyunCloudStorageServiceImpl extends AbstractCloudStorageService {
+@Lazy
+@Service
+public class AliyunCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
 
-	private OSSClient client;
+	private final OSSClient client;
+	private final AliyunProperties properties;
 
-	public AliyunCloudStorageServiceImpl(CloudStorageConfig config) {
-		this.config = config;
-		// 鍒濆鍖�
-		init();
+	@Autowired
+	public AliyunCloudStorageServiceImpl(CloudStorageProperties properties) {
+		this.properties = properties.getAliyun();
+		ClientConfiguration configuration = new ClientConfiguration();
+		DefaultCredentialProvider credentialProvider = new DefaultCredentialProvider(
+			this.properties.getAccessKeyId(),
+			this.properties.getAccessKeySecret());
+		client = new OSSClient(this.properties.getEndpoint(), credentialProvider, configuration);
 	}
 
-	private void init() {
-		client = new OSSClient(config.getDomain(), config.getAccessKey(), config.getSecretKey());
+	@Override
+	public String getServiceType() {
+		return CloudServiceEnumd.ALIYUN.getValue();
 	}
 
 	@Override
@@ -33,18 +52,18 @@
 	@Override
 	public String upload(InputStream inputStream, String path) {
 		try {
-			client.putObject(config.getBucketName(), path, inputStream);
+			client.putObject(this.properties.getBucketName(), path, inputStream);
 		} catch (Exception e) {
 			throw new OssException("涓婁紶鏂囦欢澶辫触锛岃妫�鏌ラ厤缃俊鎭�");
 		}
-		return config.getDomain() + "/" + path;
+		return this.properties.getEndpoint() + "/" + path;
 	}
 
 	@Override
 	public void delete(String path) {
-		path = path.replace(config.getDomain() + "/", "");
+		path = path.replace(this.properties.getEndpoint() + "/", "");
 		try {
-			client.deleteObject(config.getBucketName(), path);
+			client.deleteObject(this.properties.getBucketName(), path);
 		} catch (Exception e) {
 			throw new OssException("涓婁紶鏂囦欢澶辫触锛岃妫�鏌ラ厤缃俊鎭�");
 		}
@@ -52,11 +71,16 @@
 
 	@Override
 	public String uploadSuffix(byte[] data, String suffix) {
-		return upload(data, getPath(config.getPrefix(), suffix));
+		return upload(data, getPath(this.properties.getPrefix(), suffix));
 	}
 
 	@Override
 	public String uploadSuffix(InputStream inputStream, String suffix) {
-		return upload(inputStream, getPath(config.getPrefix(), suffix));
+		return upload(inputStream, getPath(this.properties.getPrefix(), suffix));
+	}
+
+	@Override
+	public void afterPropertiesSet() throws Exception {
+		OssFactory.register(getServiceType(),this);
 	}
 }
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/MinioCloudStorageServiceImpl.java
index bf02831..480f5e9 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/MinioCloudStorageServiceImpl.java
@@ -1,31 +1,43 @@
 package com.ruoyi.oss.service.impl;
 
-import cn.hutool.core.io.IoUtil;
-import com.ruoyi.oss.config.CloudStorageConfig;
+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.MinioProperties;
 import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
 import io.minio.MinioClient;
+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 java.io.InputStream;
 
 /**
  * minio瀛樺偍
+ *
+ * @author Lion Li
  */
-public class MinioCloudStorageServiceImpl extends AbstractCloudStorageService {
+@Lazy
+@Service
+public class MinioCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
 
-	private MinioClient minioClient;
+	private final MinioClient minioClient;
+	private final MinioProperties properties;
 
-	public MinioCloudStorageServiceImpl(CloudStorageConfig config) {
-		this.config = config;
-		// 鍒濆鍖�
-		init();
+	@Autowired
+	public MinioCloudStorageServiceImpl(CloudStorageProperties properties) {
+		this.properties = properties.getMinio();
+		minioClient = MinioClient.builder()
+			.endpoint(this.properties.getEndpoint())
+			.credentials(this.properties.getAccessKey(), this.properties.getSecretKey())
+			.build();
 	}
 
-	private void init() {
-		minioClient = MinioClient.builder()
-			.endpoint(config.getDomain())
-			.credentials(config.getAccessKey(), config.getSecretKey())
-			.build();
+	@Override
+	public String getServiceType() {
+		return CloudServiceEnumd.MINIO.getValue();
 	}
 
 	@Override
@@ -35,7 +47,7 @@
 		} catch (Exception e) {
 			throw new OssException("涓婁紶鏂囦欢澶辫触锛岃鏍稿Minio閰嶇疆淇℃伅");
 		}
-		return config.getDomain() + "/" + path;
+		return this.properties.getEndpoint() + "/" + path;
 	}
 
 	@Override
@@ -48,19 +60,17 @@
 	}
 
 	@Override
-	public String upload(InputStream inputStream, String path) {
-		byte[] data = IoUtil.readBytes(inputStream);
-		return this.upload(data, path);
-	}
-
-	@Override
 	public String uploadSuffix(byte[] data, String suffix) {
-		return upload(data, getPath(config.getPrefix(), suffix));
+		return upload(data, getPath(this.properties.getPrefix(), suffix));
 	}
 
 	@Override
 	public String uploadSuffix(InputStream inputStream, String suffix) {
-		return upload(inputStream, getPath(config.getPrefix(), suffix));
+		return upload(inputStream, getPath(this.properties.getPrefix(), suffix));
 	}
 
+	@Override
+	public void afterPropertiesSet() throws Exception {
+		OssFactory.register(getServiceType(),this);
+	}
 }
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/QcloudCloudStorageServiceImpl.java
index 6681310..4cc7bf2 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/QcloudCloudStorageServiceImpl.java
@@ -1,33 +1,50 @@
 package com.ruoyi.oss.service.impl;
 
-import cn.hutool.core.io.IoUtil;
 import com.qcloud.cos.COSClient;
-import com.ruoyi.oss.config.CloudStorageConfig;
+import com.qcloud.cos.ClientConfig;
+import com.qcloud.cos.auth.BasicCOSCredentials;
+import com.qcloud.cos.auth.COSCredentials;
+import com.qcloud.cos.region.Region;
+import com.ruoyi.oss.enumd.CloudServiceEnumd;
+import com.ruoyi.oss.factory.OssFactory;
+import com.ruoyi.oss.properties.CloudStorageProperties;
+import com.ruoyi.oss.properties.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 java.io.InputStream;
 
 /**
  * 鑵捐浜戝瓨鍌�
+ *
+ * @author Lion Li
  */
-public class QcloudCloudStorageServiceImpl extends AbstractCloudStorageService {
+@Lazy
+@Service
+public class QcloudCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
 
-	private COSClient client;
+	private final COSClient client;
+	private final QcloudProperties properties;
 
-	public QcloudCloudStorageServiceImpl(CloudStorageConfig config) {
-		this.config = config;
-		// 鍒濆鍖�
-		init();
+	@Autowired
+	public QcloudCloudStorageServiceImpl(CloudStorageProperties properties) {
+		this.properties = properties.getQcloud();
+        COSCredentials credentials = new BasicCOSCredentials(
+			this.properties.getSecretId(),
+			this.properties.getSecretKey());
+        // 鍒濆鍖栧鎴风閰嶇疆
+        ClientConfig clientConfig = new ClientConfig();
+        // 璁剧疆bucket鎵�鍦ㄧ殑鍖哄煙锛屽崕鍗楋細gz 鍗庡寳锛歵j 鍗庝笢锛歴h
+        clientConfig.setRegion(new Region(this.properties.getRegion()));
+        client = new COSClient(credentials, clientConfig);
 	}
 
-	private void init() {
-//        Credentials credentials = new Credentials(config.getQcloudAppId(), config.getQcloudSecretId(),
-//                config.getQcloudSecretKey());
-//         鍒濆鍖栧鎴风閰嶇疆
-//        ClientConfig clientConfig = new ClientConfig();
-//        // 璁剧疆bucket鎵�鍦ㄧ殑鍖哄煙锛屽崕鍗楋細gz 鍗庡寳锛歵j 鍗庝笢锛歴h
-//        clientConfig.setRegion(config.getQcloudRegion());
-//        client = new COSClient(clientConfig, credentials);
+	@Override
+	public String getServiceType() {
+		return CloudServiceEnumd.QCLOUD.getValue();
 	}
 
 	@Override
@@ -43,7 +60,7 @@
 //        if (Convert.toInt(jsonObject.get("code")) != 0) {
 //            throw new OssException("鏂囦欢涓婁紶澶辫触锛�" + Convert.toStr(jsonObject.get("message")));
 //        }
-		return config.getDomain() + path;
+		return this.properties.getDomain() + path;
 	}
 
 	@Override
@@ -57,21 +74,18 @@
 //        }
 	}
 
-
-	@Override
-	public String upload(InputStream inputStream, String path) {
-		byte[] data = IoUtil.readBytes(inputStream);
-		return this.upload(data, path);
-	}
-
 	@Override
 	public String uploadSuffix(byte[] data, String suffix) {
-		return upload(data, getPath(config.getPrefix(), suffix));
+		return upload(data, getPath(this.properties.getPrefix(), suffix));
 	}
 
 	@Override
 	public String uploadSuffix(InputStream inputStream, String suffix) {
-		return upload(inputStream, getPath(config.getPrefix(), suffix));
+		return upload(inputStream, getPath(this.properties.getPrefix(), suffix));
 	}
 
+	@Override
+	public void afterPropertiesSet() throws Exception {
+		OssFactory.register(getServiceType(),this);
+	}
 }
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/QiniuCloudStorageServiceImpl.java
index 97a493f..a8c9393 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/QiniuCloudStorageServiceImpl.java
@@ -1,42 +1,57 @@
 package com.ruoyi.oss.service.impl;
 
-import cn.hutool.core.io.IoUtil;
 import com.qiniu.http.Response;
 import com.qiniu.storage.BucketManager;
 import com.qiniu.storage.Configuration;
 import com.qiniu.storage.Region;
 import com.qiniu.storage.UploadManager;
 import com.qiniu.util.Auth;
-import com.ruoyi.oss.config.CloudStorageConfig;
+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.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 java.io.InputStream;
 
 /**
  * 涓冪墰浜戝瓨鍌�
+ *
+ * @author Lion Li
  */
-public class QiniuCloudStorageServiceImpl extends AbstractCloudStorageService {
+@Lazy
+@Service
+public class QiniuCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean {
 
-	private UploadManager uploadManager;
-	private BucketManager bucketManager;
-	private String token;
+	private final UploadManager uploadManager;
+	private final BucketManager bucketManager;
+	private final String token;
+	private final QiniuProperties properties;
 
-	public QiniuCloudStorageServiceImpl(CloudStorageConfig config) {
-		this.config = config;
-		// 鍒濆鍖�
-		init();
-	}
-
-	private void init() {
+	@Autowired
+	public QiniuCloudStorageServiceImpl(CloudStorageProperties properties) {
+		this.properties = properties.getQiniu();
 		// z0 z1 z2
 		Configuration config = new Configuration(Region.autoRegion());
 		// 榛樿涓嶄娇鐢╤ttps
 		config.useHttpsDomains = false;
 		uploadManager = new UploadManager(config);
-		Auth auth = Auth.create(this.config.getAccessKey(), this.config.getSecretKey());
-		token = auth.uploadToken(this.config.getBucketName());
+		Auth auth = Auth.create(
+			this.properties.getAccessKey(),
+			this.properties.getSecretKey());
+		token = auth.uploadToken(this.properties.getBucketName());
 		bucketManager = new BucketManager(auth, config);
+	}
+
+
+	@Override
+	public String getServiceType() {
+		return CloudServiceEnumd.QINIU.getValue();
 	}
 
 	@Override
@@ -49,14 +64,14 @@
 		} catch (Exception e) {
 			throw new OssException("涓婁紶鏂囦欢澶辫触锛岃鏍稿涓冪墰閰嶇疆淇℃伅");
 		}
-		return config.getDomain() + "/" + path;
+		return this.properties.getDomain() + "/" + path;
 	}
 
 	@Override
 	public void delete(String path) {
 		try {
-			path = path.replace(config.getDomain() + "/", "");
-			Response res = bucketManager.delete(config.getBucketName(), path);
+			path = path.replace(this.properties.getDomain() + "/", "");
+			Response res = bucketManager.delete(this.properties.getBucketName(), path);
 			if (!res.isOK()) {
 				throw new RuntimeException("鍒犻櫎涓冪墰鏂囦欢鍑洪敊锛�" + res.toString());
 			}
@@ -66,19 +81,18 @@
 	}
 
 	@Override
-	public String upload(InputStream inputStream, String path) {
-		byte[] data = IoUtil.readBytes(inputStream);
-		return this.upload(data, path);
-	}
-
-	@Override
 	public String uploadSuffix(byte[] data, String suffix) {
-		return upload(data, getPath(config.getPrefix(), suffix));
+		return upload(data, getPath(this.properties.getPrefix(), suffix));
 	}
 
 	@Override
 	public String uploadSuffix(InputStream inputStream, String suffix) {
-		return upload(inputStream, getPath(config.getPrefix(), suffix));
+		return upload(inputStream, getPath(this.properties.getPrefix(), suffix));
+	}
+
+	@Override
+	public void afterPropertiesSet() throws Exception {
+		OssFactory.register(getServiceType(),this);
 	}
 
 }
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/utils/DateUtils.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/utils/DateUtils.java
deleted file mode 100644
index eac88e8..0000000
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/utils/DateUtils.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package com.ruoyi.oss.utils;
-
-import org.apache.commons.lang3.time.DateFormatUtils;
-
-import java.lang.management.ManagementFactory;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-/**
- * 鏃堕棿宸ュ叿绫�
- *
- * @author ruoyi
- */
-public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
-	public static String YYYY = "yyyy";
-
-	public static String YYYY_MM = "yyyy-MM";
-
-	public static String YYYY_MM_DD = "yyyy-MM-dd";
-
-	public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
-
-	public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
-
-	private static String[] parsePatterns = {
-		"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
-		"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
-		"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
-
-	/**
-	 * 鑾峰彇褰撳墠Date鍨嬫棩鏈�
-	 *
-	 * @return Date() 褰撳墠鏃ユ湡
-	 */
-	public static Date getNowDate() {
-		return new Date();
-	}
-
-	/**
-	 * 鑾峰彇褰撳墠鏃ユ湡, 榛樿鏍煎紡涓簓yyy-MM-dd
-	 *
-	 * @return String
-	 */
-	public static String getDate() {
-		return dateTimeNow(YYYY_MM_DD);
-	}
-
-	public static final String getTime() {
-		return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
-	}
-
-	public static final String dateTimeNow() {
-		return dateTimeNow(YYYYMMDDHHMMSS);
-	}
-
-	public static final String dateTimeNow(final String format) {
-		return parseDateToStr(format, new Date());
-	}
-
-	public static final String dateTime(final Date date) {
-		return parseDateToStr(YYYY_MM_DD, date);
-	}
-
-	public static final String parseDateToStr(final String format, final Date date) {
-		return new SimpleDateFormat(format).format(date);
-	}
-
-	public static final Date dateTime(final String format, final String ts) {
-		try {
-			return new SimpleDateFormat(format).parse(ts);
-		} catch (ParseException e) {
-			throw new RuntimeException(e);
-		}
-	}
-
-	/**
-	 * 鏃ユ湡璺緞 鍗冲勾/鏈�/鏃� 濡�2018/08/08
-	 */
-	public static final String datePath() {
-		Date now = new Date();
-		return DateFormatUtils.format(now, "yyyy/MM/dd");
-	}
-
-	/**
-	 * 鏃ユ湡璺緞 鍗冲勾/鏈�/鏃� 濡�20180808
-	 */
-	public static final String dateTime() {
-		Date now = new Date();
-		return DateFormatUtils.format(now, "yyyyMMdd");
-	}
-
-	/**
-	 * 鏃ユ湡鍨嬪瓧绗︿覆杞寲涓烘棩鏈� 鏍煎紡
-	 */
-	public static Date parseDate(Object str) {
-		if (str == null) {
-			return null;
-		}
-		try {
-			return parseDate(str.toString(), parsePatterns);
-		} catch (ParseException e) {
-			return null;
-		}
-	}
-
-	/**
-	 * 鑾峰彇鏈嶅姟鍣ㄥ惎鍔ㄦ椂闂�
-	 */
-	public static Date getServerStartDate() {
-		long time = ManagementFactory.getRuntimeMXBean().getStartTime();
-		return new Date(time);
-	}
-
-	/**
-	 * 璁$畻涓や釜鏃堕棿宸�
-	 */
-	public static String getDatePoor(Date endDate, Date nowDate) {
-		long nd = 1000 * 24 * 60 * 60;
-		long nh = 1000 * 60 * 60;
-		long nm = 1000 * 60;
-		// long ns = 1000;
-		// 鑾峰緱涓や釜鏃堕棿鐨勬绉掓椂闂村樊寮�
-		long diff = endDate.getTime() - nowDate.getTime();
-		// 璁$畻宸灏戝ぉ
-		long day = diff / nd;
-		// 璁$畻宸灏戝皬鏃�
-		long hour = diff % nd / nh;
-		// 璁$畻宸灏戝垎閽�
-		long min = diff % nd % nh / nm;
-		// 璁$畻宸灏戠//杈撳嚭缁撴灉
-		// long sec = diff % nd % nh % nm / ns;
-		return day + "澶�" + hour + "灏忔椂" + min + "鍒嗛挓";
-	}
-}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java b/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java
index 28cea03..a629626 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java
@@ -1,58 +1,74 @@
 package com.ruoyi.system.controller;
 
 
-import com.aliyun.oss.ServiceException;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.annotation.RepeatSubmit;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.exception.CustomException;
-import com.ruoyi.common.utils.PageUtils;
-import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.system.domain.SysOss;
 import com.ruoyi.system.service.ISysOssService;
-import lombok.extern.slf4j.Slf4j;
+import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.ModelMap;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.util.List;
+import javax.validation.constraints.NotEmpty;
+import java.util.Arrays;
+import java.util.HashMap;
 import java.util.Map;
 
 /**
  * 鏂囦欢涓婁紶 鎺у埗灞�
  *
- * @author chkj
- * @date 2019-07-15
+ * @author Lion Li
  */
-@Slf4j
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
 @RestController
 @RequestMapping("/system/oss")
 public class SysOssController extends BaseController {
 
-	@Autowired
-	private ISysOssService iSysOssService;
+	private final ISysOssService iSysOssService;
 
 	/**
 	 * 鏌ヨ鏂囦欢涓婁紶鍒楄〃
 	 */
+	@PreAuthorize("@ss.hasPermi('system:oss:list')")
 	@GetMapping("/list")
-	public TableDataInfo list(SysOss sysOss) {
-		List<SysOss> list = iSysOssService.list(sysOss);
-		return PageUtils.buildDataInfo(list);
+	public TableDataInfo<SysOss> list(SysOss sysOss) {
+		return iSysOssService.queryPageList(sysOss);
 	}
 
 	/**
 	 * 涓婁紶鍥剧墖
 	 */
+	@PreAuthorize("@ss.hasPermi('system:oss:upload')")
+	@Log(title = "OSS浜戝瓨鍌�", businessType = BusinessType.INSERT)
+	@RepeatSubmit
 	@PostMapping("/upload")
-	public AjaxResult upload(@RequestParam("file") MultipartFile file) {
+	public AjaxResult<Map<String, String>> upload(@RequestParam("file") MultipartFile file) {
 		if (file.isEmpty()) {
 			throw new CustomException("涓婁紶鏂囦欢涓嶈兘涓虹┖");
 		}
-		Map<String, String> json = iSysOssService.upload(file);
-		return AjaxResult.success(json);
+		SysOss oss = iSysOssService.upload(file);
+		Map<String, String> map = new HashMap<>(2);
+		map.put("url", oss.getUrl());
+		map.put("fileName", oss.getFileName());
+		return AjaxResult.success(map);
+	}
+
+	/**
+	 * 鍒犻櫎OSS浜戝瓨鍌�
+	 */
+	@PreAuthorize("@ss.hasPermi('system:oss:remove')")
+	@Log(title = "OSS浜戝瓨鍌�" , businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ossIds}")
+	public AjaxResult<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
+								   @PathVariable Long[] ossIds) {
+		return toAjax(iSysOssService.deleteByIds(Arrays.asList(ossIds)) ? 1 : 0);
 	}
 
 }
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/domain/SysOss.java b/ruoyi-oss/src/main/java/com/ruoyi/system/domain/SysOss.java
index 406cc84..a99d973 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/system/domain/SysOss.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/system/domain/SysOss.java
@@ -9,20 +9,24 @@
 import java.util.Date;
 
 /**
- * 鏂囦欢涓婁紶琛� sys_oss
+ * OSS浜戝瓨鍌ㄥ璞�
  *
- * @author chkj
- * @date 2019-07-15
+ * @author Lion Li
  */
 @Data
-@Accessors(chain = true)
 @NoArgsConstructor
+@Accessors(chain = true)
 @TableName("sys_oss")
 public class SysOss implements Serializable {
+
 	private static final long serialVersionUID = 1L;
 
-	@TableId(value = "id", type = IdType.AUTO)
-	private Long id;
+
+	/**
+	 * 浜戝瓨鍌ㄤ富閿�
+	 */
+	@TableId(value = "oss_id")
+	private Long ossId;
 
 	/**
 	 * 鏂囦欢鍚�
@@ -52,7 +56,20 @@
 	private String createBy;
 
 	/**
+	 * 鏇存柊鏃堕棿
+	 */
+	@TableField(fill = FieldFill.INSERT_UPDATE)
+	private Date updateTime;
+
+	/**
+	 * 鏇存柊浜�
+	 */
+	@TableField(fill = FieldFill.INSERT_UPDATE)
+	private String updateBy;
+
+	/**
 	 * 鏈嶅姟鍟�
 	 */
-	private Integer service;
+	private String service;
+
 }
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/factory/OSSFactory.java b/ruoyi-oss/src/main/java/com/ruoyi/system/factory/OSSFactory.java
deleted file mode 100644
index ed28294..0000000
--- a/ruoyi-oss/src/main/java/com/ruoyi/system/factory/OSSFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.ruoyi.system.factory;
-
-import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
-
-/**
- * 鏂囦欢涓婁紶Factory
- */
-public class OSSFactory {
-
-//    private static ISysConfigService sysConfigService;
-
-	static {
-//        OSSFactory.sysConfigService = SpringUtils.getBean(ISysConfigService.class);
-	}
-
-	public static AbstractCloudStorageService build() {
-//        String jsonconfig = sysConfigService.selectConfigByKey(CloudConstant.CLOUD_STORAGE_CONFIG_KEY);
-//        // 鑾峰彇浜戝瓨鍌ㄩ厤缃俊鎭�
-//        CloudStorageConfig config = JSON.parseObject(jsonconfig, CloudStorageConfig.class);
-//        if (config.getType() == CloudConstant.CloudService.QINIU.getValue()) {
-//            return new QiniuCloudStorageServiceImpl(config);
-//        } else if (config.getType() == CloudConstant.CloudService.ALIYUN.getValue()) {
-//            return new AliyunCloudStorageServiceImpl(config);
-//        } else if (config.getType() == CloudConstant.CloudService.QCLOUD.getValue()) {
-//            return new QcloudCloudStorageServiceImpl(config);
-//        } else if (config.getType() == CloudConstant.CloudService.MINIO.getValue()) {
-//			return new MinioCloudStorageServiceImpl(config);
-//		}
-		return null;
-	}
-}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/mapper/SysOssMapper.java b/ruoyi-oss/src/main/java/com/ruoyi/system/mapper/SysOssMapper.java
index b1f1303..2e28a09 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/system/mapper/SysOssMapper.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/system/mapper/SysOssMapper.java
@@ -6,8 +6,7 @@
 /**
  * 鏂囦欢涓婁紶 鏁版嵁灞�
  *
- * @author chkj
- * @date 2019-07-15
+ * @author Lion Li
  */
 public interface SysOssMapper extends BaseMapper<SysOss> {
 }
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/service/ISysOssService.java b/ruoyi-oss/src/main/java/com/ruoyi/system/service/ISysOssService.java
index 4a71b2d..8ebf566 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/system/service/ISysOssService.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/system/service/ISysOssService.java
@@ -1,24 +1,22 @@
 package com.ruoyi.system.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.system.domain.SysOss;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.util.List;
-import java.util.Map;
+import java.util.Collection;
 
 /**
  * 鏂囦欢涓婁紶 鏈嶅姟灞�
  *
- * @author chkj
- * @date 2019-07-15
+ * @author Lion Li
  */
 public interface ISysOssService extends IService<SysOss> {
-	/**
-	 * 鍒楄〃鏌ヨ
-	 */
-	List<SysOss> list(SysOss sysOss);
 
-	Map<String, String> upload(MultipartFile file);
+	TableDataInfo<SysOss> queryPageList(SysOss sysOss);
 
+	SysOss upload(MultipartFile file);
+
+	Boolean deleteByIds(Collection<Long> ids);
 }
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java
index 729470a..1f9c764 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java
@@ -1,63 +1,71 @@
 package com.ruoyi.system.service.impl;
 
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.exception.CustomException;
-import com.ruoyi.oss.config.CloudStorageConfig;
-import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService;
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.oss.factory.OssFactory;
+import com.ruoyi.oss.service.ICloudStorageService;
 import com.ruoyi.system.domain.SysOss;
-import com.ruoyi.system.factory.OSSFactory;
 import com.ruoyi.system.mapper.SysOssMapper;
 import com.ruoyi.system.service.ISysOssService;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
-import java.util.HashMap;
+import java.util.Collection;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 鏂囦欢涓婁紶 鏈嶅姟灞傚疄鐜�
  *
- * @author chkj
- * @date 2019-07-15
+ * @author Lion Li
  */
 @Slf4j
 @Service
 public class SysOssServiceImpl extends ServiceImpl<SysOssMapper, SysOss> implements ISysOssService {
 
-	@Autowired
-	private CloudStorageConfig config;
-
 	@Override
-	public List<SysOss> list(SysOss sysOss) {
-		LambdaQueryWrapper<SysOss> wrapper = new LambdaQueryWrapper<>();
-		return baseMapper.selectList(wrapper);
+	public TableDataInfo<SysOss> queryPageList(SysOss sysOss) {
+		LambdaQueryWrapper<SysOss> lqw = Wrappers.lambdaQuery();
+		lqw.like(StrUtil.isNotBlank(sysOss.getFileName()), SysOss::getFileName, sysOss.getFileName());
+		lqw.like(StrUtil.isNotBlank(sysOss.getFileSuffix()), SysOss::getFileSuffix, sysOss.getFileSuffix());
+		lqw.like(StrUtil.isNotBlank(sysOss.getUrl()), SysOss::getUrl, sysOss.getUrl());
+		lqw.like(StrUtil.isNotBlank(sysOss.getService()), SysOss::getService, sysOss.getService());
+		return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw));
 	}
 
 	@Override
-	public Map<String, String> upload(MultipartFile file) {
+	public SysOss upload(MultipartFile file) {
 		String originalfileName = file.getOriginalFilename();
-		String suffix = originalfileName.substring(originalfileName.lastIndexOf("."));
+		String suffix = StrUtil.sub(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
 		try {
-			AbstractCloudStorageService storage = OSSFactory.build();
+			ICloudStorageService storage = OssFactory.instance();
 			String url = storage.uploadSuffix(file.getBytes(), suffix);
 			// 淇濆瓨鏂囦欢淇℃伅
-			SysOss ossEntity = new SysOss()
+			SysOss oss = new SysOss()
 				.setUrl(url).setFileSuffix(suffix)
 				.setFileName(originalfileName)
 				.setService(storage.getServiceType());
-			save(ossEntity);
-			Map<String, String> map = new HashMap<>(2);
-			map.put("url", ossEntity.getUrl());
-			map.put("fileName", ossEntity.getFileName());
-			return map;
+			save(oss);
+			return oss;
 		} catch (IOException e) {
 			throw new CustomException("鏂囦欢璇诲彇寮傚父!!!", e);
 		}
 	}
 
+	@Override
+	public Boolean deleteByIds(Collection<Long> ids) {
+		List<SysOss> list = listByIds(ids);
+		for (SysOss sysOss : list) {
+			ICloudStorageService storage = OssFactory.instance(sysOss.getService());
+			storage.delete(sysOss.getUrl());
+		}
+		return removeByIds(ids);
+	}
+
 }
diff --git a/ruoyi-oss/src/main/resources/mapper/system/SysOssMapper.xml b/ruoyi-oss/src/main/resources/mapper/system/SysOssMapper.xml
index 1af8bf1..a1e4ca8 100644
--- a/ruoyi-oss/src/main/resources/mapper/system/SysOssMapper.xml
+++ b/ruoyi-oss/src/main/resources/mapper/system/SysOssMapper.xml
@@ -1,21 +1,18 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.chkj.cloudStorage.mapper.SysOssMapper">
+<mapper namespace="com.ruoyi.system.mapper.SysOssMapper">
 
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="BaseResultMap" type="com.chkj.cloudStorage.domain.SysOss">
-        <id column="id" property="id"/>
-        <result column="file_name" property="fileName"/>
-        <result column="file_suffix" property="fileSuffix"/>
-        <result column="url" property="url"/>
-        <result column="create_time" property="createTime"/>
-        <result column="create_by" property="createBy"/>
-        <result column="service" property="service"/>
+    <resultMap type="com.ruoyi.system.domain.SysOss" id="SysOssResult">
+        <result property="ossId" column="oss_id"/>
+        <result property="fileName" column="file_name"/>
+        <result property="fileSuffix" column="file_suffix"/>
+        <result property="url" column="url"/>
+        <result property="createTime" column="create_time"/>
+        <result property="createBy" column="create_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="service" column="service"/>
     </resultMap>
 
-    <!-- 閫氱敤鏌ヨ缁撴灉鍒� -->
-    <sql id="Base_Column_List">
-        id, file_name, file_suffix, url, create_time, create_by, service
-    </sql>
 
 </mapper>
diff --git a/ruoyi-oss/src/main/resources/sql/oss.sql b/ruoyi-oss/src/main/resources/sql/oss.sql
deleted file mode 100644
index b49f08e..0000000
--- a/ruoyi-oss/src/main/resources/sql/oss.sql
+++ /dev/null
@@ -1,30 +0,0 @@
-CREATE TABLE `sys_oss`
-(
-    `id`          bigint(20)   NOT NULL AUTO_INCREMENT,
-    `file_name`   varchar(64)  NOT NULL DEFAULT '' COMMENT '鏂囦欢鍚�',
-    `file_suffix` varchar(10)  NOT NULL DEFAULT '' COMMENT '鏂囦欢鍚庣紑鍚�',
-    `url`         varchar(200) NOT NULL COMMENT 'URL鍦板潃',
-    `create_time` datetime              DEFAULT NULL COMMENT '鍒涘缓鏃堕棿',
-    `create_by`   varchar(64)  NOT NULL DEFAULT '' COMMENT '涓婁紶浜�',
-    `service`     tinyint(2)   NOT NULL DEFAULT '1' COMMENT '鏈嶅姟鍟�',
-    PRIMARY KEY (`id`)
-) ENGINE = InnoDB
-  AUTO_INCREMENT = 8
-  DEFAULT CHARSET = utf8 COMMENT ='鏂囦欢涓婁紶';
-
-INSERT INTO `ry`.`sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `menu_type`, `visible`, `perms`, `icon`,
-                             `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
-VALUES ('鏂囦欢绠$悊', '1', '10', '/system/oss', 'C', '0', 'system:oss:view', '#', 'admin', '2018-11-16 13:59:45', '', NULL,
-        '');
-INSERT INTO `ry`.`sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `menu_type`, `visible`, `perms`, `icon`,
-                             `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
-VALUES ('鏂囦欢涓婁紶', '1056', '1', '#', 'F', '0', 'system:oss:add', '#', 'admin', '2018-11-16 13:59:45', '', NULL, '');
-INSERT INTO `ry`.`sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `menu_type`, `visible`, `perms`, `icon`,
-                             `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
-VALUES ('鏂囦欢鍒犻櫎', '1056', '2', '#', 'F', '0', 'system:oss:remove', '#', 'admin', '2018-11-16 13:59:45', '', NULL, '');
-INSERT INTO `ry`.`sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `menu_type`, `visible`, `perms`, `icon`,
-                             `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
-VALUES ('鏂囦欢閰嶇疆', '1056', '3', '#', 'F', '0', 'system:oss:config', '#', 'admin', '2018-11-16 13:59:45', '', NULL, '');
-INSERT INTO `ry`.`sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `menu_type`, `visible`, `perms`, `icon`,
-                             `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
-VALUES ('鏂囦欢淇敼', '1056', '4', '#', 'F', '0', 'system:oss:remove', '#', 'admin', '2018-11-16 13:59:45', '', NULL, '');
diff --git a/sql/oss.sql b/sql/oss.sql
new file mode 100644
index 0000000..ecb8416
--- /dev/null
+++ b/sql/oss.sql
@@ -0,0 +1,24 @@
+-- ----------------------------
+-- OSS浜戝瓨鍌ㄨ〃
+-- ----------------------------
+drop table if exists sys_oss;
+create table sys_oss (
+    oss_id          bigint(20)   not null auto_increment    comment '浜戝瓨鍌ㄤ富閿�',
+    file_name       varchar(64)  not null default ''        comment '鏂囦欢鍚�',
+    file_suffix     varchar(10)  not null default ''        comment '鏂囦欢鍚庣紑鍚�',
+    url              varchar(200) not null                   comment 'URL鍦板潃',
+    create_time     datetime              default null      comment '鍒涘缓鏃堕棿',
+    create_by       varchar(64)  not null default ''        comment '涓婁紶浜�',
+    update_time     datetime              default null      comment '鏇存柊鏃堕棿',
+    update_by       varchar(64)  not null default ''        comment '鏇存柊浜�',
+    service         varchar(10)  not null default 'minio'   comment '鏈嶅姟鍟�',
+    primary key (oss_id)
+) engine=innodb comment ='OSS浜戝瓨鍌ㄨ〃';
+
+insert into sys_config values(10, 'OSS浜戝瓨鍌ㄦ湇鍔″晢',       'sys.oss.cloudStorageService',      'minio',          'Y', 'admin', sysdate(), '', null, 'OSS浜戝瓨鍌ㄦ湇鍔″晢(qiniu:涓冪墰浜�, aliyun:闃块噷浜�, qcloud:鑵捐浜�, minio: Minio)');
+
+insert into sys_menu values('118',  '鏂囦欢绠$悊', '1',   '10', 'oss',     'system/oss/index',      1, 0, 'C', '0', '0', 'system:oss:list',      'oss',       'admin', sysdate(), '', null, '鏂囦欢绠$悊鑿滃崟');
+
+insert into sys_menu values('1600', '鏂囦欢鏌ヨ', '118', '1', '#', '', 1, 0, 'F', '0', '0', 'system:oss:query',        '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1601', '鏂囦欢涓婁紶', '118', '2', '#', '', 1, 0, 'F', '0', '0', 'system:oss:upload',       '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1602', '鏂囦欢鍒犻櫎', '118', '3', '#', '', 1, 0, 'F', '0', '0', 'system:oss:remove',       '#', 'admin', sysdate(), '', null, '');

--
Gitblit v1.9.3