From 0e8bc800151d835aaf1f7587dcd832f8ac050ec5 Mon Sep 17 00:00:00 2001
From: song_jx <1649991905@qq.com>
Date: Mon, 18 Mar 2024 11:26:04 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=AE=8C=E5=96=84(master):?=
=?UTF-8?q?=20=E6=95=B0=E6=8D=AE=E5=BA=93=E7=BF=BB=E8=AF=91=E6=94=AF?=
=?UTF-8?q?=E6=8C=81=E5=AD=97=E6=AE=B5=E4=B8=8D=E4=B8=80=E8=87=B4=E6=83=85?=
=?UTF-8?q?=E5=86=B5=EF=BC=88=E6=98=A0=E5=B0=84=E6=A8=A1=E5=BC=8F=E8=A7=A3?=
=?UTF-8?q?=E5=86=B3=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 12 +++-
.../aizuda/trans/annotation/Translate.java | 1 +
.../com/aizuda/trans/demo/DemoService.java | 18 ++++-
.../trans/demo/impl/DemoServiceImpl.java | 12 +++-
.../com/aizuda/trans/entity/People2_1.java | 27 +++++++
.../java/com/aizuda/trans/TranslatorTest.java | 7 ++
.../trans/handler/TranslatorHandle.java | 72 +++++++++++++------
pom.xml | 2 +-
8 files changed, 124 insertions(+), 27 deletions(-)
create mode 100644 dict-trans-demo/src/main/java/com/aizuda/trans/entity/People2_1.java
diff --git a/README.md b/README.md
index 426e77b..3abf2c9 100644
--- a/README.md
+++ b/README.md
@@ -148,7 +148,7 @@ dict-trans
com.aizuda
dict-trans
- 0.7
+ 0.8
@@ -269,6 +269,9 @@ public class People {
参数:
* dictClass:字典配置类,指定的 class 上必须是 `DictTranslate.class` 实现类 、 `IEnum` 接口的实现类 、 `Desensitized` 、 `SummaryExtract` 或者是 `@Dictionary` 注解;
* translateField:翻译后的属性名,注意使用驼峰命名,默认为原属性名去除末尾的 "Id" 和 "Code" 再接上 "Name";
+ 1. 不填时默认为原属性名去除末尾的"Id"和"Code"再接上"Name"
+ 2. Desensitized(脱敏) 与 SummaryExtract(摘要提取)不填时默认为原字段
+ 3. 数据库翻译时,若查询的字段与翻译字段长度不一致,可以填写字段映射。格式:“查询字段:翻译字段”,如“sex:sexName”。此时将会自动重新组织数据,防止翻译对不上的情况。*注意:若不使用映射模式,一定要长度一致,顺序一致!!!否者会出现对应错乱!!!*
* groupValue:组属性值,在静态字典表这种拥有组属性的字典中需要手动传入一个定值(即:字典分组的 code);
* dictionary:指定 `Dictionary` 并设置其属性,将覆盖 `dictClass` 上的 `Dictionary` 注解的配置,指定了该属性后也可不指定 `dictClass` ,一般情况下不会使用;
* conditionField:指定判断条件字段(仅自定义翻译实现时用来进行判断)『20230822更新后支持固定值,格式:V:<值>』;
@@ -310,7 +313,14 @@ public class UserDB {
}
// 2.2. 字段翻译
+// 特殊用法1(多列翻译):
// @Translate(dictClass = UserDB.class, translateField = {"name", "sex"})
+//
+// 特殊用法2(映射翻译):
+// 针对此种翻译注解情况 @Dictionary(codeColumn = "id", textColumn = {"user_name", "sex"})
+// @Translate(dictClass = UserDB.class, translateField = {"user_name:name"})
+//
+// 常规用法如下:
@Translate(dictClass = UserDB.class, translateField = "name")
private String id;
diff --git a/dict-trans-core/src/main/java/com/aizuda/trans/annotation/Translate.java b/dict-trans-core/src/main/java/com/aizuda/trans/annotation/Translate.java
index e362b09..8ab599a 100644
--- a/dict-trans-core/src/main/java/com/aizuda/trans/annotation/Translate.java
+++ b/dict-trans-core/src/main/java/com/aizuda/trans/annotation/Translate.java
@@ -38,6 +38,7 @@ public @interface Translate {
*
*
*
diff --git a/dict-trans-demo/src/main/java/com/aizuda/trans/demo/DemoService.java b/dict-trans-demo/src/main/java/com/aizuda/trans/demo/DemoService.java
index 4119046..747ff2a 100644
--- a/dict-trans-demo/src/main/java/com/aizuda/trans/demo/DemoService.java
+++ b/dict-trans-demo/src/main/java/com/aizuda/trans/demo/DemoService.java
@@ -1,6 +1,12 @@
package com.aizuda.trans.demo;
-import com.aizuda.trans.entity.*;
+import com.aizuda.trans.entity.Device;
+import com.aizuda.trans.entity.People;
+import com.aizuda.trans.entity.People2;
+import com.aizuda.trans.entity.People2_1;
+import com.aizuda.trans.entity.People3;
+import com.aizuda.trans.entity.People4;
+import com.aizuda.trans.entity.Result;
import java.util.List;
@@ -43,7 +49,15 @@ public interface DemoService {
* @author nn200433
*/
public List dbDemo();
-
+
+ /**
+ * 数据库演示(单列翻译)
+ *
+ * @return {@link List }<{@link People2 }>
+ * @author nn200433
+ */
+ public List dbDemo1();
+
/**
* json演示
*
diff --git a/dict-trans-demo/src/main/java/com/aizuda/trans/demo/impl/DemoServiceImpl.java b/dict-trans-demo/src/main/java/com/aizuda/trans/demo/impl/DemoServiceImpl.java
index 5ba8130..d614093 100644
--- a/dict-trans-demo/src/main/java/com/aizuda/trans/demo/impl/DemoServiceImpl.java
+++ b/dict-trans-demo/src/main/java/com/aizuda/trans/demo/impl/DemoServiceImpl.java
@@ -6,6 +6,7 @@ import com.aizuda.trans.demo.DemoService;
import com.aizuda.trans.entity.Device;
import com.aizuda.trans.entity.People;
import com.aizuda.trans.entity.People2;
+import com.aizuda.trans.entity.People2_1;
import com.aizuda.trans.entity.People3;
import com.aizuda.trans.entity.People4;
import com.aizuda.trans.entity.Result;
@@ -54,7 +55,16 @@ public class DemoServiceImpl implements DemoService {
People2 more = People2.builder().id("1,2").build();
return CollUtil.newArrayList(man, woman, more);
}
-
+
+ @Translator
+ @Override
+ public List dbDemo1() {
+ People2_1 man = People2_1.builder().id("1").build();
+ People2_1 woman = People2_1.builder().id("2").build();
+ People2_1 more = People2_1.builder().id("1,2").build();
+ return CollUtil.newArrayList(man, woman, more);
+ }
+
@Translator
@Override
public List jsonDemo() {
diff --git a/dict-trans-demo/src/main/java/com/aizuda/trans/entity/People2_1.java b/dict-trans-demo/src/main/java/com/aizuda/trans/entity/People2_1.java
new file mode 100644
index 0000000..fca8e55
--- /dev/null
+++ b/dict-trans-demo/src/main/java/com/aizuda/trans/entity/People2_1.java
@@ -0,0 +1,27 @@
+package com.aizuda.trans.entity;
+
+import com.aizuda.trans.annotation.Translate;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 人2_1
+ *
+ * @author nn200433
+ * @date 2022-12-16 016 11:40:30
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class People2_1 {
+
+ /** 数据库翻译 */
+ @Translate(dictClass = UserDB.class, translateField = {"user_name:name"})
+ private String id;
+
+ private String name;
+
+}
diff --git a/dict-trans-demo/src/test/java/com/aizuda/trans/TranslatorTest.java b/dict-trans-demo/src/test/java/com/aizuda/trans/TranslatorTest.java
index 0c986de..a64ab55 100644
--- a/dict-trans-demo/src/test/java/com/aizuda/trans/TranslatorTest.java
+++ b/dict-trans-demo/src/test/java/com/aizuda/trans/TranslatorTest.java
@@ -7,6 +7,7 @@ import com.aizuda.trans.demo.DemoService;
import com.aizuda.trans.entity.Device;
import com.aizuda.trans.entity.People;
import com.aizuda.trans.entity.People2;
+import com.aizuda.trans.entity.People2_1;
import com.aizuda.trans.entity.People3;
import com.aizuda.trans.entity.People4;
import com.aizuda.trans.entity.Result;
@@ -50,6 +51,12 @@ public class TranslatorTest {
Console.log("---> 数据库 翻译结果:{}", JSONUtil.toJsonStr(peopleList));
}
+ @Test
+ public void demo3_1() {
+ List peopleList = demoService.dbDemo1();
+ Console.log("---> 数据库(长度不一致,采用字段映射方式) 翻译结果:{}", JSONUtil.toJsonStr(peopleList));
+ }
+
@Test
public void demo4() {
List peopleList = demoService.jsonDemo();
diff --git a/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/handler/TranslatorHandle.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/handler/TranslatorHandle.java
index 2db9b0d..fcf3910 100644
--- a/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/handler/TranslatorHandle.java
+++ b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/handler/TranslatorHandle.java
@@ -43,6 +43,7 @@ import org.springframework.stereotype.Service;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@@ -171,41 +172,68 @@ public class TranslatorHandle {
* @author nn200433
*/
private static void transformField(T origin, FormatType fieldFormatType, Field field) {
- // 1.获取要翻译的属性名
- final String fName = field.getName();
- final String fieldName = NameUtil.parseCamelTo(fName, fieldFormatType);
- // 2.获取每个待翻译属性的配置
- final Translate translateConfig = field.getAnnotation(Translate.class);
- final Class> dictClass = getDictClass(translateConfig);
- final List writeFieldList = getWriteFieldNameSrv().getFieldNameList(translateConfig, fName, fieldFormatType);
- final String groupValue = translateConfig.groupValue();
- final String conditionField = translateConfig.conditionField();
- final String desensitizedModel = translateConfig.desensitizedModel();
- final int maxLen = translateConfig.maxLen();
- final Dictionary dictionaryConfig = handle(dictClass, translateConfig);
- final boolean isJsonConvert = IJsonConvert.class.isAssignableFrom(dictClass);
- final boolean isSetFieldEmpty = translateConfig.setFieldEmpty();
-
- // 获取未翻译的原值,如果值为空则跳过
+ // 1.获取要翻译的属性名 及 获取每个待翻译属性的配置
+ final String fName = field.getName();
+ final String fieldName = NameUtil.parseCamelTo(fName, fieldFormatType);
+ final Translate translateConfig = field.getAnnotation(Translate.class);
+ final Class> dictClass = getDictClass(translateConfig);
+ final String groupValue = translateConfig.groupValue();
+ final String conditionField = translateConfig.conditionField();
+ final String desensitizedModel = translateConfig.desensitizedModel();
+ final int maxLen = translateConfig.maxLen();
+ final boolean isJsonConvert = IJsonConvert.class.isAssignableFrom(dictClass);
+ final boolean isSetFieldEmpty = translateConfig.setFieldEmpty();
+ final Dictionary dictionaryConfig = handle(dictClass, translateConfig);
+ final String[] columns = dictionaryConfig.textColumn();
+ final String codeColumn = dictionaryConfig.codeColumn();
+ List writeFieldList = getWriteFieldNameSrv().getFieldNameList(translateConfig, fName, fieldFormatType);
+ // 2. 获取未翻译的原值,如果值为空则跳过
String originValue = Convert.toStr(getProperty(origin, fieldName));
if (originValue == null) {
return;
}
-
- // 获取条件字段值
+ // 3. 获取条件字段值
String conditionFieldValue = Opt.ofBlankAble(conditionField)
.map(c -> StrUtil.startWith(c, CONDITION_FIELD_IS_VALUE_PREFIX) ? StrUtil.removePrefix(c, CONDITION_FIELD_IS_VALUE_PREFIX) : Convert.toStr(getProperty(origin, c)))
.get();
-
- // 获取翻译结果并脱敏处理
+ // 4. 获取翻译结果
final ExtendParam extendParam = new ExtendParam(groupValue, conditionFieldValue, dictClass, maxLen);
List