Jelajahi Sumber

update 抽取公共模块 ruoyi-common-dict 实现字典多服务调用

疯狂的狮子li 4 tahun lalu
induk
melakukan
bccfe2c0b2

+ 29 - 0
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteDictService.java

@@ -0,0 +1,29 @@
+package com.ruoyi.system.api;
+
+/**
+ * 字典服务
+ *
+ * @author Lion Li
+ */
+public interface RemoteDictService {
+
+    /**
+     * 根据字典类型和字典值获取字典标签
+     *
+     * @param dictType  字典类型
+     * @param dictValue 字典值
+     * @param separator 分隔符
+     * @return 字典标签
+     */
+    String getDictLabel(String dictType, String dictValue, String separator);
+
+    /**
+     * 根据字典类型和字典标签获取字典值
+     *
+     * @param dictType  字典类型
+     * @param dictLabel 字典标签
+     * @param separator 分隔符
+     * @return 字典值
+     */
+    String getDictValue(String dictType, String dictLabel, String separator);
+}

+ 1 - 0
ruoyi-common/pom.xml

@@ -11,6 +11,7 @@
     <modules>
         <module>ruoyi-common-bom</module>
         <module>ruoyi-common-log</module>
+        <module>ruoyi-common-dict</module>
         <module>ruoyi-common-core</module>
         <module>ruoyi-common-redis</module>
         <module>ruoyi-common-swagger</module>

+ 7 - 0
ruoyi-common/ruoyi-common-bom/pom.xml

@@ -57,6 +57,13 @@
                 <version>${project.version}</version>
             </dependency>
 
+            <!-- 字典 -->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>ruoyi-common-dict</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+
             <!-- 缓存服务 -->
             <dependency>
                 <groupId>com.ruoyi</groupId>

+ 38 - 0
ruoyi-common/ruoyi-common-dict/pom.xml

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>com.ruoyi</groupId>
+        <artifactId>ruoyi-common</artifactId>
+        <version>0.3.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    
+    <artifactId>ruoyi-common-dict</artifactId>
+	
+    <description>
+        ruoyi-common-dict 字典
+    </description>
+
+    <dependencies>
+		
+        <!-- RuoYi Common Security -->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-common-redis</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-api-system</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-dubbo</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+    </dependencies>
+</project>

+ 57 - 0
ruoyi-common/ruoyi-common-dict/src/main/java/com/ruoyi/common/dict/service/DictService.java

@@ -0,0 +1,57 @@
+package com.ruoyi.common.dict.service;
+
+/**
+ * 字典服务服务
+ *
+ * @author Lion Li
+ */
+public interface DictService {
+
+    /**
+     * 分隔符
+     */
+    String SEPARATOR = ",";
+
+    /**
+     * 根据字典类型和字典值获取字典标签
+     *
+     * @param dictType  字典类型
+     * @param dictValue 字典值
+     * @return 字典标签
+     */
+    default String getDictLabel(String dictType, String dictValue) {
+        return getDictLabel(dictType, dictValue, SEPARATOR);
+    }
+
+    /**
+     * 根据字典类型和字典标签获取字典值
+     *
+     * @param dictType  字典类型
+     * @param dictLabel 字典标签
+     * @return 字典值
+     */
+    default String getDictValue(String dictType, String dictLabel) {
+        return getDictValue(dictType, dictLabel, SEPARATOR);
+    }
+
+    /**
+     * 根据字典类型和字典值获取字典标签
+     *
+     * @param dictType  字典类型
+     * @param dictValue 字典值
+     * @param separator 分隔符
+     * @return 字典标签
+     */
+    String getDictLabel(String dictType, String dictValue, String separator);
+
+    /**
+     * 根据字典类型和字典标签获取字典值
+     *
+     * @param dictType  字典类型
+     * @param dictLabel 字典标签
+     * @param separator 分隔符
+     * @return 字典值
+     */
+    String getDictValue(String dictType, String dictLabel, String separator);
+
+}

+ 45 - 0
ruoyi-common/ruoyi-common-dict/src/main/java/com/ruoyi/common/dict/service/impl/DictServiceImpl.java

