From a5835aa0c26870fcedb06cbd4a84ed2908e25c2f Mon Sep 17 00:00:00 2001 From: 疯狂的狮子li <15040126243@163.com> Date: 星期二, 31 一月 2023 17:55:14 +0800 Subject: [PATCH] add 新增 ruoyi-common-translation 通用转换模块(雏形) --- ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/TranslationInterface.java | 17 +++ ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/annotation/Translation.java | 32 ++++++ ruoyi-common/ruoyi-common-translation/pom.xml | 28 +++++ ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationHandler.java | 61 ++++++++++++ ruoyi-common/ruoyi-common-bom/pom.xml | 8 + ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/config/TranslationConfig.java | 41 ++++++++ ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 1 ruoyi-common/pom.xml | 1 ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/vo/TestDemoVo.java | 4 ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/DictTranslationImpl.java | 29 +++++ ruoyi-modules/ruoyi-demo/pom.xml | 5 + ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/constant/TransConstant.java | 22 ++++ ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/annotation/TranslationType.java | 21 ++++ ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/UserNameTranslationImpl.java | 29 +++++ 14 files changed, 299 insertions(+), 0 deletions(-) diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index 6ea57a2..3cbdc88 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -28,6 +28,7 @@ <module>ruoyi-common-security</module> <module>ruoyi-common-sms</module> <module>ruoyi-common-web</module> + <module>ruoyi-common-translation</module> </modules> <artifactId>ruoyi-common</artifactId> diff --git a/ruoyi-common/ruoyi-common-bom/pom.xml b/ruoyi-common/ruoyi-common-bom/pom.xml index 49c859d..84d9cb0 100644 --- a/ruoyi-common/ruoyi-common-bom/pom.xml +++ b/ruoyi-common/ruoyi-common-bom/pom.xml @@ -130,6 +130,14 @@ <artifactId>ruoyi-common-web</artifactId> <version>${revision}</version> </dependency> + + <!-- 缈昏瘧妯″潡 --> + <dependency> + <groupId>com.ruoyi</groupId> + <artifactId>ruoyi-common-translation</artifactId> + <version>${revision}</version> + </dependency> + </dependencies> </dependencyManagement> diff --git a/ruoyi-common/ruoyi-common-translation/pom.xml b/ruoyi-common/ruoyi-common-translation/pom.xml new file mode 100644 index 0000000..b484468 --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/pom.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + 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>${revision}</version> + <relativePath>../pom.xml</relativePath> + </parent> + <modelVersion>4.0.0</modelVersion> + + <artifactId>ruoyi-common-translation</artifactId> + + <description> + ruoyi-common-translation 閫氱敤缈昏瘧鍔熻兘 + </description> + + <dependencies> + + <dependency> + <groupId>com.ruoyi</groupId> + <artifactId>ruoyi-common-core</artifactId> + </dependency> + + </dependencies> + +</project> diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/annotation/Translation.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/annotation/Translation.java new file mode 100644 index 0000000..158c350 --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/annotation/Translation.java @@ -0,0 +1,32 @@ +package com.ruoyi.common.translation.annotation; + +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.ruoyi.common.translation.core.handler.TranslationHandler; + +import java.lang.annotation.*; + +/** + * 閫氱敤缈昏瘧娉ㄨВ + * + * @author Lion Li + */ +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD, ElementType.METHOD}) +@Documented +@JacksonAnnotationsInside +@JsonSerialize(using = TranslationHandler.class) +public @interface Translation { + + /** + * 绫诲瀷 (闇�涓庡疄鐜扮被涓婄殑 {@link com.ruoyi.common.translation.annotation.TranslationType} 娉ㄨВtype瀵瑰簲) + */ + String type(); + + /** + * 閫氱敤Key 濡傛灉涓虹┖鍒欏彇琚爣娉ㄧ殑瀛楁鍊� 渚嬪: 瀛楀吀type(sys_user_sex) + */ + String key() default ""; + +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/annotation/TranslationType.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/annotation/TranslationType.java new file mode 100644 index 0000000..1b64e53 --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/annotation/TranslationType.java @@ -0,0 +1,21 @@ +package com.ruoyi.common.translation.annotation; + +import java.lang.annotation.*; + +/** + * 缈昏瘧绫诲瀷娉ㄨВ (鏍囨敞鍒皗@link com.ruoyi.common.translation.core.TranslationInterface} 鐨勫疄鐜扮被) + * + * @author Lion Li + */ +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE}) +@Documented +public @interface TranslationType { + + /** + * 绫诲瀷 + */ + String type(); + +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/config/TranslationConfig.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/config/TranslationConfig.java new file mode 100644 index 0000000..d589fdd --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/config/TranslationConfig.java @@ -0,0 +1,41 @@ +package com.ruoyi.common.translation.config; + +import com.ruoyi.common.translation.annotation.TranslationType; +import com.ruoyi.common.translation.core.TranslationInterface; +import com.ruoyi.common.translation.core.handler.TranslationHandler; +import jakarta.annotation.PostConstruct; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.AutoConfiguration; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 缈昏瘧妯″潡閰嶇疆绫� + * + * @author Lion Li + */ +@Slf4j +@AutoConfiguration +public class TranslationConfig { + + @Autowired + private List<TranslationInterface> list; + + @PostConstruct + public void init() { + Map<String, TranslationInterface> map = new HashMap<>(list.size()); + for (TranslationInterface trans : list) { + if (trans.getClass().isAnnotationPresent(TranslationType.class)) { + TranslationType annotation = trans.getClass().getAnnotation(TranslationType.class); + map.put(annotation.type(), trans); + } else { + log.warn(trans.getClass().getName() + " 缈昏瘧瀹炵幇绫绘湭鏍囨敞 TranslationType 娉ㄨВ!"); + } + } + TranslationHandler.TRANSLATION_MAPPER.putAll(map); + } + +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/constant/TransConstant.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/constant/TransConstant.java new file mode 100644 index 0000000..84c4bba --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/constant/TransConstant.java @@ -0,0 +1,22 @@ +package com.ruoyi.common.translation.constant; + +/** + * 缈昏瘧甯搁噺 + * + * @author Lion Li + */ +public interface TransConstant { + + /** + * 鐢ㄦ埛鍚嶇炕璇� + */ + String USER_ID_TO_NAME = "userIdToName"; + + /** + * 瀛楀吀鍊肩炕璇� + */ + String DICT_TYPE_TO_LABEL = "dictTypeToLabel"; + + String OSS_ID_TO_URL = "ossIdToUrl"; + +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/TranslationInterface.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/TranslationInterface.java new file mode 100644 index 0000000..449e894 --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/TranslationInterface.java @@ -0,0 +1,17 @@ +package com.ruoyi.common.translation.core; + +/** + * 缈昏瘧鎺ュ彛 (瀹炵幇绫婚渶鏍囨敞 {@link com.ruoyi.common.translation.annotation.TranslationType} 娉ㄨВ鏍囨槑缈昏瘧绫诲瀷) + * + * @author Lion Li + */ +public interface TranslationInterface { + + /** + * 缈昏瘧 + * + * @param key 闇�瑕佽缈昏瘧鐨勯敭 + * @return 杩斿洖閿搴旂殑鍊� + */ + String translation(Object key); +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationHandler.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationHandler.java new file mode 100644 index 0000000..1ca2f07 --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationHandler.java @@ -0,0 +1,61 @@ +package com.ruoyi.common.translation.core.handler; + +import cn.hutool.core.util.ObjectUtil; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.BeanProperty; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.ContextualSerializer; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.translation.annotation.Translation; +import com.ruoyi.common.translation.core.TranslationInterface; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeansException; + +import java.io.IOException; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 缈昏瘧澶勭悊鍣� + * + * @author Lion Li + */ +@Slf4j +public class TranslationHandler extends JsonSerializer<Object> implements ContextualSerializer { + + /** + * 鍏ㄥ眬缈昏瘧瀹炵幇绫绘槧灏勫櫒 + */ + public static final Map<String, TranslationInterface> TRANSLATION_MAPPER = new ConcurrentHashMap<>(); + + private Translation translation; + + @Override + public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + try { + TranslationInterface trans = TRANSLATION_MAPPER.get(translation.type()); + if (ObjectUtil.isNotNull(trans)) { + String result = trans.translation(StringUtils.isBlank(translation.key()) ? value : translation.key()); + gen.writeString(StringUtils.isNotBlank(result) ? result : value.toString()); + } else { + gen.writeString(value.toString()); + } + } catch (BeansException e) { + log.error("瀛楀吀鏁版嵁鏈煡鍒�, 閲囩敤榛樿澶勭悊 => {}", e.getMessage()); + gen.writeString(value.toString()); + } + } + + @Override + public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) throws JsonMappingException { + Translation translation = property.getAnnotation(Translation.class); + if (Objects.nonNull(translation)) { + this.translation = translation; + return this; + } + return prov.findValueSerializer(property.getType(), property); + } +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/DictTranslationImpl.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/DictTranslationImpl.java new file mode 100644 index 0000000..e660cfb --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/DictTranslationImpl.java @@ -0,0 +1,29 @@ +package com.ruoyi.common.translation.core.impl; + +import com.ruoyi.common.translation.annotation.TranslationType; +import com.ruoyi.common.translation.constant.TransConstant; +import com.ruoyi.common.translation.core.TranslationInterface; +import org.springframework.stereotype.Component; + +/** + * 缈昏瘧鎺ュ彛 (瀹炵幇绫婚渶鏍囨敞 {@link com.ruoyi.common.translation.annotation.TranslationType} 娉ㄨВ鏍囨槑缈昏瘧绫诲瀷) + * + * @author Lion Li + */ +@Component +@TranslationType(type = TransConstant.DICT_TYPE_TO_LABEL) +public class DictTranslationImpl implements TranslationInterface { + + /** + * 缈昏瘧 + * + * @param key 闇�瑕佽缈昏瘧鐨勯敭 + * @return 杩斿洖閿搴旂殑鍊� + */ + public String translation(Object key) { + if (key instanceof String dictType) { + return "dict"; + } + return null; + } +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/UserNameTranslationImpl.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/UserNameTranslationImpl.java new file mode 100644 index 0000000..3906393 --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/UserNameTranslationImpl.java @@ -0,0 +1,29 @@ +package com.ruoyi.common.translation.core.impl; + +import com.ruoyi.common.translation.annotation.TranslationType; +import com.ruoyi.common.translation.constant.TransConstant; +import com.ruoyi.common.translation.core.TranslationInterface; +import org.springframework.stereotype.Component; + +/** + * 缈昏瘧鎺ュ彛 (瀹炵幇绫婚渶鏍囨敞 {@link com.ruoyi.common.translation.annotation.TranslationType} 娉ㄨВ鏍囨槑缈昏瘧绫诲瀷) + * + * @author Lion Li + */ +@Component +@TranslationType(type = TransConstant.USER_ID_TO_NAME) +public class UserNameTranslationImpl implements TranslationInterface { + + /** + * 缈昏瘧 + * + * @param key 闇�瑕佽缈昏瘧鐨勯敭 + * @return 杩斿洖閿搴旂殑鍊� + */ + public String translation(Object key) { + if (key instanceof Long id) { + return "admin"; + } + return null; + } +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..07529fd --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.ruoyi.common.translation.config.TranslationConfig diff --git a/ruoyi-modules/ruoyi-demo/pom.xml b/ruoyi-modules/ruoyi-demo/pom.xml index 43e15e2..6ab4db6 100644 --- a/ruoyi-modules/ruoyi-demo/pom.xml +++ b/ruoyi-modules/ruoyi-demo/pom.xml @@ -73,6 +73,11 @@ <artifactId>ruoyi-common-ratelimiter</artifactId> </dependency> + <dependency> + <groupId>com.ruoyi</groupId> + <artifactId>ruoyi-common-translation</artifactId> + </dependency> + <!-- 鐭俊 鐢ㄥ摢涓鍏ュ摢涓緷璧� --> <!-- <dependency>--> <!-- <groupId>com.aliyun</groupId>--> diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/vo/TestDemoVo.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/vo/TestDemoVo.java index 365927e..9a6c57c 100644 --- a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/vo/TestDemoVo.java +++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/vo/TestDemoVo.java @@ -2,6 +2,8 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.translation.annotation.Translation; +import com.ruoyi.common.translation.constant.TransConstant; import lombok.Data; import java.io.Serial; @@ -67,6 +69,7 @@ /** * 鍒涘缓浜� */ + @Translation(type = TransConstant.USER_ID_TO_NAME) @ExcelProperty(value = "鍒涘缓浜�") private Long createBy; @@ -79,6 +82,7 @@ /** * 鏇存柊浜� */ + @Translation(type = TransConstant.USER_ID_TO_NAME) @ExcelProperty(value = "鏇存柊浜�") private Long updateBy; -- Gitblit v1.9.3