From 7bf1fb63beff0879fe768dba1c0d7b6f26150e1d Mon Sep 17 00:00:00 2001 From: song_jx <1649991905@qq.com> Date: Thu, 25 May 2023 21:02:27 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BB=A3=E7=A0=81=E9=87=8D=E6=9E=84](dev):=20?= =?UTF-8?q?=E5=A4=A7=E9=87=8D=E6=9E=84,=E5=88=86=E7=A6=BB=E6=A0=B8?= =?UTF-8?q?=E5=BF=83=E8=B7=9Fspringboot=E5=BC=95=E5=85=A5,=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0demo=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- CHANGELOG.md | 9 + README.md | 334 +++++++++++++----- dict-trans-core/pom.xml | 43 +++ .../aizuda/trans/annotation/Dictionary.java | 5 +- .../aizuda/trans/annotation/Translate.java | 2 +- .../aizuda/trans/annotation/Translator.java | 11 +- .../constants/DesensitizedTypeConstants.java | 0 .../trans/desensitized/Desensitized.java | 0 .../trans/desensitized/IDesensitized.java | 0 .../com/aizuda/trans/dict/DictTranslate.java | 0 .../java/com/aizuda/trans/enums/EnumPool.java | 0 .../com/aizuda/trans/enums/FormatType.java | 0 .../java/com/aizuda/trans/enums/IEnum.java | 0 .../com/aizuda/trans/json/IJsonConvert.java | 0 .../com/aizuda/trans/json/JSONConvert.java | 0 .../trans/service/DictTranslateService.java | 0 .../aizuda/trans/service/Translatable.java | 0 .../com/aizuda/trans/util/LambdaUtil.java | 0 .../java/com/aizuda/trans/util/NameUtil.java | 12 +- dict-trans-demo/pom.xml | 70 ++++ .../trans/TranslatorBootApplication.java | 2 - .../trans/controller/TestController.java | 28 ++ .../com/aizuda/trans/demo/DemoService.java | 23 +- .../impl/CustomerTranslateServiceImpl.java | 0 .../trans/demo/impl/DemoServiceImpl.java | 26 +- .../trans/demo/impl/ResultUnWrapper.java | 21 ++ .../aizuda/trans/dict/CustomerDictImpl.java | 0 .../java/com/aizuda/trans/entity/Device.java | 0 .../java/com/aizuda/trans/entity/Dict.java | 0 .../java/com/aizuda/trans/entity/People.java | 4 + .../java/com/aizuda/trans/entity/People2.java | 2 +- .../java/com/aizuda/trans/entity/People3.java | 0 .../java/com/aizuda/trans/entity/Result.java | 26 ++ .../java/com/aizuda/trans/entity/UserDB.java | 0 .../com/aizuda/trans/enums/DeviceStatus.java | 0 .../src/main}/resources/application.yml | 0 .../java/com/aizuda/trans/TranslatorTest.java | 32 +- dict-trans-spring-boot-starter/pom.xml | 55 +++ .../aizuda/trans/aspect/TranslateAspect.java | 43 +++ .../aizuda/trans/config/TranslatorConfig.java | 24 +- .../trans/handler/TranslatorHandle.java | 157 ++++---- .../com/aizuda/trans/service/UnWrapper.java | 36 ++ .../service/impl/DataBaseTranslator.java | 5 +- .../impl/DefaultDictTranslateServiceImpl.java | 0 .../service/impl/DesensitizedTranslator.java | 0 .../service/impl/DictCacheTranslator.java | 0 .../trans/service/impl/EnumTranslator.java | 0 .../service/impl/JsonConvertTranslator.java | 0 .../service/impl/wrapper/IPageUnWrapper.java | 19 + .../main/resources/META-INF/spring.factories | 0 doc/imgs/demo.png | Bin 124443 -> 115708 bytes pom.xml | 115 +++--- .../aizuda/trans/aspect/TranslateAspect.java | 40 --- 54 files changed, 840 insertions(+), 307 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 dict-trans-core/pom.xml rename {src => dict-trans-core/src}/main/java/com/aizuda/trans/annotation/Dictionary.java (90%) rename {src => dict-trans-core/src}/main/java/com/aizuda/trans/annotation/Translate.java (100%) rename {src => dict-trans-core/src}/main/java/com/aizuda/trans/annotation/Translator.java (62%) rename {src => dict-trans-core/src}/main/java/com/aizuda/trans/constants/DesensitizedTypeConstants.java (100%) rename {src => dict-trans-core/src}/main/java/com/aizuda/trans/desensitized/Desensitized.java (100%) rename {src => dict-trans-core/src}/main/java/com/aizuda/trans/desensitized/IDesensitized.java (100%) rename {src => dict-trans-core/src}/main/java/com/aizuda/trans/dict/DictTranslate.java (100%) rename {src => dict-trans-core/src}/main/java/com/aizuda/trans/enums/EnumPool.java (100%) rename {src => dict-trans-core/src}/main/java/com/aizuda/trans/enums/FormatType.java (100%) rename {src => dict-trans-core/src}/main/java/com/aizuda/trans/enums/IEnum.java (100%) rename {src => dict-trans-core/src}/main/java/com/aizuda/trans/json/IJsonConvert.java (100%) rename {src => dict-trans-core/src}/main/java/com/aizuda/trans/json/JSONConvert.java (100%) rename {src => dict-trans-core/src}/main/java/com/aizuda/trans/service/DictTranslateService.java (100%) rename {src => dict-trans-core/src}/main/java/com/aizuda/trans/service/Translatable.java (100%) rename {src => dict-trans-core/src}/main/java/com/aizuda/trans/util/LambdaUtil.java (100%) rename {src => dict-trans-core/src}/main/java/com/aizuda/trans/util/NameUtil.java (79%) create mode 100644 dict-trans-demo/pom.xml rename {src => dict-trans-demo/src}/main/java/com/aizuda/trans/TranslatorBootApplication.java (80%) create mode 100644 dict-trans-demo/src/main/java/com/aizuda/trans/controller/TestController.java rename {src/test => dict-trans-demo/src/main}/java/com/aizuda/trans/demo/DemoService.java (69%) rename {src/test => dict-trans-demo/src/main}/java/com/aizuda/trans/demo/impl/CustomerTranslateServiceImpl.java (100%) rename {src/test => dict-trans-demo/src/main}/java/com/aizuda/trans/demo/impl/DemoServiceImpl.java (66%) create mode 100644 dict-trans-demo/src/main/java/com/aizuda/trans/demo/impl/ResultUnWrapper.java rename {src/test => dict-trans-demo/src/main}/java/com/aizuda/trans/dict/CustomerDictImpl.java (100%) rename {src/test => dict-trans-demo/src/main}/java/com/aizuda/trans/entity/Device.java (100%) rename {src/test => dict-trans-demo/src/main}/java/com/aizuda/trans/entity/Dict.java (100%) rename {src/test => dict-trans-demo/src/main}/java/com/aizuda/trans/entity/People.java (92%) rename {src/test => dict-trans-demo/src/main}/java/com/aizuda/trans/entity/People2.java (98%) rename {src/test => dict-trans-demo/src/main}/java/com/aizuda/trans/entity/People3.java (100%) create mode 100644 dict-trans-demo/src/main/java/com/aizuda/trans/entity/Result.java rename {src/test => dict-trans-demo/src/main}/java/com/aizuda/trans/entity/UserDB.java (100%) rename {src/test => dict-trans-demo/src/main}/java/com/aizuda/trans/enums/DeviceStatus.java (100%) rename {src/test => dict-trans-demo/src/main}/resources/application.yml (100%) rename {src => dict-trans-demo/src}/test/java/com/aizuda/trans/TranslatorTest.java (61%) create mode 100644 dict-trans-spring-boot-starter/pom.xml create mode 100644 dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/aspect/TranslateAspect.java rename {src => dict-trans-spring-boot-starter/src}/main/java/com/aizuda/trans/config/TranslatorConfig.java (53%) rename {src => dict-trans-spring-boot-starter/src}/main/java/com/aizuda/trans/handler/TranslatorHandle.java (77%) create mode 100644 dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/UnWrapper.java rename {src => dict-trans-spring-boot-starter/src}/main/java/com/aizuda/trans/service/impl/DataBaseTranslator.java (97%) rename {src => dict-trans-spring-boot-starter/src}/main/java/com/aizuda/trans/service/impl/DefaultDictTranslateServiceImpl.java (100%) rename {src => dict-trans-spring-boot-starter/src}/main/java/com/aizuda/trans/service/impl/DesensitizedTranslator.java (100%) rename {src => dict-trans-spring-boot-starter/src}/main/java/com/aizuda/trans/service/impl/DictCacheTranslator.java (100%) rename {src => dict-trans-spring-boot-starter/src}/main/java/com/aizuda/trans/service/impl/EnumTranslator.java (100%) rename {src => dict-trans-spring-boot-starter/src}/main/java/com/aizuda/trans/service/impl/JsonConvertTranslator.java (100%) create mode 100644 dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/wrapper/IPageUnWrapper.java rename {src => dict-trans-spring-boot-starter/src}/main/resources/META-INF/spring.factories (100%) delete mode 100644 src/main/java/com/aizuda/trans/aspect/TranslateAspect.java diff --git a/.gitignore b/.gitignore index 96b4386..7531ad8 100644 --- a/.gitignore +++ b/.gitignore @@ -110,4 +110,5 @@ buildNumber.properties .mvn/wrapper/maven-wrapper.jar /.idea/ -/.fastRequest/ \ No newline at end of file +/.fastRequest/ +.flattened-pom.xml \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..1951e40 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,9 @@ +# ChangeLog + +All notable changes to this project will be documented in this file,ChangeLog information is generated by the [CommitMessage plugin](https://plugins.jetbrains.com/plugin/12256-commit-message-create) + +## [v](https://git/compare/v...master) + + +## [0.1](https://git/compare/0.1...master) + diff --git a/README.md b/README.md index 4749589..85a4590 100644 --- a/README.md +++ b/README.md @@ -12,91 +12,161 @@ * [x] 自定义翻译 * [x] 翻译结果脱敏 * [x] json字符串翻译为json对象 +* [x] 嵌套翻译 ## 项目结构 ``` -EasyTranslate - └── src - ├── main - │ └── java - │ └── com - │ └── aizuda - │ └── trans - │ ├── annotation 翻译注解 - │ │ ├── Dictionary.java 字典注解,标识在字典数据类上(自动生成查询 SQL) - │ │ ├── Translate.java 翻译字段注解,标识在需要翻译的字段上 - │ │ └── Translator.java 翻译方法注解,对方法返回值进行翻译 - │ ├── aspect - │ │ └── TranslateAspect.java 翻译切面 - │ ├── config - │ │ └── TranslatorConfig.java 默认翻译方法注入配置 - │ ├── constants 常量配置 - │ │ └── DesensitizedTypeConstants.java - │ ├── desensitized 脱敏相关 - │ │ ├── Desensitized.java - │ │ └── IDesensitized.java - │ ├── dict 数据字典相关 - │ │ └── DictTranslate.java - │ ├── enums 枚举相关 - │ │ ├── EnumPool.java - │ │ ├── FormatType.java - │ │ └── IEnum.java - │ ├── handler 主要操作类 - │ │ └── TranslatorHandle.java - │ ├── json json相关 - │ │ ├── IJsonConvert.java - │ │ └── JSONConvert.java - │ ├── service - │ │ ├── impl - │ │ │ ├── DefaultDictTranslateServiceImpl.java 默认数据字典翻译实现(实现字典翻译接口。仿照该方法,实现自己的业务) - │ │ │ ├── DictCacheTranslator.java 数据字典翻译实现(调用 字典翻译接口实现) - │ │ │ ├── DataBaseTranslator.java 数据库翻译服务 - │ │ │ ├── DesensitizedTranslator.java 脱敏实现(没啥操作,就返回原值) - │ │ │ ├── EnumTranslator.java 枚举翻译实现 - │ │ │ └── JsonConvertTranslator.java json翻译实现 - │ │ ├── Translatable.java 翻译接口(字典、枚举、....接实现该接口) - │ │ └── DictTranslateService.java 字典翻译接口 - │ ├── TranslatorBootApplication.java - │ └── util 一些工具类 - │ ├── LambdaUtil.java - │ └── NameUtil.java - └── test demo演示 +dict-trans + ├── dict-trans-core + │ └── src + │ └── main + │ └── java + │ └── com + │ └── aizuda + │ └── trans + │ ├── annotation 翻译注解 + │ │ ├── Dictionary.java 字典注解,标识在字典数据类上(自动生成查询 SQL) + │ │ ├── Translate.java 翻译字段注解,标识在需要翻译的字段上 + │ │ └── Translator.java 翻译方法注解,对方法返回值进行翻译 + │ ├── constants 常量配置 + │ │ └── DesensitizedTypeConstants.java + │ ├── desensitized 脱敏相关 + │ │ ├── Desensitized.java + │ │ └── IDesensitized.java + │ ├── dict 数据字典相关 + │ │ └── DictTranslate.java + │ ├── enums 枚举相关 + │ │ ├── EnumPool.java + │ │ ├── FormatType.java + │ │ └── IEnum.java + │ ├── json json相关 + │ │ ├── IJsonConvert.java + │ │ └── JSONConvert.java + │ ├── service + │ │ ├── DictTranslateService.java 字典翻译接口 + │ │ └── Translatable.java 翻译接口(字典、枚举、....接实现该接口) + │ └── util 一些工具类 + │ ├── LambdaUtil.java + │ └── NameUtil.java + ├── dict-trans-demo demo演示 + │ └── src + │ ├── main + │ │ ├── java + │ │ │ └── com + │ │ │ └── aizuda + │ │ │ └── trans + │ │ │ ├── controller + │ │ │ │ └── TestController.java + │ │ │ ├── demo + │ │ │ │ ├── DemoService.java + │ │ │ │ └── impl + │ │ │ │ ├── CustomerTranslateServiceImpl.java + │ │ │ │ ├── DemoServiceImpl.java + │ │ │ │ └── ResultUnWrapper.java 业务统一返回 解包器实现 + │ │ │ ├── dict + │ │ │ │ └── CustomerDictImpl.java + │ │ │ ├── entity + │ │ │ │ ├── Device.java + │ │ │ │ ├── Dict.java + │ │ │ │ ├── People.java + │ │ │ │ ├── People2.java + │ │ │ │ ├── People3.java + │ │ │ │ ├── Result.java + │ │ │ │ └── UserDB.java + │ │ │ ├── enums + │ │ │ │ └── DeviceStatus.java + │ │ │ └── TranslatorBootApplication.java + │ │ └── resources + │ │ └── application.yml + │ └── test + │ └── java + │ └── com + │ └── aizuda + │ └── trans + │ └── TranslatorTest.java + ├── dict-trans-spring-boot-starter + │ └── src + │ └── main + │ └── java + │ └── com + │ └── aizuda + │ └── trans + │ ├── aspect 翻译切面 + │ │ └── TranslateAspect.java + │ ├── config + │ │ └── TranslatorConfig.java 默认翻译方法注入配置 + │ ├── handler 主要操作类 + │ │ └── TranslatorHandle.java + │ └── service + │ ├── impl + │ │ ├── DataBaseTranslator.java 数据库翻译服务 + │ │ ├── DefaultDictTranslateServiceImpl.java 默认数据字典翻译实现(实现字典翻译接口。仿照该方法,实现自己的业务) + │ │ ├── DesensitizedTranslator.java 脱敏实现(没啥操作,就返回原值) + │ │ ├── DictCacheTranslator.java 数据字典翻译实现(调用 字典翻译接口实现) + │ │ ├── EnumTranslator.java 枚举翻译实现 + │ │ ├── JsonConvertTranslator.java json翻译实现 + │ │ └── wrapper + │ │ └── IPageUnWrapper.java mybatis-plus 解包实现(就是取 records 而已) + │ └── UnWrapper.java 解包接口 + └── doc + ├── imgs + │ └── demo.png + └── t_test.sql demo 数据库脚本 ``` ## 快速开始 ### 引入jar包 +> 不要问为什么强依赖 `Hutool` 、 `MyBatis-Plus` 。 +> +> 就是爱! +> +> 不用这两个的,下面可以不用看了!!! + ```xml - - - + + + + + com.aizuda dict-trans - 0.2 - - - - + 0.3 + + + + cn.hutool hutool-all - ${hutool.version} - - - - + 5.8.18 + + + + com.baomidou mybatis-plus-boot-starter - ${mybatis-plus.version} - true - - - + 3.5.3.1 + + + + + + + org.springframework.boot + spring-boot-starter-web + 2.7.12 + + + + mysql mysql-connector-java - true - + 5.1.49 + + + ``` ### 配置 @@ -331,13 +401,14 @@ private Object jsonObj; > 方法返回类型支持 `Map` 、 `Entity` 、 `List` 、 `IPage` -说明:对方法返回值进行翻译,**只能用在方法上** +说明:对方法返回值进行翻译,**可用在方法、字段上** 参数:无 示例: ```java +// =========================== 示例1 用在方法上 =========================== @Component public class DemoServiceImpl implements DemoService { @@ -366,41 +437,121 @@ public class DemoServiceImpl implements DemoService { } } -``` -## 演示 +// =========================== 示例2 用在字段上 =========================== -```java -@SpringBootTest -@RunWith(SpringRunner.class) -public class TranslatorTest { +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class People { - @Autowired - private DemoService demoService; + @Translate(dictClass = Dict.class, groupValue = "sex", translateField = "sexName") + private String sex; - @Test - public void demo1() { - List peopleList = demoService.dictDemo(); - Console.log("---> 翻译结果:{}", peopleList); - } + private String sexName; - @Test - public void demo2() { - List deviceList = demoService.enumDemo(); - Console.log("---> 翻译结果:{}", deviceList); - } + /** 手机号脱敏 */ + @Translate(dictClass = Desensitized.class, translateField = "phone", desensitizedModel = DesensitizedTypeConstants.MOBILE_PHONE) + private String phone; - @Test - public void demo3() { - List peopleList = demoService.dbDemo(); - Console.log("---> 翻译结果:{}", peopleList); - } + /** 自定义翻译 */ + @Translate(dictionary = @Dictionary(translator = CustomerTranslateServiceImpl.class), translateField = "name") + private String id; + + private String name; + + /** 用在字段上,可嵌套翻译 */ + @Translator + private Device device; } ``` +## 演示 + +> 完整示例参考 `dict-trans-demo` 模块 + +```java +/** + * 转换测试 + * + * @author nn200433 + * @date 2020年05月18日 0018 15:05:05 + */ +@SpringBootTest +@RunWith(SpringRunner.class) +public class TranslatorTest { + + @Autowired + private DemoService demoService; + + @Test + public void demo1() { + List peopleList = demoService.dictDemo(); + Console.log("---> 字典 & 脱敏 翻译结果:{}", JSONUtil.toJsonStr(peopleList)); + } + + @Test + public void demo2() { + List deviceList = demoService.enumDemo(); + Console.log("---> 枚举 翻译结果:{}", JSONUtil.toJsonStr(deviceList)); + } + + @Test + public void demo3() { + List peopleList = demoService.dbDemo(); + Console.log("---> 数据库 翻译结果:{}", JSONUtil.toJsonStr(peopleList)); + } + + @Test + public void demo4() { + List peopleList = demoService.jsonDemo(); + Console.log("---> json 翻译结果:{}", JSONUtil.toJsonStr(peopleList)); + } + + @Test + public void demo5() { + Result result = demoService.responseNestedMockTest(); + Console.log("---> 响应嵌套数据:{}", JSONUtil.toJsonStr(result)); + } + +} +``` +  +``` + . ____ _ __ _ _ + /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ +( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ + \\/ ___)| |_)| | | | | || (_| | ) ) ) ) + ' |____| .__|_| |_|_| |_\__, | / / / / + =========|_|==============|___/=/_/_/_/ + :: Spring Boot :: (v2.7.12) + +2023-05-25 20:47:53.135 INFO 34112 --- [ main] com.aizuda.trans.TranslatorTest : Starting TranslatorTest using Java 1.8.0_311 on LAPTOP-N9LDSE74 with PID 34112 (started by nn200 in D:\idea_hengfeng\dict-trans\dict-trans-demo) +2023-05-25 20:47:53.139 INFO 34112 --- [ main] com.aizuda.trans.TranslatorTest : No active profile set, falling back to 1 default profile: "default" +2023-05-25 20:47:55.086 WARN 34112 --- [ main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.aizuda.trans]' package. Please check your configuration. + _ _ |_ _ _|_. ___ _ | _ +| | |\/|_)(_| | |_\ |_)||_|_\ + / | + 3.5.3.1 +2023-05-25 20:48:02.307 INFO 34112 --- [ main] com.aizuda.trans.TranslatorTest : Started TranslatorTest in 10.317 seconds (JVM running for 12.941) +---> 字典 & 脱敏 翻译结果:[{"sex":"1","sexName":"男","phone":"186****5678","id":"1","name":"结果1"},{"sex":"2","sexName":"女","phone":"186****5678","id":"2","name":"结果2"}] +---> 枚举 翻译结果:[{"status":"1","statusName":"未使用"},{"status":"2","statusName":"试运行"}] +2023-05-25 20:48:03.226 INFO 34112 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2023-05-25 20:48:03.913 INFO 34112 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +---> 数据库 翻译结果:[{"id":"1","name":"张三"},{"id":"2","name":"李四"}] +---> json 翻译结果:[{"id":"1","name":"张三","json":"{\"abc\":\"def\", \"eg\":3}","jsonObj":{"abc":"def","eg":3}},{"id":"2","name":"李四","json":"[{\"a\":\"b\",\"c\":6},{\"d\":\"f\",\"e\":{\"a\":\"6\"}}]","jsonObj":[{"a":"b","c":6},{"d":"f","e":{"a":"6"}}]}] +---> 响应嵌套数据:{"status":200,"data":[{"sex":"1","sexName":"男","phone":"186****5678","id":"1","name":"结果1","device":{"status":"1","statusName":"未使用"}},{"sex":"2","sexName":"女","phone":"186****5678","id":"2","name":"结果2","device":{"status":"2","statusName":"试运行"}}]} +2023-05-25 20:48:04.168 INFO 34112 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... +2023-05-25 20:48:04.194 INFO 34112 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. +Disconnected from the target VM, address: '127.0.0.1:1229', transport: 'socket' + +Process finished with exit code 0 +``` + ## 附注 该项目得益于 [Transformer v1 版本](https://github.com/luo-zhan/Transformer) 增加了 脱敏,完善了 数据库翻译 等功能。(Transformer可能是最简单,但最强大的字段转换插件,一个注解搞定任意转换,让开发变得更加丝滑),基本上就是在此项目上增加功能。 @@ -410,4 +561,5 @@ public class TranslatorTest { > 感谢以下的项目,排名不分先后 * [Hutool](https://hutool.cn) Hutool是一个Java工具包,让Java语言也可以“甜甜的”。 -* [MyBatis-Plus](https://baomidou.com/) MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 \ No newline at end of file +* [MyBatis-Plus](https://baomidou.com/) MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 +* [Transformer](https://github.com/luo-zhan/Transformer) Transformer 是一款功能全面的数据转换工具,只需要几个简单的注解配置,即可实现各种姿势的字段转换,抛弃连表查询和累赘的转换逻辑,让开发更简单。 \ No newline at end of file diff --git a/dict-trans-core/pom.xml b/dict-trans-core/pom.xml new file mode 100644 index 0000000..5948bd3 --- /dev/null +++ b/dict-trans-core/pom.xml @@ -0,0 +1,43 @@ + + + 4.0.0 + + com.aizuda + dict-trans + ${revision} + + + com.aizuda + dict-trans-core + + + UTF-8 + + + + + + + cn.hutool + hutool-all + ${hutool.version} + true + + + + + org.projectlombok + lombok + + + + + org.slf4j + slf4j-api + + + + + \ No newline at end of file diff --git a/src/main/java/com/aizuda/trans/annotation/Dictionary.java b/dict-trans-core/src/main/java/com/aizuda/trans/annotation/Dictionary.java similarity index 90% rename from src/main/java/com/aizuda/trans/annotation/Dictionary.java rename to dict-trans-core/src/main/java/com/aizuda/trans/annotation/Dictionary.java index abeb804..592421c 100644 --- a/src/main/java/com/aizuda/trans/annotation/Dictionary.java +++ b/dict-trans-core/src/main/java/com/aizuda/trans/annotation/Dictionary.java @@ -1,7 +1,6 @@ package com.aizuda.trans.annotation; import com.aizuda.trans.service.Translatable; -import com.baomidou.mybatisplus.annotation.TableName; import java.lang.annotation.*; @@ -11,15 +10,15 @@ import java.lang.annotation.*; * @author luozhan * @date 2019-03 */ +@Documented @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) -@Documented public @interface Dictionary { /** * 字典表名 * - * 为空时取 {@link TableName#value()},取不到则取 类名(驼峰转大写下划线) + * 为空时取 mybatis-plus 的 TableName 值,取不到则取 类名(驼峰转大写下划线) * */ String table() default ""; diff --git a/src/main/java/com/aizuda/trans/annotation/Translate.java b/dict-trans-core/src/main/java/com/aizuda/trans/annotation/Translate.java similarity index 100% rename from src/main/java/com/aizuda/trans/annotation/Translate.java rename to dict-trans-core/src/main/java/com/aizuda/trans/annotation/Translate.java index c8586c5..b8992e0 100644 --- a/src/main/java/com/aizuda/trans/annotation/Translate.java +++ b/dict-trans-core/src/main/java/com/aizuda/trans/annotation/Translate.java @@ -10,9 +10,9 @@ import java.lang.annotation.*; * @author luozhan * @date 2019-03 */ +@Documented @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) -@Documented public @interface Translate { /** diff --git a/src/main/java/com/aizuda/trans/annotation/Translator.java b/dict-trans-core/src/main/java/com/aizuda/trans/annotation/Translator.java similarity index 62% rename from src/main/java/com/aizuda/trans/annotation/Translator.java rename to dict-trans-core/src/main/java/com/aizuda/trans/annotation/Translator.java index 69a3f93..ebffe26 100644 --- a/src/main/java/com/aizuda/trans/annotation/Translator.java +++ b/dict-trans-core/src/main/java/com/aizuda/trans/annotation/Translator.java @@ -8,14 +8,9 @@ import java.lang.annotation.*; * @author luozhan * @date 2020-04 */ -@Target(ElementType.METHOD) -@Retention(RetentionPolicy.RUNTIME) @Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD, ElementType.METHOD, ElementType.TYPE}) public @interface Translator { - - /** - * 指定翻译配置类,可传多个,一般为实体class - */ - Class>[] value() default void.class; - + } diff --git a/src/main/java/com/aizuda/trans/constants/DesensitizedTypeConstants.java b/dict-trans-core/src/main/java/com/aizuda/trans/constants/DesensitizedTypeConstants.java similarity index 100% rename from src/main/java/com/aizuda/trans/constants/DesensitizedTypeConstants.java rename to dict-trans-core/src/main/java/com/aizuda/trans/constants/DesensitizedTypeConstants.java diff --git a/src/main/java/com/aizuda/trans/desensitized/Desensitized.java b/dict-trans-core/src/main/java/com/aizuda/trans/desensitized/Desensitized.java similarity index 100% rename from src/main/java/com/aizuda/trans/desensitized/Desensitized.java rename to dict-trans-core/src/main/java/com/aizuda/trans/desensitized/Desensitized.java diff --git a/src/main/java/com/aizuda/trans/desensitized/IDesensitized.java b/dict-trans-core/src/main/java/com/aizuda/trans/desensitized/IDesensitized.java similarity index 100% rename from src/main/java/com/aizuda/trans/desensitized/IDesensitized.java rename to dict-trans-core/src/main/java/com/aizuda/trans/desensitized/IDesensitized.java diff --git a/src/main/java/com/aizuda/trans/dict/DictTranslate.java b/dict-trans-core/src/main/java/com/aizuda/trans/dict/DictTranslate.java similarity index 100% rename from src/main/java/com/aizuda/trans/dict/DictTranslate.java rename to dict-trans-core/src/main/java/com/aizuda/trans/dict/DictTranslate.java diff --git a/src/main/java/com/aizuda/trans/enums/EnumPool.java b/dict-trans-core/src/main/java/com/aizuda/trans/enums/EnumPool.java similarity index 100% rename from src/main/java/com/aizuda/trans/enums/EnumPool.java rename to dict-trans-core/src/main/java/com/aizuda/trans/enums/EnumPool.java diff --git a/src/main/java/com/aizuda/trans/enums/FormatType.java b/dict-trans-core/src/main/java/com/aizuda/trans/enums/FormatType.java similarity index 100% rename from src/main/java/com/aizuda/trans/enums/FormatType.java rename to dict-trans-core/src/main/java/com/aizuda/trans/enums/FormatType.java diff --git a/src/main/java/com/aizuda/trans/enums/IEnum.java b/dict-trans-core/src/main/java/com/aizuda/trans/enums/IEnum.java similarity index 100% rename from src/main/java/com/aizuda/trans/enums/IEnum.java rename to dict-trans-core/src/main/java/com/aizuda/trans/enums/IEnum.java diff --git a/src/main/java/com/aizuda/trans/json/IJsonConvert.java b/dict-trans-core/src/main/java/com/aizuda/trans/json/IJsonConvert.java similarity index 100% rename from src/main/java/com/aizuda/trans/json/IJsonConvert.java rename to dict-trans-core/src/main/java/com/aizuda/trans/json/IJsonConvert.java diff --git a/src/main/java/com/aizuda/trans/json/JSONConvert.java b/dict-trans-core/src/main/java/com/aizuda/trans/json/JSONConvert.java similarity index 100% rename from src/main/java/com/aizuda/trans/json/JSONConvert.java rename to dict-trans-core/src/main/java/com/aizuda/trans/json/JSONConvert.java diff --git a/src/main/java/com/aizuda/trans/service/DictTranslateService.java b/dict-trans-core/src/main/java/com/aizuda/trans/service/DictTranslateService.java similarity index 100% rename from src/main/java/com/aizuda/trans/service/DictTranslateService.java rename to dict-trans-core/src/main/java/com/aizuda/trans/service/DictTranslateService.java diff --git a/src/main/java/com/aizuda/trans/service/Translatable.java b/dict-trans-core/src/main/java/com/aizuda/trans/service/Translatable.java similarity index 100% rename from src/main/java/com/aizuda/trans/service/Translatable.java rename to dict-trans-core/src/main/java/com/aizuda/trans/service/Translatable.java diff --git a/src/main/java/com/aizuda/trans/util/LambdaUtil.java b/dict-trans-core/src/main/java/com/aizuda/trans/util/LambdaUtil.java similarity index 100% rename from src/main/java/com/aizuda/trans/util/LambdaUtil.java rename to dict-trans-core/src/main/java/com/aizuda/trans/util/LambdaUtil.java diff --git a/src/main/java/com/aizuda/trans/util/NameUtil.java b/dict-trans-core/src/main/java/com/aizuda/trans/util/NameUtil.java similarity index 79% rename from src/main/java/com/aizuda/trans/util/NameUtil.java rename to dict-trans-core/src/main/java/com/aizuda/trans/util/NameUtil.java index cc1bf15..c74dafa 100644 --- a/src/main/java/com/aizuda/trans/util/NameUtil.java +++ b/dict-trans-core/src/main/java/com/aizuda/trans/util/NameUtil.java @@ -3,6 +3,7 @@ package com.aizuda.trans.util; import com.aizuda.trans.enums.FormatType; import java.util.List; +import java.util.stream.Collectors; /** * 名字工具类 @@ -42,16 +43,13 @@ public class NameUtil { /** * 解析驼峰 * - * @param params 参数个数 - * @param type 类型 + * @param paramList 参数个数 + * @param type 类型 * @return {@link List }<{@link String }> * @author nn200433 */ - public static List parseCamelTo(List params, FormatType type) { - for (String param : params) { - param = parseCamelTo(param, type); - } - return params; + public static List parseCamelTo(List paramList, final FormatType type) { + return paramList.stream().map(s -> parseCamelTo(s, type)).collect(Collectors.toList()); } } diff --git a/dict-trans-demo/pom.xml b/dict-trans-demo/pom.xml new file mode 100644 index 0000000..3d086ec --- /dev/null +++ b/dict-trans-demo/pom.xml @@ -0,0 +1,70 @@ + + + 4.0.0 + + com.aizuda + dict-trans + ${revision} + + + com.aizuda + dict-trans-demo + + + UTF-8 + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-test + + + + junit + junit + test + + + + + com.aizuda + dict-trans-spring-boot-starter + ${revision} + + + + + org.projectlombok + lombok + + + + + cn.hutool + hutool-all + + + + + mysql + mysql-connector-java + + + + + com.baomidou + mybatis-plus-boot-starter + + + + + \ No newline at end of file diff --git a/src/main/java/com/aizuda/trans/TranslatorBootApplication.java b/dict-trans-demo/src/main/java/com/aizuda/trans/TranslatorBootApplication.java similarity index 80% rename from src/main/java/com/aizuda/trans/TranslatorBootApplication.java rename to dict-trans-demo/src/main/java/com/aizuda/trans/TranslatorBootApplication.java index fda8fd8..5766702 100644 --- a/src/main/java/com/aizuda/trans/TranslatorBootApplication.java +++ b/dict-trans-demo/src/main/java/com/aizuda/trans/TranslatorBootApplication.java @@ -2,7 +2,6 @@ package com.aizuda.trans; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Import; /** @@ -12,7 +11,6 @@ import org.springframework.context.annotation.Import; * @date 2022-12-16 11:30:52 */ @SpringBootApplication -@Import(cn.hutool.extra.spring.SpringUtil.class) public class TranslatorBootApplication { public static void main(String[] args) { diff --git a/dict-trans-demo/src/main/java/com/aizuda/trans/controller/TestController.java b/dict-trans-demo/src/main/java/com/aizuda/trans/controller/TestController.java new file mode 100644 index 0000000..b812b14 --- /dev/null +++ b/dict-trans-demo/src/main/java/com/aizuda/trans/controller/TestController.java @@ -0,0 +1,28 @@ +package com.aizuda.trans.controller; + +import com.aizuda.trans.annotation.Translator; +import com.aizuda.trans.demo.DemoService; +import com.aizuda.trans.entity.Result; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; + +@Slf4j +@RestController +@RequestMapping("test") +public class TestController { + + @Autowired + private DemoService demoService; + + @GetMapping("test") + @Translator + public Result test(HttpServletResponse response) { + return Result.builder().status(200).data(demoService.responseNestedMock()).build(); + } + +} \ No newline at end of file diff --git a/src/test/java/com/aizuda/trans/demo/DemoService.java b/dict-trans-demo/src/main/java/com/aizuda/trans/demo/DemoService.java similarity index 69% rename from src/test/java/com/aizuda/trans/demo/DemoService.java rename to dict-trans-demo/src/main/java/com/aizuda/trans/demo/DemoService.java index 978aea4..a508dca 100644 --- a/src/test/java/com/aizuda/trans/demo/DemoService.java +++ b/dict-trans-demo/src/main/java/com/aizuda/trans/demo/DemoService.java @@ -1,9 +1,6 @@ package com.aizuda.trans.demo; -import com.aizuda.trans.entity.Device; -import com.aizuda.trans.entity.People; -import com.aizuda.trans.entity.People2; -import com.aizuda.trans.entity.People3; +import com.aizuda.trans.entity.*; import java.util.List; @@ -46,5 +43,21 @@ public interface DemoService { * @author nn200433 */ public List jsonDemo(); - + + /** + * 响应嵌套模拟 + * + * @return {@link List }<{@link People }> + * @author nn200433 + */ + public List responseNestedMock(); + + /** + * 响应嵌套模拟 + * + * @return {@link Result } + * @author nn200433 + */ + public Result responseNestedMockTest(); + } diff --git a/src/test/java/com/aizuda/trans/demo/impl/CustomerTranslateServiceImpl.java b/dict-trans-demo/src/main/java/com/aizuda/trans/demo/impl/CustomerTranslateServiceImpl.java similarity index 100% rename from src/test/java/com/aizuda/trans/demo/impl/CustomerTranslateServiceImpl.java rename to dict-trans-demo/src/main/java/com/aizuda/trans/demo/impl/CustomerTranslateServiceImpl.java diff --git a/src/test/java/com/aizuda/trans/demo/impl/DemoServiceImpl.java b/dict-trans-demo/src/main/java/com/aizuda/trans/demo/impl/DemoServiceImpl.java similarity index 66% rename from src/test/java/com/aizuda/trans/demo/impl/DemoServiceImpl.java rename to dict-trans-demo/src/main/java/com/aizuda/trans/demo/impl/DemoServiceImpl.java index 6d50a59..992fd1c 100644 --- a/src/test/java/com/aizuda/trans/demo/impl/DemoServiceImpl.java +++ b/dict-trans-demo/src/main/java/com/aizuda/trans/demo/impl/DemoServiceImpl.java @@ -3,10 +3,7 @@ package com.aizuda.trans.demo.impl; import cn.hutool.core.collection.CollUtil; import com.aizuda.trans.annotation.Translator; 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.People3; +import com.aizuda.trans.entity.*; import org.springframework.stereotype.Component; import java.util.List; @@ -51,5 +48,24 @@ public class DemoServiceImpl implements DemoService { People3 woman = People3.builder().id("2").json("[{\"a\":\"b\",\"c\":6},{\"d\":\"f\",\"e\":{\"a\":\"6\"}}]").build(); return CollUtil.newArrayList(man, woman); } - + + @Override + public List responseNestedMock() { + // 设备 + Device man_d1 = Device.builder().status("1").build(); + Device woman_d2 = Device.builder().status("2").build(); + // 人 + People man = People.builder().sex("1").id("1").phone("18612345678").device(man_d1).build(); + People woman = People.builder().sex("2").id("2").phone("18612345678").device(woman_d2).build(); + // 丢到响应数据里头,响应的真实数据由 ResultUnWrapper 类获取到 + return CollUtil.newArrayList(man, woman); + } + + @Translator + @Override + public Result responseNestedMockTest() { + return Result.builder().status(200).data(responseNestedMock()).build(); + } + + } diff --git a/dict-trans-demo/src/main/java/com/aizuda/trans/demo/impl/ResultUnWrapper.java b/dict-trans-demo/src/main/java/com/aizuda/trans/demo/impl/ResultUnWrapper.java new file mode 100644 index 0000000..96fa934 --- /dev/null +++ b/dict-trans-demo/src/main/java/com/aizuda/trans/demo/impl/ResultUnWrapper.java @@ -0,0 +1,21 @@ +package com.aizuda.trans.demo.impl; + +import com.aizuda.trans.entity.Result; +import com.aizuda.trans.service.UnWrapper; +import org.springframework.stereotype.Component; + +/** + * 结果解包器 + * + * @author nn200433 + * @date 2023-05-25 025 14:48:43 + */ +@Component +public class ResultUnWrapper implements UnWrapper> { + + @Override + public Object unWrap(Result source) { + return source.getData(); + } + +} diff --git a/src/test/java/com/aizuda/trans/dict/CustomerDictImpl.java b/dict-trans-demo/src/main/java/com/aizuda/trans/dict/CustomerDictImpl.java similarity index 100% rename from src/test/java/com/aizuda/trans/dict/CustomerDictImpl.java rename to dict-trans-demo/src/main/java/com/aizuda/trans/dict/CustomerDictImpl.java diff --git a/src/test/java/com/aizuda/trans/entity/Device.java b/dict-trans-demo/src/main/java/com/aizuda/trans/entity/Device.java similarity index 100% rename from src/test/java/com/aizuda/trans/entity/Device.java rename to dict-trans-demo/src/main/java/com/aizuda/trans/entity/Device.java diff --git a/src/test/java/com/aizuda/trans/entity/Dict.java b/dict-trans-demo/src/main/java/com/aizuda/trans/entity/Dict.java similarity index 100% rename from src/test/java/com/aizuda/trans/entity/Dict.java rename to dict-trans-demo/src/main/java/com/aizuda/trans/entity/Dict.java diff --git a/src/test/java/com/aizuda/trans/entity/People.java b/dict-trans-demo/src/main/java/com/aizuda/trans/entity/People.java similarity index 92% rename from src/test/java/com/aizuda/trans/entity/People.java rename to dict-trans-demo/src/main/java/com/aizuda/trans/entity/People.java index 4a484c2..c2eaeaa 100644 --- a/src/test/java/com/aizuda/trans/entity/People.java +++ b/dict-trans-demo/src/main/java/com/aizuda/trans/entity/People.java @@ -2,6 +2,7 @@ package com.aizuda.trans.entity; import com.aizuda.trans.annotation.Dictionary; import com.aizuda.trans.annotation.Translate; +import com.aizuda.trans.annotation.Translator; import com.aizuda.trans.constants.DesensitizedTypeConstants; import com.aizuda.trans.demo.impl.CustomerTranslateServiceImpl; import com.aizuda.trans.desensitized.Desensitized; @@ -36,5 +37,8 @@ public class People { private String id; private String name; + + @Translator + private Device device; } diff --git a/src/test/java/com/aizuda/trans/entity/People2.java b/dict-trans-demo/src/main/java/com/aizuda/trans/entity/People2.java similarity index 98% rename from src/test/java/com/aizuda/trans/entity/People2.java rename to dict-trans-demo/src/main/java/com/aizuda/trans/entity/People2.java index 857cba4..e0e2896 100644 --- a/src/test/java/com/aizuda/trans/entity/People2.java +++ b/dict-trans-demo/src/main/java/com/aizuda/trans/entity/People2.java @@ -7,7 +7,7 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * 人 + * 人2 * * @author nn200433 * @date 2022-12-16 016 11:40:30 diff --git a/src/test/java/com/aizuda/trans/entity/People3.java b/dict-trans-demo/src/main/java/com/aizuda/trans/entity/People3.java similarity index 100% rename from src/test/java/com/aizuda/trans/entity/People3.java rename to dict-trans-demo/src/main/java/com/aizuda/trans/entity/People3.java diff --git a/dict-trans-demo/src/main/java/com/aizuda/trans/entity/Result.java b/dict-trans-demo/src/main/java/com/aizuda/trans/entity/Result.java new file mode 100644 index 0000000..1a8eb62 --- /dev/null +++ b/dict-trans-demo/src/main/java/com/aizuda/trans/entity/Result.java @@ -0,0 +1,26 @@ +package com.aizuda.trans.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 响应结果 + * + * @author nn200433 + * @date 2023-05-25 025 14:47:50 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Result { + + /** 状态 */ + private Integer status; + + /** 数据 */ + private R data; + +} diff --git a/src/test/java/com/aizuda/trans/entity/UserDB.java b/dict-trans-demo/src/main/java/com/aizuda/trans/entity/UserDB.java similarity index 100% rename from src/test/java/com/aizuda/trans/entity/UserDB.java rename to dict-trans-demo/src/main/java/com/aizuda/trans/entity/UserDB.java diff --git a/src/test/java/com/aizuda/trans/enums/DeviceStatus.java b/dict-trans-demo/src/main/java/com/aizuda/trans/enums/DeviceStatus.java similarity index 100% rename from src/test/java/com/aizuda/trans/enums/DeviceStatus.java rename to dict-trans-demo/src/main/java/com/aizuda/trans/enums/DeviceStatus.java diff --git a/src/test/resources/application.yml b/dict-trans-demo/src/main/resources/application.yml similarity index 100% rename from src/test/resources/application.yml rename to dict-trans-demo/src/main/resources/application.yml diff --git a/src/test/java/com/aizuda/trans/TranslatorTest.java b/dict-trans-demo/src/test/java/com/aizuda/trans/TranslatorTest.java similarity index 61% rename from src/test/java/com/aizuda/trans/TranslatorTest.java rename to dict-trans-demo/src/test/java/com/aizuda/trans/TranslatorTest.java index ce3cf96..0fe9982 100644 --- a/src/test/java/com/aizuda/trans/TranslatorTest.java +++ b/dict-trans-demo/src/test/java/com/aizuda/trans/TranslatorTest.java @@ -1,11 +1,9 @@ package com.aizuda.trans; import cn.hutool.core.lang.Console; +import cn.hutool.json.JSONUtil; 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.People3; +import com.aizuda.trans.entity.*; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -23,32 +21,38 @@ import java.util.List; @SpringBootTest @RunWith(SpringRunner.class) public class TranslatorTest { - + @Autowired private DemoService demoService; - + @Test public void demo1() { List peopleList = demoService.dictDemo(); - Console.log("---> 字典 & 脱敏 翻译结果:{}", peopleList); + Console.log("---> 字典 & 脱敏 翻译结果:{}", JSONUtil.toJsonStr(peopleList)); } - + @Test public void demo2() { List deviceList = demoService.enumDemo(); - Console.log("---> 枚举 翻译结果:{}", deviceList); + Console.log("---> 枚举 翻译结果:{}", JSONUtil.toJsonStr(deviceList)); } - + @Test public void demo3() { List peopleList = demoService.dbDemo(); - Console.log("---> 数据库 翻译结果:{}", peopleList); + Console.log("---> 数据库 翻译结果:{}", JSONUtil.toJsonStr(peopleList)); } - + @Test public void demo4() { List peopleList = demoService.jsonDemo(); - Console.log("---> json 翻译结果:{}", peopleList); + Console.log("---> json 翻译结果:{}", JSONUtil.toJsonStr(peopleList)); } - + + @Test + public void demo5() { + Result result = demoService.responseNestedMockTest(); + Console.log("---> 响应嵌套数据:{}", JSONUtil.toJsonStr(result)); + } + } diff --git a/dict-trans-spring-boot-starter/pom.xml b/dict-trans-spring-boot-starter/pom.xml new file mode 100644 index 0000000..3fd0780 --- /dev/null +++ b/dict-trans-spring-boot-starter/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + com.aizuda + dict-trans + ${revision} + + + com.aizuda + dict-trans-spring-boot-starter + + + UTF-8 + + + + + + + com.aizuda + dict-trans-core + ${revision} + + + + + cn.hutool + hutool-all + true + + + + com.baomidou + mybatis-plus-boot-starter + true + + + + + org.springframework.boot + spring-boot-starter-aop + + + + + org.projectlombok + lombok + + + + + \ No newline at end of file diff --git a/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/aspect/TranslateAspect.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/aspect/TranslateAspect.java new file mode 100644 index 0000000..30599e8 --- /dev/null +++ b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/aspect/TranslateAspect.java @@ -0,0 +1,43 @@ +package com.aizuda.trans.aspect; + +import com.aizuda.trans.handler.TranslatorHandle; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.convert.support.GenericConversionService; +import org.springframework.stereotype.Component; + +/** + * 字典翻译 在方法上定义@Tanslator注解,对方法返回值进行翻译 + * + * @author nn200433 + * @date 2023-05-25 04:21:27 + */ +@Slf4j +@Aspect +@Component +public class TranslateAspect { + + @Autowired + private GenericConversionService genericConversionService; + + @Pointcut("@annotation(com.aizuda.trans.annotation.Translator)") + public void pointCut() { + } + + @AfterReturning(pointcut = "pointCut()", returning = "returnValue") + public void doAfter(JoinPoint joinPoint, Object returnValue) { + if (null == returnValue) { + return; + } + // MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + // Translator config = signature.getMethod().getAnnotation(Translator.class); + + // 先从容器中获取的转换器进行返回值解包,注意此处返回结果可能是Bean也可能是集合。然后再进行翻译 + TranslatorHandle.transform(genericConversionService.convert(returnValue, Object.class)); + } + +} diff --git a/src/main/java/com/aizuda/trans/config/TranslatorConfig.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/config/TranslatorConfig.java similarity index 53% rename from src/main/java/com/aizuda/trans/config/TranslatorConfig.java rename to dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/config/TranslatorConfig.java index fda3119..42cc6bd 100644 --- a/src/main/java/com/aizuda/trans/config/TranslatorConfig.java +++ b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/config/TranslatorConfig.java @@ -2,9 +2,11 @@ package com.aizuda.trans.config; import com.aizuda.trans.service.DictTranslateService; import com.aizuda.trans.service.impl.DefaultDictTranslateServiceImpl; +import com.aizuda.trans.service.impl.wrapper.IPageUnWrapper; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; /** * 翻译配置 @@ -13,12 +15,30 @@ import org.springframework.context.annotation.Configuration; * @date 2022-08-18 018 16:37:42 */ @Configuration +@Import(cn.hutool.extra.spring.SpringUtil.class) public class TranslatorConfig { - + + /** + * 注册字典翻译服务默认实现 + * + * @return {@link DictTranslateService } + * @author nn200433 + */ @Bean @ConditionalOnMissingBean public DictTranslateService dictTranslateService() { return new DefaultDictTranslateServiceImpl(); } - + + /** + * 注册IPage解包器 + * + * @return {@link IPageUnWrapper }<{@link Object }> + * @author nn200433 + */ + @Bean + public IPageUnWrapper iPageUnWrapper() { + return new IPageUnWrapper(); + } + } diff --git a/src/main/java/com/aizuda/trans/handler/TranslatorHandle.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/handler/TranslatorHandle.java similarity index 77% rename from src/main/java/com/aizuda/trans/handler/TranslatorHandle.java rename to dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/handler/TranslatorHandle.java index b7e03a6..9a0c4db 100644 --- a/src/main/java/com/aizuda/trans/handler/TranslatorHandle.java +++ b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/handler/TranslatorHandle.java @@ -1,5 +1,6 @@ package com.aizuda.trans.handler; +import cn.hutool.core.annotation.AnnotationUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Assert; @@ -8,6 +9,7 @@ import cn.hutool.extra.spring.SpringUtil; import cn.hutool.json.JSONUtil; import com.aizuda.trans.annotation.Dictionary; import com.aizuda.trans.annotation.Translate; +import com.aizuda.trans.annotation.Translator; import com.aizuda.trans.desensitized.IDesensitized; import com.aizuda.trans.dict.DictTranslate; import com.aizuda.trans.enums.FormatType; @@ -16,8 +18,6 @@ import com.aizuda.trans.json.IJsonConvert; import com.aizuda.trans.service.Translatable; import com.aizuda.trans.service.impl.*; import com.aizuda.trans.util.NameUtil; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import sun.reflect.annotation.AnnotationType; @@ -47,107 +47,65 @@ public class TranslatorHandle { * 翻译Map或Entity或Page * * @param origin 需要翻译的数据 - * @param clazz 指定翻译的模板class,可传多个 * @param Map或Entity * @return origin */ - public static T parse(T origin, Class>... clazz) { + public static T transform(T origin) { if (origin == null) { return null; } - if (origin instanceof List) { - return (T) parse((List) origin, clazz); + if (origin instanceof Collection) { + return (T) parse((Collection) origin); } else if (origin instanceof Map) { Map m = (Map) origin; Collection values = m.values(); // 查询不为基本类型的数量 - long count = values.stream().filter(v -> !ClassUtil.isSimpleTypeOrArray(ClassUtil.getClass(v))).count(); + final long count = values.stream().filter(v -> !ClassUtil.isSimpleTypeOrArray(ClassUtil.getClass(v))).count(); if (values.size() == count) { - for (Map.Entry entry : m.entrySet()) { + for (final Map.Entry entry : m.entrySet()) { Object value = entry.getValue(); - // 跳过空对象 - if (ObjectUtil.isNull(value)) { + if (ObjUtil.isNull(value)) { continue; } - Class classType = ClassUtil.getClass(value); - value = parse(Collections.singletonList(value), classType).get(0); + value = CollUtil.getFirst(parse(Collections.singletonList(value))); } return (T) m; } - } else if (origin instanceof IPage) { - Page p = (Page) origin; - p.setRecords(parse(p.getRecords(), clazz)); - return (T) p; } - return parse(Collections.singletonList(origin), clazz).get(0); + return CollUtil.getFirst(parse(Collections.singletonList(origin))); } /** * 翻译集合 集合元素为Map或Entity - * - * 注意: 如果不指定class,默认使用List中元素的class上配置的翻译规则进行翻译 当List集合元素不为Entity类型时,class参数至少需要指定1个 * - * @param origins 待翻译数据集合 - * @param classes 配置了翻译规则的Entity类型,可传多个 + * @param originList 待翻译数据集合 * @param 支持Entity或者Map * @return List */ - public static List parse(List origins, Class>... classes) { - if (CollUtil.isEmpty(origins)) { - return origins; + public static Collection parse(Collection originList) { + if (CollUtil.isEmpty(originList)) { + return originList; } // 源数据中属性的格式(大写下划线,小写下划线,驼峰) - final FormatType fieldFormatType = getFieldType(origins); - // 获取数据类型 - classes = (classes.length != 0 && classes[0] != void.class) ? classes : new Class[]{origins.get(0).getClass()}; - // 获取类中需要翻译的属性 - final List translateFieldList = Stream.of(classes) - .map(c -> ReflectUtil.getFields(c)) - .flatMap(Stream::of) - .filter(field -> field.isAnnotationPresent(Translate.class)) - .collect(Collectors.toList()); - - for (Field field : translateFieldList) { - // 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 = NameUtil.parseCamelTo(getTranslateFieldName(translateConfig, fName), - fieldFormatType); - final String groupValue = translateConfig.groupValue(); - final String conditionField = translateConfig.conditionField(); - final String desensitizedModel = translateConfig.desensitizedModel(); - final Dictionary dictionaryConfig = handle(dictClass, translateConfig); - final boolean isJsonConvert = IJsonConvert.class.isAssignableFrom(dictClass); - - for (T origin : origins) { - // 获取未翻译的原值,如果值为空则跳过 - String originValue = Convert.toStr(getProperty(origin, fieldName)); - if (originValue == null) { - continue; - } - - // 获取条件字段值 - String conditionFieldValue = null; - if (StrUtil.isNotBlank(conditionField)) { - conditionFieldValue = Convert.toStr(getProperty(origin, conditionField)); - } - - // 获取翻译结果并脱敏处理 - List translateValueList = parse(originValue, dictionaryConfig, dictClass, groupValue, conditionFieldValue); - if (!isJsonConvert) { - // 不是 JsonConvert.class 时可进行脱敏 - translateValueList = desensitizedHandle(desensitizedModel, translateValueList); - } - - // 将翻译结果填入翻译展示字段 - setProperty(origin, isJsonConvert, fieldName, writeFieldList, translateValueList); - } - } - return origins; + final FormatType fieldFormatType = getFieldType(originList); + + // 翻译数据 + originList.forEach(bean -> { + final Class> beanClass = bean.getClass(); + final Field[] declaredFields = ReflectUtil.getFields(beanClass); + // 循环处理需要转换的字段,字段上的注解链上需要有@Transform,且字段类型必须为String + Arrays.stream(declaredFields) + // 只转换String类型的属性,其他类型的属性代表是嵌套情况需要过滤掉,后面处理 + .filter(field -> field.getType() == String.class && AnnotationUtil.hasAnnotation(field, Translate.class)) + .forEach(field -> transformField(bean, fieldFormatType, field)); + // 转换嵌套字段,字段上需要标注@Transform且字段类型不为String(递归转换) + Arrays.stream(declaredFields) + .filter(field -> field.getType() != String.class && field.isAnnotationPresent(Translator.class)) + .forEach(field -> transform(ReflectUtil.invoke(bean, ReflectUtil.getMethodByName(beanClass, "get" + StrUtil.upperFirst(field.getName()))))); + }); + + return originList; } /** @@ -170,7 +128,52 @@ public class TranslatorHandle { return CollUtil.defaultIfEmpty(translator.translate(groupValue, conditionValue, originValue, dictionaryConfig, dictClass), Collections.emptyList()); } - + + /** + * 翻译字段 + * + * @param origin 源 + * @param fieldFormatType 字段格式类型 + * @param field 字段 + * @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 = NameUtil.parseCamelTo(getTranslateFieldName(translateConfig, fName), fieldFormatType); + final String groupValue = translateConfig.groupValue(); + final String conditionField = translateConfig.conditionField(); + final String desensitizedModel = translateConfig.desensitizedModel(); + final Dictionary dictionaryConfig = handle(dictClass, translateConfig); + final boolean isJsonConvert = IJsonConvert.class.isAssignableFrom(dictClass); + + // 获取未翻译的原值,如果值为空则跳过 + String originValue = Convert.toStr(getProperty(origin, fieldName)); + if (originValue == null) { + return; + } + + // 获取条件字段值 + String conditionFieldValue = null; + if (StrUtil.isNotBlank(conditionField)) { + conditionFieldValue = Convert.toStr(getProperty(origin, conditionField)); + } + + // 获取翻译结果并脱敏处理 + List translateValList = parse(originValue, dictionaryConfig, dictClass, groupValue, conditionFieldValue); + if (!isJsonConvert) { + // 不是 JsonConvert.class 时可进行脱敏 + translateValList = desensitizedHandle(desensitizedModel, translateValList); + } + + // 将翻译结果填入翻译展示字段 + setProperty(origin, isJsonConvert, fieldName, writeFieldList, translateValList); + } + /** * 判断源数据中的属性格式类型 * @@ -178,8 +181,8 @@ public class TranslatorHandle { * @return {@link FormatType } * @author nn200433 */ - private static FormatType getFieldType(List origins) { - T element = origins.get(0); + private static FormatType getFieldType(Collection origins) { + final T element = CollUtil.getFirst(origins); if (Map.class.isAssignableFrom(element.getClass())) { Set keySet = ((Map) element).keySet(); for (String key : keySet) { diff --git a/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/UnWrapper.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/UnWrapper.java new file mode 100644 index 0000000..c16973d --- /dev/null +++ b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/UnWrapper.java @@ -0,0 +1,36 @@ +package com.aizuda.trans.service; + + +import lombok.NonNull; +import org.springframework.core.convert.converter.Converter; + +/** + * 解包器 + * + * @author nn200433 + * @date 2023-05-25 025 09:48:33 + */ +public interface UnWrapper extends Converter { + + /** + * 解包 + * + * @param source 源 + * @return {@link Object } 包装类内的实际对象 + * @author nn200433 + */ + public Object unWrap(T source); + + /** + * 将类型的 T 源对象转换为目标类型 Object。 + * + * @param source 要转换的源对象,它必须是非 null T 实例 + * @return {@link Object } 转换后的对象,它是 可能为 null 的 Object + * @author nn200433 + */ + @Override + public default Object convert(@NonNull T source) { + return unWrap(source); + } + +} diff --git a/src/main/java/com/aizuda/trans/service/impl/DataBaseTranslator.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/DataBaseTranslator.java similarity index 97% rename from src/main/java/com/aizuda/trans/service/impl/DataBaseTranslator.java rename to dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/DataBaseTranslator.java index 6b64b41..7799fdb 100644 --- a/src/main/java/com/aizuda/trans/service/impl/DataBaseTranslator.java +++ b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/DataBaseTranslator.java @@ -8,13 +8,13 @@ import cn.hutool.db.Db; import cn.hutool.db.Entity; import cn.hutool.db.handler.EntityHandler; import cn.hutool.db.handler.EntityListHandler; -import cn.hutool.extra.spring.SpringUtil; import com.aizuda.trans.annotation.Dictionary; import com.aizuda.trans.enums.FormatType; import com.aizuda.trans.service.Translatable; import com.aizuda.trans.util.NameUtil; import com.baomidou.mybatisplus.annotation.TableName; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.Assert; @@ -39,7 +39,8 @@ public class DataBaseTranslator implements Translatable { /** * 获取数据源 */ - private static DataSource dataSource = SpringUtil.getBean(DataSource.class); + @Autowired(required = false) + private DataSource dataSource; @Override public List translate(String groupValue, String conditionValue, String origin, Dictionary dictConfig, diff --git a/src/main/java/com/aizuda/trans/service/impl/DefaultDictTranslateServiceImpl.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/DefaultDictTranslateServiceImpl.java similarity index 100% rename from src/main/java/com/aizuda/trans/service/impl/DefaultDictTranslateServiceImpl.java rename to dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/DefaultDictTranslateServiceImpl.java diff --git a/src/main/java/com/aizuda/trans/service/impl/DesensitizedTranslator.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/DesensitizedTranslator.java similarity index 100% rename from src/main/java/com/aizuda/trans/service/impl/DesensitizedTranslator.java rename to dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/DesensitizedTranslator.java diff --git a/src/main/java/com/aizuda/trans/service/impl/DictCacheTranslator.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/DictCacheTranslator.java similarity index 100% rename from src/main/java/com/aizuda/trans/service/impl/DictCacheTranslator.java rename to dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/DictCacheTranslator.java diff --git a/src/main/java/com/aizuda/trans/service/impl/EnumTranslator.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/EnumTranslator.java similarity index 100% rename from src/main/java/com/aizuda/trans/service/impl/EnumTranslator.java rename to dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/EnumTranslator.java diff --git a/src/main/java/com/aizuda/trans/service/impl/JsonConvertTranslator.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/JsonConvertTranslator.java similarity index 100% rename from src/main/java/com/aizuda/trans/service/impl/JsonConvertTranslator.java rename to dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/JsonConvertTranslator.java diff --git a/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/wrapper/IPageUnWrapper.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/wrapper/IPageUnWrapper.java new file mode 100644 index 0000000..67a4659 --- /dev/null +++ b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/wrapper/IPageUnWrapper.java @@ -0,0 +1,19 @@ +package com.aizuda.trans.service.impl.wrapper; + +import com.aizuda.trans.service.UnWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; + +/** + * mybatis-plus 的 IPage 解包器 + * + * @author nn200433 + * @date 2023-05-25 025 10:02:45 + */ +public class IPageUnWrapper implements UnWrapper> { + + @Override + public Object unWrap(IPage source) { + return source.getRecords(); + } + +} diff --git a/src/main/resources/META-INF/spring.factories b/dict-trans-spring-boot-starter/src/main/resources/META-INF/spring.factories similarity index 100% rename from src/main/resources/META-INF/spring.factories rename to dict-trans-spring-boot-starter/src/main/resources/META-INF/spring.factories diff --git a/doc/imgs/demo.png b/doc/imgs/demo.png index ebc100805d0317c1b7814c135b4586947a4c044c..04173df596aa87c1ccb4b826b9770de117b8b0dc 100644 GIT binary patch literal 115708 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
- * 为空时取 {@link TableName#value()},取不到则取 类名(驼峰转大写下划线) + * 为空时取 mybatis-plus 的 TableName 值,取不到则取 类名(驼峰转大写下划线) *
- * 注意: 如果不指定class,默认使用List中元素的class上配置的翻译规则进行翻译 当List集合元素不为Entity类型时,class参数至少需要指定1个 * - * @param origins 待翻译数据集合 - * @param classes 配置了翻译规则的Entity类型,可传多个 + * @param originList 待翻译数据集合 * @param 支持Entity或者Map * @return List */ - public static List parse(List origins, Class>... classes) { - if (CollUtil.isEmpty(origins)) { - return origins; + public static Collection parse(Collection originList) { + if (CollUtil.isEmpty(originList)) { + return originList; } // 源数据中属性的格式(大写下划线,小写下划线,驼峰) - final FormatType fieldFormatType = getFieldType(origins); - // 获取数据类型 - classes = (classes.length != 0 && classes[0] != void.class) ? classes : new Class[]{origins.get(0).getClass()}; - // 获取类中需要翻译的属性 - final List translateFieldList = Stream.of(classes) - .map(c -> ReflectUtil.getFields(c)) - .flatMap(Stream::of) - .filter(field -> field.isAnnotationPresent(Translate.class)) - .collect(Collectors.toList()); - - for (Field field : translateFieldList) { - // 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 = NameUtil.parseCamelTo(getTranslateFieldName(translateConfig, fName), - fieldFormatType); - final String groupValue = translateConfig.groupValue(); - final String conditionField = translateConfig.conditionField(); - final String desensitizedModel = translateConfig.desensitizedModel(); - final Dictionary dictionaryConfig = handle(dictClass, translateConfig); - final boolean isJsonConvert = IJsonConvert.class.isAssignableFrom(dictClass); - - for (T origin : origins) { - // 获取未翻译的原值,如果值为空则跳过 - String originValue = Convert.toStr(getProperty(origin, fieldName)); - if (originValue == null) { - continue; - } - - // 获取条件字段值 - String conditionFieldValue = null; - if (StrUtil.isNotBlank(conditionField)) { - conditionFieldValue = Convert.toStr(getProperty(origin, conditionField)); - } - - // 获取翻译结果并脱敏处理 - List translateValueList = parse(originValue, dictionaryConfig, dictClass, groupValue, conditionFieldValue); - if (!isJsonConvert) { - // 不是 JsonConvert.class 时可进行脱敏 - translateValueList = desensitizedHandle(desensitizedModel, translateValueList); - } - - // 将翻译结果填入翻译展示字段 - setProperty(origin, isJsonConvert, fieldName, writeFieldList, translateValueList); - } - } - return origins; + final FormatType fieldFormatType = getFieldType(originList); + + // 翻译数据 + originList.forEach(bean -> { + final Class> beanClass = bean.getClass(); + final Field[] declaredFields = ReflectUtil.getFields(beanClass); + // 循环处理需要转换的字段,字段上的注解链上需要有@Transform,且字段类型必须为String + Arrays.stream(declaredFields) + // 只转换String类型的属性,其他类型的属性代表是嵌套情况需要过滤掉,后面处理 + .filter(field -> field.getType() == String.class && AnnotationUtil.hasAnnotation(field, Translate.class)) + .forEach(field -> transformField(bean, fieldFormatType, field)); + // 转换嵌套字段,字段上需要标注@Transform且字段类型不为String(递归转换) + Arrays.stream(declaredFields) + .filter(field -> field.getType() != String.class && field.isAnnotationPresent(Translator.class)) + .forEach(field -> transform(ReflectUtil.invoke(bean, ReflectUtil.getMethodByName(beanClass, "get" + StrUtil.upperFirst(field.getName()))))); + }); + + return originList; } /** @@ -170,7 +128,52 @@ public class TranslatorHandle { return CollUtil.defaultIfEmpty(translator.translate(groupValue, conditionValue, originValue, dictionaryConfig, dictClass), Collections.emptyList()); } - + + /** + * 翻译字段 + * + * @param origin 源 + * @param fieldFormatType 字段格式类型 + * @param field 字段 + * @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 = NameUtil.parseCamelTo(getTranslateFieldName(translateConfig, fName), fieldFormatType); + final String groupValue = translateConfig.groupValue(); + final String conditionField = translateConfig.conditionField(); + final String desensitizedModel = translateConfig.desensitizedModel(); + final Dictionary dictionaryConfig = handle(dictClass, translateConfig); + final boolean isJsonConvert = IJsonConvert.class.isAssignableFrom(dictClass); + + // 获取未翻译的原值,如果值为空则跳过 + String originValue = Convert.toStr(getProperty(origin, fieldName)); + if (originValue == null) { + return; + } + + // 获取条件字段值 + String conditionFieldValue = null; + if (StrUtil.isNotBlank(conditionField)) { + conditionFieldValue = Convert.toStr(getProperty(origin, conditionField)); + } + + // 获取翻译结果并脱敏处理 + List translateValList = parse(originValue, dictionaryConfig, dictClass, groupValue, conditionFieldValue); + if (!isJsonConvert) { + // 不是 JsonConvert.class 时可进行脱敏 + translateValList = desensitizedHandle(desensitizedModel, translateValList); + } + + // 将翻译结果填入翻译展示字段 + setProperty(origin, isJsonConvert, fieldName, writeFieldList, translateValList); + } + /** * 判断源数据中的属性格式类型 * @@ -178,8 +181,8 @@ public class TranslatorHandle { * @return {@link FormatType } * @author nn200433 */ - private static FormatType getFieldType(List origins) { - T element = origins.get(0); + private static FormatType getFieldType(Collection origins) { + final T element = CollUtil.getFirst(origins); if (Map.class.isAssignableFrom(element.getClass())) { Set keySet = ((Map) element).keySet(); for (String key : keySet) { diff --git a/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/UnWrapper.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/UnWrapper.java new file mode 100644 index 0000000..c16973d --- /dev/null +++ b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/UnWrapper.java @@ -0,0 +1,36 @@ +package com.aizuda.trans.service; + + +import lombok.NonNull; +import org.springframework.core.convert.converter.Converter; + +/** + * 解包器 + * + * @author nn200433 + * @date 2023-05-25 025 09:48:33 + */ +public interface UnWrapper extends Converter { + + /** + * 解包 + * + * @param source 源 + * @return {@link Object } 包装类内的实际对象 + * @author nn200433 + */ + public Object unWrap(T source); + + /** + * 将类型的 T 源对象转换为目标类型 Object。 + * + * @param source 要转换的源对象,它必须是非 null T 实例 + * @return {@link Object } 转换后的对象,它是 可能为 null 的 Object + * @author nn200433 + */ + @Override + public default Object convert(@NonNull T source) { + return unWrap(source); + } + +} diff --git a/src/main/java/com/aizuda/trans/service/impl/DataBaseTranslator.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/DataBaseTranslator.java similarity index 97% rename from src/main/java/com/aizuda/trans/service/impl/DataBaseTranslator.java rename to dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/DataBaseTranslator.java index 6b64b41..7799fdb 100644 --- a/src/main/java/com/aizuda/trans/service/impl/DataBaseTranslator.java +++ b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/DataBaseTranslator.java @@ -8,13 +8,13 @@ import cn.hutool.db.Db; import cn.hutool.db.Entity; import cn.hutool.db.handler.EntityHandler; import cn.hutool.db.handler.EntityListHandler; -import cn.hutool.extra.spring.SpringUtil; import com.aizuda.trans.annotation.Dictionary; import com.aizuda.trans.enums.FormatType; import com.aizuda.trans.service.Translatable; import com.aizuda.trans.util.NameUtil; import com.baomidou.mybatisplus.annotation.TableName; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.Assert; @@ -39,7 +39,8 @@ public class DataBaseTranslator implements Translatable { /** * 获取数据源 */ - private static DataSource dataSource = SpringUtil.getBean(DataSource.class); + @Autowired(required = false) + private DataSource dataSource; @Override public List translate(String groupValue, String conditionValue, String origin, Dictionary dictConfig, diff --git a/src/main/java/com/aizuda/trans/service/impl/DefaultDictTranslateServiceImpl.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/DefaultDictTranslateServiceImpl.java similarity index 100% rename from src/main/java/com/aizuda/trans/service/impl/DefaultDictTranslateServiceImpl.java rename to dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/DefaultDictTranslateServiceImpl.java diff --git a/src/main/java/com/aizuda/trans/service/impl/DesensitizedTranslator.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/DesensitizedTranslator.java similarity index 100% rename from src/main/java/com/aizuda/trans/service/impl/DesensitizedTranslator.java rename to dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/DesensitizedTranslator.java diff --git a/src/main/java/com/aizuda/trans/service/impl/DictCacheTranslator.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/DictCacheTranslator.java similarity index 100% rename from src/main/java/com/aizuda/trans/service/impl/DictCacheTranslator.java rename to dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/DictCacheTranslator.java diff --git a/src/main/java/com/aizuda/trans/service/impl/EnumTranslator.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/EnumTranslator.java similarity index 100% rename from src/main/java/com/aizuda/trans/service/impl/EnumTranslator.java rename to dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/EnumTranslator.java diff --git a/src/main/java/com/aizuda/trans/service/impl/JsonConvertTranslator.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/JsonConvertTranslator.java similarity index 100% rename from src/main/java/com/aizuda/trans/service/impl/JsonConvertTranslator.java rename to dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/JsonConvertTranslator.java diff --git a/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/wrapper/IPageUnWrapper.java b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/wrapper/IPageUnWrapper.java new file mode 100644 index 0000000..67a4659 --- /dev/null +++ b/dict-trans-spring-boot-starter/src/main/java/com/aizuda/trans/service/impl/wrapper/IPageUnWrapper.java @@ -0,0 +1,19 @@ +package com.aizuda.trans.service.impl.wrapper; + +import com.aizuda.trans.service.UnWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; + +/** + * mybatis-plus 的 IPage 解包器 + * + * @author nn200433 + * @date 2023-05-25 025 10:02:45 + */ +public class IPageUnWrapper implements UnWrapper> { + + @Override + public Object unWrap(IPage source) { + return source.getRecords(); + } + +} diff --git a/src/main/resources/META-INF/spring.factories b/dict-trans-spring-boot-starter/src/main/resources/META-INF/spring.factories similarity index 100% rename from src/main/resources/META-INF/spring.factories rename to dict-trans-spring-boot-starter/src/main/resources/META-INF/spring.factories diff --git a/doc/imgs/demo.png b/doc/imgs/demo.png index ebc100805d0317c1b7814c135b4586947a4c044c..04173df596aa87c1ccb4b826b9770de117b8b0dc 100644 GIT binary patch literal 115708 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
;-{9+VfI8ppul! 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
RzQI#Y8dRCm%1@%{OW-Z2}&M#Ov=&;5k*wdf4x} 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
p)vcjb^q7ZP%>1M454KnDgGBgpCu^!g zmw^WLmsS>tQQxUn?{owFkEAry3Y1FqIkw8%VfkFLpqjE3|Y2S;ViMySAbXT)*rK zUqXJdHH7138ZTU2M|XQ5jz??-< zTDhy-`b!*GT=h~o+iB5~b3k}7O26c&FlKgCBr@GnTzd0Zc`2bPz^z72@7=mA@XkYe zUGvV)71uIT##pw>Qij#8Y+M#}bThuT1PzxO^~oEyX9yXlED8>TD4el}wB<~P{&>_r z@M`0Pcz1esv>s%96>)0#*y@xKYrlk_8jf{rIumW2?ZNWqy^t0eE-;*tlK&U}-lXjN&@OTRq=BV?1An=DjaRas{_1XSYm_TBb(zk9#USCVI7walC5=!SLU- zdtKvd@aa9W7gYG84#pF%s~|{Ck4mj%n!lYG$pK5;(gj+*WE+?U7{(sIyMQRf@R4u< zLgMYBo}LbTPkwEwv3Y47aaY1qtKI~J6RphS2a3WKi=H#9LK7wd5ivJCKKmaz`$gR} zlmY&4t!2=;7A%)LF#1$UXEg#tKDXILt*b(!#gLxrHvf1H*k4!gRxBg>S@)xeP*+HZ z-^u*97`A_L0l;fpkJpc8W5gV$x9y*6;_k1H!?^CR#-m2MFuHs*rbR~K)hxCx&LBYU z@RT>w7sPwndFT(Zc|C!Xr+;dt<+CGCz zn32{9E%)#gsT7c@3bopO$4Cy@x`fYGZW~#Tv1`BLWext=K%4uyA+6Im7rZX3TE;3| zGusWcKUn+{QixSgvM1&|78=tc;ZglU$LFZC&7J4H*?g4i{@rtqQeT9Jp}%dhF>TTN zU~B#Kl&-{tmw02KAQb%gZ2cU?*^)4VxAmw5qJk?oGb5Cm`?I^TwZ;Pu3ZJmeRTGNXpJdhe)C2D~f zf0d$ZF)ipfOKV;7W3TJ=r+??3jeXmr8tD(PI<1y*+!rIiZgQf zGK3l|p)%oe#43E@XsI3EVU%juSwkyPtAymUK6cZwx}HqrrjBzF4+k`z$@xN{}V#AJ*GcZ7p<%=cZNO= ztjV1^pHR6LS)huKp}wq!sp8l9t;l9Ote^^yIUWX<$KF$k#~X{g=#O?+54Hwv(FYr< zj(XJ5g4Vp8cIBE^tsL}*4@B@*m+DKS#?m5oT&&||&P9vcWh7;V_4csWnCTj;)flTn zN?dAVUDM$YBS(8&gylh0}mHlgk^rFLz?3F*s`Ms50&m&EpU#gUEqsHn`@8YR#83(}zJFVTNG-)>=O z<3>g1bNxtD(zv@=bJObv5ZP8~)e^o>_A#Y1PP@XUYx)uaakEy*nW*9!lnVaXyygr9 zj(s_!G{lMA+cPN~d^dS4I1R}&%r&4{XH}w95X~ZqN?u4yK7Q%J&*rkW?E8B3vpM`5 zc6*c}1ITD0invty!^lVSJY3|_xchvoPya1lohtk7g3HhHUPzHhEy+aOh)_w$zl>bp z_=->i#Q3fS)qk7MA7u^zuXAoaLBWEqoaq2M=BCapPf@YFWY4PBLpLkEF*q_DTl_f_ z`LrA#&&{a8D6y27^uCVg?Jc(PcdV-iii3->6|B0)p~}hS0u~Et+FhTdORCx_X-b`3XKkceuTkuLnJJmJ|3G!r%k4}= z-<-$c5~ZET;8z4c>x&T^9{VrV5PAWrP_sQn4)irUnAI^jJ zWiJko-*-4Q4JD0*T!3_S|0+C>%Am+7GRyt=2w2jVDa$D#QlFxiup4?|1#ww9C6?f* zCuDDJ^x4SHqdvq(494ov>(*e-Sxtw2&l6WA6>M(E4_D{%ahf%SfVdo!>OtD(3WJLI z#|ACi3g3_X&NEo3tm&_Yb{>_EM3lulEj)DK#d$XVY2xOJORI-0MhkL!clQ>3F^KZ6 zg0{L~_I?{rA2_gy`PYzq1MGLDEDbx7cwH~&E0`O6xs*e#kPR|Q%<(1(RbWwQ;UL!7 z*YeVZ5_-hNF;cf;!bT~}32gPHvQkZpJRek~+8{g94waX5? z(^lqf$+A~!c+>i`vqI5;9qQ1#-Ld<#prc6kAa(961pJbWW%~+vLAEE>Cj&H&4x4Tk zgvQ9(j)H3Xp^O3?(X~~o4(-O4l?Hy9C&Ay&pKnN2C{$U6d;1DV?D-9>9vUE_y3C`k_s0p};w3A;gw47XO_Q6FzvzLmcYV z7!K#>;OMmN7&s&?Yi7YS0N8h@Mi|y#50bBlLF6zF=`ZQoXFc^quUpmw3v%=qQCsPp z{aFV1VjX+#)7wndRDcRzy})xrq+s&Q4$P{!TiZsqLReP^rcqefJ7%zIV^;l8XO=vV z?&HQ(<(GM&f;#hc=C%3eo0AfKTX7#*$`W>Tn53l%(%wy$LObi- zMjS_QO^k#kjE}#mI`H=`MMRtS4u)Tud~SWJcqU2nc$ytiPtsAUaItzfi0{B|6*=_j-g z0x~>h$5kI*zD2Egi|8v-2T#klbX=81Qju@jBBqp#rQ88Fl&8ZKh!iN@(lcK_I58LN z&GaRPdscg!t5biCnBTSlg(&ZMHhZ6*o@dXur2Vsx-4rt0Z*-H|a&&z?|E^v8oZ8}& zc04J2J{2P*GTKJMWjqObTIQoNblg@d&WKRnvskF|f|NhuvLnaLw_2AU3QScW8j3p| zRtEsynalwJ5;1v4it;Bull2625k?z9tO4XeS~f zVq&0oQeoL$tR~NU&vM;{IJ*7byUEWqD8&R@fP?KFy;MbPiJt-oy#!CZR)njfJwMMu%B=_8 zk=_$MjX1seKDQ$>7K4-1*>-{%ez!w$`4vPx=0WgVy+92eoxHB4gKv|wQp@LG%G|>b+90|o zA@vO&T0hdxJ*~iQ{Eio%fH$JqPTWPZOTCyY2$0L;>7FgjiCEH(Et4}-%ZH3HIP2r$ zVz0Yf3n}SlG^3nfOuE5F;-d1ip|CpTRptX9 z`pTeZggXs~s}rgRu+f<;xu3>vI~^HCFPHpIT-k3AfO%I@K`uAz2Gj~-g)iE`oLM>% zIy}Aa7dY}d5`9S)Em-#sS><7UxM`?4ptxBWFZ_%Jnvw^~R!xYx2rVAIPN%tYA$FTvZ$7=Le`N~e(JlEwT3T? zP9Y&0%Rvl7ps_FrwF12qSyD)zjrG1os`F+r-S)H>IkFOva=1Bh6s0OpADI+1gBTV- zn`U{lj)5jQG0E{D>U_qx+{3o-=g17qvA2MK6A!$T80N@S>F`|BR{yTemZr4a_!kGy z*<$Pzaa>r@%PxDPNE(DT+k8)`&{Fw1i-GHpGdbzO^;oK7LtiEB3jNxBUvpvO-a|bN zMLb+}l?`Bg$1bOB;tIw@P0Oobc0E_~vVl$+}gw^@H1edxg1b zOr5n%i@_DVlxt!vO53A`PY9NYA^_cnc-eIJe0%UQ;g8GP#frPEF|AYbY52x!g_4!6 zKy@|m_GEZ=bzH2a8RawC_<{nV@M4}KLgyoBh|J@YgrdSqm2Vrg4RCNA(in&^yrPx&c9ljrJuf@9QoK&DXr8=E3xusDt2`1JD?14{ z^S^IB*R>s_N4Mv|V2DvL(~M2**@z{tJX~|ix@|LUOJ%|y@*}ydIHlW@fj%gvcFM#ie+O#hH8$qr2nk#} z@eH*iJ@(rjoZPMw*5#|$Q01otnX34-GOvq1Dx|2(w(CvaPe7fjX!6uHn7~~oPI}Lq zAd67;AkCX`!EP(zYnG;z@!`?6z=!x^yE3;)+m~oRUo4|2WNPIE$i(jJjyYE{6JpoR z6(c%lK7DM`LsP|Rr;X-S1EO+Dp?B7{?ij{vk$I2FH%Xn!M?Hyc6^dgDW*MsBbnZ`A z878A2&sT1bC5TOy9(EYDrD`~X%U0Z{13Ej9z8Ce)>PKvVwJHiR+^)mssiwq(KP!wp zRO&S_hNLXdR25YnMD%5fv6p)|Xn&z%m{T>Hddola^UaL=)42$--6;{P^rrAY*}HWp zC~9fDnVob2aG}09bj_;tnAGfkx&o^qA%JY&_uGRKmO(M75J`jP>>^X{38Lk}aN|bV zp({@eWNfZ60cXq|Cia8egK_!x1wU0A-8MM_7OzPyoi>i24{}&MFL9$1>fW1NB#A%o zcXj_w2fq-(?Rqdhe?vx;#{I{vHTS-si-76yaV)t@%4K80h^v05Z{ zqHXe#jE}kPmL9hE(?>Yle{dXogv8~7PCXqD4te^sEbwvL{RfM>2Fm=9sNG*uny;u# ztA0j#=6%iUM+!Oj=i6)aU)WatQ-PX@Ad-l5Cv=mxzNQkfJIwc|S5YRLs$k<_`gz>r z3fT5%s4w||mI&N8SBz}#w()CCTv_Zt%jjI`EP&~{q|Y`8;i?zKI#Z0@pLK8Gj&-=K z`U-chAXDBq|e^nL;BRc)OkhGUY^|z!&&ha=!NB^SiWDHVoCcBpzw2G<1wW)OE1X1 z5rnn4a0xp2%$PzM<)rwisms{Ay_!A|RyG^Pblw_fKAHc&48Pfy$6x==bd3Z4af@|jl7Y#&)~@~{LdS19D>2gBlbi; zi{mZ%26h(j!FTI_Wvir#fTEgZ0t00*F)`oe$?=wakt=)h?(Zcg7d%0+ETYRPEe4q3E zDbNRlv?iR$tT`X%*S@k?*a=?g1R*k&D?K60`vRk+{YO_}0qcOJ%#>*PfnPRSWo6!) zAa8b6Gsvs zN@i&w{DknDfTiSgQki$bqvG51k4I*M;!L#Rtt~g(PpQHgj>=Jq9j@zRgF!E)=2|@o zSM}~nnqDV38+_fF=fBSetGymzM;gM3q8^%TZ;!~_4r%oi6-`f8(OGCDRDts~zn|cy zupfwy!_~Spv~ORkQTF@o9rrsw-fiymu1NhIY2coEITo?eg8xm4s8guUbL%Q#vcdk? z$T=+}WGUH`slGpfv>7Z4negh}5@Wc|fNrELc;34?ES9^`t=BnH_(?oAP1IH(qL0K= zVA%yy$O>5D$KuIQH$m9RBRO~P<=gn%{sO7%mh*!H6Y(ZxE?bhZlB}$@wvfo>g`nA`ovEC=XIe6|0GIL zB+RuV^{ZY{74bu(gJcVS6l|j9>9*5P2KXS@$xek^Cb?#d{^^2Zm{*#kzvw>k<%TD9 ziY`RAEu}#RTb=q(Sr^+*w~y3pu{RR>P3zhHL!>vLuh&w&mFe>ID=yDi{(^s?$@ z?A)kz>64x7RrY-{Bw=lJC$nSy#RwLiZ#A)X^tXtfooS!k`AD|Ek|0?!CMo^rUr>uiBL5BOFi|Fs>1^tnx+omQSm|XG}~<~ndN=Qo}owK z%9IMzG;TlODSui~-hq$xKl7o`1hnB6avi2zDXtDfZ*zg1L` z3iE8;KI@S~(_b27W6@tSI_OPyp|%dawITM~Hwi8B{7Vu=TnFdm5#I3R>jK zvKoq#tGL{o{FbGfkBckUJwCnYy)ahh{h3Kb#Wl(;tGnrrQ3MZ74T9=JK{cWT1_hOt zmexBvq3AIi35s()f2d=CFY2EE!z)Hh2sF`JZgJjv?q6=y6s6dz1g)Ss5-Iff5B}U< zc~@6%KtMpu__!j9V)mcxI2b07jg63$R8jf}4Bp(*dGVhY%sm(RxS*!~S@h3<|Id-| z&7z3upNQyfe-;{S~#3ZCB zBKSlHQ_qc>>vkXmMp0F2I!y9eX!*6QNSrwNJs=KjDs#{wceG3s> zdUn?;3b;-8Dt3~L)WlaLk^K0bSq`r4T}IBF+L~qW$oqSZ9KD!LOK^I+XF69#DLg3& zfSAj*(8SjyjGe43Y|BHj&q&Q@%k}(GPgJf~mq3BrC~X7l`mA&QPAlTej3ATckb2WfRX2mCs6;Y4LtTQ zF0_r4HWPfWB_C6-QqQGU=D>f8$y;lC_)XSG?umqW+z~vQWhI zWY_IGGb(Rl`^t==r6yHMjs@?~6CG&tpgueKhT4o|laL>cQNt|W(vV#zl}(7elD?@% zp>95!Dv;+72~bV7#(ziE(dfBooyvC%ce^QNotWEQnVpn)9bmrBCS?kz=^FEF;#H=$ zAxf;5h4|~_>pjTA}}eDJu}y+4i92gaCx+M1-1X1Rvw`?*d=S!=d(F` zGJ@5)UWLDIssti)$!Pab`(9>~ob~v712N|jJmhV#shZ?KXIEzW`?r{5gq$Xpm#^)q z#Mj*!!paYCE`Kx?cUnz2cLMp*LAbaim#Lk__Fc<*kRul1&oV`cpVgUlYMF_!3d{|q zs#27K$7_1`p_$S%@Ac57+haA4|AHHpr}Chp_t1Tc`MG;3MD!7&fF3_ zVk|(^2PDK(m1r4i+0wZrRJHNN(JGNRkW#&2nl691YH8pc=C*8iFy3w-eJYNr)EH!; zfID`lxjFuM(eLL^a8y!XTU&i|asS*s$5J%ZqNQSOjkQ78aI^R}_I=`00JfHpV)AT_ zQrQPH0DdXC#&&WKvs~YLJZ!BY#3ds*${}{`4Vt7vGimDCBKaTJy(CW4XYKyknD|)v zVMG_^*khhGdtdZd@`v!$7LTi};w)tUT^gpXK$UU#~#Yhop6N?sWHfT9}k+aUNpr<#?G zfpxH-C2VBioAsN0(b&ZL42%ogOi$4H45`C$T!y7juT60wDVQj z{x&6Dva%yv`<+P1=GN=jjcK(5p_DhZyUDMwM9RA|3zize#`+{$W4KJ^?C*U22vOUW zCfz;i1^nC#uaWJ$lh(NWF&obu95wZ0HxEY8(c$~>ftq9i;z}aWuWWNE@jmngw$3lL z&0_V~l4r$E)q%`%fNNHGqwB@wP_~dC?M)SziBKkWT042g2@a6ZRp+l+r>YW z+idLL4uVgzg1Yj0T%L_j4~& zgppQ=UGLzed>D2-bW2zFna-&{KZIGJvwliz$-5?(hh#YhpLj5=vrJV*1slN4DXXHw zt_}vXV&i zMZX5w=Ex^qSg5Y}m(@}Yq+R=B0kF@}|1u;5EE{$2X<5anymXI>!!u5BDScj98WbK!b%H_zkhpB8z zO15t*9e~fxVF0-@@(-+J#0}i*=3kgGU(oC5$Y;3BpaPdA(&FPk)vA+PipQe@HarFztYO)b>Cclab5s9Pf7 zbO5h{)P2-6QgL%S2shYP0s1qM_d-|qB^Zh`mZ8VL*Ne{%PPSNtyXi0O)n9vhZ7;{D z%HWyyvRC8}4{fAvdvOdZMbnr z-e>DcZb5-eORV}SUCluF-D_2fh6cV+MZBH?n@+K3{BC*3Go$u>xbk>)Pl2rB~&5Ol-#%&MpC3~p(2wb^p-qhP_>$Il}QQuH9!xUVkk7Qf{B$`@hcX{8FE82|5NwxBy2{AY<|2cSBHl<%BkM5{CfY`Mj!T zt5ZR=d6*54Je;(IenDtKTJ)oF3oQ9tdb;7{z#zLZjR3>;IrpWu6g?J_8tHkG7}Fyf z6=fw7P1&)sQEBWeloS$Tb0}t(o3;oOc~884RzH#s5BkWX4n%BUsy@j*Kyfv^KMUj} zyBCQdpB2O@o*PTSFV?D#TFEtgs10+rDvVOkcn2mIw2}HQDVlL6u%6eQ>k)%*g$#Ea z0p|L#&$dS%`VSczou{#0G0!DUyOEwhcm(G*nfxMNtMwd7U&2taDs6Ow7yMW&iwVu> zeeiY{ciR;m*Ey8&7!WhQR*||BZ-bnhP&${-7bI$V(o)D+kmJV6LcV^#;kvGD-)y+g zjo+SULLX##SRqPa-4w>zfg<0yZF)XUi#mccC=UbM@4j)`PaC{S<(knHxidbQslI=f zbO`TAUC_O3!g^Qmv=VoqY&+C(RFUpE=1tq?k9D4E;c&C|BnEX?n5$|xn74_@0{ z{BW}R!F>0l^P$^=_YY7IxQ$ea96R(?#ZRtU>uvHjzp0MU1ALh|9WIU(EaZTwfJmFV&`Ikh$Cnw+NM|^lEa@ZCY;qNN*{D*RQt|824;8@?+gAA;25p-#A-4RDZ@k)x@t zW3JEC{Q~$|ernO6=qmd+zd5PZ9%W(5U0k+;kftva#mi>^bd+%+qOBT#I6;>04^qg7v~z~6S}jo?@Zds_$QE&H=A}cbr104(dg~kqpv%V?bwvz%YB44 zXXKT<6}pfLTm@6(a4?F8+`Q}@Ykk{V9Gd9*{adg|Bc(sJXv%Sbg!|_tz|VJhudRe! zU3o$v_XvsYz$&J{J4g}G9x!Fn9MW4xI^ptW{*<;9Z2sqbH9 z4uQ)7#y-=-dLmnU5BbbJderE4W#jc4>P5s&S>~$X?P*TNY~={8SItb<9LJc#*J?Mq zUTXDs$UgV`u8YZ%>n_5Z*uOwk^!lG0QfBUFcF*7I*_5ts-Tg)O_;?Hu$2Dpv6tSBKq0A(D_js&$J=_T~HP98tHG-sZBa+`2z?j8OSrU== z(@{KqD^V!|@Vl)%Rv!1NS!Ns@+ZG~V+mER>0||zid4|+>;>yg$7;e){^z{4VJ*e_u zj`}W?h>xI*2zPh(tPWh_5(Ev5w#It{`!H5=lny)DGnzPu>19guFs&31KFkm7kJ=G-B^!4I{{`CRtX$=aF3BtF*G- zTmSq$JkP(in}f{sHELLkq4M>e1J0GzhvG2_R%nG8FZmB=EsZL0{4UwK&&4reka%5U zy|-sm;uyln!4iLgbrBk7aEy+QE}Z~WQ#&iG{-UJ?(Ct;^COMOj3RJShtTN6gLJoUe z-r+BhlAeUrhJ$+Bee^`@Q{SG>?DOu~ev%}Rk&Yx4*m}O)&fGp+)b5oiiP~$*W*ici zT)Jl5&gv&67jwV$k<>HMwrr_~m}9#eZgWlU+b(>`#iFIN9h~+2xhnImNYTVB6dv*- zk9&DZkibc=$f94o{Z4g)`2KWmM(|f~8RW{M-o3tQmv6A+ZSd!LW#YtooUuyu=w!uU^7Iep}37QNf}jVOgPxR)v!Z?mRe_x&C;8@Vj%&1JsEh=Xc?ArdQG zW6nq%)sc^W(%-u6pmP`uOS+pHxWx~ScJXXlH_kZ^kXctgzOUO8govmly6J{_gX-6m zTU?StqJ|9EwKuowgkCrTW!MDLIiR+9?k;OvIzCMReb3nKCcBrkgszA5hhCQy2Zy9B zyV|82BVlwa!c@}}bL%j=%KHsfE_Hig&fce&I(M{#C@jGK$@9h1H(AXn@yFk z!gXixZ#}cBoY6herLC>^vh0CLdirXTd+(Q+TB+4juzF1F>`)> zi$#omc2?c&bztYW2=Pu{fkTETtoUq))I?_L%M6;9BbYu4_Oj81wRZT{4N&9{Hyz^* zjQ&*1Fy7?pZyAm)gFzan2EDxyu>*`Rl}mDXt@o@qM_a$OB42mRJ86-juv0HNCN#{m zDz=@JA&9*5RFtVG=0%(toxNss8Tn#`551=W=$XB+M^%@1!;3G>ax(y18^&FAHdMNu zJ@l11SbE0Cita<=cN6S$A8L{_rPMzGpQ&48#etoj5<{TbRgj#lth9Jlv(p1a47DtH zxV$poa2PA!&W{qhQc((=Ce?R4ScZ7Zkr@xwu?SGtvXrZ-7bK2a+jTo*VbwFziL*pj*2(uVF3K)U%XY%66K6*^oo))+^AE1IcbyaPXtYlsl?pn0 zD`>zHPSo&9xbE3@UN^yU z6gx`eukQ~szr2}Xt2LET^>+PEe`o#V>ld3(`Q14OVR;%e?_Q{uo3&vNGp=2^pwA}(laonr_iy>2Rmbml{8pth_JINqyu%2U zhgrJSpIfT!AirzZ*+mL>O=%VLUN*M88+z_!#;lL&fxHwV!Y4O4V2Rr$=b!1MYWUMb zFF#e3DDk>G@w0n1u6KT6I6%70%`peJS{;XW94(IFAUzK(_>6kgH)Db{7C5U4oa7f&Jb;@)QDrW;xEGQNFt@Mvqj@a`Rr^yTwXDOK|a3`W+$ zA>^K%|E*Y>5cZ^verwc$9M@Co>3!8m?{TT4&HEe81Sk$5Ak+lEEr}kR zn-4yJBN45a$6~&CTG%yw2Qn*6xK|yQC-3`yj^UxL%~S*egJ0o!EJnPej~E2YNPTfX z#$X(9csi;unxRA0fmwV@FJ-Y1d7fqm!F#`5>mkm{}fP0ea;#r z^gue&u|p(`qY@4RctDgY48$KR^Z3ede2nvn8e=M1otQ%Z#;L-iKk&D`iyq{d%x0f} zt)P;EgUmlx;@IIZ=*=$jD7HNyLK<%>(4l#iZ%(v;K{{!B**s~=p5cDH$ozaN006JU zzxB)e?12su7ooGSrJ8DibZ7RJM4#%i$J!Ifbn~oog1e;bE9bA{hKz86jm-%z-gVwn zj*pJM?;8O9Rx_=SPxEkZF)vYLOT)RL75z|(j8XmU4vf-3Pr;{*a4$-BI89?~sWR!E z18wSr@0k;M4Ib{4oKll+s$;!bnJSk8sB-VKc}_KLx2Iuzh*pa)@ORW|y*=qCDG39W z%hcq?EuY_sn;6#CYUJ6Wp@#(KjDG}E_$jB%sUu6ySLJ@Kco)GRy`&{=!WJGF7+PX3 zWh)B>8Q}EEO6l6&g+zqmSThteNFR`FYp4?_NdbvcG&MOXj{8@Q4ADL??wNB+8(L!^ zcOE52SHr&movki0lJTX)Vbb2?<@R>0`7f=O&|ZG6iAs9Gecu&D&-!>(h~JToe>gKw z-6TkUMiDar(8_S%5+EsAd}d)DO8cIv^vBnZ`ovE+;i`1KPVL$ui>u#dG2?RusXL{l zWGSMm!pA526hmx$f=ws$;uQ8<9;qVnBdVmNq}