From e039986248bd905a10776fc176760b57f56255ad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?=
<15040126243@163.com>
Date: Sun, 5 Feb 2023 13:22:39 +0800
Subject: [PATCH] =?UTF-8?q?add=20=E6=96=B0=E5=A2=9E=20=E9=80=9A=E7=94=A8?=
=?UTF-8?q?=E7=BF=BB=E8=AF=91=E6=A8=A1=E5=9D=97=20ruoyi-common-translation?=
=?UTF-8?q?=20=E5=AE=9E=E7=8E=B0(=E9=83=A8=E9=97=A8=E5=90=8D=E3=80=81?=
=?UTF-8?q?=E5=AD=97=E5=85=B8=E3=80=81oss=E3=80=81=E7=94=A8=E6=88=B7?=
=?UTF-8?q?=E5=90=8D)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ruoyi/resource/api/RemoteFileService.java | 9 +++
.../ruoyi/system/api/RemoteDeptService.java | 18 +++++
.../ruoyi/system/api/RemoteUserService.java | 7 ++
ruoyi-common/pom.xml | 1 +
ruoyi-common/ruoyi-common-bom/pom.xml | 7 ++
.../common/core/constant/CacheNames.java | 10 +++
ruoyi-common/ruoyi-common-translation/pom.xml | 42 ++++++++++++
.../translation/annotation/Translation.java | 39 +++++++++++
.../annotation/TranslationType.java | 21 ++++++
.../translation/config/TranslationConfig.java | 50 ++++++++++++++
.../translation/constant/TransConstant.java | 30 +++++++++
.../core/TranslationInterface.java | 17 +++++
.../TranslationBeanSerializerModifier.java | 29 +++++++++
.../core/handler/TranslationHandler.java | 65 +++++++++++++++++++
.../core/impl/DeptNameTranslationImpl.java | 27 ++++++++
.../core/impl/DictTypeTranslationImpl.java | 29 +++++++++
.../core/impl/OssUrlTranslationImpl.java | 27 ++++++++
.../core/impl/UserNameTranslationImpl.java | 27 ++++++++
...ot.autoconfigure.AutoConfiguration.imports | 1 +
.../ruoyi/resource/domain/bo/SysOssBo.java | 9 +++
.../resource/dubbo/RemoteFileServiceImpl.java | 25 +++++--
.../resource/service/ISysOssService.java | 5 +-
.../service/impl/SysOssServiceImpl.java | 28 ++++++--
.../system/dubbo/RemoteDeptServiceImpl.java | 25 +++++++
.../system/dubbo/RemoteDictServiceImpl.java | 2 +-
.../system/dubbo/RemoteUserServiceImpl.java | 7 +-
.../ruoyi/system/service/ISysDeptService.java | 8 +++
.../ruoyi/system/service/ISysUserService.java | 8 +++
.../service/impl/SysDeptServiceImpl.java | 31 ++++++++-
.../service/impl/SysUserServiceImpl.java | 10 +++
30 files changed, 599 insertions(+), 15 deletions(-)
create mode 100644 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteDeptService.java
create mode 100644 ruoyi-common/ruoyi-common-translation/pom.xml
create mode 100644 ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/annotation/Translation.java
create mode 100644 ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/annotation/TranslationType.java
create mode 100644 ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/config/TranslationConfig.java
create mode 100644 ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/constant/TransConstant.java
create mode 100644 ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/TranslationInterface.java
create mode 100644 ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationBeanSerializerModifier.java
create mode 100644 ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationHandler.java
create mode 100644 ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/DeptNameTranslationImpl.java
create mode 100644 ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/DictTypeTranslationImpl.java
create mode 100644 ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/OssUrlTranslationImpl.java
create mode 100644 ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/UserNameTranslationImpl.java
create mode 100644 ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
create mode 100644 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dubbo/RemoteDeptServiceImpl.java
diff --git a/ruoyi-api/ruoyi-api-resource/src/main/java/com/ruoyi/resource/api/RemoteFileService.java b/ruoyi-api/ruoyi-api-resource/src/main/java/com/ruoyi/resource/api/RemoteFileService.java
index 1bcad8e5..e6324228 100644
--- a/ruoyi-api/ruoyi-api-resource/src/main/java/com/ruoyi/resource/api/RemoteFileService.java
+++ b/ruoyi-api/ruoyi-api-resource/src/main/java/com/ruoyi/resource/api/RemoteFileService.java
@@ -17,4 +17,13 @@ public interface RemoteFileService {
* @return 结果
*/
SysFile upload(String name, String originalFilename, String contentType, byte[] file) throws ServiceException;
+
+ /**
+ * 通过ossId查询对应的url
+ *
+ * @param ossIds ossId串逗号分隔
+ * @return url串逗号分隔
+ */
+ String selectUrlByIds(String ossIds);
+
}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteDeptService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteDeptService.java
new file mode 100644
index 00000000..c6ef9add
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteDeptService.java
@@ -0,0 +1,18 @@
+package com.ruoyi.system.api;
+
+/**
+ * 部门服务
+ *
+ * @author Lion Li
+ */
+public interface RemoteDeptService {
+
+ /**
+ * 通过部门ID查询部门名称
+ *
+ * @param deptIds 部门ID串逗号分隔
+ * @return 部门名称串逗号分隔
+ */
+ String selectDeptNameByIds(String deptIds);
+
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java
index 22cea277..3589a3c8 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java
@@ -44,4 +44,11 @@ public interface RemoteUserService {
*/
Boolean registerUserInfo(SysUser sysUser);
+ /**
+ * 通过userId查询用户账户
+ *
+ * @param userId 用户id
+ * @return 结果
+ */
+ String selectUserNameById(Long userId);
}
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index c2595a09..620e453b 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -34,6 +34,7 @@
ruoyi-common-sentinel
ruoyi-common-skylog
ruoyi-common-prometheus
+ ruoyi-common-translation
ruoyi-common
diff --git a/ruoyi-common/ruoyi-common-bom/pom.xml b/ruoyi-common/ruoyi-common-bom/pom.xml
index 515abe4f..bb77be4e 100644
--- a/ruoyi-common/ruoyi-common-bom/pom.xml
+++ b/ruoyi-common/ruoyi-common-bom/pom.xml
@@ -161,6 +161,13 @@
ruoyi-common-prometheus
${project.version}
+
+
+ com.ruoyi
+ ruoyi-common-translation
+ ${project.version}
+
+
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheNames.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheNames.java
index ba09e9c4..b0d65737 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheNames.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheNames.java
@@ -30,6 +30,16 @@ public interface CacheNames {
*/
String SYS_DICT = "sys_dict";
+ /**
+ * 用户账户
+ */
+ String SYS_USER_NAME = "sys_user_name#30d";
+
+ /**
+ * 部门
+ */
+ String SYS_DEPT = "sys_dept#30d";
+
/**
* OSS内容
*/
diff --git a/ruoyi-common/ruoyi-common-translation/pom.xml b/ruoyi-common/ruoyi-common-translation/pom.xml
new file mode 100644
index 00000000..45a843a9
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-translation/pom.xml
@@ -0,0 +1,42 @@
+
+
+
+ com.ruoyi
+ ruoyi-common
+ 1.5.0
+
+ 4.0.0
+
+ ruoyi-common-translation
+
+
+ ruoyi-common-translation 通用翻译功能
+
+
+
+
+
+ com.ruoyi
+ ruoyi-common-core
+
+
+
+ com.ruoyi
+ ruoyi-common-dict
+
+
+
+ com.ruoyi
+ ruoyi-common-dubbo
+
+
+
+ com.ruoyi
+ ruoyi-api-resource
+
+
+
+
+
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 00000000..dbb469dc
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/annotation/Translation.java
@@ -0,0 +1,39 @@
+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对应)
+ *
+ * 默认取当前字段的值 如果设置了 @{@link Translation#mapper()} 则取映射字段的值
+ */
+ String type();
+
+ /**
+ * 映射字段 (如果不为空则取此字段的值)
+ */
+ String mapper() default "";
+
+ /**
+ * 其他条件 例如: 字典type(sys_user_sex)
+ */
+ String other() 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 00000000..1b64e537
--- /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 00000000..b5eaf73e
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/config/TranslationConfig.java
@@ -0,0 +1,50 @@
+package com.ruoyi.common.translation.config;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ruoyi.common.translation.annotation.TranslationType;
+import com.ruoyi.common.translation.core.TranslationInterface;
+import com.ruoyi.common.translation.core.handler.TranslationBeanSerializerModifier;
+import com.ruoyi.common.translation.core.handler.TranslationHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+
+import javax.annotation.PostConstruct;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 翻译模块配置类
+ *
+ * @author Lion Li
+ */
+@Slf4j
+@AutoConfiguration
+public class TranslationConfig {
+
+ @Autowired
+ private List list;
+
+ @Autowired
+ private ObjectMapper objectMapper;
+
+ @PostConstruct
+ public void init() {
+ Map 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);
+ // 设置 Bean 序列化修改器
+ objectMapper.setSerializerFactory(
+ objectMapper.getSerializerFactory()
+ .withSerializerModifier(new TranslationBeanSerializerModifier()));
+ }
+
+}
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 00000000..1cfec58e
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/constant/TransConstant.java
@@ -0,0 +1,30 @@
+package com.ruoyi.common.translation.constant;
+
+/**
+ * 翻译常量
+ *
+ * @author Lion Li
+ */
+public interface TransConstant {
+
+ /**
+ * 用户id转账号
+ */
+ String USER_ID_TO_NAME = "user_id_to_name";
+
+ /**
+ * 部门id转名称
+ */
+ String DEPT_ID_TO_NAME = "dept_id_to_name";
+
+ /**
+ * 字典type转label
+ */
+ String DICT_TYPE_TO_LABEL = "dict_type_to_label";
+
+ /**
+ * ossId转url
+ */
+ String OSS_ID_TO_URL = "oss_id_to_url";
+
+}
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 00000000..f325c3e3
--- /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, String other);
+}
diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationBeanSerializerModifier.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationBeanSerializerModifier.java
new file mode 100644
index 00000000..45549ff7
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationBeanSerializerModifier.java
@@ -0,0 +1,29 @@
+package com.ruoyi.common.translation.core.handler;
+
+import com.fasterxml.jackson.databind.BeanDescription;
+import com.fasterxml.jackson.databind.SerializationConfig;
+import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
+import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
+
+import java.util.List;
+
+/**
+ * Bean 序列化修改器 解决 Null 被单独处理问题
+ *
+ * @author Lion Li
+ */
+public class TranslationBeanSerializerModifier extends BeanSerializerModifier {
+
+ @Override
+ public List changeProperties(SerializationConfig config, BeanDescription beanDesc,
+ List beanProperties) {
+ for (BeanPropertyWriter writer : beanProperties) {
+ // 如果序列化器为 TranslationHandler 的话 将 Null 值也交给他处理
+ if (writer.getSerializer() instanceof TranslationHandler) {
+ writer.assignNullSerializer(writer.getSerializer());
+ }
+ }
+ return beanProperties;
+ }
+
+}
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 00000000..69a2e453
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationHandler.java
@@ -0,0 +1,65 @@
+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.core.utils.reflect.ReflectUtils;
+import com.ruoyi.common.translation.annotation.Translation;
+import com.ruoyi.common.translation.core.TranslationInterface;
+import lombok.extern.slf4j.Slf4j;
+
+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