From 1bbb94e533d60b11687316eec2413be2d385ed5b Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 02 Dec 2021 16:11:03 +0800
Subject: [PATCH] fix
---
zq-erp/src/main/java/com/matrix/core/enums/EnumsManager.java | 136 +++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 131 insertions(+), 5 deletions(-)
diff --git a/zq-erp/src/main/java/com/matrix/core/enums/EnumsManager.java b/zq-erp/src/main/java/com/matrix/core/enums/EnumsManager.java
index 00abddd..da24809 100644
--- a/zq-erp/src/main/java/com/matrix/core/enums/EnumsManager.java
+++ b/zq-erp/src/main/java/com/matrix/core/enums/EnumsManager.java
@@ -1,26 +1,152 @@
package com.matrix.core.enums;
+import com.matrix.core.tools.LogUtil;
import com.matrix.system.hive.hievEnum.SmsPlatformEnum;
import com.matrix.system.hive.hievEnum.SmsTypeEnum;
+import org.springframework.stereotype.Component;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import javax.annotation.PostConstruct;
+import java.io.File;
+import java.io.IOException;
+import java.net.JarURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.*;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
/**
* TODO 这里后期改成自动扫描包下面的特定注解,而不是硬编码注册
*/
public class EnumsManager {
+ private static final List<String> CLASS_NAME = new ArrayList<>();
+ private static ClassLoader classLoader;
+ private static final String SUFFIX = ".class";
static Map<String,List<EnumsShowVo>> showAbleMap =new HashMap<>();
static {
- showAbleMap.put(SmsPlatformEnum.values()[0].getEnumCode(),SmsPlatformEnum.values()[0].getEnumsShowVos());
- showAbleMap.put(SmsTypeEnum.values()[0].getEnumCode(),SmsTypeEnum.values()[0].getEnumsShowVos());
+// showAbleMap.put(SmsPlatformEnum.values()[0].getEnumCode(),SmsPlatformEnum.values()[0].getEnumsShowVos());
+// showAbleMap.put(SmsTypeEnum.values()[0].getEnumCode(),SmsTypeEnum.values()[0].getEnumsShowVos());
+
+ initEnum("com.matrix");
}
public static List<EnumsShowVo> getShowEnum(String emumCode){
return showAbleMap.get(emumCode);
}
+
+ private static void initEnum(String... packages) {
+ classLoader = Thread.currentThread().getContextClassLoader();
+
+ for (String basePackage : packages) {
+ Enumeration<URL> resources = null;
+ try {
+ resources = classLoader.getResources(basePackage.replaceAll("\\.", "/"));
+ } catch (IOException e) {
+ return;
+ }
+
+ // 扫描当前工程和jar包
+ while (resources.hasMoreElements()) {
+ URL url = resources.nextElement();
+ if ("file".equals(url.getProtocol())) {
+ doFileScan(url.getPath());
+ } else if ("jar".equals(url.getProtocol())) {
+ doJarScan(basePackage, url);
+ }
+ }
+ }
+
+ // 初始化枚举数据
+ enumValue();
+ }
+
+ /**
+ * 扫描当前工程对应包下的所有类
+ *
+ * @param path
+ */
+ private static void doFileScan(String path) {
+ String rootPath = classLoader.getResource("").getPath();
+ File pathFile = new File(path);
+
+ File[] files = pathFile.listFiles();
+ if (files == null || files.length == 0) {
+ return;
+ }
+
+ for (File file : files) {
+ if (file.isDirectory()) {
+ String nextPath = path + "/" + file.getName();
+ doFileScan(nextPath);
+ } else if (file.getName().endsWith(SUFFIX)) {
+ if (!path.contains(rootPath)) {
+ return;
+ }
+ String subStr = path.substring(rootPath.length());
+ String className = (subStr + "/" + file.getName().replaceAll(SUFFIX, "")).replaceAll("/", "\\.");
+ CLASS_NAME.add(className);
+ }
+ }
+ }
+
+ /**
+ * 扫描jar包下对应包下所有类
+ *
+ * @param basePackage
+ * @param baseURL
+ */
+ public static void doJarScan(String basePackage, URL baseURL) {
+ basePackage = basePackage.replaceAll("\\.", "/");
+ JarFile jarFile;
+ try {
+ URLConnection urlConnection = baseURL.openConnection();
+ JarURLConnection jarUrl = (JarURLConnection) urlConnection;
+ jarFile = jarUrl.getJarFile();
+ } catch (IOException e) {
+ throw new RuntimeException("未找到资源");
+ }
+
+ Enumeration<JarEntry> entries = jarFile.entries();
+ while(entries.hasMoreElements()) {
+ JarEntry entry = entries.nextElement();
+
+ String name = entry.getName();
+ if (name.startsWith(basePackage)) {
+ if (name.endsWith(SUFFIX)) {
+ String className = name.replaceAll(SUFFIX, "").replaceAll("/", "\\.");
+ CLASS_NAME.add(className);
+ }
+ }
+ }
+ }
+
+ public static void enumValue() {
+ for (String className : CLASS_NAME) {
+ Class<?> clazz = null;
+ try {
+ clazz = classLoader.loadClass(className);
+ } catch (ClassNotFoundException e) {
+ continue;
+ }
+
+ // 判断类是否为枚举类型
+ if (!clazz.isEnum()){
+ continue;
+ }
+
+ // 判断ApiShowAble是否为类的父类
+ if (!ApiShowAble.class.isAssignableFrom(clazz)) {
+ continue;
+ }
+
+ Object[] constants = clazz.getEnumConstants();
+ ApiShowAble apiShowAble = (ApiShowAble) constants[0];
+
+ showAbleMap.put(apiShowAble.getEnumCode(), apiShowAble.getEnumsShowVos());
+ }
+ }
+
}
--
Gitblit v1.9.1