@@ -0,0 +1,45 @@
+package com.ruoyi.common.dict.service.impl;
+
+import com.ruoyi.common.dict.service.DictService;
+import com.ruoyi.system.api.RemoteDictService;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.stereotype.Service;
+
+/**
+ * 字典服务服务
+ *
+ * @author Lion Li
+ */
+@Service
+public class DictServiceImpl implements DictService {
+
+    @DubboReference
+    private RemoteDictService remoteDictService;
+
+    /**
+     * 根据字典类型和字典值获取字典标签
+     *
+     * @param dictType  字典类型
+     * @param dictValue 字典值
+     * @param separator 分隔符
+     * @return 字典标签
+     */
+    @Override
+    public String getDictLabel(String dictType, String dictValue, String separator) {
+        return remoteDictService.getDictLabel(dictType, dictValue, separator);
+    }
+
+    /**
+     * 根据字典类型和字典标签获取字典值
+     *
+     * @param dictType  字典类型
+     * @param dictLabel 字典标签
+     * @param separator 分隔符
+     * @return 字典值
+     */
+    @Override
+    public String getDictValue(String dictType, String dictLabel, String separator) {
+        return remoteDictService.getDictValue(dictType, dictLabel, separator);
+    }
+
+}

+ 67 - 68
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/DictUtils.java → ruoyi-common/ruoyi-common-dict/src/main/java/com/ruoyi/common/dict/utils/DictUtils.java

@@ -1,68 +1,67 @@
-package com.ruoyi.common.security.utils;
-
-import com.ruoyi.common.core.constant.Constants;
-import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.redis.utils.RedisUtils;
-import com.ruoyi.system.api.domain.SysDictData;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * 字典工具类
- *
- * @author ruoyi
- */
-public class DictUtils {
-    /**
-     * 设置字典缓存
-     *
-     * @param key       参数键
-     * @param dictDatas 字典数据列表
-     */
-    public static void setDictCache(String key, List<SysDictData> dictDatas) {
-        RedisUtils.setCacheObject(getCacheKey(key), dictDatas);
-    }
-
-    /**
-     * 获取字典缓存
-     *
-     * @param key 参数键
-     * @return dictDatas 字典数据列表
-     */
-    public static List<SysDictData> getDictCache(String key) {
-        Object cacheObj = RedisUtils.getCacheObject(getCacheKey(key));
-        if (StringUtils.isNotNull(cacheObj)) {
-            List<SysDictData> dictDatas = StringUtils.cast(cacheObj);
-            return dictDatas;
-        }
-        return null;
-    }
-
-    /**
-     * 删除指定字典缓存
-     *
-     * @param key 字典键
-     */
-    public static void removeDictCache(String key) {
-        RedisUtils.deleteObject(getCacheKey(key));
-    }
-
-    /**
-     * 清空字典缓存
-     */
-    public static void clearDictCache() {
-        Collection<String> keys = RedisUtils.keys(Constants.SYS_DICT_KEY + "*");
-        RedisUtils.deleteObject(keys);
-    }
-
-    /**
-     * 设置cache key
-     *
-     * @param configKey 参数键
-     * @return 缓存键key
-     */
-    public static String getCacheKey(String configKey) {
-        return Constants.SYS_DICT_KEY + configKey;
-    }
-}
+package com.ruoyi.common.dict.utils;
+
+import com.ruoyi.common.core.constant.Constants;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.redis.utils.RedisUtils;
+import com.ruoyi.system.api.domain.SysDictData;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 字典工具类
+ *
+ * @author ruoyi
+ */
+public class DictUtils {
+    /**
+     * 设置字典缓存
+     *
+     * @param key       参数键
+     * @param dictDatas 字典数据列表
+     */
+    public static void setDictCache(String key, List<SysDictData> dictDatas) {
+        RedisUtils.setCacheObject(getCacheKey(key), dictDatas);
+    }
+
+    /**
+     * 获取字典缓存
+     *
+     * @param key 参数键
+     * @return dictDatas 字典数据列表
+     */
+    public static List<SysDictData> getDictCache(String key) {
+        List<SysDictData> dictDatas = RedisUtils.getCacheObject(getCacheKey(key));
+        if (StringUtils.isNotNull(dictDatas)) {
+            return dictDatas;
+        }
+        return null;
+    }
+
+    /**
+     * 删除指定字典缓存
+     *
+     * @param key 字典键
+     */
+    public static void removeDictCache(String key) {
+        RedisUtils.deleteObject(getCacheKey(key));
+    }
+
+    /**
+     * 清空字典缓存
+     */
+    public static void clearDictCache() {
+        Collection<String> keys = RedisUtils.keys(Constants.SYS_DICT_KEY + "*");
+        RedisUtils.deleteObject(keys);
+    }
+
+    /**
+     * 设置cache key
+     *
+     * @param configKey 参数键
+     * @return 缓存键key
+     */
+    public static String getCacheKey(String configKey) {
+        return Constants.SYS_DICT_KEY + configKey;
+    }
+}

+ 2 - 0
ruoyi-common/ruoyi-common-dict/src/main/resources/META-INF/spring.factories

@@ -0,0 +1,2 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+  com.ruoyi.common.dict.service.impl.DictServiceImpl

+ 5 - 0
ruoyi-modules/ruoyi-system/pom.xml

@@ -71,6 +71,11 @@
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-common-log</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-common-dict</artifactId>
+        </dependency>
         
         <!-- RuoYi Common Swagger -->
         <dependency>

+ 75 - 0
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dubbo/RemoteDictServiceImpl.java

@@ -0,0 +1,75 @@
+package com.ruoyi.system.dubbo;
+
+import cn.hutool.core.collection.CollUtil;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.system.api.RemoteDictService;
+import com.ruoyi.system.api.domain.SysDictData;
+import com.ruoyi.system.service.ISysDictDataService;
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 操作日志记录
+ *
+ * @author Lion Li
+ */
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@Service
+@DubboService
+public class RemoteDictServiceImpl implements RemoteDictService {
+
+    private final ISysDictDataService sysDictDataService;
+
+
+    @Override
+    public String getDictLabel(String dictType, String dictValue, String separator) {
+        StringBuilder propertyString = new StringBuilder();
+        List<SysDictData> datas = sysDictDataService.selectDictDataByType(dictType);
+
+        if (StringUtils.containsAny(dictValue, separator) && CollUtil.isNotEmpty(datas)) {
+            for (SysDictData dict : datas) {
+                for (String value : dictValue.split(separator)) {
+                    if (value.equals(dict.getDictValue())) {
+                        propertyString.append(dict.getDictLabel() + separator);
+                        break;
+                    }
+                }
+            }
+        } else {
+            for (SysDictData dict : datas) {
+                if (dictValue.equals(dict.getDictValue())) {
+                    return dict.getDictLabel();
+                }
+            }
+        }
+        return StringUtils.stripEnd(propertyString.toString(), separator);
+    }
+
+    @Override
+    public String getDictValue(String dictType, String dictLabel, String separator) {
+        StringBuilder propertyString = new StringBuilder();
+        List<SysDictData> datas = sysDictDataService.selectDictDataByType(dictType);
+
+        if (StringUtils.containsAny(dictLabel, separator) && CollUtil.isNotEmpty(datas)) {
+            for (SysDictData dict : datas) {
+                for (String label : dictLabel.split(separator)) {
+                    if (label.equals(dict.getDictLabel())) {
+                        propertyString.append(dict.getDictValue() + separator);
+                        break;
+                    }
+                }
+            }
+        } else {
+            for (SysDictData dict : datas) {
+                if (dictLabel.equals(dict.getDictLabel())) {
+                    return dict.getDictValue();
+                }
+            }
+        }
+        return StringUtils.stripEnd(propertyString.toString(), separator);
+    }
+}

+ 8 - 0
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java

@@ -27,6 +27,14 @@ public interface ISysDictDataService {
      */
     String selectDictLabel(String dictType, String dictValue);
 
+    /**
+     * 根据字典类型查询字典数据
+     *
+     * @param dictType 字典类型
+     * @return 字典数据集合信息
+     */
+    List<SysDictData> selectDictDataByType(String dictType);
+
     /**
      * 根据字典数据ID查询信息
      *

+ 23 - 1
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.service.impl;
 
-import com.ruoyi.common.security.utils.DictUtils;
+import cn.hutool.core.collection.CollUtil;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.dict.utils.DictUtils;
 import com.ruoyi.system.api.domain.SysDictData;
 import com.ruoyi.system.mapper.SysDictDataMapper;
 import com.ruoyi.system.service.ISysDictDataService;
@@ -44,6 +46,26 @@ public class SysDictDataServiceImpl implements ISysDictDataService {
         return dictDataMapper.selectDictLabel(dictType, dictValue);
     }
 
+    /**
+     * 根据字典类型查询字典数据
+     *
+     * @param dictType 字典类型
+     * @return 字典数据集合信息
+     */
+    @Override
+    public List<SysDictData> selectDictDataByType(String dictType) {
+        List<SysDictData> dictDatas = DictUtils.getDictCache(dictType);
+        if (StringUtils.isNotEmpty(dictDatas)) {
+            return dictDatas;
+        }
+        dictDatas = dictDataMapper.selectDictDataByType(dictType);
+        if (CollUtil.isNotEmpty(dictDatas)) {
+            DictUtils.setDictCache(dictType, dictDatas);
+            return dictDatas;
+        }
+        return null;
+    }
+
     /**
      * 根据字典数据ID查询信息
      *

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java

@@ -3,7 +3,7 @@ package com.ruoyi.system.service.impl;
 import com.ruoyi.common.core.constant.UserConstants;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.security.utils.DictUtils;
+import com.ruoyi.common.dict.utils.DictUtils;
 import com.ruoyi.system.api.domain.SysDictData;
 import com.ruoyi.system.api.domain.SysDictType;
 import com.ruoyi.system.mapper.SysDictDataMapper;