From ab590385377c207bd5d120cb8d7b721916073122 Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Wed, 24 Jan 2024 08:20:28 +0000 Subject: [PATCH 01/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3f30cc9..cf063c2 100644 --- a/README.md +++ b/README.md @@ -21,11 +21,14 @@ https://gitee.com/fhs-opensource/vite_press_easy_trans 4 我有一个枚举,枚举里有一个title字段,我想给前端展示title的值 给客户 5 我有一个唯一键(比如手机号,身份证号码,但是非其他表id字段),但是我需要给客户展示他的title/name 但是我又不想自己手动做表关联查询 6 Excel导入场景,把 用户名 admin 反向翻译为 userid1 把男 反向翻译为 gender_1 (具体看官网文档) +# 最新版本 +springboot3.x 最新支持版本:3.0.0 springboot 2.x 最新支持版本 2.2.10 + # 食用步骤 ## 技术经理/架构 需要做的事情 1 、先把maven 引用加上(主starter+根据自己的ORM框架引入扩展,扩展只需要引入一个) - 目前镜像仓库下载不到2.2.8 可以用2.2.7版本或者使用m2的中央仓库下载2.2.8! + starter--必须!!! ``` xml -- Gitee From 424c3cb5f3ef1af67fb45604bdf65cf1890523d3 Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Wed, 24 Jan 2024 08:21:35 +0000 Subject: [PATCH 02/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cf063c2..a18f8ac 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ https://gitee.com/fhs-opensource/vite_press_easy_trans 5 我有一个唯一键(比如手机号,身份证号码,但是非其他表id字段),但是我需要给客户展示他的title/name 但是我又不想自己手动做表关联查询 6 Excel导入场景,把 用户名 admin 反向翻译为 userid1 把男 反向翻译为 gender_1 (具体看官网文档) # 最新版本 -springboot3.x 最新支持版本:3.0.0 springboot 2.x 最新支持版本 2.2.10 +springboot3.x 最新easy-trans版本:3.0.0 springboot 2.x 最新easy-trans版本 2.2.10 # 食用步骤 -- Gitee From d00c6a0ed48ae81d5aef7bdd6646db99c2289b4b Mon Sep 17 00:00:00 2001 From: wanglei <921888199@qq.com> Date: Wed, 3 Apr 2024 17:56:55 +0800 Subject: [PATCH 03/38] =?UTF-8?q?2.x=E5=88=86=E6=94=AF=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=EF=BC=8C=E8=A7=A3=E5=86=B3v3=E7=9A=84bs?= =?UTF-8?q?=E9=80=82=E9=85=8D=E9=97=AE=E9=A2=98=20=E6=B7=BB=E5=8A=A0RPC?= =?UTF-8?q?=E6=9D=83=E9=99=90=20=E8=A7=A3=E5=86=B3=E7=B3=8A=E6=B6=82?= =?UTF-8?q?=E5=8F=8D=E5=B0=84=E8=AE=BE=E7=BD=AE=E5=80=BC=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E5=80=99=E5=AD=97=E7=AC=A6=E4=B8=B2=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../com/fhs/core/trans/anno/RpcTrans.java | 18 +++++++++++++ .../fhs/core/trans/convert/SimpleConvert.java | 4 ++- .../controller/TransProxyController.java | 26 ++++++++++++++----- .../trans/service/impl/AutoTransService.java | 3 +-- .../service/impl/SimpleTransService.java | 10 ++++--- .../java/com/fhs/trans/utils/TransUtil.java | 4 +-- pom.xml | 2 +- 8 files changed, 53 insertions(+), 16 deletions(-) create mode 100644 easy-trans-anno/src/main/java/com/fhs/core/trans/anno/RpcTrans.java diff --git a/README.md b/README.md index a18f8ac..3e5dd56 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ https://gitee.com/fhs-opensource/vite_press_easy_trans 5 我有一个唯一键(比如手机号,身份证号码,但是非其他表id字段),但是我需要给客户展示他的title/name 但是我又不想自己手动做表关联查询 6 Excel导入场景,把 用户名 admin 反向翻译为 userid1 把男 反向翻译为 gender_1 (具体看官网文档) # 最新版本 -springboot3.x 最新easy-trans版本:3.0.0 springboot 2.x 最新easy-trans版本 2.2.10 +springboot3.x 最新easy-trans版本:3.0.1 springboot 2.x 最新easy-trans版本 2.2.12 # 食用步骤 diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/RpcTrans.java b/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/RpcTrans.java new file mode 100644 index 0000000..77c0c4b --- /dev/null +++ b/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/RpcTrans.java @@ -0,0 +1,18 @@ +package com.fhs.core.trans.anno; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @Description: 标注的PO(有的团队叫DO) 可以被RPC翻译 + * @Author: wanglei + * @Date: Created in 10:14 2024/04/03 + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE}) +public @interface RpcTrans { + + +} diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/convert/SimpleConvert.java b/easy-trans-anno/src/main/java/com/fhs/core/trans/convert/SimpleConvert.java index 5bec4cc..0f56b0a 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/convert/SimpleConvert.java +++ b/easy-trans-anno/src/main/java/com/fhs/core/trans/convert/SimpleConvert.java @@ -43,7 +43,9 @@ public class SimpleConvert implements Convert { if (targetType == BigDecimal.class) { return (T) new BigDecimal(s); } - + if (targetType == String.class) { + return (T) s; + } // 这里会抛出ClassCastException return (T) o; } diff --git a/easy-trans-service/src/main/java/com/fhs/trans/controller/TransProxyController.java b/easy-trans-service/src/main/java/com/fhs/trans/controller/TransProxyController.java index be2d11b..2f3055f 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/controller/TransProxyController.java +++ b/easy-trans-service/src/main/java/com/fhs/trans/controller/TransProxyController.java @@ -2,6 +2,7 @@ package com.fhs.trans.controller; import com.fhs.common.utils.ConverterUtils; import com.fhs.common.utils.StringUtil; +import com.fhs.core.trans.anno.RpcTrans; import com.fhs.core.trans.util.ReflectUtils; import com.fhs.core.trans.vo.VO; import com.fhs.trans.service.impl.SimpleTransService; @@ -9,8 +10,10 @@ import com.fhs.trans.vo.BasicVO; import com.fhs.trans.vo.FindByIdsQueryPayload; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.util.Assert; import org.springframework.web.bind.annotation.*; + import java.io.Serializable; import java.lang.reflect.Field; import java.util.Arrays; @@ -28,6 +31,9 @@ import java.util.stream.Collectors; @RequestMapping("/easyTrans/proxy") public class TransProxyController { + @Value("${easy-trans.is-enable-custom-rpc:false}") + private Boolean customRpc; + private SimpleTransService.SimpleTransDiver simpleTransDiver; @@ -40,7 +46,11 @@ public class TransProxyController { public List findByIds(@PathVariable("targetClass") String targetClass, @RequestBody FindByIdsQueryPayload payload) throws ClassNotFoundException { Assert.notNull(targetClass, "targetClass 不可为空"); List ids = payload.getIds(); - Class fieldType = getPkeyFieldType(targetClass); + Class poClazz = (Class) Class.forName(targetClass); + if(customRpc && !poClazz.isAnnotationPresent(RpcTrans.class)){ + throw new IllegalArgumentException(targetClass + "没有被标记@RpcTrans 注解"); + } + Class fieldType = getPkeyFieldType(poClazz); // 如果字段类型不是String,则转换 if (fieldType == int.class || fieldType == Integer.class) { ids = payload.getIds().stream().filter(id -> { @@ -55,7 +65,7 @@ public class TransProxyController { if(payload.getTargetFields()!=null && payload.getTargetFields().length!=0){ targetFields = new HashSet<>(Arrays.asList(payload.getTargetFields())); } - return simpleTransDiver.findByIds(ids, (Class) Class.forName(targetClass),payload.getUniqueField(),targetFields).stream().map(vo -> { + return simpleTransDiver.findByIds(ids, poClazz,payload.getUniqueField(),targetFields).stream().map(vo -> { try { return vo2BasicVO(vo); } catch (IllegalAccessException e) { @@ -70,8 +80,8 @@ public class TransProxyController { * @return 主键字段类型 * @throws ClassNotFoundException 如果类不存在 */ - private Class getPkeyFieldType(String targetClass) throws ClassNotFoundException { - return ReflectUtils.getIdField(Class.forName(targetClass),true).getType(); + private Class getPkeyFieldType(Class targetClass) throws ClassNotFoundException { + return ReflectUtils.getIdField(targetClass,true).getType(); } /** @@ -102,7 +112,11 @@ public class TransProxyController { Assert.notNull(targetClass, "targetClass 不可为空"); Assert.notNull(targetClass, "id 不可为空"); Serializable sid = id; - Class fieldType = getPkeyFieldType(targetClass); + Class poClazz = (Class) Class.forName(targetClass); + if(customRpc && !poClazz.isAnnotationPresent(RpcTrans.class)){ + throw new IllegalArgumentException(targetClass + "没有被标记@RpcTrans 注解"); + } + Class fieldType = getPkeyFieldType(poClazz); // 如果字段类型不是String,则转换 if (fieldType == int.class || fieldType == Integer.class) { sid = Integer.valueOf(id); @@ -113,7 +127,7 @@ public class TransProxyController { if(!StringUtil.isEmpty(targetFields) && !"null".equals(targetFields)){ targetFieldSet = new HashSet<>(Arrays.asList(targetFields.split(","))); } - VO vo = simpleTransDiver.findById(sid, (Class) Class.forName(targetClass),uniqueField,targetFieldSet); + VO vo = simpleTransDiver.findById(sid, poClazz,uniqueField,targetFieldSet); if (vo == null) { return null; } diff --git a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/AutoTransService.java b/easy-trans-service/src/main/java/com/fhs/trans/service/impl/AutoTransService.java index 5145649..b68356b 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/AutoTransService.java +++ b/easy-trans-service/src/main/java/com/fhs/trans/service/impl/AutoTransService.java @@ -390,8 +390,7 @@ public class AutoTransService implements ITransTypeService, InitializingBean, Ap if(transCache == null || transCache.isEmpty()){ return transCache; } - Map transCacheResult = new HashMap(); - transCacheResult.putAll(transCache); + Map transCacheResult = new LinkedHashMap<>(transCache); return transCacheResult; } diff --git a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/SimpleTransService.java b/easy-trans-service/src/main/java/com/fhs/trans/service/impl/SimpleTransService.java index da4fe2c..bcdb219 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/SimpleTransService.java +++ b/easy-trans-service/src/main/java/com/fhs/trans/service/impl/SimpleTransService.java @@ -207,7 +207,7 @@ public class SimpleTransService implements ITransTypeService, InitializingBean { Map> namespaceTargetFieldsGroupMap = new HashMap<>(); for (Field tempField : toTransList) { tempField.setAccessible(true); - Trans tempTrans = tempField.getAnnotation(Trans.class); + Trans tempTrans = new SimpleTrans(tempField.getAnnotation(Trans.class)); String targetClassName = getTargetClassName(tempTrans); List fields = namespaceFieldsGroupMap.containsKey(targetClassName) ? namespaceFieldsGroupMap.get(targetClassName) : new ArrayList<>(); Set targetFields = namespaceTargetFieldsGroupMap.containsKey(targetClassName) ? namespaceTargetFieldsGroupMap.get(targetClassName) : new HashSet<>(); @@ -623,7 +623,7 @@ class SimpleTrans implements Trans { public SimpleTrans(Trans anno) { this.anno = anno; - Class clazz = (Class) anno.target(); + Class clazz = (Class) this.target(); if (clazz != null && clazz.isAnnotationPresent(TransDefaultSett.class)) { TransDefaultSett transDefaultSett = clazz.getAnnotation(TransDefaultSett.class); this.fields = transDefaultSett.defaultFields(); @@ -655,7 +655,11 @@ class SimpleTrans implements Trans { @Override public Class target() { - return anno.target(); + try { + return anno.target() == com.fhs.core.trans.vo.TransPojo.class ? (Class) Class.forName(anno.targetClassName()) : anno.target(); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } } @Override diff --git a/easy-trans-service/src/main/java/com/fhs/trans/utils/TransUtil.java b/easy-trans-service/src/main/java/com/fhs/trans/utils/TransUtil.java index d26d116..0cf888e 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/utils/TransUtil.java +++ b/easy-trans-service/src/main/java/com/fhs/trans/utils/TransUtil.java @@ -204,8 +204,8 @@ public class TransUtil { } List fields = ReflectUtils.getAllField(object); for (Field field : fields) { - // 此段代码适配beanSearcher SearchResult - if (java.lang.reflect.Modifier.isFinal(field.getModifiers()) && object.getClass().getName().contains("bs")) { + // 此段代码适配beanSearcher SearchResult 2024-03-26 添加v3.x版本的beanSearcher 适配 + if (java.lang.reflect.Modifier.isFinal(field.getModifiers()) && (object.getClass().getName().contains("bs") ||object.getClass().getName().contains("ejlchina"))) { field.setAccessible(true); tempObj = field.get(object); if (Objects.nonNull(tempObj) && tempObj instanceof List) { diff --git a/pom.xml b/pom.xml index dccd4a9..d8f3dff 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ easy-trans-jpa-sb3-extend - 3.0.0 + 3.0.1 UTF-8 17 17 -- Gitee From c33d35d717a05575a51e8ea9ad74580b5357cf2d Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Mon, 8 Apr 2024 14:24:03 +0000 Subject: [PATCH 04/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 3e5dd56..fef9850 100644 --- a/README.md +++ b/README.md @@ -199,25 +199,26 @@ https://gitee.com/fhs-opensource/easy_trans_springboot_demo # 已经使用此插件的企业 -1、陕西小伙伴网络科技有限公司 -2、中软国际云智能业务集团 -3、深圳市易流科技股份有限公司 -4、陕西逐道科技有限公司 -5、深圳市易联联盟科技有限公司 -6、中体数科(北京)体育发展有限公司 -7、首都信息发展股份有限公司 -8、航天神舟智慧系统技术有限公司 -9、小诺V2 https://gitee.com/xiaonuobase/snowy -10、山东大小同屏科技有限公司 -11、山东酸橙网络科技有限公司 -12、桔子数字科技有限公司 -13、成都新潮传媒集团股份有限公司 -14、陕西汇每家信息科技有限公司(每一天便利店连锁) -15、江西云牛科技 -16、广州彩讯数字技术有限公司 -17、江苏誉鸣航智能科技有限公司 -18、maku-boot https://gitee.com/makunet/maku-boot -19、北京大美星空科技有限公司 +1、陕西小伙伴网络科技有限公司 +2、ruoyi-vue-pro https://gitee.com/zhijiantianya/ruoyi-vue-pro +3、中软国际云智能业务集团 +4、深圳市易流科技股份有限公司 +5、陕西逐道科技有限公司 +6、深圳市易联联盟科技有限公司 +7、中体数科(北京)体育发展有限公司 +8、首都信息发展股份有限公司 +9、航天神舟智慧系统技术有限公司 +10、小诺V2 https://gitee.com/xiaonuobase/snowy +11、山东大小同屏科技有限公司 +12、山东酸橙网络科技有限公司 +13、桔子数字科技有限公司 +14、成都新潮传媒集团股份有限公司 +15、陕西汇每家信息科技有限公司(每一天便利店连锁) +16、江西云牛科技 +17、广州彩讯数字技术有限公司 +18、江苏誉鸣航智能科技有限公司 +19、maku-boot https://gitee.com/makunet/maku-boot +20、北京大美星空科技有限公司 # 作者二维码 -- Gitee From db6066076b1200fccd061adc0324bf59dc963557 Mon Sep 17 00:00:00 2001 From: wanglei <921888199@qq.com> Date: Thu, 11 Apr 2024 14:44:03 +0800 Subject: [PATCH 05/38] =?UTF-8?q?=E8=A7=A3=E5=86=B3auto=E6=8B=BF=E4=B8=8D?= =?UTF-8?q?=E5=88=B0=E6=B3=A8=E8=A7=A3=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fhs/trans/service/impl/AutoTransService.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/AutoTransService.java b/easy-trans-service/src/main/java/com/fhs/trans/service/impl/AutoTransService.java index b68356b..a9464a2 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/AutoTransService.java +++ b/easy-trans-service/src/main/java/com/fhs/trans/service/impl/AutoTransService.java @@ -231,13 +231,7 @@ public class AutoTransService implements ITransTypeService, InitializingBean, Ap continue; } Class baseServiceClass = baseService.getClass(); - AutoTrans autoTransSett; - // 判断是否为代理类 如果是代理类需要获取原始类 - if(AopUtils.isAopProxy(baseService)){ - autoTransSett = AnnotationUtils.findAnnotation(baseServiceClass, AutoTrans.class); - } else { - autoTransSett = baseServiceClass.getAnnotation(AutoTrans.class); - } + AutoTrans autoTransSett = AnnotationUtils.findAnnotation(baseServiceClass, AutoTrans.class); this.baseServiceMap.put(autoTransSett.namespace(), (AutoTransable) baseService); this.transSettMap.put(autoTransSett.namespace(), autoTransSett); } -- Gitee From c46d342ed72bbfc603a8e4d8cec6234822ced73e Mon Sep 17 00:00:00 2001 From: wanglei <921888199@qq.com> Date: Mon, 15 Apr 2024 17:12:37 +0800 Subject: [PATCH 06/38] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E5=A4=9A=E4=B8=AA=E7=9A=84=E6=97=B6=E5=80=99=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E5=AD=97=E6=AE=B5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fhs/trans/service/impl/SimpleTransService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/SimpleTransService.java b/easy-trans-service/src/main/java/com/fhs/trans/service/impl/SimpleTransService.java index bcdb219..0b65ec2 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/SimpleTransService.java +++ b/easy-trans-service/src/main/java/com/fhs/trans/service/impl/SimpleTransService.java @@ -309,7 +309,7 @@ public class SimpleTransService implements ITransTypeService, InitializingBean { */ public List findByIds(List ids, Trans tempTrans, Set targetFields) { return findByIds(() -> { - return transDiver.findByIds(ids, tempTrans.target(), tempTrans.uniqueField()); + return transDiver.findByIds(ids, tempTrans.target(), tempTrans.uniqueField(),targetFields); }, tempTrans.dataSource()); } -- Gitee From 24281908904e71563698a9c87be454aa81335b4c Mon Sep 17 00:00:00 2001 From: wanglei <921888199@qq.com> Date: Mon, 15 Apr 2024 18:03:36 +0800 Subject: [PATCH 07/38] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../target/easy-trans-dependencies-3.0.1.pom | 59 ++++++++++++++++ .../easy-trans-dependencies-3.0.1.pom.asc | 14 ++++ easy-trans-jpa-extend/pom.xml | 63 ----------------- .../fhs/trans/config/EasyTransJPA2Config.java | 47 ------------- .../trans/extend/JPA2SimpleTransDiver.java | 67 ------------------- .../trans/extend/JPA2TransableAdapter.java | 63 ----------------- .../trans/extend/JPA2TransableRegister.java | 67 ------------------- .../main/resources/META-INF/spring.factories | 2 - ...ot.autoconfigure.AutoConfiguration.imports | 1 - easy-trans-jpa-sb3-extend/pom.xml | 1 - pom.xml | 6 +- 12 files changed, 76 insertions(+), 316 deletions(-) create mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom create mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom.asc delete mode 100644 easy-trans-jpa-extend/pom.xml delete mode 100644 easy-trans-jpa-extend/src/main/java/com/fhs/trans/config/EasyTransJPA2Config.java delete mode 100644 easy-trans-jpa-extend/src/main/java/com/fhs/trans/extend/JPA2SimpleTransDiver.java delete mode 100644 easy-trans-jpa-extend/src/main/java/com/fhs/trans/extend/JPA2TransableAdapter.java delete mode 100644 easy-trans-jpa-extend/src/main/java/com/fhs/trans/extend/JPA2TransableRegister.java delete mode 100644 easy-trans-jpa-extend/src/main/resources/META-INF/spring.factories delete mode 100644 easy-trans-jpa-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports diff --git a/README.md b/README.md index fef9850..ee1b0ac 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ https://gitee.com/fhs-opensource/vite_press_easy_trans 5 我有一个唯一键(比如手机号,身份证号码,但是非其他表id字段),但是我需要给客户展示他的title/name 但是我又不想自己手动做表关联查询 6 Excel导入场景,把 用户名 admin 反向翻译为 userid1 把男 反向翻译为 gender_1 (具体看官网文档) # 最新版本 -springboot3.x 最新easy-trans版本:3.0.1 springboot 2.x 最新easy-trans版本 2.2.12 +springboot3.x 最新easy-trans版本:3.0.2 springboot 2.x 最新easy-trans版本 2.2.13 # 食用步骤 diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom new file mode 100644 index 0000000..46b26ac --- /dev/null +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom @@ -0,0 +1,59 @@ + + + 4.0.0 + + com.fhs-opensource + easy-trans + 3.0.2 + + com.fhs-opensource + easy-trans-dependencies + 3.0.2 + pom + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + + + + + com.fhs-opensource + easy-trans-anno + ${revision} + + + com.fhs-opensource + easy-trans-spring-boot-starter + ${revision} + + + com.fhs-opensource + easy-trans-beetl-sql-extend + ${revision} + + + com.fhs-opensource + easy-trans-mybatis-plus-extend + ${revision} + + + com.fhs-opensource + easy-trans-mybatis-flex-extend + ${revision} + + + com.fhs-opensource + easy-trans-jpa-extend + ${revision} + + + com.fhs-opensource + easy-trans-tk-extend + ${revision} + + + + diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom.asc b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom.asc new file mode 100644 index 0000000..54cd7f9 --- /dev/null +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom.asc @@ -0,0 +1,14 @@ +-----BEGIN PGP SIGNATURE----- + +iQGzBAABCAAdFiEEReTtXCh9VkDlzgVFf96UeDvg/LgFAmYc+RMACgkQf96UeDvg +/LiHKwv/SSliZSiMSlQmHGNziA8pU/L8gAVKjXXZf8/6u751t6zvDOtsZopcGS1Q +Nd44WOvRbK4cvNiqr/3rLyfkifFphiduVAoMdGd2aZ5ercoCI3Zv+hu1XTy5DJbl +8yegYUI1XAVHCtAXgT6/DV58gm5B9asoQqUJ8FGMkuM1TRNMAbHyQpyZCNSj9hVj +TtHXkUQbOTALMj8cpART7V7kfPgCuXhIQuN2eh20WVfT8lfZ9pt4F7/JzKc9PSx1 +fyxB8UY5uR2A5s6q9CHXpfrzpLI+c5TU3n139pRixTlj5Z7TZf5TPJtPWW0BwtAl +FH5LsQ9aHjhIGmi3hm0D+xdXI+nXsxOIauALNGzSEK9wi0OLBoikgu42GxoeIruL +kW/eRvkPPnyWeJaz0MCj0DCVCw7U1GOW0dg/UB03+k1cJQiQoJdhz6G27zS473fw +Vck4dRq4cM6qB+L9pwfbNUTcZSdF2coDCVyQeNkWgIoQJdQWlg2ctX3Mu4+Xuj45 +2T/TgiEb +=MNK3 +-----END PGP SIGNATURE----- diff --git a/easy-trans-jpa-extend/pom.xml b/easy-trans-jpa-extend/pom.xml deleted file mode 100644 index 5620d1c..0000000 --- a/easy-trans-jpa-extend/pom.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - com.fhs-opensource - easy-trans - ${revision} - - 4.0.0 - easy-trans-jpa-extend - - - com.fhs-opensource - easy-trans-service - - - org.springframework - spring-context - - - org.springframework.boot - spring-boot-autoconfigure - - - javax.persistence - javax.persistence-api - 2.2 - true - - - jakarta.persistence - jakarta.persistence-api - 3.1.0 - true - - - org.hibernate - hibernate-core - true - - - jboss-transaction-api_1.2_spec - org.jboss.spec.javax.transaction - - - javax.activation-api - javax.activation - - - javax.persistence-api - javax.persistence - - - jaxb-api - javax.xml.bind - - - - - - - diff --git a/easy-trans-jpa-extend/src/main/java/com/fhs/trans/config/EasyTransJPA2Config.java b/easy-trans-jpa-extend/src/main/java/com/fhs/trans/config/EasyTransJPA2Config.java deleted file mode 100644 index 66ef444..0000000 --- a/easy-trans-jpa-extend/src/main/java/com/fhs/trans/config/EasyTransJPA2Config.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.fhs.trans.config; - -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.trans.extend.JPA2SimpleTransDiver; -import com.fhs.trans.extend.JPA2TransableRegister; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import javax.persistence.EntityManager; -import javax.persistence.Id; - -/** - * JPA2适配器 - * - * @author wanglei - */ -@Slf4j -@Configuration -@ConditionalOnClass(EntityManager.class) -public class EasyTransJPA2Config { - - /** - * service的包路径 - */ - @Value("${easy-trans.autotrans.package:com.*.*.service.impl}") - private String packageNames; - - @Bean - @ConditionalOnProperty(name = "easy-trans.is-enable-auto", havingValue = "true") - public JPA2TransableRegister jpaTransableRegister() { - JPA2TransableRegister result = new JPA2TransableRegister(); - result.setPackageNames(packageNames); - return result; - } - - @Bean - public JPA2SimpleTransDiver jpaSimpleTransDiver(EntityManager em) { - ReflectUtils.ID_ANNO.add(Id.class); - JPA2SimpleTransDiver result = new JPA2SimpleTransDiver(em); - return result; - } - -} diff --git a/easy-trans-jpa-extend/src/main/java/com/fhs/trans/extend/JPA2SimpleTransDiver.java b/easy-trans-jpa-extend/src/main/java/com/fhs/trans/extend/JPA2SimpleTransDiver.java deleted file mode 100644 index 585f244..0000000 --- a/easy-trans-jpa-extend/src/main/java/com/fhs/trans/extend/JPA2SimpleTransDiver.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.fhs.trans.extend; - -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.impl.SimpleTransService; -import org.springframework.util.StringUtils; - -import javax.persistence.EntityManager; -import javax.persistence.NoResultException; -import javax.persistence.TypedQuery; -import java.io.Serializable; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.List; - -/** - * JPA2简单翻译驱动 - */ -public class JPA2SimpleTransDiver implements SimpleTransService.SimpleTransDiver { - private EntityManager em; - - public JPA2SimpleTransDiver(EntityManager em) { - this.em = em; - } - - @Override - public List findByIds(List ids, Class targetClass,String uniqueField) { - if(!StringUtils.isEmpty(uniqueField)){ - throw new RuntimeException("JPA不支持唯一索引来代替ID查询"); - } - if (ids == null || ids.isEmpty()) { - return new ArrayList(); - } - TypedQuery query = em.createQuery(getSelectSql(targetClass) - + " WHERE tbl." + getPkeyFieldName(targetClass) + " IN :ids", targetClass); - query.setParameter("ids", ids); - return query.getResultList(); - } - - @Override - public VO findById(Serializable id, Class targetClass,String uniqueField) { - if(!StringUtils.isEmpty(uniqueField)){ - throw new RuntimeException("JPA不支持唯一索引来代替ID查询"); - } - TypedQuery query = em.createQuery(getSelectSql(targetClass) - + " WHERE tbl." + getPkeyFieldName(targetClass) + " = :id", targetClass); - query.setParameter("id", id); - try{ - return (VO) query.getSingleResult(); - }catch (NoResultException e) { - return null; - } - } - - private String getSelectSql(Class targetClass) { - return "FROM " + targetClass.getSimpleName() + " AS tbl "; - } - - private String getPkeyFieldName(Class targetClass) { - List fieldList = ReflectUtils.getAnnotationField(targetClass, javax.persistence.Id.class); - if (fieldList == null || fieldList.isEmpty()) { - throw new RuntimeException(targetClass.getName() + "没有@Id标记"); - } - return fieldList.get(0).getName(); - } - -} diff --git a/easy-trans-jpa-extend/src/main/java/com/fhs/trans/extend/JPA2TransableAdapter.java b/easy-trans-jpa-extend/src/main/java/com/fhs/trans/extend/JPA2TransableAdapter.java deleted file mode 100644 index ed7ed77..0000000 --- a/easy-trans-jpa-extend/src/main/java/com/fhs/trans/extend/JPA2TransableAdapter.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.fhs.trans.extend; - -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.AutoTransable; - -import javax.persistence.EntityManager; -import javax.persistence.TypedQuery; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.List; - -public class JPA2TransableAdapter implements AutoTransable { - - private EntityManager em; - - private Class voClass; - - public JPA2TransableAdapter(Class voClass, EntityManager em) { - this.em = em; - this.voClass = voClass; - } - - - @Override - public List findByIds(List ids) { - if (ids == null || ids.isEmpty()) { - return new ArrayList(); - } - TypedQuery query = em.createQuery(getSelectSql() - + " WHERE tbl." + getPkeyFieldName() + " IN :ids", voClass); - query.setParameter("ids", ids); - return query.getResultList(); - } - - private String getSelectSql() { - return "FROM " + voClass.getSimpleName() + " AS tbl "; - } - - private String getPkeyFieldName() { - List fieldList = ReflectUtils.getAnnotationField(voClass, javax.persistence.Id.class); - if (fieldList == null || fieldList.isEmpty()) { - throw new RuntimeException(voClass.getName() + "没有@Id标记"); - } - return fieldList.get(0).getName(); - } - - @Override - public List select() { - TypedQuery query = em.createQuery(getSelectSql(), voClass); - return query.getResultList(); - } - - @Override - public VO selectById(Object pkey) { - TypedQuery query = em.createQuery(getSelectSql() - + " WHERE tbl." + getPkeyFieldName() + " = :id", voClass); - query.setParameter("id", pkey); - return (VO) query.getSingleResult(); - } - - -} diff --git a/easy-trans-jpa-extend/src/main/java/com/fhs/trans/extend/JPA2TransableRegister.java b/easy-trans-jpa-extend/src/main/java/com/fhs/trans/extend/JPA2TransableRegister.java deleted file mode 100644 index 2a70aa1..0000000 --- a/easy-trans-jpa-extend/src/main/java/com/fhs/trans/extend/JPA2TransableRegister.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.fhs.trans.extend; - -import com.fhs.common.spring.SpringContextUtil; -import com.fhs.core.trans.anno.AutoTrans; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.AutoTransable; -import com.fhs.trans.service.impl.AutoTransService; -import lombok.Data; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.context.ApplicationListener; - -import javax.persistence.Entity; -import javax.persistence.EntityManager; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -/** - * 用来注册 - */ -@Data -public class JPA2TransableRegister implements ApplicationListener { - - /** - * service的包路径 - */ - private String packageNames; - - @Autowired - private AutoTransService autoTransService; - - - @Autowired - private EntityManager em; - - @Override - public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) { - //spring容器初始化完成之后,就会自行此方法。 - Set> entitySet = AutoTransService.scan(AutoTrans.class, packageNames.split(";")); - // 遍历所有class,获取所有用@autowareYLM注释的字段 - if (entitySet != null) { - final List namespaceList = new ArrayList<>(); - for (Class entity : entitySet) { - AutoTrans autoTransSett = entity.getAnnotation(AutoTrans.class); - if (autoTransSett.ref() == VO.class || (!autoTransSett.ref().isAnnotationPresent(Entity.class))) { - continue; - } - // 获取该类 - Object baseService = SpringContextUtil.getBeanByClass(entity); - if ((baseService instanceof AutoTransable)) { - continue; - } - namespaceList.add(autoTransSett.namespace()); - autoTransService.regTransable(new JPA2TransableAdapter(autoTransSett.ref(), em), autoTransSett); - } - new Thread(() -> { - Thread.currentThread().setName("refresh auto trans cache"); - for (String namespace : namespaceList) { - autoTransService.refreshOneNamespace(namespace); - } - }).start(); - - } - } - -} diff --git a/easy-trans-jpa-extend/src/main/resources/META-INF/spring.factories b/easy-trans-jpa-extend/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 0b735c7..0000000 --- a/easy-trans-jpa-extend/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - com.fhs.trans.config.EasyTransJPA2Config diff --git a/easy-trans-jpa-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/easy-trans-jpa-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index defdd5e..0000000 --- a/easy-trans-jpa-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -com.fhs.trans.config.EasyTransJPA2Config \ No newline at end of file diff --git a/easy-trans-jpa-sb3-extend/pom.xml b/easy-trans-jpa-sb3-extend/pom.xml index 1e2e0d7..31025f5 100644 --- a/easy-trans-jpa-sb3-extend/pom.xml +++ b/easy-trans-jpa-sb3-extend/pom.xml @@ -13,7 +13,6 @@ 11 4.0.0 - 2.2.4 easy-trans-jpa-sb3-extend diff --git a/pom.xml b/pom.xml index d8f3dff..6dc86df 100644 --- a/pom.xml +++ b/pom.xml @@ -19,16 +19,14 @@ easy-trans-spring-boot-starter easy-trans-mybatis-plus-extend easy-trans-mybatis-flex-extend - + easy-trans-jpa-sb3-extend easy-trans-tk-extend easy-trans-beetl-sql-extend easy-trans-untrans-driver easy-trans-dependencies - - easy-trans-jpa-sb3-extend - 3.0.1 + 3.0.2 UTF-8 17 17 -- Gitee From 930164ee5c22ed75b037a01ece3846ee9a7e63e4 Mon Sep 17 00:00:00 2001 From: wanglei <921888199@qq.com> Date: Thu, 9 May 2024 14:55:09 +0800 Subject: [PATCH 08/38] =?UTF-8?q?=E8=A7=A3=E5=86=B3autotrans=20=E5=81=B6?= =?UTF-8?q?=E5=B0=94=E4=B8=8D=E8=A7=A6=E5=8F=91=E5=8D=95=E4=B8=AA=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C=E9=80=82=E9=85=8D?= =?UTF-8?q?=E9=AB=98=E7=89=88=E6=9C=ACmybaits-flex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../target/easy-trans-dependencies-3.0.1.pom | 4 +- .../target/easy-trans-dependencies-3.0.2.pom | 59 ++++++++++++++++ .../easy-trans-dependencies-3.0.2.pom.asc | 14 ++++ easy-trans-mybatis-flex-extend/pom.xml | 2 +- .../extend/MybatisFlexSimpleTransDiver.java | 69 ++++++------------- .../trans/service/impl/AutoTransService.java | 5 ++ .../trans/service/impl/ITransTypeService.java | 4 ++ .../fhs/trans/service/impl/TransService.java | 2 + pom.xml | 2 +- 10 files changed, 111 insertions(+), 52 deletions(-) create mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom create mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom.asc diff --git a/README.md b/README.md index ee1b0ac..0ff953e 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ https://gitee.com/fhs-opensource/vite_press_easy_trans 5 我有一个唯一键(比如手机号,身份证号码,但是非其他表id字段),但是我需要给客户展示他的title/name 但是我又不想自己手动做表关联查询 6 Excel导入场景,把 用户名 admin 反向翻译为 userid1 把男 反向翻译为 gender_1 (具体看官网文档) # 最新版本 -springboot3.x 最新easy-trans版本:3.0.2 springboot 2.x 最新easy-trans版本 2.2.13 +springboot3.x 最新easy-trans版本:3.0.3 springboot 2.x 最新easy-trans版本 2.2.14 # 食用步骤 diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom index 46b26ac..832ed01 100644 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom @@ -5,11 +5,11 @@ com.fhs-opensource easy-trans - 3.0.2 + 3.0.3 com.fhs-opensource easy-trans-dependencies - 3.0.2 + 3.0.3 pom diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom new file mode 100644 index 0000000..832ed01 --- /dev/null +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom @@ -0,0 +1,59 @@ + + + 4.0.0 + + com.fhs-opensource + easy-trans + 3.0.3 + + com.fhs-opensource + easy-trans-dependencies + 3.0.3 + pom + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + + + + + com.fhs-opensource + easy-trans-anno + ${revision} + + + com.fhs-opensource + easy-trans-spring-boot-starter + ${revision} + + + com.fhs-opensource + easy-trans-beetl-sql-extend + ${revision} + + + com.fhs-opensource + easy-trans-mybatis-plus-extend + ${revision} + + + com.fhs-opensource + easy-trans-mybatis-flex-extend + ${revision} + + + com.fhs-opensource + easy-trans-jpa-extend + ${revision} + + + com.fhs-opensource + easy-trans-tk-extend + ${revision} + + + + diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom.asc b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom.asc new file mode 100644 index 0000000..32479e5 --- /dev/null +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom.asc @@ -0,0 +1,14 @@ +-----BEGIN PGP SIGNATURE----- + +iQGzBAABCAAdFiEEReTtXCh9VkDlzgVFf96UeDvg/LgFAmYc+60ACgkQf96UeDvg +/Lj8JQwAotRYbtEnTASduqnnLhlZoPhMRT0vVPCV7WePGoG42/8HwOQBIWBI6mY3 +7AFA/T/hqsDvk0Nx6RtQLneyDADYXdmNJLLf6TXE6ClDhR2zgBCQH5SlTOzjl+Ze ++1tDdnfUWg2v2oVM0EfCVV7IlUKFzb/KPHFBDuynPsICthEiJyy8Y8NTPw30kFhP +0smF+RgykvpwXJFpMrutr+2+MujcDiB0JgHvFrSY394t6GxkmC2dQjw9kb5r1JmU +2pAO7144LD5U0SEW+8ZL2etjrx3FNSgiioTJO152zNkGFGc+PsGmWP255dovez8+ +vf7OfnzAwEZIzV3Jalq0ldE56sUxg1862l3hw28OKXAMQenlHJ50Al8HSew6CV7z +FMYXfeQuig576gw/M8R42xB+pctKfRdwGQKyAOt3m/OQKUTfOgvgCHQ+tTrHJ2Hk +Ayx4W2OPGnzUaJck9lg9koTJs7kZuCT0ieovpvY4HUmQhB2zI/spgl5ijGn2QfPf +Ojui6UnY +=fyey +-----END PGP SIGNATURE----- diff --git a/easy-trans-mybatis-flex-extend/pom.xml b/easy-trans-mybatis-flex-extend/pom.xml index 08565bd..5aeb57f 100644 --- a/easy-trans-mybatis-flex-extend/pom.xml +++ b/easy-trans-mybatis-flex-extend/pom.xml @@ -11,7 +11,7 @@ easy-trans-mybatis-flex-extend - 1.5.7 + 1.8.7 diff --git a/easy-trans-mybatis-flex-extend/src/main/java/com/fhs/trans/extend/MybatisFlexSimpleTransDiver.java b/easy-trans-mybatis-flex-extend/src/main/java/com/fhs/trans/extend/MybatisFlexSimpleTransDiver.java index 89091c6..bb1c23f 100644 --- a/easy-trans-mybatis-flex-extend/src/main/java/com/fhs/trans/extend/MybatisFlexSimpleTransDiver.java +++ b/easy-trans-mybatis-flex-extend/src/main/java/com/fhs/trans/extend/MybatisFlexSimpleTransDiver.java @@ -28,7 +28,7 @@ public class MybatisFlexSimpleTransDiver implements SimpleTransService.SimpleTra @Override public List findByIds(List ids, Class targetClass, String uniqueField) { - return findByIds(ids, targetClass, uniqueField, null); + return this.findByIds(ids, targetClass, uniqueField, (Set)null); } @Override @@ -42,7 +42,7 @@ public class MybatisFlexSimpleTransDiver implements SimpleTransService.SimpleTra @Override public VO findById(Serializable id, Class targetClass, String uniqueField) { - return findById(id, targetClass, uniqueField, null); + return this.findById(id, targetClass, uniqueField, (Set)null); } @Override @@ -50,40 +50,12 @@ public class MybatisFlexSimpleTransDiver implements SimpleTransService.SimpleTra TableInfo tableInfo = TableInfoFactory.ofEntityClass(targetClass); uniqueField = this.getUniqueField(tableInfo, uniqueField); QueryWrapper queryWrapper = genWrapper(tableInfo, targetFields, uniqueField); - queryWrapper.where(getQueryColumn(tableInfo, uniqueField).eq(id)); - return (VO) getMapper(targetClass).selectOneById(id); - } + queryWrapper.where(getQueryColumn(tableInfo, uniqueField).in(id)); + return (VO)getMapper(targetClass).selectOneById(id); - /** - * 生成查询 {@link QueryWrapper} 对象。 - * - * @param tableInfo 表信息 - * @param targetFields 目标字段 - * @param uniqueField 唯一键 - * @return {@link QueryWrapper} - */ - private QueryWrapper genWrapper(TableInfo tableInfo, Set targetFields, String uniqueField) { - QueryWrapper queryWrapper = QueryWrapper.create(); - if (targetFields != null && !targetFields.isEmpty()) { - targetFields.add(getKeyProperty(tableInfo)); - if (!StringUtil.isEmpty(uniqueField)) { - targetFields.add(uniqueField); - } - queryWrapper.select(targetFields.stream() - .map(tableInfo::getColumnByProperty) - .map(tableInfo::buildQueryColumn) - .toArray(QueryColumn[]::new)); - } - return queryWrapper; } - /** - * 如果配置了 {@code uniqueField} 则返回 {@code uniqueField} 没有就返回主键。 - * - * @param tableInfo 表信息 - * @param uniqueField 唯一键 - * @return 唯一键 - */ + private String getUniqueField(TableInfo tableInfo, String uniqueField) { if (!StringUtil.isEmpty(uniqueField)) { return uniqueField; @@ -107,24 +79,27 @@ public class MybatisFlexSimpleTransDiver implements SimpleTransService.SimpleTra return primaryKeyList.get(0).getProperty(); } - /** - * 获取查询列。 - * - * @param tableInfo 表信息 - * @param field 类属性 - * @return {@link QueryColumn} - */ + + private QueryWrapper genWrapper(TableInfo tableInfo, Set targetFields, String uniqueField) { + QueryWrapper queryWrapper = QueryWrapper.create(); + if (targetFields != null && !targetFields.isEmpty()) { + targetFields.add(getKeyProperty(tableInfo)); + if (!StringUtil.isEmpty(uniqueField)) { + targetFields.add(uniqueField); + } + queryWrapper.select(targetFields.stream() + .map(tableInfo::getColumnByProperty) + .map(tableInfo::getQueryColumnByProperty) + .toArray(QueryColumn[]::new)); + } + return queryWrapper; + } + private QueryColumn getQueryColumn(TableInfo tableInfo, String field) { String column = tableInfo.getColumnByProperty(field); - return tableInfo.buildQueryColumn(column); + return tableInfo.getQueryColumnByProperty(column); } - /** - * 根据实体类获取 {@link BaseMapper} 对象。 - * - * @param entity 实体类 - * @return {@link BaseMapper} - */ public BaseMapper getMapper(Class entity) { return Mappers.ofEntityClass(entity); } diff --git a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/AutoTransService.java b/easy-trans-service/src/main/java/com/fhs/trans/service/impl/AutoTransService.java index a9464a2..6ca38e5 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/AutoTransService.java +++ b/easy-trans-service/src/main/java/com/fhs/trans/service/impl/AutoTransService.java @@ -444,6 +444,11 @@ public class AutoTransService implements ITransTypeService, InitializingBean, Ap this.baseServiceMap.put(autoTransSett.namespace(), transAble); this.transSettMap.put(autoTransSett.namespace(), autoTransSett); } + + @Override + public void reset() { + threadLocalCache.set(null); + } } /** diff --git a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/ITransTypeService.java b/easy-trans-service/src/main/java/com/fhs/trans/service/impl/ITransTypeService.java index 88a525e..eb057ac 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/ITransTypeService.java +++ b/easy-trans-service/src/main/java/com/fhs/trans/service/impl/ITransTypeService.java @@ -361,4 +361,8 @@ public interface ITransTypeService { default void setUniqueFieldCache(String namespace, String uniqueField) { namespaceUniqueFieldMap.put(namespace, uniqueField); } + + default void reset(){ + + } } diff --git a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/TransService.java b/easy-trans-service/src/main/java/com/fhs/trans/service/impl/TransService.java index 930f8a1..1a72fd7 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/TransService.java +++ b/easy-trans-service/src/main/java/com/fhs/trans/service/impl/TransService.java @@ -183,9 +183,11 @@ public class TransService { transSortFieldMap.put(sort,tempFieldList); } for (Integer sortNum : transSortFieldMap.keySet()) { + transTypeService.reset(); transTypeService.transMore(objList, transSortFieldMap.get(sortNum)); } } else { + transTypeService.reset(); transTypeService.transOne(obj, transFieldList); } } diff --git a/pom.xml b/pom.xml index 6dc86df..e9fdfc3 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ easy-trans-dependencies - 3.0.2 + 3.0.3 UTF-8 17 17 -- Gitee From 78382e9548493ad6a2422a59016b2263e8f03031 Mon Sep 17 00:00:00 2001 From: wanglei <921888199@qq.com> Date: Fri, 24 May 2024 18:30:11 +0800 Subject: [PATCH 09/38] =?UTF-8?q?=E8=A7=A3=E5=86=B3RPC=E6=89=BE=E4=B8=8D?= =?UTF-8?q?=E5=88=B0=E7=B1=BB=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../target/easy-trans-dependencies-3.0.3.pom | 59 +++++++++++++++++++ .../easy-trans-dependencies-3.0.3.pom.asc | 14 +++++ .../service/impl/SimpleTransService.java | 21 ++++--- 3 files changed, 86 insertions(+), 8 deletions(-) create mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom create mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom.asc diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom new file mode 100644 index 0000000..832ed01 --- /dev/null +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom @@ -0,0 +1,59 @@ + + + 4.0.0 + + com.fhs-opensource + easy-trans + 3.0.3 + + com.fhs-opensource + easy-trans-dependencies + 3.0.3 + pom + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + + + + + com.fhs-opensource + easy-trans-anno + ${revision} + + + com.fhs-opensource + easy-trans-spring-boot-starter + ${revision} + + + com.fhs-opensource + easy-trans-beetl-sql-extend + ${revision} + + + com.fhs-opensource + easy-trans-mybatis-plus-extend + ${revision} + + + com.fhs-opensource + easy-trans-mybatis-flex-extend + ${revision} + + + com.fhs-opensource + easy-trans-jpa-extend + ${revision} + + + com.fhs-opensource + easy-trans-tk-extend + ${revision} + + + + diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom.asc b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom.asc new file mode 100644 index 0000000..c1a37a8 --- /dev/null +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom.asc @@ -0,0 +1,14 @@ +-----BEGIN PGP SIGNATURE----- + +iQGzBAABCAAdFiEEReTtXCh9VkDlzgVFf96UeDvg/LgFAmY8ecMACgkQf96UeDvg +/Liipgv/SpxBFfbac7FIZYxDP16lzulrhRQqclo3jCFuzeKXFaBmjTatjqJRY2z6 +rwwaOricpUTlD/IPBFg3upb3+PLqjR+aCjPUOtyNnWbZjnxXhXBGn47JezM+GJMW +j5X76DoV5gnwHw/4NwY9+VHnFbpdAEhWqCnzhMnTqcEn/EsNxBgDTrFch4zxFT0N +LG+FhGc4E/G9HK+IbkSL4oHvG5LB7EhfI2oqG/dOyPDzJT7WPI2Tr2jjeZMfPl9O +PjBR2tnLCZj7H8bepyZNQcGbZqclHsuKIPiN7yRR/ufeHSjUntzatEtQQV+G97i8 +ozZAhkXhyxZERXDbfUDfuz/GOsOkNOeP7/4K5Btyy67KkKY5ZQf7NKdw1HRoFaGX +vcwMdOWSx1z73xQfCBS10HuyJ8wJWaStKAmFwsv0Kxm1PZ5LCiOHj4HnTsge9gAt +hP171woLUYXH4ZqRve1u6PxsoXuA4Wt5Ng/aSc0YhLLBkLzA9T5T4CGX0c+zpnhd +T6dQTABh +=xby9 +-----END PGP SIGNATURE----- diff --git a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/SimpleTransService.java b/easy-trans-service/src/main/java/com/fhs/trans/service/impl/SimpleTransService.java index 0b65ec2..e6a20ff 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/SimpleTransService.java +++ b/easy-trans-service/src/main/java/com/fhs/trans/service/impl/SimpleTransService.java @@ -309,7 +309,7 @@ public class SimpleTransService implements ITransTypeService, InitializingBean { */ public List findByIds(List ids, Trans tempTrans, Set targetFields) { return findByIds(() -> { - return transDiver.findByIds(ids, tempTrans.target(), tempTrans.uniqueField(),targetFields); + return transDiver.findByIds(ids, tempTrans.target(), tempTrans.uniqueField(), targetFields); }, tempTrans.dataSource()); } @@ -623,13 +623,15 @@ class SimpleTrans implements Trans { public SimpleTrans(Trans anno) { this.anno = anno; - Class clazz = (Class) this.target(); - if (clazz != null && clazz.isAnnotationPresent(TransDefaultSett.class)) { - TransDefaultSett transDefaultSett = clazz.getAnnotation(TransDefaultSett.class); - this.fields = transDefaultSett.defaultFields(); - this.alias = transDefaultSett.defaultAlias(); - this.uniqueField = transDefaultSett.uniqueField(); - this.dataSource = transDefaultSett.dataSource(); + if (TransType.SIMPLE.equals(this.type())) { + Class clazz = (Class) this.target(); + if (clazz != null && clazz.isAnnotationPresent(TransDefaultSett.class)) { + TransDefaultSett transDefaultSett = clazz.getAnnotation(TransDefaultSett.class); + this.fields = transDefaultSett.defaultFields(); + this.alias = transDefaultSett.defaultAlias(); + this.uniqueField = transDefaultSett.uniqueField(); + this.dataSource = transDefaultSett.dataSource(); + } } } @@ -658,6 +660,9 @@ class SimpleTrans implements Trans { try { return anno.target() == com.fhs.core.trans.vo.TransPojo.class ? (Class) Class.forName(anno.targetClassName()) : anno.target(); } catch (ClassNotFoundException e) { + if (TransType.RPC.equals(this.type())) { + return com.fhs.core.trans.vo.TransPojo.class; + } throw new RuntimeException(e); } } -- Gitee From 8bcedadca2f33f2664705fbc317c8732f429d80a Mon Sep 17 00:00:00 2001 From: wanglei <921888199@qq.com> Date: Wed, 29 May 2024 19:01:01 +0800 Subject: [PATCH 10/38] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7=E5=88=B03.0.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../target/easy-trans-dependencies-3.0.1.pom | 4 +- .../target/easy-trans-dependencies-3.0.2.pom | 4 +- .../target/easy-trans-dependencies-3.0.3.pom | 4 +- .../target/easy-trans-dependencies-3.0.4.pom | 59 +++++++++++++++++++ .../easy-trans-dependencies-3.0.4.pom.asc | 14 +++++ pom.xml | 2 +- 7 files changed, 81 insertions(+), 8 deletions(-) create mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom create mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom.asc diff --git a/README.md b/README.md index 0ff953e..e3108cb 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ https://gitee.com/fhs-opensource/vite_press_easy_trans 5 我有一个唯一键(比如手机号,身份证号码,但是非其他表id字段),但是我需要给客户展示他的title/name 但是我又不想自己手动做表关联查询 6 Excel导入场景,把 用户名 admin 反向翻译为 userid1 把男 反向翻译为 gender_1 (具体看官网文档) # 最新版本 -springboot3.x 最新easy-trans版本:3.0.3 springboot 2.x 最新easy-trans版本 2.2.14 +springboot3.x 最新easy-trans版本:3.0.4 springboot 2.x 最新easy-trans版本 2.2.14 # 食用步骤 diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom index 832ed01..eca35f5 100644 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom @@ -5,11 +5,11 @@ com.fhs-opensource easy-trans - 3.0.3 + 3.0.4 com.fhs-opensource easy-trans-dependencies - 3.0.3 + 3.0.4 pom diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom index 832ed01..eca35f5 100644 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom @@ -5,11 +5,11 @@ com.fhs-opensource easy-trans - 3.0.3 + 3.0.4 com.fhs-opensource easy-trans-dependencies - 3.0.3 + 3.0.4 pom diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom index 832ed01..eca35f5 100644 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom @@ -5,11 +5,11 @@ com.fhs-opensource easy-trans - 3.0.3 + 3.0.4 com.fhs-opensource easy-trans-dependencies - 3.0.3 + 3.0.4 pom diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom new file mode 100644 index 0000000..eca35f5 --- /dev/null +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom @@ -0,0 +1,59 @@ + + + 4.0.0 + + com.fhs-opensource + easy-trans + 3.0.4 + + com.fhs-opensource + easy-trans-dependencies + 3.0.4 + pom + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + + + + + com.fhs-opensource + easy-trans-anno + ${revision} + + + com.fhs-opensource + easy-trans-spring-boot-starter + ${revision} + + + com.fhs-opensource + easy-trans-beetl-sql-extend + ${revision} + + + com.fhs-opensource + easy-trans-mybatis-plus-extend + ${revision} + + + com.fhs-opensource + easy-trans-mybatis-flex-extend + ${revision} + + + com.fhs-opensource + easy-trans-jpa-extend + ${revision} + + + com.fhs-opensource + easy-trans-tk-extend + ${revision} + + + + diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom.asc b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom.asc new file mode 100644 index 0000000..3035f99 --- /dev/null +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom.asc @@ -0,0 +1,14 @@ +-----BEGIN PGP SIGNATURE----- + +iQGzBAABCAAdFiEEReTtXCh9VkDlzgVFf96UeDvg/LgFAmZXBzcACgkQf96UeDvg +/LhFvQv/fZhymHYvFK4+kGLMk0P994tVRU2FBEs00V/uQviewEBKl0+6HWfglcM6 +aPCrYh0HrUZYlGI3bdYYrJ9B2bozHl8C1Z+es2kApw9nh02r7rUzlt8VxtYsKbFb +leTO79c2fbMU095OGI0ydMHkYtobeobVyUw5OBhGsZ+EJ1ZxkR5W+C5IFaV/rreW +eNBiA8s374v7O2fwkGmNXK+3CD7KF5L099D+UWP/Wxe3NLMia7EJ6J//Jn696WJ6 +653VqplgTlX97mTXBCb4b/oU9l/ByK5kTuEiCUyMuVPICImTtriRdG18lAVM0cR1 +3GJu+OyhSCulbrUNwLO4bdqlZiBr0HLW2HC9cvs2ezovirRYpk+8Q2WlakshvVY+ +k3y0sHlzRFh+bbrrrwdSFtRTPv0cpYK51f6lkzcps4PZJSyq98RhIuFLOo8Ik6Wv +mtp5buZuBTVinni4PG6maRmWZ7OeF7Gr4zm108gbj3YF5uuV7v09GQgM2bqvLnSy +ii79KZjC +=TrBj +-----END PGP SIGNATURE----- diff --git a/pom.xml b/pom.xml index e9fdfc3..11c0afb 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ easy-trans-dependencies - 3.0.3 + 3.0.4 UTF-8 17 17 -- Gitee From 8a1528a4d8e3201d69f1c01cfb6441cb0466c911 Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Thu, 30 May 2024 03:37:00 +0000 Subject: [PATCH 11/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e3108cb..143b790 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ https://gitee.com/fhs-opensource/vite_press_easy_trans 5 我有一个唯一键(比如手机号,身份证号码,但是非其他表id字段),但是我需要给客户展示他的title/name 但是我又不想自己手动做表关联查询 6 Excel导入场景,把 用户名 admin 反向翻译为 userid1 把男 反向翻译为 gender_1 (具体看官网文档) # 最新版本 -springboot3.x 最新easy-trans版本:3.0.4 springboot 2.x 最新easy-trans版本 2.2.14 +springboot3.x 最新easy-trans版本:3.0.4 springboot 2.x 最新easy-trans版本 2.2.15 # 食用步骤 -- Gitee From f95218ee93b90a97f4a84508a4acca4b682451da Mon Sep 17 00:00:00 2001 From: wanglei <921888199@qq.com> Date: Thu, 27 Jun 2024 16:51:28 +0800 Subject: [PATCH 12/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0easy-query=E6=89=A9?= =?UTF-8?q?=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + README.md | 2 +- easy-trans-dependencies/pom.xml | 7 +- .../target/easy-trans-dependencies-3.0.1.pom | 4 +- .../target/easy-trans-dependencies-3.0.2.pom | 4 +- .../target/easy-trans-dependencies-3.0.3.pom | 4 +- .../target/easy-trans-dependencies-3.0.4.pom | 4 +- easy-trans-easy-query-extend/pom.xml | 38 ++++++++++ .../java/com/fhs/trans/anno/Id4Trans.java | 11 +++ .../config/EasyTransEasyQueryConfig.java | 31 ++++++++ .../extend/EasyQuerySimpleTransDiver.java | 72 +++++++++++++++++++ .../main/resources/META-INF/spring.factories | 2 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + pom.xml | 16 ++++- 14 files changed, 180 insertions(+), 17 deletions(-) create mode 100644 easy-trans-easy-query-extend/pom.xml create mode 100644 easy-trans-easy-query-extend/src/main/java/com/fhs/trans/anno/Id4Trans.java create mode 100644 easy-trans-easy-query-extend/src/main/java/com/fhs/trans/config/EasyTransEasyQueryConfig.java create mode 100644 easy-trans-easy-query-extend/src/main/java/com/fhs/trans/extend/EasyQuerySimpleTransDiver.java create mode 100644 easy-trans-easy-query-extend/src/main/resources/META-INF/spring.factories create mode 100644 easy-trans-easy-query-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports diff --git a/.gitignore b/.gitignore index 86a4c83..6d830d5 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,4 @@ hs_err_pid* .flattened-pom.xml /easy-trans-mybatis-flex-extend/.flattened-pom.xml /easy-trans-mybatis-flex-extend/target +/easy-trans-easy-query-extend/target diff --git a/README.md b/README.md index e3108cb..ee23ce6 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ https://gitee.com/fhs-opensource/vite_press_easy_trans 5 我有一个唯一键(比如手机号,身份证号码,但是非其他表id字段),但是我需要给客户展示他的title/name 但是我又不想自己手动做表关联查询 6 Excel导入场景,把 用户名 admin 反向翻译为 userid1 把男 反向翻译为 gender_1 (具体看官网文档) # 最新版本 -springboot3.x 最新easy-trans版本:3.0.4 springboot 2.x 最新easy-trans版本 2.2.14 +springboot3.x 最新easy-trans版本:3.0.5 springboot 2.x 最新easy-trans版本 2.2.16 # 食用步骤 diff --git a/easy-trans-dependencies/pom.xml b/easy-trans-dependencies/pom.xml index c1a3175..56cf65f 100644 --- a/easy-trans-dependencies/pom.xml +++ b/easy-trans-dependencies/pom.xml @@ -49,12 +49,7 @@ ${revision} - - - com.fhs-opensource - easy-trans-jpa-extend - ${revision} - + diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom index eca35f5..1937881 100644 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom @@ -5,11 +5,11 @@ com.fhs-opensource easy-trans - 3.0.4 + 3.0.5 com.fhs-opensource easy-trans-dependencies - 3.0.4 + 3.0.5 pom diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom index eca35f5..1937881 100644 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom @@ -5,11 +5,11 @@ com.fhs-opensource easy-trans - 3.0.4 + 3.0.5 com.fhs-opensource easy-trans-dependencies - 3.0.4 + 3.0.5 pom diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom index eca35f5..1937881 100644 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom @@ -5,11 +5,11 @@ com.fhs-opensource easy-trans - 3.0.4 + 3.0.5 com.fhs-opensource easy-trans-dependencies - 3.0.4 + 3.0.5 pom diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom index eca35f5..1937881 100644 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom @@ -5,11 +5,11 @@ com.fhs-opensource easy-trans - 3.0.4 + 3.0.5 com.fhs-opensource easy-trans-dependencies - 3.0.4 + 3.0.5 pom diff --git a/easy-trans-easy-query-extend/pom.xml b/easy-trans-easy-query-extend/pom.xml new file mode 100644 index 0000000..8e8665f --- /dev/null +++ b/easy-trans-easy-query-extend/pom.xml @@ -0,0 +1,38 @@ + + + + com.fhs-opensource + easy-trans + ${revision} + + 4.0.0 + easy-trans-easy-query-extend + + + + com.fhs-opensource + easy-trans-service + + + org.springframework + spring-context + + + org.springframework.boot + spring-boot-autoconfigure + + + com.easy-query + sql-api4j + true + + + com.easy-query + sql-core + true + + + + diff --git a/easy-trans-easy-query-extend/src/main/java/com/fhs/trans/anno/Id4Trans.java b/easy-trans-easy-query-extend/src/main/java/com/fhs/trans/anno/Id4Trans.java new file mode 100644 index 0000000..8873000 --- /dev/null +++ b/easy-trans-easy-query-extend/src/main/java/com/fhs/trans/anno/Id4Trans.java @@ -0,0 +1,11 @@ +package com.fhs.trans.anno; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD, ElementType.FIELD}) +public @interface Id4Trans { +} \ No newline at end of file diff --git a/easy-trans-easy-query-extend/src/main/java/com/fhs/trans/config/EasyTransEasyQueryConfig.java b/easy-trans-easy-query-extend/src/main/java/com/fhs/trans/config/EasyTransEasyQueryConfig.java new file mode 100644 index 0000000..aa23c96 --- /dev/null +++ b/easy-trans-easy-query-extend/src/main/java/com/fhs/trans/config/EasyTransEasyQueryConfig.java @@ -0,0 +1,31 @@ +package com.fhs.trans.config; + +import com.easy.query.core.api.client.EasyQueryClient; +import com.fhs.core.trans.util.ReflectUtils; +import com.fhs.trans.anno.Id4Trans; +import com.fhs.trans.extend.EasyQuerySimpleTransDiver; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * mybatis plus适配器 + * + * @author wanglei + */ +@Slf4j +@Configuration +public class EasyTransEasyQueryConfig { + + @Autowired + private EasyQueryClient easyQueryClient; + + @Bean + public EasyQuerySimpleTransDiver easyQueryTransDiver() { + ReflectUtils.ID_ANNO.add(Id4Trans.class); + EasyQuerySimpleTransDiver result = new EasyQuerySimpleTransDiver(easyQueryClient); + return result; + } + +} diff --git a/easy-trans-easy-query-extend/src/main/java/com/fhs/trans/extend/EasyQuerySimpleTransDiver.java b/easy-trans-easy-query-extend/src/main/java/com/fhs/trans/extend/EasyQuerySimpleTransDiver.java new file mode 100644 index 0000000..332a929 --- /dev/null +++ b/easy-trans-easy-query-extend/src/main/java/com/fhs/trans/extend/EasyQuerySimpleTransDiver.java @@ -0,0 +1,72 @@ +package com.fhs.trans.extend; + +import com.easy.query.core.api.client.EasyQueryClient; +import com.easy.query.core.expression.builder.Selector; +import com.fhs.core.trans.vo.VO; +import com.fhs.trans.service.impl.SimpleTransService; +import lombok.extern.slf4j.Slf4j; +import java.io.Serializable; +import java.util.List; +import java.util.Set; + +/** + * mybatis plus 简单翻译驱动 + */ +@Slf4j +public class EasyQuerySimpleTransDiver implements SimpleTransService.SimpleTransDiver { + + private EasyQueryClient easyQueryClient; + + public EasyQuerySimpleTransDiver(EasyQueryClient easyQueryClient){ + this.easyQueryClient = easyQueryClient; + } + + @Override + public List findByIds(List ids, Class targetClass, String uniqueField, Set targetFields) { + return easyQueryClient.queryable(targetClass) + .whereByIds(ids) + .select(o->{ + Selector selector = o.getSelector(); + for (String targetField : targetFields) { + selector.column(o.getTable(),targetField); + } + }) + .toList(); + } + + @Override + public VO findById(Serializable id, Class targetClass, String uniqueField, Set targetFields) { + VO vo = easyQueryClient.queryable(targetClass) + .whereById(id) + .select(o -> { + Selector selector = o.getSelector(); + for (String targetField : targetFields) { + selector.column(o.getTable(), targetField); + } + }) + .firstOrNull(); + if(vo==null){ + log.error(targetClass + " 根据id:" + id + "没有查询到数据"); + } + return vo; + } + + @Override + public List findByIds(List ids, Class targetClass, String uniqueField) { + return easyQueryClient.queryable(targetClass) + .whereByIds(ids) + .toList(); + } + + @Override + public VO findById(Serializable id, Class targetClass, String uniqueField) { + VO vo = easyQueryClient.queryable(targetClass) + .whereById(id).firstOrNull(); + if(vo==null){ + log.error(targetClass + " 根据id:" + id + "没有查询到数据"); + } + return vo; + } + + +} diff --git a/easy-trans-easy-query-extend/src/main/resources/META-INF/spring.factories b/easy-trans-easy-query-extend/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..4e34604 --- /dev/null +++ b/easy-trans-easy-query-extend/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.fhs.trans.config.EasyTransEasyQueryConfig diff --git a/easy-trans-easy-query-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/easy-trans-easy-query-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..0ff1c14 --- /dev/null +++ b/easy-trans-easy-query-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.fhs.trans.config.EasyTransEasyQueryConfig \ No newline at end of file diff --git a/pom.xml b/pom.xml index 11c0afb..68e326b 100644 --- a/pom.xml +++ b/pom.xml @@ -21,12 +21,13 @@ easy-trans-mybatis-flex-extend easy-trans-jpa-sb3-extend easy-trans-tk-extend + easy-trans-easy-query-extend easy-trans-beetl-sql-extend easy-trans-untrans-driver easy-trans-dependencies - 3.0.4 + 3.0.5 UTF-8 17 17 @@ -36,7 +37,7 @@ 6.0.13 5.4.12.Final 3.5.5 - + 2.0.42 @@ -73,6 +74,17 @@ mybatis ${fhs.mybatis.version} + + + com.easy-query + sql-api4j + ${fhs.easy-query.version} + + + com.easy-query + sql-core + ${fhs.easy-query.version} + com.fasterxml.jackson.core -- Gitee From 01b077baf71c1ba7cd8aca9bb9a9c82a6df11f44 Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Thu, 27 Jun 2024 10:18:36 +0000 Subject: [PATCH 13/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 2b2ce72..ba20fad 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,9 @@ TK Mybatis(通用mapper) 扩展: 2.2.9 ``` + +mybatis-flex和easy-query 也已经添加了支持,在项目里找对应的扩展引用就好了 + 如果使用Redis请添加redis的引用(如果之前加过了请不要重复添加) ``` xml -- Gitee From 3adaa4e591ff83bbf83f3b7f010c2648b7490ee3 Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Mon, 1 Jul 2024 07:02:43 +0000 Subject: [PATCH 14/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ba20fad..c2cfd91 100644 --- a/README.md +++ b/README.md @@ -222,7 +222,7 @@ https://gitee.com/fhs-opensource/easy_trans_springboot_demo 18、江苏誉鸣航智能科技有限公司 19、maku-boot https://gitee.com/makunet/maku-boot 20、北京大美星空科技有限公司 - +21、四川学道社人力资源有限公司 # 作者二维码 加作者二维码邀请进入官方群 -- Gitee From 3d385d49d6fe1a0fff264eebe286d672145dee87 Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Mon, 29 Jul 2024 08:35:55 +0000 Subject: [PATCH 15/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/README.md b/README.md index c2cfd91..d4e1fef 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,33 @@ +# AD部分 +公司有整套商业版数据中台源码出售,基于doris实现的数据仓库,支持PB级别的数据存储分析,功能模块如下: +## 功能模块 +### 1、数据源管理 +### 2、元数据管理 +元模型、最新元数据 +### 3、数据标准管理 +标准词根、标准字典、数据元、标准模型、发布、多版本维护、数据标准核对 +### 4、数据仓库管理 +支持主题域、主题、数仓集群、维度建模、模型运维、模型审计、模型数据查看、数仓备份和恢复 +### 5、数据质量 +规则定义,任务执行,结果查看,统计分析,质量问题修复日志 +### 6、数据血缘 +数据血缘,数据流向 +### 7、数据标签 +标签对象、标签管理、置标任务、标签圈群、标签画像 +### 8、数据服务 +接口在线开发(支持通过JS脚本对数据进行处理后返回,支持动态SQL),接口测试,接口发布,应用管理,应用授权 +## 9、资产目录 +目录编目,资产项授权,资产项查看,资产项申请 +### 10、数据集成 +kettle调度,kettle 任务/转换 在线设计 ,datax任务在线构建 调度执行 drois多数据目录维护,简易ETL、FLINK +### 11、数据可视化 +数据集,报表管理,报表设计,报表查看 +## 技术栈 +后端:Java springboot2.7 springcloud/alibaba mybatis plus hutool 等常见技术 +前端:vue elementui vite 等常见技术 +中间件:doris,mysql,redis,rabbitmq,minio,zookeeper。 +### 有演示环境和方案PPT,需要加V:abcd19920605 + # easy_trans ![输入图片说明](images/logo.png) # 介绍 -- Gitee From f16c0be82e5043e1abb372a4faf74a5891995ccc Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Mon, 29 Jul 2024 08:36:22 +0000 Subject: [PATCH 16/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d4e1fef..ae06ccf 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ kettle调度,kettle 任务/转换 在线设计 ,datax任务在线构建 调 前端:vue elementui vite 等常见技术 中间件:doris,mysql,redis,rabbitmq,minio,zookeeper。 ### 有演示环境和方案PPT,需要加V:abcd19920605 - +# 以下为本项目正文 # easy_trans ![输入图片说明](images/logo.png) # 介绍 -- Gitee From 8cc77021e4a3f3f83dfef87de20c2a3bab55fa09 Mon Sep 17 00:00:00 2001 From: wanglei <921888199@qq.com> Date: Mon, 19 Aug 2024 16:15:07 +0800 Subject: [PATCH 17/38] =?UTF-8?q?=E7=BA=A7=E8=81=94=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AD=97=E6=AE=B5=E5=BF=BD=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../com/fhs/core/trans/anno/IgnoreTrans.java | 2 +- .../target/easy-trans-dependencies-3.0.1.pom | 4 +- .../target/easy-trans-dependencies-3.0.2.pom | 4 +- .../target/easy-trans-dependencies-3.0.3.pom | 4 +- .../target/easy-trans-dependencies-3.0.4.pom | 4 +- .../target/easy-trans-dependencies-3.0.5.pom | 54 +++++++++++++++++++ .../easy-trans-dependencies-3.0.5.pom.asc | 14 +++++ .../java/com/fhs/trans/utils/TransUtil.java | 8 ++- pom.xml | 2 +- 10 files changed, 86 insertions(+), 12 deletions(-) create mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.5.pom create mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.5.pom.asc diff --git a/README.md b/README.md index 2b2ce72..7aa78c8 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ https://gitee.com/fhs-opensource/vite_press_easy_trans 5 我有一个唯一键(比如手机号,身份证号码,但是非其他表id字段),但是我需要给客户展示他的title/name 但是我又不想自己手动做表关联查询 6 Excel导入场景,把 用户名 admin 反向翻译为 userid1 把男 反向翻译为 gender_1 (具体看官网文档) # 最新版本 -springboot3.x 最新easy-trans版本:3.0.5 springboot 2.x 最新easy-trans版本 2.2.15 +springboot3.x 最新easy-trans版本:3.0.6 springboot 2.x 最新easy-trans版本 2.2.15 # 食用步骤 diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/IgnoreTrans.java b/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/IgnoreTrans.java index 87d132b..7a1167b 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/IgnoreTrans.java +++ b/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/IgnoreTrans.java @@ -9,6 +9,6 @@ import java.lang.annotation.Target; * 忽略翻译--需要加到controller上 */ @Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.METHOD}) +@Target({ElementType.METHOD,ElementType.FIELD}) public @interface IgnoreTrans { } diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom index 1937881..0e57d6d 100644 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom @@ -5,11 +5,11 @@ com.fhs-opensource easy-trans - 3.0.5 + 3.0.6 com.fhs-opensource easy-trans-dependencies - 3.0.5 + 3.0.6 pom diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom index 1937881..0e57d6d 100644 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom @@ -5,11 +5,11 @@ com.fhs-opensource easy-trans - 3.0.5 + 3.0.6 com.fhs-opensource easy-trans-dependencies - 3.0.5 + 3.0.6 pom diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom index 1937881..0e57d6d 100644 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom @@ -5,11 +5,11 @@ com.fhs-opensource easy-trans - 3.0.5 + 3.0.6 com.fhs-opensource easy-trans-dependencies - 3.0.5 + 3.0.6 pom diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom index 1937881..0e57d6d 100644 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom @@ -5,11 +5,11 @@ com.fhs-opensource easy-trans - 3.0.5 + 3.0.6 com.fhs-opensource easy-trans-dependencies - 3.0.5 + 3.0.6 pom diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.5.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.5.pom new file mode 100644 index 0000000..51a0cbd --- /dev/null +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.5.pom @@ -0,0 +1,54 @@ + + + 4.0.0 + + com.fhs-opensource + easy-trans + 3.0.6 + + com.fhs-opensource + easy-trans-dependencies + 3.0.6 + pom + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + + + + + com.fhs-opensource + easy-trans-anno + ${revision} + + + com.fhs-opensource + easy-trans-spring-boot-starter + ${revision} + + + com.fhs-opensource + easy-trans-beetl-sql-extend + ${revision} + + + com.fhs-opensource + easy-trans-mybatis-plus-extend + ${revision} + + + com.fhs-opensource + easy-trans-mybatis-flex-extend + ${revision} + + + com.fhs-opensource + easy-trans-tk-extend + ${revision} + + + + diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.5.pom.asc b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.5.pom.asc new file mode 100644 index 0000000..fc4b344 --- /dev/null +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.5.pom.asc @@ -0,0 +1,14 @@ +-----BEGIN PGP SIGNATURE----- + +iQGzBAABCAAdFiEEReTtXCh9VkDlzgVFf96UeDvg/LgFAmZ9KcwACgkQf96UeDvg +/LgJFgv9HUvWiz5zsiApKLywvtxIwXcSD1P2Dab+DLb0kU+4D08TW9eLtCsNuNZW +EVjnDPGLYg+C8iBm3K/ilzZpige+Ux1R/YDpUmSwTcHo/NgmTzNyWr2YG6765JsU +3f4BcEBG3OLueUYv7j4vE2LL065mf/4etYiE4r/X4i0GLfYzImgl+O93hPPHqKEp +XcC1h88nz7Fz6H8RCJYvV9fYzXbs+7CZy0D8qlvUEEsxHH+6EGfRzvO7OTs5jSho +9g0FlXoK4Dh6+RrcgAotukjUWS3dMVvLqnDbKd98qClDrirSveceQulGdAVPdOU1 +Uf6EeZlwJma9P13Cud+zjlGoc5MjLA+LCYVtjNP82ooZTo68JERlhW+WGv1tePjg +bFioSNP5FcadR79Hf7PrDIWkqQUVyow34dnGBdCnAYPtP9HKiDhZNOJulZOvT5BM +5R8pXjHOwx9etHsck87RbyfGqXw8bFun0cbqUWC5ufe16shfisT3qriI6OYXRX3X +RBC+9hkj +=0Xq6 +-----END PGP SIGNATURE----- diff --git a/easy-trans-service/src/main/java/com/fhs/trans/utils/TransUtil.java b/easy-trans-service/src/main/java/com/fhs/trans/utils/TransUtil.java index 0cf888e..95fe7cd 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/utils/TransUtil.java +++ b/easy-trans-service/src/main/java/com/fhs/trans/utils/TransUtil.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.annotation.JSONField; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fhs.common.utils.ConverterUtils; import com.fhs.common.utils.StringUtil; +import com.fhs.core.trans.anno.IgnoreTrans; import com.fhs.core.trans.util.ReflectUtils; import com.fhs.core.trans.vo.VO; import com.fhs.trans.service.impl.TransService; @@ -217,7 +218,12 @@ public class TransUtil { } } } - if (java.lang.reflect.Modifier.isFinal(field.getModifiers()) || java.lang.reflect.Modifier.isStatic(field.getModifiers())) { + // 如果主动忽略了,final static java开头 不翻译此字段 + if (java.lang.reflect.Modifier.isFinal(field.getModifiers()) + || java.lang.reflect.Modifier.isStatic(field.getModifiers()) + || field.isAnnotationPresent(IgnoreTrans.class) + || object.getClass().getName().startsWith("java.") + ) { continue; } field.setAccessible(true); diff --git a/pom.xml b/pom.xml index 68e326b..0a5f8d8 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ easy-trans-dependencies - 3.0.5 + 3.0.6 UTF-8 17 17 -- Gitee From 8fefa1c2df399774da0660d28f3ca36a5c660ea9 Mon Sep 17 00:00:00 2001 From: wanglei <921888199@qq.com> Date: Tue, 27 Aug 2024 17:59:35 +0800 Subject: [PATCH 18/38] =?UTF-8?q?readme=E4=B8=AD=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B=E4=BB=A3=E7=A0=81=E5=8C=85=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../target/easy-trans-dependencies-3.0.6.pom | 54 +++++++++++++++++++ .../easy-trans-dependencies-3.0.6.pom.asc | 14 +++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.6.pom create mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.6.pom.asc diff --git a/README.md b/README.md index b991b1e..e0c142e 100644 --- a/README.md +++ b/README.md @@ -184,7 +184,7 @@ public class Student implements TransPojo { private String schoolId; //远程翻译,调用其他微服务的数据源进行翻译 - @Trans(type = TransType.RPC,targetClassName = "com.fhs.test.pojo.School",fields = "schoolName",serviceName = "easyTrans",alias = "middle") + @Trans(type = TransType.RPC,targetClassName = "pojo.com.xhb.test.School",fields = "schoolName",serviceName = "easyTrans",alias = "middle") private String middleSchoolId; // 枚举翻译,返回文科还是理科给前端 diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.6.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.6.pom new file mode 100644 index 0000000..51a0cbd --- /dev/null +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.6.pom @@ -0,0 +1,54 @@ + + + 4.0.0 + + com.fhs-opensource + easy-trans + 3.0.6 + + com.fhs-opensource + easy-trans-dependencies + 3.0.6 + pom + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + + + + + com.fhs-opensource + easy-trans-anno + ${revision} + + + com.fhs-opensource + easy-trans-spring-boot-starter + ${revision} + + + com.fhs-opensource + easy-trans-beetl-sql-extend + ${revision} + + + com.fhs-opensource + easy-trans-mybatis-plus-extend + ${revision} + + + com.fhs-opensource + easy-trans-mybatis-flex-extend + ${revision} + + + com.fhs-opensource + easy-trans-tk-extend + ${revision} + + + + diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.6.pom.asc b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.6.pom.asc new file mode 100644 index 0000000..33c0b71 --- /dev/null +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.6.pom.asc @@ -0,0 +1,14 @@ +-----BEGIN PGP SIGNATURE----- + +iQGzBAABCAAdFiEEReTtXCh9VkDlzgVFf96UeDvg/LgFAmbDA2oACgkQf96UeDvg +/Lj8cAwAyGp+jzR37X3uRfszsZ4R77LhkcgvwhxKTzcVS6NuIYhaMJ0puLzPXwAd +K8hHZuQgNTpSpXpqXXXeK1TWmMtdAV8jT/usvPPow3QEJsU/ZmkyFoYT9QCzl1wO +I2cC5L2oZ4Sfp5EyjvpXasQQ0nSFEEBlYVLh1AQZ8zZJu/pc/+YjB2KDd2DOYxiC +x8e+oLXBB4ehkaK9IH9USD/EQJjhx8tOKr3QLawVTbIZc8ZFrZzAgpMvjrvYuKM1 +DuAwZgq2rbq+wtzAkgU1ApTfj4/3/+WI+UI5pN/O06N+JIdff7S36PNr+rhlzqfG +I2koyAXrWiZgf8KG9n0M9NYxWRr2mmiWNrgQrSFO64qM96vGzGfz7Xol7sjdKM7v +Pmt4yN5ia/LsAbS5bGMJTFRZ7/RVjFsbHsfuu8+b9LFiHl2CmdeyZP1jzHCRltCQ +QDS5thq2rILAijIrjt6dZmZV9fZ4B5x3+Z6aVSxF9xNR+TKVHVdlD9ARfBSKo8Ns +IgE3xycF +=RVTv +-----END PGP SIGNATURE----- -- Gitee From 9bc026ba43e144fca8d832e326cef9e780250e56 Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Wed, 28 Aug 2024 08:14:27 +0000 Subject: [PATCH 19/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e0c142e..b0aab76 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,25 @@ TK Mybatis(通用mapper) 扩展: ``` -mybatis-flex和easy-query 也已经添加了支持,在项目里找对应的扩展引用就好了 +easy-query 扩展: +``` xml + + com.fhs-opensource + easy-trans-easy-query-extend + 2.2.17 + +``` + +mybatis-flex 扩展: +``` xml + + com.fhs-opensource + easy-trans-mybatis-flex-extend + 2.2.17 + +``` + + 如果使用Redis请添加redis的引用(如果之前加过了请不要重复添加) ``` xml -- Gitee From b910461ed9533e4fbb3db1e4f1670c8a45931a79 Mon Sep 17 00:00:00 2001 From: wanglei <921888199@qq.com> Date: Wed, 28 Aug 2024 16:35:43 +0800 Subject: [PATCH 20/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0addtional-spring-config?= =?UTF-8?q?uration-metadata.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../target/easy-trans-dependencies-3.0.1.pom | 59 ------------------- .../easy-trans-dependencies-3.0.1.pom.asc | 14 ----- .../target/easy-trans-dependencies-3.0.2.pom | 59 ------------------- .../easy-trans-dependencies-3.0.2.pom.asc | 14 ----- .../target/easy-trans-dependencies-3.0.3.pom | 59 ------------------- .../easy-trans-dependencies-3.0.3.pom.asc | 14 ----- .../target/easy-trans-dependencies-3.0.4.pom | 59 ------------------- .../easy-trans-dependencies-3.0.4.pom.asc | 14 ----- .../target/easy-trans-dependencies-3.0.5.pom | 54 ----------------- .../easy-trans-dependencies-3.0.5.pom.asc | 14 ----- .../target/easy-trans-dependencies-3.0.6.pom | 54 ----------------- .../easy-trans-dependencies-3.0.6.pom.asc | 14 ----- easy-trans-spring-boot-starter/pom.xml | 1 + ...itional-spring-configuration-metadata.json | 51 ++++++++++++++++ pom.xml | 2 +- 15 files changed, 53 insertions(+), 429 deletions(-) delete mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom delete mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom.asc delete mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom delete mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom.asc delete mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom delete mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom.asc delete mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom delete mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom.asc delete mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.5.pom delete mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.5.pom.asc delete mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.6.pom delete mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.0.6.pom.asc create mode 100644 easy-trans-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom deleted file mode 100644 index 0e57d6d..0000000 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom +++ /dev/null @@ -1,59 +0,0 @@ - - - 4.0.0 - - com.fhs-opensource - easy-trans - 3.0.6 - - com.fhs-opensource - easy-trans-dependencies - 3.0.6 - pom - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - - - - - - com.fhs-opensource - easy-trans-anno - ${revision} - - - com.fhs-opensource - easy-trans-spring-boot-starter - ${revision} - - - com.fhs-opensource - easy-trans-beetl-sql-extend - ${revision} - - - com.fhs-opensource - easy-trans-mybatis-plus-extend - ${revision} - - - com.fhs-opensource - easy-trans-mybatis-flex-extend - ${revision} - - - com.fhs-opensource - easy-trans-jpa-extend - ${revision} - - - com.fhs-opensource - easy-trans-tk-extend - ${revision} - - - - diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom.asc b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom.asc deleted file mode 100644 index 54cd7f9..0000000 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.1.pom.asc +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQGzBAABCAAdFiEEReTtXCh9VkDlzgVFf96UeDvg/LgFAmYc+RMACgkQf96UeDvg -/LiHKwv/SSliZSiMSlQmHGNziA8pU/L8gAVKjXXZf8/6u751t6zvDOtsZopcGS1Q -Nd44WOvRbK4cvNiqr/3rLyfkifFphiduVAoMdGd2aZ5ercoCI3Zv+hu1XTy5DJbl -8yegYUI1XAVHCtAXgT6/DV58gm5B9asoQqUJ8FGMkuM1TRNMAbHyQpyZCNSj9hVj -TtHXkUQbOTALMj8cpART7V7kfPgCuXhIQuN2eh20WVfT8lfZ9pt4F7/JzKc9PSx1 -fyxB8UY5uR2A5s6q9CHXpfrzpLI+c5TU3n139pRixTlj5Z7TZf5TPJtPWW0BwtAl -FH5LsQ9aHjhIGmi3hm0D+xdXI+nXsxOIauALNGzSEK9wi0OLBoikgu42GxoeIruL -kW/eRvkPPnyWeJaz0MCj0DCVCw7U1GOW0dg/UB03+k1cJQiQoJdhz6G27zS473fw -Vck4dRq4cM6qB+L9pwfbNUTcZSdF2coDCVyQeNkWgIoQJdQWlg2ctX3Mu4+Xuj45 -2T/TgiEb -=MNK3 ------END PGP SIGNATURE----- diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom deleted file mode 100644 index 0e57d6d..0000000 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom +++ /dev/null @@ -1,59 +0,0 @@ - - - 4.0.0 - - com.fhs-opensource - easy-trans - 3.0.6 - - com.fhs-opensource - easy-trans-dependencies - 3.0.6 - pom - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - - - - - - com.fhs-opensource - easy-trans-anno - ${revision} - - - com.fhs-opensource - easy-trans-spring-boot-starter - ${revision} - - - com.fhs-opensource - easy-trans-beetl-sql-extend - ${revision} - - - com.fhs-opensource - easy-trans-mybatis-plus-extend - ${revision} - - - com.fhs-opensource - easy-trans-mybatis-flex-extend - ${revision} - - - com.fhs-opensource - easy-trans-jpa-extend - ${revision} - - - com.fhs-opensource - easy-trans-tk-extend - ${revision} - - - - diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom.asc b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom.asc deleted file mode 100644 index 32479e5..0000000 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.2.pom.asc +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQGzBAABCAAdFiEEReTtXCh9VkDlzgVFf96UeDvg/LgFAmYc+60ACgkQf96UeDvg -/Lj8JQwAotRYbtEnTASduqnnLhlZoPhMRT0vVPCV7WePGoG42/8HwOQBIWBI6mY3 -7AFA/T/hqsDvk0Nx6RtQLneyDADYXdmNJLLf6TXE6ClDhR2zgBCQH5SlTOzjl+Ze -+1tDdnfUWg2v2oVM0EfCVV7IlUKFzb/KPHFBDuynPsICthEiJyy8Y8NTPw30kFhP -0smF+RgykvpwXJFpMrutr+2+MujcDiB0JgHvFrSY394t6GxkmC2dQjw9kb5r1JmU -2pAO7144LD5U0SEW+8ZL2etjrx3FNSgiioTJO152zNkGFGc+PsGmWP255dovez8+ -vf7OfnzAwEZIzV3Jalq0ldE56sUxg1862l3hw28OKXAMQenlHJ50Al8HSew6CV7z -FMYXfeQuig576gw/M8R42xB+pctKfRdwGQKyAOt3m/OQKUTfOgvgCHQ+tTrHJ2Hk -Ayx4W2OPGnzUaJck9lg9koTJs7kZuCT0ieovpvY4HUmQhB2zI/spgl5ijGn2QfPf -Ojui6UnY -=fyey ------END PGP SIGNATURE----- diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom deleted file mode 100644 index 0e57d6d..0000000 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom +++ /dev/null @@ -1,59 +0,0 @@ - - - 4.0.0 - - com.fhs-opensource - easy-trans - 3.0.6 - - com.fhs-opensource - easy-trans-dependencies - 3.0.6 - pom - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - - - - - - com.fhs-opensource - easy-trans-anno - ${revision} - - - com.fhs-opensource - easy-trans-spring-boot-starter - ${revision} - - - com.fhs-opensource - easy-trans-beetl-sql-extend - ${revision} - - - com.fhs-opensource - easy-trans-mybatis-plus-extend - ${revision} - - - com.fhs-opensource - easy-trans-mybatis-flex-extend - ${revision} - - - com.fhs-opensource - easy-trans-jpa-extend - ${revision} - - - com.fhs-opensource - easy-trans-tk-extend - ${revision} - - - - diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom.asc b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom.asc deleted file mode 100644 index c1a37a8..0000000 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.3.pom.asc +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQGzBAABCAAdFiEEReTtXCh9VkDlzgVFf96UeDvg/LgFAmY8ecMACgkQf96UeDvg -/Liipgv/SpxBFfbac7FIZYxDP16lzulrhRQqclo3jCFuzeKXFaBmjTatjqJRY2z6 -rwwaOricpUTlD/IPBFg3upb3+PLqjR+aCjPUOtyNnWbZjnxXhXBGn47JezM+GJMW -j5X76DoV5gnwHw/4NwY9+VHnFbpdAEhWqCnzhMnTqcEn/EsNxBgDTrFch4zxFT0N -LG+FhGc4E/G9HK+IbkSL4oHvG5LB7EhfI2oqG/dOyPDzJT7WPI2Tr2jjeZMfPl9O -PjBR2tnLCZj7H8bepyZNQcGbZqclHsuKIPiN7yRR/ufeHSjUntzatEtQQV+G97i8 -ozZAhkXhyxZERXDbfUDfuz/GOsOkNOeP7/4K5Btyy67KkKY5ZQf7NKdw1HRoFaGX -vcwMdOWSx1z73xQfCBS10HuyJ8wJWaStKAmFwsv0Kxm1PZ5LCiOHj4HnTsge9gAt -hP171woLUYXH4ZqRve1u6PxsoXuA4Wt5Ng/aSc0YhLLBkLzA9T5T4CGX0c+zpnhd -T6dQTABh -=xby9 ------END PGP SIGNATURE----- diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom deleted file mode 100644 index 0e57d6d..0000000 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom +++ /dev/null @@ -1,59 +0,0 @@ - - - 4.0.0 - - com.fhs-opensource - easy-trans - 3.0.6 - - com.fhs-opensource - easy-trans-dependencies - 3.0.6 - pom - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - - - - - - com.fhs-opensource - easy-trans-anno - ${revision} - - - com.fhs-opensource - easy-trans-spring-boot-starter - ${revision} - - - com.fhs-opensource - easy-trans-beetl-sql-extend - ${revision} - - - com.fhs-opensource - easy-trans-mybatis-plus-extend - ${revision} - - - com.fhs-opensource - easy-trans-mybatis-flex-extend - ${revision} - - - com.fhs-opensource - easy-trans-jpa-extend - ${revision} - - - com.fhs-opensource - easy-trans-tk-extend - ${revision} - - - - diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom.asc b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom.asc deleted file mode 100644 index 3035f99..0000000 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.4.pom.asc +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQGzBAABCAAdFiEEReTtXCh9VkDlzgVFf96UeDvg/LgFAmZXBzcACgkQf96UeDvg -/LhFvQv/fZhymHYvFK4+kGLMk0P994tVRU2FBEs00V/uQviewEBKl0+6HWfglcM6 -aPCrYh0HrUZYlGI3bdYYrJ9B2bozHl8C1Z+es2kApw9nh02r7rUzlt8VxtYsKbFb -leTO79c2fbMU095OGI0ydMHkYtobeobVyUw5OBhGsZ+EJ1ZxkR5W+C5IFaV/rreW -eNBiA8s374v7O2fwkGmNXK+3CD7KF5L099D+UWP/Wxe3NLMia7EJ6J//Jn696WJ6 -653VqplgTlX97mTXBCb4b/oU9l/ByK5kTuEiCUyMuVPICImTtriRdG18lAVM0cR1 -3GJu+OyhSCulbrUNwLO4bdqlZiBr0HLW2HC9cvs2ezovirRYpk+8Q2WlakshvVY+ -k3y0sHlzRFh+bbrrrwdSFtRTPv0cpYK51f6lkzcps4PZJSyq98RhIuFLOo8Ik6Wv -mtp5buZuBTVinni4PG6maRmWZ7OeF7Gr4zm108gbj3YF5uuV7v09GQgM2bqvLnSy -ii79KZjC -=TrBj ------END PGP SIGNATURE----- diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.5.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.5.pom deleted file mode 100644 index 51a0cbd..0000000 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.5.pom +++ /dev/null @@ -1,54 +0,0 @@ - - - 4.0.0 - - com.fhs-opensource - easy-trans - 3.0.6 - - com.fhs-opensource - easy-trans-dependencies - 3.0.6 - pom - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - - - - - - com.fhs-opensource - easy-trans-anno - ${revision} - - - com.fhs-opensource - easy-trans-spring-boot-starter - ${revision} - - - com.fhs-opensource - easy-trans-beetl-sql-extend - ${revision} - - - com.fhs-opensource - easy-trans-mybatis-plus-extend - ${revision} - - - com.fhs-opensource - easy-trans-mybatis-flex-extend - ${revision} - - - com.fhs-opensource - easy-trans-tk-extend - ${revision} - - - - diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.5.pom.asc b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.5.pom.asc deleted file mode 100644 index fc4b344..0000000 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.5.pom.asc +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQGzBAABCAAdFiEEReTtXCh9VkDlzgVFf96UeDvg/LgFAmZ9KcwACgkQf96UeDvg -/LgJFgv9HUvWiz5zsiApKLywvtxIwXcSD1P2Dab+DLb0kU+4D08TW9eLtCsNuNZW -EVjnDPGLYg+C8iBm3K/ilzZpige+Ux1R/YDpUmSwTcHo/NgmTzNyWr2YG6765JsU -3f4BcEBG3OLueUYv7j4vE2LL065mf/4etYiE4r/X4i0GLfYzImgl+O93hPPHqKEp -XcC1h88nz7Fz6H8RCJYvV9fYzXbs+7CZy0D8qlvUEEsxHH+6EGfRzvO7OTs5jSho -9g0FlXoK4Dh6+RrcgAotukjUWS3dMVvLqnDbKd98qClDrirSveceQulGdAVPdOU1 -Uf6EeZlwJma9P13Cud+zjlGoc5MjLA+LCYVtjNP82ooZTo68JERlhW+WGv1tePjg -bFioSNP5FcadR79Hf7PrDIWkqQUVyow34dnGBdCnAYPtP9HKiDhZNOJulZOvT5BM -5R8pXjHOwx9etHsck87RbyfGqXw8bFun0cbqUWC5ufe16shfisT3qriI6OYXRX3X -RBC+9hkj -=0Xq6 ------END PGP SIGNATURE----- diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.6.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.6.pom deleted file mode 100644 index 51a0cbd..0000000 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.6.pom +++ /dev/null @@ -1,54 +0,0 @@ - - - 4.0.0 - - com.fhs-opensource - easy-trans - 3.0.6 - - com.fhs-opensource - easy-trans-dependencies - 3.0.6 - pom - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - - - - - - com.fhs-opensource - easy-trans-anno - ${revision} - - - com.fhs-opensource - easy-trans-spring-boot-starter - ${revision} - - - com.fhs-opensource - easy-trans-beetl-sql-extend - ${revision} - - - com.fhs-opensource - easy-trans-mybatis-plus-extend - ${revision} - - - com.fhs-opensource - easy-trans-mybatis-flex-extend - ${revision} - - - com.fhs-opensource - easy-trans-tk-extend - ${revision} - - - - diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.6.pom.asc b/easy-trans-dependencies/target/easy-trans-dependencies-3.0.6.pom.asc deleted file mode 100644 index 33c0b71..0000000 --- a/easy-trans-dependencies/target/easy-trans-dependencies-3.0.6.pom.asc +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQGzBAABCAAdFiEEReTtXCh9VkDlzgVFf96UeDvg/LgFAmbDA2oACgkQf96UeDvg -/Lj8cAwAyGp+jzR37X3uRfszsZ4R77LhkcgvwhxKTzcVS6NuIYhaMJ0puLzPXwAd -K8hHZuQgNTpSpXpqXXXeK1TWmMtdAV8jT/usvPPow3QEJsU/ZmkyFoYT9QCzl1wO -I2cC5L2oZ4Sfp5EyjvpXasQQ0nSFEEBlYVLh1AQZ8zZJu/pc/+YjB2KDd2DOYxiC -x8e+oLXBB4ehkaK9IH9USD/EQJjhx8tOKr3QLawVTbIZc8ZFrZzAgpMvjrvYuKM1 -DuAwZgq2rbq+wtzAkgU1ApTfj4/3/+WI+UI5pN/O06N+JIdff7S36PNr+rhlzqfG -I2koyAXrWiZgf8KG9n0M9NYxWRr2mmiWNrgQrSFO64qM96vGzGfz7Xol7sjdKM7v -Pmt4yN5ia/LsAbS5bGMJTFRZ7/RVjFsbHsfuu8+b9LFiHl2CmdeyZP1jzHCRltCQ -QDS5thq2rILAijIrjt6dZmZV9fZ4B5x3+Z6aVSxF9xNR+TKVHVdlD9ARfBSKo8Ns -IgE3xycF -=RVTv ------END PGP SIGNATURE----- diff --git a/easy-trans-spring-boot-starter/pom.xml b/easy-trans-spring-boot-starter/pom.xml index 12748b6..554f52b 100644 --- a/easy-trans-spring-boot-starter/pom.xml +++ b/easy-trans-spring-boot-starter/pom.xml @@ -26,6 +26,7 @@ org.springframework.cloud spring-cloud-commons + true diff --git a/easy-trans-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/easy-trans-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json new file mode 100644 index 0000000..5e03ff9 --- /dev/null +++ b/easy-trans-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -0,0 +1,51 @@ +{ + + "properties": [ + { + "defaultValue": false, + "name": "easy-trans.is-enable-redis", + "description": "是否使用redis", + "type": "java.lang.Boolean" + }, + { + "defaultValue": false, + "name": "easy-trans.is-enable-global", + "description": "是否开启全局翻译,开启后所有的application/json的返回都是尝试翻译", + "type": "java.lang.Boolean" + }, + { + "defaultValue": false, + "name": "easy-trans.is-enable-tile", + "description": "是否开启平铺,并发量大的系统不推荐开启", + "type": "java.lang.Boolean" + }, + { + "defaultValue": false, + "name": "easy-trans.dict-use-redis", + "description": "字典是否放到redis中,微服务模式推荐开启", + "type": "java.lang.Boolean" + }, + { + "defaultValue": false, + "name": "easy-trans.is-enable-map-result", + "description": "如果方法返回值是map,是否还要遍历map进行翻译,ruoyi相关的框架需要打开", + "type": "java.lang.Boolean" + }, + { + "defaultValue": "mysql", + "name": "easy-trans.db-type", + "description": "数据库类型", + "type": "java.lang.String" + },{ + "defaultValue": false, + "name": "easy-trans.mp-new", + "description": "是否是新版本的mybatis plus,MP为 3.5.3.2版本以上的3.x 版本请设置为true", + "type": "java.lang.Boolean" + },{ + "defaultValue": false, + "name": "easy-trans.is-enable-custom-rpc", + "description": "是否控制rpc翻译的权限,标记了 @RpcTrans注解的才能被RPC翻译", + "type": "java.lang.Boolean" + } + ] +} diff --git a/pom.xml b/pom.xml index 0a5f8d8..d93a3a5 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ easy-trans-dependencies - 3.0.6 + 3.0.7 UTF-8 17 17 -- Gitee From b4332dfd7ed5c9a8f74da3ada4e8dd75f88025a5 Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Thu, 29 Aug 2024 08:04:36 +0000 Subject: [PATCH 21/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b0aab76..b0e715f 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ https://gitee.com/fhs-opensource/vite_press_easy_trans 5 我有一个唯一键(比如手机号,身份证号码,但是非其他表id字段),但是我需要给客户展示他的title/name 但是我又不想自己手动做表关联查询 6 Excel导入场景,把 用户名 admin 反向翻译为 userid1 把男 反向翻译为 gender_1 (具体看官网文档) # 最新版本 -springboot3.x 最新easy-trans版本:3.0.6 springboot 2.x 最新easy-trans版本 2.2.15 +springboot3.x 最新easy-trans版本:3.0.6 springboot 2.x 最新easy-trans版本 2.2.17 # 食用步骤 -- Gitee From 4a28c2fb614338872dd9719f8b1ecfc155706b90 Mon Sep 17 00:00:00 2001 From: wanglei <921888199@qq.com> Date: Mon, 21 Oct 2024 16:18:41 +0800 Subject: [PATCH 22/38] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8C=85=E5=90=8D?= =?UTF-8?q?=E4=B8=BAorg.dromara?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 16 ++++---- easy-trans-anno/pom.xml | 2 +- .../dromara}/core/trans/anno/AutoTrans.java | 4 +- .../dromara}/core/trans/anno/IgnoreTrans.java | 2 +- .../dromara}/core/trans/anno/RpcTrans.java | 2 +- .../dromara}/core/trans/anno/Trans.java | 6 +-- .../core/trans/anno/TransCacheType.java | 2 +- .../core/trans/anno/TransDefaultSett.java | 2 +- .../core/trans/anno/TransMethodResult.java | 2 +- .../dromara}/core/trans/anno/TransSett.java | 2 +- .../dromara}/core/trans/anno/UnTrans.java | 5 +-- .../core/trans/constant/TransType.java | 2 +- .../core/trans/constant/UnTransType.java | 2 +- .../dromara}/core/trans/convert/Convert.java | 2 +- .../core/trans/convert/SimpleConvert.java | 6 ++- .../dromara}/core/trans/util/ConvertUtil.java | 6 +-- .../core/trans/util/ReflectUtils.java | 4 +- .../dromara}/core/trans/vo/TransPojo.java | 2 +- .../fhs => org/dromara}/core/trans/vo/VO.java | 4 +- easy-trans-beetl-sql-extend/pom.xml | 4 +- .../trans/config/EasyTransBeetlSqlConfig.java | 7 ++-- .../trans/extend/BeetlSqlTransDiver.java | 6 +-- .../main/resources/META-INF/spring.factories | 2 +- ...ot.autoconfigure.AutoConfiguration.imports | 2 +- easy-trans-dependencies/pom.xml | 14 +++---- easy-trans-easy-query-extend/pom.xml | 4 +- .../dromara}/trans/anno/Id4Trans.java | 2 +- .../config/EasyTransEasyQueryConfig.java | 8 ++-- .../extend/EasyQuerySimpleTransDiver.java | 7 ++-- .../main/resources/META-INF/spring.factories | 2 +- ...ot.autoconfigure.AutoConfiguration.imports | 2 +- easy-trans-jpa-sb3-extend/pom.xml | 4 +- .../trans/config/EasyTransJPA3Config.java | 8 ++-- .../trans/extend/JPA3SimpleTransDiver.java | 8 ++-- .../trans/extend/JPA3TransableAdapter.java | 8 ++-- .../trans/extend/JPA3TransableRegister.java | 12 +++--- .../main/resources/META-INF/spring.factories | 2 +- ...ot.autoconfigure.AutoConfiguration.imports | 2 +- easy-trans-mybatis-flex-extend/pom.xml | 4 +- .../config/EasyTransMybatisFlexConfig.java | 8 ++-- .../extend/MybatisFlexSimpleTransDiver.java | 8 ++-- .../extend/MybatisFlexTransableAdapter.java | 6 +-- .../extend/MybatisFlexTransableRegister.java | 12 +++--- .../main/resources/META-INF/spring.factories | 2 +- ...ot.autoconfigure.AutoConfiguration.imports | 2 +- easy-trans-mybatis-plus-extend/pom.xml | 4 +- .../config/EasyTransMybatisPlusConfig.java | 8 ++-- .../extend/MybatisPlusSimpleTransDiver.java | 11 +++-- .../extend/MybatisPlusTransableAdapter.java | 6 +-- .../extend/MybatisPlusTransableRegister.java | 12 +++--- .../main/resources/META-INF/spring.factories | 2 +- ...ot.autoconfigure.AutoConfiguration.imports | 2 +- easy-trans-service/pom.xml | 4 +- .../cache/service/BothCacheService.java | 6 +-- .../cache/service/RedisCacheService.java | 6 +-- .../cache/service/TransCacheManager.java | 14 +++---- .../dromara}/common/constant/Constant.java | 2 +- .../dromara}/common/constant/TransConfig.java | 4 +- .../spring/AnnotationTypeFilterBuilder.java | 2 +- .../dromara}/common/spring/ScannerUtils.java | 2 +- .../dromara}/common/spring/SpelUtil.java | 4 +- .../common/spring/SpringClassScanner.java | 2 +- .../common/spring/SpringContextUtil.java | 3 +- .../dromara}/common/utils/CheckUtils.java | 6 +-- .../dromara}/common/utils/ConverterUtils.java | 2 +- .../dromara}/common/utils/JsonUtils.java | 5 +-- .../dromara}/common/utils/StringUtil.java | 4 +- .../dromara}/exception/ParamException.java | 2 +- .../advice/EasyTransResponseBodyAdvice.java | 11 +++-- .../trans/advice/ReleaseTransCacheAdvice.java | 4 +- .../trans/aop/TransMethodResultAop.java | 13 +++--- .../controller/TransProxyController.java | 18 ++++---- .../dromara}/trans/ds/DataSourceSetter.java | 2 +- .../dromara}/trans/fi/LocaleGetter.java | 2 +- .../dromara}/trans/fi/TransRefresher.java | 2 +- .../trans/listener/TransMessageListener.java | 7 ++-- .../dromara}/trans/manager/CacheManager.java | 2 +- .../dromara}/trans/manager/ClassInfo.java | 8 ++-- .../dromara}/trans/manager/ClassManager.java | 4 +- .../dromara}/trans/service/AutoTransable.java | 4 +- .../trans/service/impl/AutoTransService.java | 31 +++++++------- .../service/impl/DictionaryTransService.java | 29 +++++++------ .../trans/service/impl/EnumTransService.java | 15 +++---- .../trans/service/impl/ITransTypeService.java | 17 ++++---- .../trans/service/impl/RpcTransService.java | 17 ++++---- .../service/impl/SimpleTransService.java | 41 ++++++++++--------- .../trans/service/impl/TransService.java | 10 ++--- .../dromara}/trans/utils/TransUtil.java | 14 +++---- .../fhs => org/dromara}/trans/vo/BasicVO.java | 4 +- .../trans/vo/FindByIdsQueryPayload.java | 2 +- easy-trans-spring-boot-starter/pom.xml | 4 +- .../trans/config/TransServiceConfig.java | 34 +++++++-------- .../main/resources/META-INF/spring.factories | 2 +- ...ot.autoconfigure.AutoConfiguration.imports | 2 +- easy-trans-tk-extend/pom.xml | 4 +- .../trans/config/EasyTransTKConfig.java | 7 ++-- .../trans/extend/TKSimpleTransDiver.java | 14 +++---- .../main/resources/META-INF/spring.factories | 2 +- ...ot.autoconfigure.AutoConfiguration.imports | 2 +- easy-trans-untrans-driver/pom.xml | 4 +- .../untrans/config/UnTransDriverConfig.java | 5 +-- .../untrans/driver/CommonUnTransDriver.java | 8 ++-- .../dromara}/trans/untrans/util/DBUtil.java | 2 +- .../main/resources/META-INF/spring.factories | 2 +- ...ot.autoconfigure.AutoConfiguration.imports | 2 +- pom.xml | 8 ++-- 106 files changed, 330 insertions(+), 361 deletions(-) rename easy-trans-anno/src/main/java/{com/fhs => org/dromara}/core/trans/anno/AutoTrans.java (95%) rename easy-trans-anno/src/main/java/{com/fhs => org/dromara}/core/trans/anno/IgnoreTrans.java (90%) rename easy-trans-anno/src/main/java/{com/fhs => org/dromara}/core/trans/anno/RpcTrans.java (91%) rename easy-trans-anno/src/main/java/{com/fhs => org/dromara}/core/trans/anno/Trans.java (94%) rename easy-trans-anno/src/main/java/{com/fhs => org/dromara}/core/trans/anno/TransCacheType.java (84%) rename easy-trans-anno/src/main/java/{com/fhs => org/dromara}/core/trans/anno/TransDefaultSett.java (97%) rename easy-trans-anno/src/main/java/{com/fhs => org/dromara}/core/trans/anno/TransMethodResult.java (90%) rename easy-trans-anno/src/main/java/{com/fhs => org/dromara}/core/trans/anno/TransSett.java (92%) rename easy-trans-anno/src/main/java/{com/fhs => org/dromara}/core/trans/anno/UnTrans.java (89%) rename easy-trans-anno/src/main/java/{com/fhs => org/dromara}/core/trans/constant/TransType.java (91%) rename easy-trans-anno/src/main/java/{com/fhs => org/dromara}/core/trans/constant/UnTransType.java (85%) rename easy-trans-anno/src/main/java/{com/fhs => org/dromara}/core/trans/convert/Convert.java (72%) rename easy-trans-anno/src/main/java/{com/fhs => org/dromara}/core/trans/convert/SimpleConvert.java (89%) rename easy-trans-anno/src/main/java/{com/fhs => org/dromara}/core/trans/util/ConvertUtil.java (70%) rename easy-trans-anno/src/main/java/{com/fhs => org/dromara}/core/trans/util/ReflectUtils.java (98%) rename easy-trans-anno/src/main/java/{com/fhs => org/dromara}/core/trans/vo/TransPojo.java (78%) rename easy-trans-anno/src/main/java/{com/fhs => org/dromara}/core/trans/vo/VO.java (95%) rename easy-trans-beetl-sql-extend/src/main/java/{com/fhs => org/dromara}/trans/config/EasyTransBeetlSqlConfig.java (84%) rename easy-trans-beetl-sql-extend/src/main/java/{com/fhs => org/dromara}/trans/extend/BeetlSqlTransDiver.java (88%) rename easy-trans-easy-query-extend/src/main/java/{com/fhs => org/dromara}/trans/anno/Id4Trans.java (89%) rename easy-trans-easy-query-extend/src/main/java/{com/fhs => org/dromara}/trans/config/EasyTransEasyQueryConfig.java (79%) rename easy-trans-easy-query-extend/src/main/java/{com/fhs => org/dromara}/trans/extend/EasyQuerySimpleTransDiver.java (94%) rename easy-trans-jpa-sb3-extend/src/main/java/{com/fhs => org/dromara}/trans/config/EasyTransJPA3Config.java (86%) rename easy-trans-jpa-sb3-extend/src/main/java/{com/fhs => org/dromara}/trans/extend/JPA3SimpleTransDiver.java (92%) rename easy-trans-jpa-sb3-extend/src/main/java/{com/fhs => org/dromara}/trans/extend/JPA3TransableAdapter.java (90%) rename easy-trans-jpa-sb3-extend/src/main/java/{com/fhs => org/dromara}/trans/extend/JPA3TransableRegister.java (88%) rename easy-trans-mybatis-flex-extend/src/main/java/{com/fhs => org/dromara}/trans/config/EasyTransMybatisFlexConfig.java (85%) rename easy-trans-mybatis-flex-extend/src/main/java/{com/fhs => org/dromara}/trans/extend/MybatisFlexSimpleTransDiver.java (95%) rename easy-trans-mybatis-flex-extend/src/main/java/{com/fhs => org/dromara}/trans/extend/MybatisFlexTransableAdapter.java (89%) rename easy-trans-mybatis-flex-extend/src/main/java/{com/fhs => org/dromara}/trans/extend/MybatisFlexTransableRegister.java (89%) rename easy-trans-mybatis-plus-extend/src/main/java/{com/fhs => org/dromara}/trans/config/EasyTransMybatisPlusConfig.java (85%) rename easy-trans-mybatis-plus-extend/src/main/java/{com/fhs => org/dromara}/trans/extend/MybatisPlusSimpleTransDiver.java (96%) rename easy-trans-mybatis-plus-extend/src/main/java/{com/fhs => org/dromara}/trans/extend/MybatisPlusTransableAdapter.java (95%) rename easy-trans-mybatis-plus-extend/src/main/java/{com/fhs => org/dromara}/trans/extend/MybatisPlusTransableRegister.java (88%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/cache/service/BothCacheService.java (93%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/cache/service/RedisCacheService.java (92%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/cache/service/TransCacheManager.java (85%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/common/constant/Constant.java (99%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/common/constant/TransConfig.java (75%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/common/spring/AnnotationTypeFilterBuilder.java (92%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/common/spring/ScannerUtils.java (97%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/common/spring/SpelUtil.java (97%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/common/spring/SpringClassScanner.java (99%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/common/spring/SpringContextUtil.java (99%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/common/utils/CheckUtils.java (98%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/common/utils/ConverterUtils.java (99%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/common/utils/JsonUtils.java (98%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/common/utils/StringUtil.java (99%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/exception/ParamException.java (86%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/advice/EasyTransResponseBodyAdvice.java (90%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/advice/ReleaseTransCacheAdvice.java (89%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/aop/TransMethodResultAop.java (89%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/controller/TransProxyController.java (92%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/ds/DataSourceSetter.java (93%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/fi/LocaleGetter.java (85%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/fi/TransRefresher.java (92%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/listener/TransMessageListener.java (89%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/manager/CacheManager.java (91%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/manager/ClassInfo.java (96%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/manager/ClassManager.java (95%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/service/AutoTransable.java (92%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/service/impl/AutoTransService.java (96%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/service/impl/DictionaryTransService.java (93%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/service/impl/EnumTransService.java (85%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/service/impl/ITransTypeService.java (97%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/service/impl/RpcTransService.java (94%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/service/impl/SimpleTransService.java (95%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/service/impl/TransService.java (97%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/utils/TransUtil.java (97%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/vo/BasicVO.java (80%) rename easy-trans-service/src/main/java/{com/fhs => org/dromara}/trans/vo/FindByIdsQueryPayload.java (87%) rename easy-trans-spring-boot-starter/src/main/java/{com/fhs => org/dromara}/trans/config/TransServiceConfig.java (90%) rename easy-trans-tk-extend/src/main/java/{com/fhs => org/dromara}/trans/config/EasyTransTKConfig.java (84%) rename easy-trans-tk-extend/src/main/java/{com/fhs => org/dromara}/trans/extend/TKSimpleTransDiver.java (93%) rename easy-trans-untrans-driver/src/main/java/{com/fhs => org/dromara}/trans/untrans/config/UnTransDriverConfig.java (67%) rename easy-trans-untrans-driver/src/main/java/{com/fhs => org/dromara}/trans/untrans/driver/CommonUnTransDriver.java (87%) rename easy-trans-untrans-driver/src/main/java/{com/fhs => org/dromara}/trans/untrans/util/DBUtil.java (97%) diff --git a/README.md b/README.md index b0aab76..8786151 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ springboot3.x 最新easy-trans版本:3.0.6 springboot 2.x 最新easy-trans版 starter--必须!!! ``` xml - com.fhs-opensource + org.dromara easy-trans-spring-boot-starter 2.2.9 @@ -70,7 +70,7 @@ starter--必须!!! Mybatis plus 扩展: ``` xml - com.fhs-opensource + org.dromara easy-trans-mybatis-plus-extend 2.2.9 @@ -78,7 +78,7 @@ starter--必须!!! JPA 扩展: ``` xml - com.fhs-opensource + org.dromara easy-trans-jpa-extend 2.2.9 @@ -86,7 +86,7 @@ starter--必须!!! JPA SpringBoot3 扩展(本扩如果没bug后面发布版本不在更新版本号): ``` xml - com.fhs-opensource + org.dromara easy-trans-jpa-sb3-extend 2.2.3 @@ -94,7 +94,7 @@ starter--必须!!! Beetl SQL 扩展: ``` xml - com.fhs-opensource + org.dromara easy-trans-beetl-sql-extend 2.2.9 @@ -102,7 +102,7 @@ Beetl SQL 扩展: TK Mybatis(通用mapper) 扩展: ``` xml - com.fhs-opensource + org.dromara easy-trans-tk-extend 2.2.9 @@ -111,7 +111,7 @@ TK Mybatis(通用mapper) 扩展: easy-query 扩展: ``` xml - com.fhs-opensource + org.dromara easy-trans-easy-query-extend 2.2.17 @@ -120,7 +120,7 @@ easy-query 扩展: mybatis-flex 扩展: ``` xml - com.fhs-opensource + org.dromara easy-trans-mybatis-flex-extend 2.2.17 diff --git a/easy-trans-anno/pom.xml b/easy-trans-anno/pom.xml index aa2c905..38f6e3c 100644 --- a/easy-trans-anno/pom.xml +++ b/easy-trans-anno/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - com.fhs-opensource + org.dromara easy-trans ${revision} diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/AutoTrans.java b/easy-trans-anno/src/main/java/org/dromara/core/trans/anno/AutoTrans.java similarity index 95% rename from easy-trans-anno/src/main/java/com/fhs/core/trans/anno/AutoTrans.java rename to easy-trans-anno/src/main/java/org/dromara/core/trans/anno/AutoTrans.java index 62b07bf..35b6a36 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/AutoTrans.java +++ b/easy-trans-anno/src/main/java/org/dromara/core/trans/anno/AutoTrans.java @@ -1,6 +1,6 @@ -package com.fhs.core.trans.anno; +package org.dromara.core.trans.anno; -import com.fhs.core.trans.vo.VO; +import org.dromara.core.trans.vo.VO; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/IgnoreTrans.java b/easy-trans-anno/src/main/java/org/dromara/core/trans/anno/IgnoreTrans.java similarity index 90% rename from easy-trans-anno/src/main/java/com/fhs/core/trans/anno/IgnoreTrans.java rename to easy-trans-anno/src/main/java/org/dromara/core/trans/anno/IgnoreTrans.java index 7a1167b..36dbf56 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/IgnoreTrans.java +++ b/easy-trans-anno/src/main/java/org/dromara/core/trans/anno/IgnoreTrans.java @@ -1,4 +1,4 @@ -package com.fhs.core.trans.anno; +package org.dromara.core.trans.anno; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/RpcTrans.java b/easy-trans-anno/src/main/java/org/dromara/core/trans/anno/RpcTrans.java similarity index 91% rename from easy-trans-anno/src/main/java/com/fhs/core/trans/anno/RpcTrans.java rename to easy-trans-anno/src/main/java/org/dromara/core/trans/anno/RpcTrans.java index 77c0c4b..8ac84b0 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/RpcTrans.java +++ b/easy-trans-anno/src/main/java/org/dromara/core/trans/anno/RpcTrans.java @@ -1,4 +1,4 @@ -package com.fhs.core.trans.anno; +package org.dromara.core.trans.anno; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/Trans.java b/easy-trans-anno/src/main/java/org/dromara/core/trans/anno/Trans.java similarity index 94% rename from easy-trans-anno/src/main/java/com/fhs/core/trans/anno/Trans.java rename to easy-trans-anno/src/main/java/org/dromara/core/trans/anno/Trans.java index 678f1d9..fe5a8ae 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/Trans.java +++ b/easy-trans-anno/src/main/java/org/dromara/core/trans/anno/Trans.java @@ -1,7 +1,7 @@ -package com.fhs.core.trans.anno; +package org.dromara.core.trans.anno; -import com.fhs.core.trans.vo.TransPojo; -import com.fhs.core.trans.vo.VO; +import org.dromara.core.trans.vo.TransPojo; +import org.dromara.core.trans.vo.VO; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/TransCacheType.java b/easy-trans-anno/src/main/java/org/dromara/core/trans/anno/TransCacheType.java similarity index 84% rename from easy-trans-anno/src/main/java/com/fhs/core/trans/anno/TransCacheType.java rename to easy-trans-anno/src/main/java/org/dromara/core/trans/anno/TransCacheType.java index 954f2e3..316034d 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/TransCacheType.java +++ b/easy-trans-anno/src/main/java/org/dromara/core/trans/anno/TransCacheType.java @@ -1,4 +1,4 @@ -package com.fhs.core.trans.anno; +package org.dromara.core.trans.anno; /** * 缓存类型 diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/TransDefaultSett.java b/easy-trans-anno/src/main/java/org/dromara/core/trans/anno/TransDefaultSett.java similarity index 97% rename from easy-trans-anno/src/main/java/com/fhs/core/trans/anno/TransDefaultSett.java rename to easy-trans-anno/src/main/java/org/dromara/core/trans/anno/TransDefaultSett.java index 08381c3..27ee312 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/TransDefaultSett.java +++ b/easy-trans-anno/src/main/java/org/dromara/core/trans/anno/TransDefaultSett.java @@ -1,4 +1,4 @@ -package com.fhs.core.trans.anno; +package org.dromara.core.trans.anno; import java.lang.annotation.*; diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/TransMethodResult.java b/easy-trans-anno/src/main/java/org/dromara/core/trans/anno/TransMethodResult.java similarity index 90% rename from easy-trans-anno/src/main/java/com/fhs/core/trans/anno/TransMethodResult.java rename to easy-trans-anno/src/main/java/org/dromara/core/trans/anno/TransMethodResult.java index 6dbd7b8..662623e 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/TransMethodResult.java +++ b/easy-trans-anno/src/main/java/org/dromara/core/trans/anno/TransMethodResult.java @@ -1,4 +1,4 @@ -package com.fhs.core.trans.anno; +package org.dromara.core.trans.anno; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/TransSett.java b/easy-trans-anno/src/main/java/org/dromara/core/trans/anno/TransSett.java similarity index 92% rename from easy-trans-anno/src/main/java/com/fhs/core/trans/anno/TransSett.java rename to easy-trans-anno/src/main/java/org/dromara/core/trans/anno/TransSett.java index 0ba64cf..3964016 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/TransSett.java +++ b/easy-trans-anno/src/main/java/org/dromara/core/trans/anno/TransSett.java @@ -1,4 +1,4 @@ -package com.fhs.core.trans.anno; +package org.dromara.core.trans.anno; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/UnTrans.java b/easy-trans-anno/src/main/java/org/dromara/core/trans/anno/UnTrans.java similarity index 89% rename from easy-trans-anno/src/main/java/com/fhs/core/trans/anno/UnTrans.java rename to easy-trans-anno/src/main/java/org/dromara/core/trans/anno/UnTrans.java index e5ef886..cc1aef8 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/anno/UnTrans.java +++ b/easy-trans-anno/src/main/java/org/dromara/core/trans/anno/UnTrans.java @@ -1,7 +1,4 @@ -package com.fhs.core.trans.anno; - -import com.fhs.core.trans.vo.TransPojo; -import com.fhs.core.trans.vo.VO; +package org.dromara.core.trans.anno; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/constant/TransType.java b/easy-trans-anno/src/main/java/org/dromara/core/trans/constant/TransType.java similarity index 91% rename from easy-trans-anno/src/main/java/com/fhs/core/trans/constant/TransType.java rename to easy-trans-anno/src/main/java/org/dromara/core/trans/constant/TransType.java index 1b67a46..d50ab69 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/constant/TransType.java +++ b/easy-trans-anno/src/main/java/org/dromara/core/trans/constant/TransType.java @@ -1,4 +1,4 @@ -package com.fhs.core.trans.constant; +package org.dromara.core.trans.constant; /** * 翻译类型 diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/constant/UnTransType.java b/easy-trans-anno/src/main/java/org/dromara/core/trans/constant/UnTransType.java similarity index 85% rename from easy-trans-anno/src/main/java/com/fhs/core/trans/constant/UnTransType.java rename to easy-trans-anno/src/main/java/org/dromara/core/trans/constant/UnTransType.java index 5ccd40b..3cbaa0d 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/constant/UnTransType.java +++ b/easy-trans-anno/src/main/java/org/dromara/core/trans/constant/UnTransType.java @@ -1,4 +1,4 @@ -package com.fhs.core.trans.constant; +package org.dromara.core.trans.constant; /** * 翻译类型 diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/convert/Convert.java b/easy-trans-anno/src/main/java/org/dromara/core/trans/convert/Convert.java similarity index 72% rename from easy-trans-anno/src/main/java/com/fhs/core/trans/convert/Convert.java rename to easy-trans-anno/src/main/java/org/dromara/core/trans/convert/Convert.java index 7058537..e6599b6 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/convert/Convert.java +++ b/easy-trans-anno/src/main/java/org/dromara/core/trans/convert/Convert.java @@ -1,4 +1,4 @@ -package com.fhs.core.trans.convert; +package org.dromara.core.trans.convert; public interface Convert { T convert(Object o, Class targetType) throws ClassCastException; diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/convert/SimpleConvert.java b/easy-trans-anno/src/main/java/org/dromara/core/trans/convert/SimpleConvert.java similarity index 89% rename from easy-trans-anno/src/main/java/com/fhs/core/trans/convert/SimpleConvert.java rename to easy-trans-anno/src/main/java/org/dromara/core/trans/convert/SimpleConvert.java index 0f56b0a..7d1b181 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/convert/SimpleConvert.java +++ b/easy-trans-anno/src/main/java/org/dromara/core/trans/convert/SimpleConvert.java @@ -1,10 +1,12 @@ -package com.fhs.core.trans.convert; +package org.dromara.core.trans.convert; + +import org.dromara.core.trans.util.ConvertUtil; import java.math.BigDecimal; /** * 默认转换器,只进行各基本类型包装类的转换 - * 用户可使用{@link com.fhs.core.trans.util.ConvertUtil#setConvert}自定义转换器 + * 用户可使用{@link ConvertUtil#setConvert}自定义转换器 */ public class SimpleConvert implements Convert { @Override diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/util/ConvertUtil.java b/easy-trans-anno/src/main/java/org/dromara/core/trans/util/ConvertUtil.java similarity index 70% rename from easy-trans-anno/src/main/java/com/fhs/core/trans/util/ConvertUtil.java rename to easy-trans-anno/src/main/java/org/dromara/core/trans/util/ConvertUtil.java index 131eb3d..1a40aa0 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/util/ConvertUtil.java +++ b/easy-trans-anno/src/main/java/org/dromara/core/trans/util/ConvertUtil.java @@ -1,7 +1,7 @@ -package com.fhs.core.trans.util; +package org.dromara.core.trans.util; -import com.fhs.core.trans.convert.Convert; -import com.fhs.core.trans.convert.SimpleConvert; +import org.dromara.core.trans.convert.Convert; +import org.dromara.core.trans.convert.SimpleConvert; public class ConvertUtil { private static Convert convert = new SimpleConvert(); diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/util/ReflectUtils.java b/easy-trans-anno/src/main/java/org/dromara/core/trans/util/ReflectUtils.java similarity index 98% rename from easy-trans-anno/src/main/java/com/fhs/core/trans/util/ReflectUtils.java rename to easy-trans-anno/src/main/java/org/dromara/core/trans/util/ReflectUtils.java index c63b91f..2c2d9e8 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/util/ReflectUtils.java +++ b/easy-trans-anno/src/main/java/org/dromara/core/trans/util/ReflectUtils.java @@ -1,7 +1,5 @@ -package com.fhs.core.trans.util; +package org.dromara.core.trans.util; -import com.alibaba.fastjson.annotation.JSONField; -import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.extern.slf4j.Slf4j; import java.lang.annotation.Annotation; diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/vo/TransPojo.java b/easy-trans-anno/src/main/java/org/dromara/core/trans/vo/TransPojo.java similarity index 78% rename from easy-trans-anno/src/main/java/com/fhs/core/trans/vo/TransPojo.java rename to easy-trans-anno/src/main/java/org/dromara/core/trans/vo/TransPojo.java index aa45e55..81d9a65 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/vo/TransPojo.java +++ b/easy-trans-anno/src/main/java/org/dromara/core/trans/vo/TransPojo.java @@ -1,4 +1,4 @@ -package com.fhs.core.trans.vo; +package org.dromara.core.trans.vo; /** * 可被翻译的pojo diff --git a/easy-trans-anno/src/main/java/com/fhs/core/trans/vo/VO.java b/easy-trans-anno/src/main/java/org/dromara/core/trans/vo/VO.java similarity index 95% rename from easy-trans-anno/src/main/java/com/fhs/core/trans/vo/VO.java rename to easy-trans-anno/src/main/java/org/dromara/core/trans/vo/VO.java index 0ac40d2..0fbf387 100644 --- a/easy-trans-anno/src/main/java/com/fhs/core/trans/vo/VO.java +++ b/easy-trans-anno/src/main/java/org/dromara/core/trans/vo/VO.java @@ -1,9 +1,9 @@ -package com.fhs.core.trans.vo; +package org.dromara.core.trans.vo; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fhs.core.trans.util.ReflectUtils; +import org.dromara.core.trans.util.ReflectUtils; import java.lang.reflect.Field; import java.util.*; diff --git a/easy-trans-beetl-sql-extend/pom.xml b/easy-trans-beetl-sql-extend/pom.xml index c043170..1e4a3ce 100644 --- a/easy-trans-beetl-sql-extend/pom.xml +++ b/easy-trans-beetl-sql-extend/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> easy-trans - com.fhs-opensource + org.dromara ${revision} 4.0.0 @@ -18,7 +18,7 @@ - com.fhs-opensource + org.dromara easy-trans-service diff --git a/easy-trans-beetl-sql-extend/src/main/java/com/fhs/trans/config/EasyTransBeetlSqlConfig.java b/easy-trans-beetl-sql-extend/src/main/java/org/dromara/trans/config/EasyTransBeetlSqlConfig.java similarity index 84% rename from easy-trans-beetl-sql-extend/src/main/java/com/fhs/trans/config/EasyTransBeetlSqlConfig.java rename to easy-trans-beetl-sql-extend/src/main/java/org/dromara/trans/config/EasyTransBeetlSqlConfig.java index 15db0c7..e7d1415 100644 --- a/easy-trans-beetl-sql-extend/src/main/java/com/fhs/trans/config/EasyTransBeetlSqlConfig.java +++ b/easy-trans-beetl-sql-extend/src/main/java/org/dromara/trans/config/EasyTransBeetlSqlConfig.java @@ -1,8 +1,7 @@ -package com.fhs.trans.config; +package org.dromara.trans.config; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.extend.BeetlSqlTransDiver; +import org.dromara.core.trans.util.ReflectUtils; +import org.dromara.trans.extend.BeetlSqlTransDiver; import lombok.extern.slf4j.Slf4j; import org.beetl.sql.annotation.entity.AssignID; import org.beetl.sql.core.SQLManager; diff --git a/easy-trans-beetl-sql-extend/src/main/java/com/fhs/trans/extend/BeetlSqlTransDiver.java b/easy-trans-beetl-sql-extend/src/main/java/org/dromara/trans/extend/BeetlSqlTransDiver.java similarity index 88% rename from easy-trans-beetl-sql-extend/src/main/java/com/fhs/trans/extend/BeetlSqlTransDiver.java rename to easy-trans-beetl-sql-extend/src/main/java/org/dromara/trans/extend/BeetlSqlTransDiver.java index 915f4cb..5d16789 100644 --- a/easy-trans-beetl-sql-extend/src/main/java/com/fhs/trans/extend/BeetlSqlTransDiver.java +++ b/easy-trans-beetl-sql-extend/src/main/java/org/dromara/trans/extend/BeetlSqlTransDiver.java @@ -1,7 +1,7 @@ -package com.fhs.trans.extend; +package org.dromara.trans.extend; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.impl.SimpleTransService; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.service.impl.SimpleTransService; import lombok.extern.slf4j.Slf4j; import org.beetl.sql.clazz.kit.BeetlSQLException; import org.beetl.sql.core.SQLManager; diff --git a/easy-trans-beetl-sql-extend/src/main/resources/META-INF/spring.factories b/easy-trans-beetl-sql-extend/src/main/resources/META-INF/spring.factories index f0ab6f6..152eb15 100644 --- a/easy-trans-beetl-sql-extend/src/main/resources/META-INF/spring.factories +++ b/easy-trans-beetl-sql-extend/src/main/resources/META-INF/spring.factories @@ -1,2 +1,2 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - com.fhs.trans.config.EasyTransBeetlSqlConfig + org.dromara.trans.config.EasyTransBeetlSqlConfig diff --git a/easy-trans-beetl-sql-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/easy-trans-beetl-sql-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 4a4566d..854fa10 100644 --- a/easy-trans-beetl-sql-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/easy-trans-beetl-sql-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -com.fhs.trans.config.EasyTransBeetlSqlConfig \ No newline at end of file +org.dromara.trans.config.EasyTransBeetlSqlConfig \ No newline at end of file diff --git a/easy-trans-dependencies/pom.xml b/easy-trans-dependencies/pom.xml index 56cf65f..d0c75ee 100644 --- a/easy-trans-dependencies/pom.xml +++ b/easy-trans-dependencies/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.fhs-opensource + org.dromara easy-trans ${revision} @@ -16,35 +16,35 @@ - com.fhs-opensource + org.dromara easy-trans-anno ${revision} - com.fhs-opensource + org.dromara easy-trans-spring-boot-starter ${revision} - com.fhs-opensource + org.dromara easy-trans-beetl-sql-extend ${revision} - com.fhs-opensource + org.dromara easy-trans-mybatis-plus-extend ${revision} - com.fhs-opensource + org.dromara easy-trans-mybatis-flex-extend ${revision} @@ -53,7 +53,7 @@ - com.fhs-opensource + org.dromara easy-trans-tk-extend ${revision} diff --git a/easy-trans-easy-query-extend/pom.xml b/easy-trans-easy-query-extend/pom.xml index 8e8665f..be632a2 100644 --- a/easy-trans-easy-query-extend/pom.xml +++ b/easy-trans-easy-query-extend/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - com.fhs-opensource + org.dromara easy-trans ${revision} @@ -12,7 +12,7 @@ - com.fhs-opensource + org.dromara easy-trans-service diff --git a/easy-trans-easy-query-extend/src/main/java/com/fhs/trans/anno/Id4Trans.java b/easy-trans-easy-query-extend/src/main/java/org/dromara/trans/anno/Id4Trans.java similarity index 89% rename from easy-trans-easy-query-extend/src/main/java/com/fhs/trans/anno/Id4Trans.java rename to easy-trans-easy-query-extend/src/main/java/org/dromara/trans/anno/Id4Trans.java index 8873000..075de0a 100644 --- a/easy-trans-easy-query-extend/src/main/java/com/fhs/trans/anno/Id4Trans.java +++ b/easy-trans-easy-query-extend/src/main/java/org/dromara/trans/anno/Id4Trans.java @@ -1,4 +1,4 @@ -package com.fhs.trans.anno; +package org.dromara.trans.anno; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/easy-trans-easy-query-extend/src/main/java/com/fhs/trans/config/EasyTransEasyQueryConfig.java b/easy-trans-easy-query-extend/src/main/java/org/dromara/trans/config/EasyTransEasyQueryConfig.java similarity index 79% rename from easy-trans-easy-query-extend/src/main/java/com/fhs/trans/config/EasyTransEasyQueryConfig.java rename to easy-trans-easy-query-extend/src/main/java/org/dromara/trans/config/EasyTransEasyQueryConfig.java index aa23c96..a01f07f 100644 --- a/easy-trans-easy-query-extend/src/main/java/com/fhs/trans/config/EasyTransEasyQueryConfig.java +++ b/easy-trans-easy-query-extend/src/main/java/org/dromara/trans/config/EasyTransEasyQueryConfig.java @@ -1,9 +1,9 @@ -package com.fhs.trans.config; +package org.dromara.trans.config; import com.easy.query.core.api.client.EasyQueryClient; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.trans.anno.Id4Trans; -import com.fhs.trans.extend.EasyQuerySimpleTransDiver; +import org.dromara.core.trans.util.ReflectUtils; +import org.dromara.trans.anno.Id4Trans; +import org.dromara.trans.extend.EasyQuerySimpleTransDiver; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; diff --git a/easy-trans-easy-query-extend/src/main/java/com/fhs/trans/extend/EasyQuerySimpleTransDiver.java b/easy-trans-easy-query-extend/src/main/java/org/dromara/trans/extend/EasyQuerySimpleTransDiver.java similarity index 94% rename from easy-trans-easy-query-extend/src/main/java/com/fhs/trans/extend/EasyQuerySimpleTransDiver.java rename to easy-trans-easy-query-extend/src/main/java/org/dromara/trans/extend/EasyQuerySimpleTransDiver.java index 332a929..5074ef8 100644 --- a/easy-trans-easy-query-extend/src/main/java/com/fhs/trans/extend/EasyQuerySimpleTransDiver.java +++ b/easy-trans-easy-query-extend/src/main/java/org/dromara/trans/extend/EasyQuerySimpleTransDiver.java @@ -1,10 +1,11 @@ -package com.fhs.trans.extend; +package org.dromara.trans.extend; import com.easy.query.core.api.client.EasyQueryClient; import com.easy.query.core.expression.builder.Selector; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.impl.SimpleTransService; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.service.impl.SimpleTransService; import lombok.extern.slf4j.Slf4j; + import java.io.Serializable; import java.util.List; import java.util.Set; diff --git a/easy-trans-easy-query-extend/src/main/resources/META-INF/spring.factories b/easy-trans-easy-query-extend/src/main/resources/META-INF/spring.factories index 4e34604..a2da767 100644 --- a/easy-trans-easy-query-extend/src/main/resources/META-INF/spring.factories +++ b/easy-trans-easy-query-extend/src/main/resources/META-INF/spring.factories @@ -1,2 +1,2 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - com.fhs.trans.config.EasyTransEasyQueryConfig + org.dromara.trans.config.EasyTransEasyQueryConfig diff --git a/easy-trans-easy-query-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/easy-trans-easy-query-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 0ff1c14..c83072f 100644 --- a/easy-trans-easy-query-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/easy-trans-easy-query-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -com.fhs.trans.config.EasyTransEasyQueryConfig \ No newline at end of file +org.dromara.trans.config.EasyTransEasyQueryConfig \ No newline at end of file diff --git a/easy-trans-jpa-sb3-extend/pom.xml b/easy-trans-jpa-sb3-extend/pom.xml index 31025f5..4213acd 100644 --- a/easy-trans-jpa-sb3-extend/pom.xml +++ b/easy-trans-jpa-sb3-extend/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - com.fhs-opensource + org.dromara easy-trans ${revision} @@ -16,7 +16,7 @@ easy-trans-jpa-sb3-extend - com.fhs-opensource + org.dromara easy-trans-service diff --git a/easy-trans-jpa-sb3-extend/src/main/java/com/fhs/trans/config/EasyTransJPA3Config.java b/easy-trans-jpa-sb3-extend/src/main/java/org/dromara/trans/config/EasyTransJPA3Config.java similarity index 86% rename from easy-trans-jpa-sb3-extend/src/main/java/com/fhs/trans/config/EasyTransJPA3Config.java rename to easy-trans-jpa-sb3-extend/src/main/java/org/dromara/trans/config/EasyTransJPA3Config.java index e32fd76..955ad02 100644 --- a/easy-trans-jpa-sb3-extend/src/main/java/com/fhs/trans/config/EasyTransJPA3Config.java +++ b/easy-trans-jpa-sb3-extend/src/main/java/org/dromara/trans/config/EasyTransJPA3Config.java @@ -1,8 +1,8 @@ -package com.fhs.trans.config; +package org.dromara.trans.config; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.trans.extend.JPA3SimpleTransDiver; -import com.fhs.trans.extend.JPA3TransableRegister; +import org.dromara.core.trans.util.ReflectUtils; +import org.dromara.trans.extend.JPA3SimpleTransDiver; +import org.dromara.trans.extend.JPA3TransableRegister; import jakarta.persistence.EntityManager; import jakarta.persistence.Id; import lombok.extern.slf4j.Slf4j; diff --git a/easy-trans-jpa-sb3-extend/src/main/java/com/fhs/trans/extend/JPA3SimpleTransDiver.java b/easy-trans-jpa-sb3-extend/src/main/java/org/dromara/trans/extend/JPA3SimpleTransDiver.java similarity index 92% rename from easy-trans-jpa-sb3-extend/src/main/java/com/fhs/trans/extend/JPA3SimpleTransDiver.java rename to easy-trans-jpa-sb3-extend/src/main/java/org/dromara/trans/extend/JPA3SimpleTransDiver.java index dccccf7..bc12077 100644 --- a/easy-trans-jpa-sb3-extend/src/main/java/com/fhs/trans/extend/JPA3SimpleTransDiver.java +++ b/easy-trans-jpa-sb3-extend/src/main/java/org/dromara/trans/extend/JPA3SimpleTransDiver.java @@ -1,8 +1,8 @@ -package com.fhs.trans.extend; +package org.dromara.trans.extend; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.impl.SimpleTransService; +import org.dromara.core.trans.util.ReflectUtils; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.service.impl.SimpleTransService; import jakarta.persistence.EntityManager; import jakarta.persistence.NoResultException; import jakarta.persistence.TypedQuery; diff --git a/easy-trans-jpa-sb3-extend/src/main/java/com/fhs/trans/extend/JPA3TransableAdapter.java b/easy-trans-jpa-sb3-extend/src/main/java/org/dromara/trans/extend/JPA3TransableAdapter.java similarity index 90% rename from easy-trans-jpa-sb3-extend/src/main/java/com/fhs/trans/extend/JPA3TransableAdapter.java rename to easy-trans-jpa-sb3-extend/src/main/java/org/dromara/trans/extend/JPA3TransableAdapter.java index 77a43b5..969166e 100644 --- a/easy-trans-jpa-sb3-extend/src/main/java/com/fhs/trans/extend/JPA3TransableAdapter.java +++ b/easy-trans-jpa-sb3-extend/src/main/java/org/dromara/trans/extend/JPA3TransableAdapter.java @@ -1,8 +1,8 @@ -package com.fhs.trans.extend; +package org.dromara.trans.extend; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.AutoTransable; +import org.dromara.core.trans.util.ReflectUtils; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.service.AutoTransable; import jakarta.persistence.EntityManager; import jakarta.persistence.TypedQuery; diff --git a/easy-trans-jpa-sb3-extend/src/main/java/com/fhs/trans/extend/JPA3TransableRegister.java b/easy-trans-jpa-sb3-extend/src/main/java/org/dromara/trans/extend/JPA3TransableRegister.java similarity index 88% rename from easy-trans-jpa-sb3-extend/src/main/java/com/fhs/trans/extend/JPA3TransableRegister.java rename to easy-trans-jpa-sb3-extend/src/main/java/org/dromara/trans/extend/JPA3TransableRegister.java index a8ae0dd..421ba71 100644 --- a/easy-trans-jpa-sb3-extend/src/main/java/com/fhs/trans/extend/JPA3TransableRegister.java +++ b/easy-trans-jpa-sb3-extend/src/main/java/org/dromara/trans/extend/JPA3TransableRegister.java @@ -1,10 +1,10 @@ -package com.fhs.trans.extend; +package org.dromara.trans.extend; -import com.fhs.common.spring.SpringContextUtil; -import com.fhs.core.trans.anno.AutoTrans; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.AutoTransable; -import com.fhs.trans.service.impl.AutoTransService; +import org.dromara.common.spring.SpringContextUtil; +import org.dromara.core.trans.anno.AutoTrans; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.service.AutoTransable; +import org.dromara.trans.service.impl.AutoTransService; import jakarta.persistence.Entity; import jakarta.persistence.EntityManager; import lombok.Data; diff --git a/easy-trans-jpa-sb3-extend/src/main/resources/META-INF/spring.factories b/easy-trans-jpa-sb3-extend/src/main/resources/META-INF/spring.factories index 90d6e4c..ed3e5b4 100644 --- a/easy-trans-jpa-sb3-extend/src/main/resources/META-INF/spring.factories +++ b/easy-trans-jpa-sb3-extend/src/main/resources/META-INF/spring.factories @@ -1,2 +1,2 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - com.fhs.trans.config.EasyTransJPA3Config + org.dromara.trans.config.EasyTransJPA3Config diff --git a/easy-trans-jpa-sb3-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/easy-trans-jpa-sb3-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index e9836bd..6db7bdc 100644 --- a/easy-trans-jpa-sb3-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/easy-trans-jpa-sb3-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -com.fhs.trans.config.EasyTransJPA3Config \ No newline at end of file +org.dromara.trans.config.EasyTransJPA3Config \ No newline at end of file diff --git a/easy-trans-mybatis-flex-extend/pom.xml b/easy-trans-mybatis-flex-extend/pom.xml index 5aeb57f..1c6c439 100644 --- a/easy-trans-mybatis-flex-extend/pom.xml +++ b/easy-trans-mybatis-flex-extend/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - com.fhs-opensource + org.dromara easy-trans ${revision} @@ -16,7 +16,7 @@ - com.fhs-opensource + org.dromara easy-trans-service diff --git a/easy-trans-mybatis-flex-extend/src/main/java/com/fhs/trans/config/EasyTransMybatisFlexConfig.java b/easy-trans-mybatis-flex-extend/src/main/java/org/dromara/trans/config/EasyTransMybatisFlexConfig.java similarity index 85% rename from easy-trans-mybatis-flex-extend/src/main/java/com/fhs/trans/config/EasyTransMybatisFlexConfig.java rename to easy-trans-mybatis-flex-extend/src/main/java/org/dromara/trans/config/EasyTransMybatisFlexConfig.java index 1c249c1..b5acbc3 100644 --- a/easy-trans-mybatis-flex-extend/src/main/java/com/fhs/trans/config/EasyTransMybatisFlexConfig.java +++ b/easy-trans-mybatis-flex-extend/src/main/java/org/dromara/trans/config/EasyTransMybatisFlexConfig.java @@ -1,8 +1,8 @@ -package com.fhs.trans.config; +package org.dromara.trans.config; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.trans.extend.MybatisFlexSimpleTransDiver; -import com.fhs.trans.extend.MybatisFlexTransableRegister; +import org.dromara.core.trans.util.ReflectUtils; +import org.dromara.trans.extend.MybatisFlexSimpleTransDiver; +import org.dromara.trans.extend.MybatisFlexTransableRegister; import com.mybatisflex.annotation.Id; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; diff --git a/easy-trans-mybatis-flex-extend/src/main/java/com/fhs/trans/extend/MybatisFlexSimpleTransDiver.java b/easy-trans-mybatis-flex-extend/src/main/java/org/dromara/trans/extend/MybatisFlexSimpleTransDiver.java similarity index 95% rename from easy-trans-mybatis-flex-extend/src/main/java/com/fhs/trans/extend/MybatisFlexSimpleTransDiver.java rename to easy-trans-mybatis-flex-extend/src/main/java/org/dromara/trans/extend/MybatisFlexSimpleTransDiver.java index bb1c23f..dbc13c0 100644 --- a/easy-trans-mybatis-flex-extend/src/main/java/com/fhs/trans/extend/MybatisFlexSimpleTransDiver.java +++ b/easy-trans-mybatis-flex-extend/src/main/java/org/dromara/trans/extend/MybatisFlexSimpleTransDiver.java @@ -1,8 +1,8 @@ -package com.fhs.trans.extend; +package org.dromara.trans.extend; -import com.fhs.common.utils.StringUtil; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.impl.SimpleTransService; +import org.dromara.common.utils.StringUtil; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.service.impl.SimpleTransService; import com.mybatisflex.core.BaseMapper; import com.mybatisflex.core.mybatis.Mappers; import com.mybatisflex.core.query.QueryColumn; diff --git a/easy-trans-mybatis-flex-extend/src/main/java/com/fhs/trans/extend/MybatisFlexTransableAdapter.java b/easy-trans-mybatis-flex-extend/src/main/java/org/dromara/trans/extend/MybatisFlexTransableAdapter.java similarity index 89% rename from easy-trans-mybatis-flex-extend/src/main/java/com/fhs/trans/extend/MybatisFlexTransableAdapter.java rename to easy-trans-mybatis-flex-extend/src/main/java/org/dromara/trans/extend/MybatisFlexTransableAdapter.java index afbb37e..d3973ea 100644 --- a/easy-trans-mybatis-flex-extend/src/main/java/com/fhs/trans/extend/MybatisFlexTransableAdapter.java +++ b/easy-trans-mybatis-flex-extend/src/main/java/org/dromara/trans/extend/MybatisFlexTransableAdapter.java @@ -1,7 +1,7 @@ -package com.fhs.trans.extend; +package org.dromara.trans.extend; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.AutoTransable; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.service.AutoTransable; import com.mybatisflex.core.BaseMapper; import com.mybatisflex.core.mybatis.Mappers; import com.mybatisflex.core.query.QueryWrapper; diff --git a/easy-trans-mybatis-flex-extend/src/main/java/com/fhs/trans/extend/MybatisFlexTransableRegister.java b/easy-trans-mybatis-flex-extend/src/main/java/org/dromara/trans/extend/MybatisFlexTransableRegister.java similarity index 89% rename from easy-trans-mybatis-flex-extend/src/main/java/com/fhs/trans/extend/MybatisFlexTransableRegister.java rename to easy-trans-mybatis-flex-extend/src/main/java/org/dromara/trans/extend/MybatisFlexTransableRegister.java index debf885..a023595 100644 --- a/easy-trans-mybatis-flex-extend/src/main/java/com/fhs/trans/extend/MybatisFlexTransableRegister.java +++ b/easy-trans-mybatis-flex-extend/src/main/java/org/dromara/trans/extend/MybatisFlexTransableRegister.java @@ -1,10 +1,10 @@ -package com.fhs.trans.extend; +package org.dromara.trans.extend; -import com.fhs.common.spring.SpringContextUtil; -import com.fhs.core.trans.anno.AutoTrans; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.AutoTransable; -import com.fhs.trans.service.impl.AutoTransService; +import org.dromara.common.spring.SpringContextUtil; +import org.dromara.core.trans.anno.AutoTrans; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.service.AutoTransable; +import org.dromara.trans.service.impl.AutoTransService; import com.mybatisflex.annotation.Table; import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; diff --git a/easy-trans-mybatis-flex-extend/src/main/resources/META-INF/spring.factories b/easy-trans-mybatis-flex-extend/src/main/resources/META-INF/spring.factories index e4cf0b4..504a1e4 100644 --- a/easy-trans-mybatis-flex-extend/src/main/resources/META-INF/spring.factories +++ b/easy-trans-mybatis-flex-extend/src/main/resources/META-INF/spring.factories @@ -1,2 +1,2 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - com.fhs.trans.config.EasyTransMybatisFlexConfig + org.dromara.trans.config.EasyTransMybatisFlexConfig diff --git a/easy-trans-mybatis-flex-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/easy-trans-mybatis-flex-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 4ede2c2..a873b37 100644 --- a/easy-trans-mybatis-flex-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/easy-trans-mybatis-flex-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -com.fhs.trans.config.EasyTransMybatisFlexConfig \ No newline at end of file +org.dromara.trans.config.EasyTransMybatisFlexConfig \ No newline at end of file diff --git a/easy-trans-mybatis-plus-extend/pom.xml b/easy-trans-mybatis-plus-extend/pom.xml index 7548bb3..4becbaf 100644 --- a/easy-trans-mybatis-plus-extend/pom.xml +++ b/easy-trans-mybatis-plus-extend/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - com.fhs-opensource + org.dromara easy-trans ${revision} @@ -12,7 +12,7 @@ - com.fhs-opensource + org.dromara easy-trans-service diff --git a/easy-trans-mybatis-plus-extend/src/main/java/com/fhs/trans/config/EasyTransMybatisPlusConfig.java b/easy-trans-mybatis-plus-extend/src/main/java/org/dromara/trans/config/EasyTransMybatisPlusConfig.java similarity index 85% rename from easy-trans-mybatis-plus-extend/src/main/java/com/fhs/trans/config/EasyTransMybatisPlusConfig.java rename to easy-trans-mybatis-plus-extend/src/main/java/org/dromara/trans/config/EasyTransMybatisPlusConfig.java index 66f9dd4..23d1d38 100644 --- a/easy-trans-mybatis-plus-extend/src/main/java/com/fhs/trans/config/EasyTransMybatisPlusConfig.java +++ b/easy-trans-mybatis-plus-extend/src/main/java/org/dromara/trans/config/EasyTransMybatisPlusConfig.java @@ -1,9 +1,9 @@ -package com.fhs.trans.config; +package org.dromara.trans.config; import com.baomidou.mybatisplus.annotation.TableId; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.trans.extend.MybatisPlusSimpleTransDiver; -import com.fhs.trans.extend.MybatisPlusTransableRegister; +import org.dromara.core.trans.util.ReflectUtils; +import org.dromara.trans.extend.MybatisPlusSimpleTransDiver; +import org.dromara.trans.extend.MybatisPlusTransableRegister; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; diff --git a/easy-trans-mybatis-plus-extend/src/main/java/com/fhs/trans/extend/MybatisPlusSimpleTransDiver.java b/easy-trans-mybatis-plus-extend/src/main/java/org/dromara/trans/extend/MybatisPlusSimpleTransDiver.java similarity index 96% rename from easy-trans-mybatis-plus-extend/src/main/java/com/fhs/trans/extend/MybatisPlusSimpleTransDiver.java rename to easy-trans-mybatis-plus-extend/src/main/java/org/dromara/trans/extend/MybatisPlusSimpleTransDiver.java index c8d0433..317ca4f 100644 --- a/easy-trans-mybatis-plus-extend/src/main/java/com/fhs/trans/extend/MybatisPlusSimpleTransDiver.java +++ b/easy-trans-mybatis-plus-extend/src/main/java/org/dromara/trans/extend/MybatisPlusSimpleTransDiver.java @@ -1,4 +1,4 @@ -package com.fhs.trans.extend; +package org.dromara.trans.extend; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -7,10 +7,10 @@ import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import com.baomidou.mybatisplus.core.toolkit.*; import com.baomidou.mybatisplus.core.toolkit.support.ColumnCache; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; -import com.fhs.common.utils.StringUtil; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.impl.SimpleTransService; +import org.dromara.common.utils.StringUtil; +import org.dromara.core.trans.util.ReflectUtils; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.service.impl.SimpleTransService; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.SqlSession; import org.mybatis.spring.SqlSessionUtils; @@ -22,7 +22,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; -import java.util.stream.Stream; /** * mybatis plus 简单翻译驱动 diff --git a/easy-trans-mybatis-plus-extend/src/main/java/com/fhs/trans/extend/MybatisPlusTransableAdapter.java b/easy-trans-mybatis-plus-extend/src/main/java/org/dromara/trans/extend/MybatisPlusTransableAdapter.java similarity index 95% rename from easy-trans-mybatis-plus-extend/src/main/java/com/fhs/trans/extend/MybatisPlusTransableAdapter.java rename to easy-trans-mybatis-plus-extend/src/main/java/org/dromara/trans/extend/MybatisPlusTransableAdapter.java index ba94b8c..5afb07c 100644 --- a/easy-trans-mybatis-plus-extend/src/main/java/com/fhs/trans/extend/MybatisPlusTransableAdapter.java +++ b/easy-trans-mybatis-plus-extend/src/main/java/org/dromara/trans/extend/MybatisPlusTransableAdapter.java @@ -1,11 +1,11 @@ -package com.fhs.trans.extend; +package org.dromara.trans.extend; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.enums.SqlMethod; import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.AutoTransable; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.service.AutoTransable; import org.apache.ibatis.session.SqlSession; import org.mybatis.spring.SqlSessionUtils; diff --git a/easy-trans-mybatis-plus-extend/src/main/java/com/fhs/trans/extend/MybatisPlusTransableRegister.java b/easy-trans-mybatis-plus-extend/src/main/java/org/dromara/trans/extend/MybatisPlusTransableRegister.java similarity index 88% rename from easy-trans-mybatis-plus-extend/src/main/java/com/fhs/trans/extend/MybatisPlusTransableRegister.java rename to easy-trans-mybatis-plus-extend/src/main/java/org/dromara/trans/extend/MybatisPlusTransableRegister.java index 21c0718..2a064bc 100644 --- a/easy-trans-mybatis-plus-extend/src/main/java/com/fhs/trans/extend/MybatisPlusTransableRegister.java +++ b/easy-trans-mybatis-plus-extend/src/main/java/org/dromara/trans/extend/MybatisPlusTransableRegister.java @@ -1,11 +1,11 @@ -package com.fhs.trans.extend; +package org.dromara.trans.extend; import com.baomidou.mybatisplus.annotation.TableName; -import com.fhs.common.spring.SpringContextUtil; -import com.fhs.core.trans.anno.AutoTrans; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.AutoTransable; -import com.fhs.trans.service.impl.AutoTransService; +import org.dromara.common.spring.SpringContextUtil; +import org.dromara.core.trans.anno.AutoTrans; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.service.AutoTransable; +import org.dromara.trans.service.impl.AutoTransService; import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.event.ApplicationReadyEvent; diff --git a/easy-trans-mybatis-plus-extend/src/main/resources/META-INF/spring.factories b/easy-trans-mybatis-plus-extend/src/main/resources/META-INF/spring.factories index e209425..3b1d534 100644 --- a/easy-trans-mybatis-plus-extend/src/main/resources/META-INF/spring.factories +++ b/easy-trans-mybatis-plus-extend/src/main/resources/META-INF/spring.factories @@ -1,2 +1,2 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - com.fhs.trans.config.EasyTransMybatisPlusConfig +org.dromara.trans.config.EasyTransMybatisPlusConfig diff --git a/easy-trans-mybatis-plus-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/easy-trans-mybatis-plus-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 10fe13a..a44f295 100644 --- a/easy-trans-mybatis-plus-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/easy-trans-mybatis-plus-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -com.fhs.trans.config.EasyTransMybatisPlusConfig \ No newline at end of file +org.dromara.trans.config.EasyTransMybatisPlusConfig \ No newline at end of file diff --git a/easy-trans-service/pom.xml b/easy-trans-service/pom.xml index a13924c..7be415b 100644 --- a/easy-trans-service/pom.xml +++ b/easy-trans-service/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - com.fhs-opensource + org.dromara easy-trans ${revision} @@ -21,7 +21,7 @@ spring-data-redis - com.fhs-opensource + org.dromara easy-trans-anno diff --git a/easy-trans-service/src/main/java/com/fhs/cache/service/BothCacheService.java b/easy-trans-service/src/main/java/org/dromara/cache/service/BothCacheService.java similarity index 93% rename from easy-trans-service/src/main/java/com/fhs/cache/service/BothCacheService.java rename to easy-trans-service/src/main/java/org/dromara/cache/service/BothCacheService.java index 8bc7b23..288c418 100644 --- a/easy-trans-service/src/main/java/com/fhs/cache/service/BothCacheService.java +++ b/easy-trans-service/src/main/java/org/dromara/cache/service/BothCacheService.java @@ -1,11 +1,9 @@ -package com.fhs.cache.service; +package org.dromara.cache.service; -import com.fhs.common.utils.StringUtil; +import org.dromara.common.utils.StringUtil; import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Primary; -import org.springframework.stereotype.Component; import java.util.*; import java.util.concurrent.ConcurrentHashMap; diff --git a/easy-trans-service/src/main/java/com/fhs/cache/service/RedisCacheService.java b/easy-trans-service/src/main/java/org/dromara/cache/service/RedisCacheService.java similarity index 92% rename from easy-trans-service/src/main/java/com/fhs/cache/service/RedisCacheService.java rename to easy-trans-service/src/main/java/org/dromara/cache/service/RedisCacheService.java index 980fd65..24218a3 100644 --- a/easy-trans-service/src/main/java/com/fhs/cache/service/RedisCacheService.java +++ b/easy-trans-service/src/main/java/org/dromara/cache/service/RedisCacheService.java @@ -1,15 +1,11 @@ -package com.fhs.cache.service; +package org.dromara.cache.service; -import com.fhs.common.constant.Constant; import lombok.Data; import org.springframework.dao.DataAccessException; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.core.*; import org.springframework.data.redis.serializer.RedisSerializer; -import org.springframework.util.CollectionUtils; -import java.util.HashSet; -import java.util.List; import java.util.Set; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; diff --git a/easy-trans-service/src/main/java/com/fhs/cache/service/TransCacheManager.java b/easy-trans-service/src/main/java/org/dromara/cache/service/TransCacheManager.java similarity index 85% rename from easy-trans-service/src/main/java/com/fhs/cache/service/TransCacheManager.java rename to easy-trans-service/src/main/java/org/dromara/cache/service/TransCacheManager.java index e52cadd..2691084 100644 --- a/easy-trans-service/src/main/java/com/fhs/cache/service/TransCacheManager.java +++ b/easy-trans-service/src/main/java/org/dromara/cache/service/TransCacheManager.java @@ -1,13 +1,11 @@ -package com.fhs.cache.service; +package org.dromara.cache.service; -import com.fhs.common.utils.ConverterUtils; -import com.fhs.common.utils.JsonUtils; -import com.fhs.core.trans.constant.TransType; -import com.fhs.trans.service.impl.RpcTransService; -import com.fhs.trans.service.impl.SimpleTransService; -import org.springframework.beans.factory.InitializingBean; +import org.dromara.common.utils.ConverterUtils; +import org.dromara.common.utils.JsonUtils; +import org.dromara.core.trans.constant.TransType; +import org.dromara.trans.service.impl.RpcTransService; +import org.dromara.trans.service.impl.SimpleTransService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; diff --git a/easy-trans-service/src/main/java/com/fhs/common/constant/Constant.java b/easy-trans-service/src/main/java/org/dromara/common/constant/Constant.java similarity index 99% rename from easy-trans-service/src/main/java/com/fhs/common/constant/Constant.java rename to easy-trans-service/src/main/java/org/dromara/common/constant/Constant.java index 3afbe74..c41b0a7 100644 --- a/easy-trans-service/src/main/java/com/fhs/common/constant/Constant.java +++ b/easy-trans-service/src/main/java/org/dromara/common/constant/Constant.java @@ -1,4 +1,4 @@ -package com.fhs.common.constant; +package org.dromara.common.constant; /** * <公共常量接口> diff --git a/easy-trans-service/src/main/java/com/fhs/common/constant/TransConfig.java b/easy-trans-service/src/main/java/org/dromara/common/constant/TransConfig.java similarity index 75% rename from easy-trans-service/src/main/java/com/fhs/common/constant/TransConfig.java rename to easy-trans-service/src/main/java/org/dromara/common/constant/TransConfig.java index 6d5f99a..68fefed 100644 --- a/easy-trans-service/src/main/java/com/fhs/common/constant/TransConfig.java +++ b/easy-trans-service/src/main/java/org/dromara/common/constant/TransConfig.java @@ -1,6 +1,6 @@ -package com.fhs.common.constant; +package org.dromara.common.constant; -import com.fhs.trans.ds.DataSourceSetter; +import org.dromara.trans.ds.DataSourceSetter; /** * 配置类 * diff --git a/easy-trans-service/src/main/java/com/fhs/common/spring/AnnotationTypeFilterBuilder.java b/easy-trans-service/src/main/java/org/dromara/common/spring/AnnotationTypeFilterBuilder.java similarity index 92% rename from easy-trans-service/src/main/java/com/fhs/common/spring/AnnotationTypeFilterBuilder.java rename to easy-trans-service/src/main/java/org/dromara/common/spring/AnnotationTypeFilterBuilder.java index c71a233..10468aa 100644 --- a/easy-trans-service/src/main/java/com/fhs/common/spring/AnnotationTypeFilterBuilder.java +++ b/easy-trans-service/src/main/java/org/dromara/common/spring/AnnotationTypeFilterBuilder.java @@ -1,4 +1,4 @@ -package com.fhs.common.spring; +package org.dromara.common.spring; import org.springframework.core.type.filter.AnnotationTypeFilter; import org.springframework.core.type.filter.TypeFilter; diff --git a/easy-trans-service/src/main/java/com/fhs/common/spring/ScannerUtils.java b/easy-trans-service/src/main/java/org/dromara/common/spring/ScannerUtils.java similarity index 97% rename from easy-trans-service/src/main/java/com/fhs/common/spring/ScannerUtils.java rename to easy-trans-service/src/main/java/org/dromara/common/spring/ScannerUtils.java index b4f164a..b0463e0 100644 --- a/easy-trans-service/src/main/java/com/fhs/common/spring/ScannerUtils.java +++ b/easy-trans-service/src/main/java/org/dromara/common/spring/ScannerUtils.java @@ -1,4 +1,4 @@ -package com.fhs.common.spring; +package org.dromara.common.spring; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/easy-trans-service/src/main/java/com/fhs/common/spring/SpelUtil.java b/easy-trans-service/src/main/java/org/dromara/common/spring/SpelUtil.java similarity index 97% rename from easy-trans-service/src/main/java/com/fhs/common/spring/SpelUtil.java rename to easy-trans-service/src/main/java/org/dromara/common/spring/SpelUtil.java index fe7450a..978ba5f 100644 --- a/easy-trans-service/src/main/java/com/fhs/common/spring/SpelUtil.java +++ b/easy-trans-service/src/main/java/org/dromara/common/spring/SpelUtil.java @@ -1,4 +1,4 @@ -package com.fhs.common.spring; +package org.dromara.common.spring; import org.springframework.context.expression.MethodBasedEvaluationContext; import org.springframework.core.LocalVariableTableParameterNameDiscoverer; @@ -12,7 +12,7 @@ import java.lang.reflect.Method; * Spel 表达式解析器 * * @ProjectName: framework_v2_idea2 - * @Package: com.fhs.common.spring + * @Package: org.dromara.common.spring * @ClassName: SpelUtil * @Author: JackWang * @CreateDate: 2019/1/8 0008 14:24 diff --git a/easy-trans-service/src/main/java/com/fhs/common/spring/SpringClassScanner.java b/easy-trans-service/src/main/java/org/dromara/common/spring/SpringClassScanner.java similarity index 99% rename from easy-trans-service/src/main/java/com/fhs/common/spring/SpringClassScanner.java rename to easy-trans-service/src/main/java/org/dromara/common/spring/SpringClassScanner.java index 9ff7b78..846436f 100644 --- a/easy-trans-service/src/main/java/com/fhs/common/spring/SpringClassScanner.java +++ b/easy-trans-service/src/main/java/org/dromara/common/spring/SpringClassScanner.java @@ -1,4 +1,4 @@ -package com.fhs.common.spring; +package org.dromara.common.spring; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; diff --git a/easy-trans-service/src/main/java/com/fhs/common/spring/SpringContextUtil.java b/easy-trans-service/src/main/java/org/dromara/common/spring/SpringContextUtil.java similarity index 99% rename from easy-trans-service/src/main/java/com/fhs/common/spring/SpringContextUtil.java rename to easy-trans-service/src/main/java/org/dromara/common/spring/SpringContextUtil.java index 03daf32..1d6321f 100644 --- a/easy-trans-service/src/main/java/com/fhs/common/spring/SpringContextUtil.java +++ b/easy-trans-service/src/main/java/org/dromara/common/spring/SpringContextUtil.java @@ -1,4 +1,4 @@ -package com.fhs.common.spring; +package org.dromara.common.spring; import lombok.extern.slf4j.Slf4j; import org.springframework.aop.framework.AdvisedSupport; @@ -8,7 +8,6 @@ import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; -import org.springframework.stereotype.Component; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; diff --git a/easy-trans-service/src/main/java/com/fhs/common/utils/CheckUtils.java b/easy-trans-service/src/main/java/org/dromara/common/utils/CheckUtils.java similarity index 98% rename from easy-trans-service/src/main/java/com/fhs/common/utils/CheckUtils.java rename to easy-trans-service/src/main/java/org/dromara/common/utils/CheckUtils.java index 913c6a3..7cb289b 100644 --- a/easy-trans-service/src/main/java/com/fhs/common/utils/CheckUtils.java +++ b/easy-trans-service/src/main/java/org/dromara/common/utils/CheckUtils.java @@ -1,10 +1,8 @@ -package com.fhs.common.utils; +package org.dromara.common.utils; -import com.fhs.common.constant.Constant; +import org.dromara.common.constant.Constant; -import java.util.ArrayList; import java.util.Collection; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Stream; diff --git a/easy-trans-service/src/main/java/com/fhs/common/utils/ConverterUtils.java b/easy-trans-service/src/main/java/org/dromara/common/utils/ConverterUtils.java similarity index 99% rename from easy-trans-service/src/main/java/com/fhs/common/utils/ConverterUtils.java rename to easy-trans-service/src/main/java/org/dromara/common/utils/ConverterUtils.java index 4f53904..af10580 100644 --- a/easy-trans-service/src/main/java/com/fhs/common/utils/ConverterUtils.java +++ b/easy-trans-service/src/main/java/org/dromara/common/utils/ConverterUtils.java @@ -1,4 +1,4 @@ -package com.fhs.common.utils; +package org.dromara.common.utils; import java.util.*; diff --git a/easy-trans-service/src/main/java/com/fhs/common/utils/JsonUtils.java b/easy-trans-service/src/main/java/org/dromara/common/utils/JsonUtils.java similarity index 98% rename from easy-trans-service/src/main/java/com/fhs/common/utils/JsonUtils.java rename to easy-trans-service/src/main/java/org/dromara/common/utils/JsonUtils.java index 172e654..ddb040c 100644 --- a/easy-trans-service/src/main/java/com/fhs/common/utils/JsonUtils.java +++ b/easy-trans-service/src/main/java/org/dromara/common/utils/JsonUtils.java @@ -1,4 +1,4 @@ -package com.fhs.common.utils; +package org.dromara.common.utils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; @@ -6,10 +6,7 @@ import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.serializer.SerializeConfig; import com.alibaba.fastjson.serializer.SerializerFeature; -import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer; -import java.io.IOException; -import java.io.PrintWriter; import java.util.*; /** diff --git a/easy-trans-service/src/main/java/com/fhs/common/utils/StringUtil.java b/easy-trans-service/src/main/java/org/dromara/common/utils/StringUtil.java similarity index 99% rename from easy-trans-service/src/main/java/com/fhs/common/utils/StringUtil.java rename to easy-trans-service/src/main/java/org/dromara/common/utils/StringUtil.java index 4d897ed..0425b7a 100644 --- a/easy-trans-service/src/main/java/com/fhs/common/utils/StringUtil.java +++ b/easy-trans-service/src/main/java/org/dromara/common/utils/StringUtil.java @@ -1,6 +1,6 @@ -package com.fhs.common.utils; +package org.dromara.common.utils; -import com.fhs.core.trans.util.ReflectUtils; +import org.dromara.core.trans.util.ReflectUtils; import lombok.extern.slf4j.Slf4j; import java.io.UnsupportedEncodingException; diff --git a/easy-trans-service/src/main/java/com/fhs/exception/ParamException.java b/easy-trans-service/src/main/java/org/dromara/exception/ParamException.java similarity index 86% rename from easy-trans-service/src/main/java/com/fhs/exception/ParamException.java rename to easy-trans-service/src/main/java/org/dromara/exception/ParamException.java index c2fbf29..46a31e4 100644 --- a/easy-trans-service/src/main/java/com/fhs/exception/ParamException.java +++ b/easy-trans-service/src/main/java/org/dromara/exception/ParamException.java @@ -1,4 +1,4 @@ -package com.fhs.exception; +package org.dromara.exception; /** diff --git a/easy-trans-service/src/main/java/com/fhs/trans/advice/EasyTransResponseBodyAdvice.java b/easy-trans-service/src/main/java/org/dromara/trans/advice/EasyTransResponseBodyAdvice.java similarity index 90% rename from easy-trans-service/src/main/java/com/fhs/trans/advice/EasyTransResponseBodyAdvice.java rename to easy-trans-service/src/main/java/org/dromara/trans/advice/EasyTransResponseBodyAdvice.java index 93b465f..dbcc7ea 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/advice/EasyTransResponseBodyAdvice.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/advice/EasyTransResponseBodyAdvice.java @@ -1,10 +1,9 @@ -package com.fhs.trans.advice; +package org.dromara.trans.advice; -import com.fhs.core.trans.anno.IgnoreTrans; -import com.fhs.core.trans.anno.TransSett; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.impl.TransService; -import com.fhs.trans.utils.TransUtil; +import org.dromara.core.trans.anno.IgnoreTrans; +import org.dromara.core.trans.anno.TransSett; +import org.dromara.trans.service.impl.TransService; +import org.dromara.trans.utils.TransUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; diff --git a/easy-trans-service/src/main/java/com/fhs/trans/advice/ReleaseTransCacheAdvice.java b/easy-trans-service/src/main/java/org/dromara/trans/advice/ReleaseTransCacheAdvice.java similarity index 89% rename from easy-trans-service/src/main/java/com/fhs/trans/advice/ReleaseTransCacheAdvice.java rename to easy-trans-service/src/main/java/org/dromara/trans/advice/ReleaseTransCacheAdvice.java index e82d8e8..b7c00c0 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/advice/ReleaseTransCacheAdvice.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/advice/ReleaseTransCacheAdvice.java @@ -1,6 +1,6 @@ -package com.fhs.trans.advice; +package org.dromara.trans.advice; -import com.fhs.core.trans.vo.VO; +import org.dromara.core.trans.vo.VO; import com.github.benmanes.caffeine.cache.Caffeine; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ControllerAdvice; diff --git a/easy-trans-service/src/main/java/com/fhs/trans/aop/TransMethodResultAop.java b/easy-trans-service/src/main/java/org/dromara/trans/aop/TransMethodResultAop.java similarity index 89% rename from easy-trans-service/src/main/java/com/fhs/trans/aop/TransMethodResultAop.java rename to easy-trans-service/src/main/java/org/dromara/trans/aop/TransMethodResultAop.java index ced2775..a623ddd 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/aop/TransMethodResultAop.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/aop/TransMethodResultAop.java @@ -1,10 +1,8 @@ -package com.fhs.trans.aop; +package org.dromara.trans.aop; -import com.fhs.core.trans.anno.TransSett; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.impl.TransService; -import com.fhs.trans.utils.TransUtil; +import org.dromara.core.trans.anno.TransSett; +import org.dromara.trans.service.impl.TransService; +import org.dromara.trans.utils.TransUtil; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; @@ -14,7 +12,6 @@ import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.*; @@ -43,7 +40,7 @@ public class TransMethodResultAop implements InitializingBean { @Autowired private TransService transService; - @Around("@annotation(com.fhs.core.trans.anno.TransMethodResult)") + @Around("@annotation(org.dromara.core.trans.anno.TransMethodResult)") public Object transResult(ProceedingJoinPoint joinPoint) throws Throwable { Object proceed = null; Set includeFields = null; diff --git a/easy-trans-service/src/main/java/com/fhs/trans/controller/TransProxyController.java b/easy-trans-service/src/main/java/org/dromara/trans/controller/TransProxyController.java similarity index 92% rename from easy-trans-service/src/main/java/com/fhs/trans/controller/TransProxyController.java rename to easy-trans-service/src/main/java/org/dromara/trans/controller/TransProxyController.java index 2f3055f..1f88670 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/controller/TransProxyController.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/controller/TransProxyController.java @@ -1,13 +1,13 @@ -package com.fhs.trans.controller; +package org.dromara.trans.controller; -import com.fhs.common.utils.ConverterUtils; -import com.fhs.common.utils.StringUtil; -import com.fhs.core.trans.anno.RpcTrans; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.impl.SimpleTransService; -import com.fhs.trans.vo.BasicVO; -import com.fhs.trans.vo.FindByIdsQueryPayload; +import org.dromara.common.utils.ConverterUtils; +import org.dromara.common.utils.StringUtil; +import org.dromara.core.trans.anno.RpcTrans; +import org.dromara.core.trans.util.ReflectUtils; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.service.impl.SimpleTransService; +import org.dromara.trans.vo.BasicVO; +import org.dromara.trans.vo.FindByIdsQueryPayload; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; diff --git a/easy-trans-service/src/main/java/com/fhs/trans/ds/DataSourceSetter.java b/easy-trans-service/src/main/java/org/dromara/trans/ds/DataSourceSetter.java similarity index 93% rename from easy-trans-service/src/main/java/com/fhs/trans/ds/DataSourceSetter.java rename to easy-trans-service/src/main/java/org/dromara/trans/ds/DataSourceSetter.java index 1a9b4d1..38de365 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/ds/DataSourceSetter.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/ds/DataSourceSetter.java @@ -1,4 +1,4 @@ -package com.fhs.trans.ds; +package org.dromara.trans.ds; import java.util.Map; diff --git a/easy-trans-service/src/main/java/com/fhs/trans/fi/LocaleGetter.java b/easy-trans-service/src/main/java/org/dromara/trans/fi/LocaleGetter.java similarity index 85% rename from easy-trans-service/src/main/java/com/fhs/trans/fi/LocaleGetter.java rename to easy-trans-service/src/main/java/org/dromara/trans/fi/LocaleGetter.java index 7ac07c8..114cb65 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/fi/LocaleGetter.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/fi/LocaleGetter.java @@ -1,4 +1,4 @@ -package com.fhs.trans.fi; +package org.dromara.trans.fi; /** * 国际化 diff --git a/easy-trans-service/src/main/java/com/fhs/trans/fi/TransRefresher.java b/easy-trans-service/src/main/java/org/dromara/trans/fi/TransRefresher.java similarity index 92% rename from easy-trans-service/src/main/java/com/fhs/trans/fi/TransRefresher.java rename to easy-trans-service/src/main/java/org/dromara/trans/fi/TransRefresher.java index 3013f9b..9dbfa6a 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/fi/TransRefresher.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/fi/TransRefresher.java @@ -1,4 +1,4 @@ -package com.fhs.trans.fi; +package org.dromara.trans.fi; import java.util.Map; diff --git a/easy-trans-service/src/main/java/com/fhs/trans/listener/TransMessageListener.java b/easy-trans-service/src/main/java/org/dromara/trans/listener/TransMessageListener.java similarity index 89% rename from easy-trans-service/src/main/java/com/fhs/trans/listener/TransMessageListener.java rename to easy-trans-service/src/main/java/org/dromara/trans/listener/TransMessageListener.java index 86b4de9..e7536df 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/listener/TransMessageListener.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/listener/TransMessageListener.java @@ -1,10 +1,9 @@ -package com.fhs.trans.listener; +package org.dromara.trans.listener; -import com.fhs.common.utils.JsonUtils; +import org.dromara.common.utils.JsonUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; -import com.fhs.trans.fi.TransRefresher; +import org.dromara.trans.fi.TransRefresher; import java.util.HashMap; import java.util.Map; diff --git a/easy-trans-service/src/main/java/com/fhs/trans/manager/CacheManager.java b/easy-trans-service/src/main/java/org/dromara/trans/manager/CacheManager.java similarity index 91% rename from easy-trans-service/src/main/java/com/fhs/trans/manager/CacheManager.java rename to easy-trans-service/src/main/java/org/dromara/trans/manager/CacheManager.java index 26077bf..5599962 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/manager/CacheManager.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/manager/CacheManager.java @@ -1,4 +1,4 @@ -package com.fhs.trans.manager; +package org.dromara.trans.manager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/easy-trans-service/src/main/java/com/fhs/trans/manager/ClassInfo.java b/easy-trans-service/src/main/java/org/dromara/trans/manager/ClassInfo.java similarity index 96% rename from easy-trans-service/src/main/java/com/fhs/trans/manager/ClassInfo.java rename to easy-trans-service/src/main/java/org/dromara/trans/manager/ClassInfo.java index cae577b..cd1abb4 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/manager/ClassInfo.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/manager/ClassInfo.java @@ -1,8 +1,8 @@ -package com.fhs.trans.manager; +package org.dromara.trans.manager; -import com.fhs.core.trans.anno.Trans; -import com.fhs.core.trans.anno.UnTrans; -import com.fhs.core.trans.util.ReflectUtils; +import org.dromara.core.trans.anno.Trans; +import org.dromara.core.trans.anno.UnTrans; +import org.dromara.core.trans.util.ReflectUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/easy-trans-service/src/main/java/com/fhs/trans/manager/ClassManager.java b/easy-trans-service/src/main/java/org/dromara/trans/manager/ClassManager.java similarity index 95% rename from easy-trans-service/src/main/java/com/fhs/trans/manager/ClassManager.java rename to easy-trans-service/src/main/java/org/dromara/trans/manager/ClassManager.java index 40e5c42..89b1d25 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/manager/ClassManager.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/manager/ClassManager.java @@ -1,6 +1,6 @@ -package com.fhs.trans.manager; +package org.dromara.trans.manager; -import com.fhs.exception.ParamException; +import org.dromara.exception.ParamException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; diff --git a/easy-trans-service/src/main/java/com/fhs/trans/service/AutoTransable.java b/easy-trans-service/src/main/java/org/dromara/trans/service/AutoTransable.java similarity index 92% rename from easy-trans-service/src/main/java/com/fhs/trans/service/AutoTransable.java rename to easy-trans-service/src/main/java/org/dromara/trans/service/AutoTransable.java index 23e3922..312ed6b 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/service/AutoTransable.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/service/AutoTransable.java @@ -1,7 +1,7 @@ -package com.fhs.trans.service; +package org.dromara.trans.service; -import com.fhs.core.trans.vo.VO; +import org.dromara.core.trans.vo.VO; import java.util.ArrayList; import java.util.List; diff --git a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/AutoTransService.java b/easy-trans-service/src/main/java/org/dromara/trans/service/impl/AutoTransService.java similarity index 96% rename from easy-trans-service/src/main/java/com/fhs/trans/service/impl/AutoTransService.java rename to easy-trans-service/src/main/java/org/dromara/trans/service/impl/AutoTransService.java index 6ca38e5..a554a51 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/AutoTransService.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/service/impl/AutoTransService.java @@ -1,22 +1,21 @@ -package com.fhs.trans.service.impl; - - -import com.fhs.cache.service.RedisCacheService; -import com.fhs.common.spring.AnnotationTypeFilterBuilder; -import com.fhs.common.spring.SpringClassScanner; -import com.fhs.common.utils.CheckUtils; -import com.fhs.common.utils.ConverterUtils; -import com.fhs.core.trans.anno.AutoTrans; -import com.fhs.core.trans.anno.Trans; -import com.fhs.core.trans.constant.TransType; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.listener.TransMessageListener; -import com.fhs.trans.service.AutoTransable; +package org.dromara.trans.service.impl; + + +import org.dromara.cache.service.RedisCacheService; +import org.dromara.common.spring.AnnotationTypeFilterBuilder; +import org.dromara.common.spring.SpringClassScanner; +import org.dromara.common.utils.CheckUtils; +import org.dromara.common.utils.ConverterUtils; +import org.dromara.core.trans.anno.AutoTrans; +import org.dromara.core.trans.anno.Trans; +import org.dromara.core.trans.constant.TransType; +import org.dromara.core.trans.util.ReflectUtils; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.listener.TransMessageListener; +import org.dromara.trans.service.AutoTransable; import lombok.Data; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.aop.support.AopUtils; import org.springframework.beans.factory.InitializingBean; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.ApplicationListener; diff --git a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/DictionaryTransService.java b/easy-trans-service/src/main/java/org/dromara/trans/service/impl/DictionaryTransService.java similarity index 93% rename from easy-trans-service/src/main/java/com/fhs/trans/service/impl/DictionaryTransService.java rename to easy-trans-service/src/main/java/org/dromara/trans/service/impl/DictionaryTransService.java index 803df4d..d9b299f 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/DictionaryTransService.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/service/impl/DictionaryTransService.java @@ -1,17 +1,17 @@ -package com.fhs.trans.service.impl; - -import com.fhs.cache.service.BothCacheService; -import com.fhs.cache.service.RedisCacheService; -import com.fhs.common.constant.Constant; -import com.fhs.common.utils.JsonUtils; -import com.fhs.common.utils.StringUtil; -import com.fhs.core.trans.anno.Trans; -import com.fhs.core.trans.anno.UnTrans; -import com.fhs.core.trans.constant.TransType; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.fi.LocaleGetter; -import com.fhs.trans.listener.TransMessageListener; +package org.dromara.trans.service.impl; + +import org.dromara.cache.service.BothCacheService; +import org.dromara.cache.service.RedisCacheService; +import org.dromara.common.constant.Constant; +import org.dromara.common.utils.JsonUtils; +import org.dromara.common.utils.StringUtil; +import org.dromara.core.trans.anno.Trans; +import org.dromara.core.trans.anno.UnTrans; +import org.dromara.core.trans.constant.TransType; +import org.dromara.core.trans.util.ReflectUtils; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.fi.LocaleGetter; +import org.dromara.trans.listener.TransMessageListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; @@ -21,7 +21,6 @@ import org.springframework.util.StringUtils; import java.lang.reflect.Field; import java.util.*; -import java.util.concurrent.ConcurrentHashMap; /** * 字典翻译服务 diff --git a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/EnumTransService.java b/easy-trans-service/src/main/java/org/dromara/trans/service/impl/EnumTransService.java similarity index 85% rename from easy-trans-service/src/main/java/com/fhs/trans/service/impl/EnumTransService.java rename to easy-trans-service/src/main/java/org/dromara/trans/service/impl/EnumTransService.java index 68b730b..0fb9cdc 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/EnumTransService.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/service/impl/EnumTransService.java @@ -1,17 +1,14 @@ -package com.fhs.trans.service.impl; +package org.dromara.trans.service.impl; -import com.fhs.common.utils.CheckUtils; -import com.fhs.common.utils.ConverterUtils; -import com.fhs.core.trans.anno.Trans; -import com.fhs.core.trans.constant.TransType; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.core.trans.vo.VO; +import org.dromara.common.utils.ConverterUtils; +import org.dromara.core.trans.anno.Trans; +import org.dromara.core.trans.constant.TransType; +import org.dromara.core.trans.util.ReflectUtils; +import org.dromara.core.trans.vo.VO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; -import org.springframework.util.StringUtils; -import java.io.Serializable; import java.lang.reflect.Field; import java.util.*; diff --git a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/ITransTypeService.java b/easy-trans-service/src/main/java/org/dromara/trans/service/impl/ITransTypeService.java similarity index 97% rename from easy-trans-service/src/main/java/com/fhs/trans/service/impl/ITransTypeService.java rename to easy-trans-service/src/main/java/org/dromara/trans/service/impl/ITransTypeService.java index eb057ac..5576baa 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/ITransTypeService.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/service/impl/ITransTypeService.java @@ -1,16 +1,15 @@ -package com.fhs.trans.service.impl; +package org.dromara.trans.service.impl; -import com.fhs.common.constant.TransConfig; -import com.fhs.common.utils.CheckUtils; -import com.fhs.common.utils.ConverterUtils; -import com.fhs.common.utils.StringUtil; -import com.fhs.core.trans.anno.Trans; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.core.trans.vo.VO; +import org.dromara.common.constant.TransConfig; +import org.dromara.common.utils.CheckUtils; +import org.dromara.common.utils.ConverterUtils; +import org.dromara.common.utils.StringUtil; +import org.dromara.core.trans.anno.Trans; +import org.dromara.core.trans.util.ReflectUtils; +import org.dromara.core.trans.vo.VO; import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; -import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/RpcTransService.java b/easy-trans-service/src/main/java/org/dromara/trans/service/impl/RpcTransService.java similarity index 94% rename from easy-trans-service/src/main/java/com/fhs/trans/service/impl/RpcTransService.java rename to easy-trans-service/src/main/java/org/dromara/trans/service/impl/RpcTransService.java index a4a93fc..b09bb8f 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/RpcTransService.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/service/impl/RpcTransService.java @@ -1,14 +1,13 @@ -package com.fhs.trans.service.impl; +package org.dromara.trans.service.impl; import com.alibaba.fastjson.JSONArray; -import com.fhs.common.utils.ConverterUtils; -import com.fhs.common.utils.StringUtil; -import com.fhs.core.trans.anno.Trans; -import com.fhs.core.trans.constant.TransType; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.listener.TransMessageListener; -import com.fhs.trans.vo.BasicVO; +import org.dromara.common.utils.ConverterUtils; +import org.dromara.common.utils.StringUtil; +import org.dromara.core.trans.anno.Trans; +import org.dromara.core.trans.constant.TransType; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.listener.TransMessageListener; +import org.dromara.trans.vo.BasicVO; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.slf4j.LoggerFactory; diff --git a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/SimpleTransService.java b/easy-trans-service/src/main/java/org/dromara/trans/service/impl/SimpleTransService.java similarity index 95% rename from easy-trans-service/src/main/java/com/fhs/trans/service/impl/SimpleTransService.java rename to easy-trans-service/src/main/java/org/dromara/trans/service/impl/SimpleTransService.java index e6a20ff..b0ac98f 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/SimpleTransService.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/service/impl/SimpleTransService.java @@ -1,16 +1,17 @@ -package com.fhs.trans.service.impl; - -import com.fhs.common.utils.CheckUtils; -import com.fhs.common.utils.ConverterUtils; -import com.fhs.common.utils.StringUtil; -import com.fhs.core.trans.anno.Trans; -import com.fhs.core.trans.anno.TransDefaultSett; -import com.fhs.core.trans.anno.UnTrans; -import com.fhs.core.trans.constant.TransType; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.ds.DataSourceSetter; -import com.fhs.trans.listener.TransMessageListener; +package org.dromara.trans.service.impl; + +import org.dromara.common.utils.CheckUtils; +import org.dromara.common.utils.ConverterUtils; +import org.dromara.common.utils.StringUtil; +import org.dromara.core.trans.anno.Trans; +import org.dromara.core.trans.anno.TransDefaultSett; +import org.dromara.core.trans.anno.UnTrans; +import org.dromara.core.trans.constant.TransType; +import org.dromara.core.trans.util.ReflectUtils; +import org.dromara.core.trans.vo.TransPojo; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.ds.DataSourceSetter; +import org.dromara.trans.listener.TransMessageListener; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -27,7 +28,7 @@ import java.lang.reflect.Field; import java.util.*; import java.util.stream.Collectors; -import static com.fhs.trans.service.impl.SimpleTransService.SimpleUnTransDiver.SEPARATOR; +import static org.dromara.trans.service.impl.SimpleTransService.SimpleUnTransDiver.SEPARATOR; /** * 简单翻译 @@ -277,7 +278,7 @@ public class SimpleTransService implements ITransTypeService, InitializingBean { * @return */ private List getTargetDefaultFields(Trans tempTrans) { - if (tempTrans.target() != com.fhs.core.trans.vo.TransPojo.class && !transCacheSettMap.containsKey(tempTrans.target()) + if (tempTrans.target() != TransPojo.class && !transCacheSettMap.containsKey(tempTrans.target()) && tempTrans.target().isAnnotationPresent(TransDefaultSett.class)) { TransDefaultSett transDefaultSett = tempTrans.target().getAnnotation(TransDefaultSett.class); return Arrays.asList(transDefaultSett.defaultFields()); @@ -381,7 +382,7 @@ public class SimpleTransService implements ITransTypeService, InitializingBean { * @return */ protected String getTargetClassName(Trans tempTrans) { - if (tempTrans.target() != com.fhs.core.trans.vo.TransPojo.class && !transCacheSettMap.containsKey(tempTrans.target()) + if (tempTrans.target() != TransPojo.class && !transCacheSettMap.containsKey(tempTrans.target()) && tempTrans.target().isAnnotationPresent(TransDefaultSett.class)) { TransDefaultSett transDefaultSett = tempTrans.target().getAnnotation(TransDefaultSett.class); if (transDefaultSett.isUseCache()) { @@ -392,7 +393,7 @@ public class SimpleTransService implements ITransTypeService, InitializingBean { transCacheSettMap.put(tempTrans.target().getName(), cacheSett); } } - return (tempTrans.target() == com.fhs.core.trans.vo.TransPojo.class + return (tempTrans.target() == TransPojo.class ? tempTrans.targetClassName() : tempTrans.target().getName()); } @@ -624,7 +625,7 @@ class SimpleTrans implements Trans { public SimpleTrans(Trans anno) { this.anno = anno; if (TransType.SIMPLE.equals(this.type())) { - Class clazz = (Class) this.target(); + Class clazz = (Class) this.target(); if (clazz != null && clazz.isAnnotationPresent(TransDefaultSett.class)) { TransDefaultSett transDefaultSett = clazz.getAnnotation(TransDefaultSett.class); this.fields = transDefaultSett.defaultFields(); @@ -658,10 +659,10 @@ class SimpleTrans implements Trans { @Override public Class target() { try { - return anno.target() == com.fhs.core.trans.vo.TransPojo.class ? (Class) Class.forName(anno.targetClassName()) : anno.target(); + return anno.target() == TransPojo.class ? (Class) Class.forName(anno.targetClassName()) : anno.target(); } catch (ClassNotFoundException e) { if (TransType.RPC.equals(this.type())) { - return com.fhs.core.trans.vo.TransPojo.class; + return TransPojo.class; } throw new RuntimeException(e); } diff --git a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/TransService.java b/easy-trans-service/src/main/java/org/dromara/trans/service/impl/TransService.java similarity index 97% rename from easy-trans-service/src/main/java/com/fhs/trans/service/impl/TransService.java rename to easy-trans-service/src/main/java/org/dromara/trans/service/impl/TransService.java index 1a72fd7..cebc7a1 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/service/impl/TransService.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/service/impl/TransService.java @@ -1,9 +1,9 @@ -package com.fhs.trans.service.impl; +package org.dromara.trans.service.impl; -import com.fhs.core.trans.anno.Trans; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.manager.ClassInfo; -import com.fhs.trans.manager.ClassManager; +import org.dromara.core.trans.anno.Trans; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.manager.ClassInfo; +import org.dromara.trans.manager.ClassManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.ObjectUtils; diff --git a/easy-trans-service/src/main/java/com/fhs/trans/utils/TransUtil.java b/easy-trans-service/src/main/java/org/dromara/trans/utils/TransUtil.java similarity index 97% rename from easy-trans-service/src/main/java/com/fhs/trans/utils/TransUtil.java rename to easy-trans-service/src/main/java/org/dromara/trans/utils/TransUtil.java index 95fe7cd..7e689fb 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/utils/TransUtil.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/utils/TransUtil.java @@ -1,13 +1,13 @@ -package com.fhs.trans.utils; +package org.dromara.trans.utils; import com.alibaba.fastjson.annotation.JSONField; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fhs.common.utils.ConverterUtils; -import com.fhs.common.utils.StringUtil; -import com.fhs.core.trans.anno.IgnoreTrans; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.impl.TransService; +import org.dromara.common.utils.ConverterUtils; +import org.dromara.common.utils.StringUtil; +import org.dromara.core.trans.anno.IgnoreTrans; +import org.dromara.core.trans.util.ReflectUtils; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.service.impl.TransService; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.ByteBuddy; import net.bytebuddy.description.annotation.AnnotationDescription; diff --git a/easy-trans-service/src/main/java/com/fhs/trans/vo/BasicVO.java b/easy-trans-service/src/main/java/org/dromara/trans/vo/BasicVO.java similarity index 80% rename from easy-trans-service/src/main/java/com/fhs/trans/vo/BasicVO.java rename to easy-trans-service/src/main/java/org/dromara/trans/vo/BasicVO.java index c86f4b3..0a94d49 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/vo/BasicVO.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/vo/BasicVO.java @@ -1,6 +1,6 @@ -package com.fhs.trans.vo; +package org.dromara.trans.vo; -import com.fhs.core.trans.vo.VO; +import org.dromara.core.trans.vo.VO; import lombok.Data; import java.util.HashMap; diff --git a/easy-trans-service/src/main/java/com/fhs/trans/vo/FindByIdsQueryPayload.java b/easy-trans-service/src/main/java/org/dromara/trans/vo/FindByIdsQueryPayload.java similarity index 87% rename from easy-trans-service/src/main/java/com/fhs/trans/vo/FindByIdsQueryPayload.java rename to easy-trans-service/src/main/java/org/dromara/trans/vo/FindByIdsQueryPayload.java index 3445414..786a848 100644 --- a/easy-trans-service/src/main/java/com/fhs/trans/vo/FindByIdsQueryPayload.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/vo/FindByIdsQueryPayload.java @@ -1,4 +1,4 @@ -package com.fhs.trans.vo; +package org.dromara.trans.vo; import lombok.Data; diff --git a/easy-trans-spring-boot-starter/pom.xml b/easy-trans-spring-boot-starter/pom.xml index 554f52b..59e3ccc 100644 --- a/easy-trans-spring-boot-starter/pom.xml +++ b/easy-trans-spring-boot-starter/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - com.fhs-opensource + org.dromara easy-trans ${revision} @@ -12,7 +12,7 @@ - com.fhs-opensource + org.dromara easy-trans-service diff --git a/easy-trans-spring-boot-starter/src/main/java/com/fhs/trans/config/TransServiceConfig.java b/easy-trans-spring-boot-starter/src/main/java/org/dromara/trans/config/TransServiceConfig.java similarity index 90% rename from easy-trans-spring-boot-starter/src/main/java/com/fhs/trans/config/TransServiceConfig.java rename to easy-trans-spring-boot-starter/src/main/java/org/dromara/trans/config/TransServiceConfig.java index 021e846..cd2f1fa 100644 --- a/easy-trans-spring-boot-starter/src/main/java/com/fhs/trans/config/TransServiceConfig.java +++ b/easy-trans-spring-boot-starter/src/main/java/org/dromara/trans/config/TransServiceConfig.java @@ -1,21 +1,21 @@ -package com.fhs.trans.config; - -import com.fhs.cache.service.BothCacheService; -import com.fhs.cache.service.RedisCacheService; -import com.fhs.cache.service.TransCacheManager; -import com.fhs.common.constant.TransConfig; -import com.fhs.common.spring.SpringContextUtil; -import com.fhs.core.trans.convert.Convert; -import com.fhs.core.trans.util.ConvertUtil; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.trans.advice.EasyTransResponseBodyAdvice; -import com.fhs.trans.advice.ReleaseTransCacheAdvice; -import com.fhs.trans.aop.TransMethodResultAop; -import com.fhs.trans.controller.TransProxyController; -import com.fhs.trans.ds.DataSourceSetter; -import com.fhs.trans.listener.TransMessageListener; -import com.fhs.trans.service.impl.*; +package org.dromara.trans.config; + +import org.dromara.cache.service.BothCacheService; +import org.dromara.cache.service.RedisCacheService; +import org.dromara.cache.service.TransCacheManager; +import org.dromara.common.constant.TransConfig; +import org.dromara.common.spring.SpringContextUtil; +import org.dromara.core.trans.convert.Convert; +import org.dromara.core.trans.util.ConvertUtil; +import org.dromara.core.trans.util.ReflectUtils; +import org.dromara.trans.advice.EasyTransResponseBodyAdvice; +import org.dromara.trans.advice.ReleaseTransCacheAdvice; +import org.dromara.trans.aop.TransMethodResultAop; +import org.dromara.trans.controller.TransProxyController; +import org.dromara.trans.ds.DataSourceSetter; +import org.dromara.trans.listener.TransMessageListener; import lombok.extern.slf4j.Slf4j; +import org.dromara.trans.service.impl.*; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; diff --git a/easy-trans-spring-boot-starter/src/main/resources/META-INF/spring.factories b/easy-trans-spring-boot-starter/src/main/resources/META-INF/spring.factories index dece694..e566393 100644 --- a/easy-trans-spring-boot-starter/src/main/resources/META-INF/spring.factories +++ b/easy-trans-spring-boot-starter/src/main/resources/META-INF/spring.factories @@ -1,2 +1,2 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - com.fhs.trans.config.TransServiceConfig \ No newline at end of file + org.dromara.trans.config.TransServiceConfig \ No newline at end of file diff --git a/easy-trans-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/easy-trans-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index f0a93f6..8ae5b6b 100644 --- a/easy-trans-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/easy-trans-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -com.fhs.trans.config.TransServiceConfig \ No newline at end of file +org.dromara.trans.config.TransServiceConfig \ No newline at end of file diff --git a/easy-trans-tk-extend/pom.xml b/easy-trans-tk-extend/pom.xml index f5758af..580dd65 100644 --- a/easy-trans-tk-extend/pom.xml +++ b/easy-trans-tk-extend/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> easy-trans - com.fhs-opensource + org.dromara ${revision} 4.0.0 @@ -34,7 +34,7 @@ true - com.fhs-opensource + org.dromara easy-trans-service diff --git a/easy-trans-tk-extend/src/main/java/com/fhs/trans/config/EasyTransTKConfig.java b/easy-trans-tk-extend/src/main/java/org/dromara/trans/config/EasyTransTKConfig.java similarity index 84% rename from easy-trans-tk-extend/src/main/java/com/fhs/trans/config/EasyTransTKConfig.java rename to easy-trans-tk-extend/src/main/java/org/dromara/trans/config/EasyTransTKConfig.java index 030cc59..3de03f1 100644 --- a/easy-trans-tk-extend/src/main/java/com/fhs/trans/config/EasyTransTKConfig.java +++ b/easy-trans-tk-extend/src/main/java/org/dromara/trans/config/EasyTransTKConfig.java @@ -1,13 +1,12 @@ -package com.fhs.trans.config; +package org.dromara.trans.config; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.trans.extend.TKSimpleTransDiver; +import org.dromara.core.trans.util.ReflectUtils; +import org.dromara.trans.extend.TKSimpleTransDiver; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/easy-trans-tk-extend/src/main/java/com/fhs/trans/extend/TKSimpleTransDiver.java b/easy-trans-tk-extend/src/main/java/org/dromara/trans/extend/TKSimpleTransDiver.java similarity index 93% rename from easy-trans-tk-extend/src/main/java/com/fhs/trans/extend/TKSimpleTransDiver.java rename to easy-trans-tk-extend/src/main/java/org/dromara/trans/extend/TKSimpleTransDiver.java index a3875d3..c150400 100644 --- a/easy-trans-tk-extend/src/main/java/com/fhs/trans/extend/TKSimpleTransDiver.java +++ b/easy-trans-tk-extend/src/main/java/org/dromara/trans/extend/TKSimpleTransDiver.java @@ -1,10 +1,10 @@ -package com.fhs.trans.extend; +package org.dromara.trans.extend; -import com.fhs.common.spring.SpringContextUtil; -import com.fhs.common.utils.StringUtil; -import com.fhs.core.trans.util.ReflectUtils; -import com.fhs.core.trans.vo.VO; -import com.fhs.trans.service.impl.SimpleTransService; +import org.dromara.common.spring.SpringContextUtil; +import org.dromara.common.utils.StringUtil; +import org.dromara.core.trans.util.ReflectUtils; +import org.dromara.core.trans.vo.VO; +import org.dromara.trans.service.impl.SimpleTransService; import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.support.SqlSessionDaoSupport; import org.springframework.aop.framework.AdvisedSupport; @@ -30,7 +30,7 @@ import java.util.Set; * TK mybatis 简单翻译驱动 */ @Slf4j -public class TKSimpleTransDiver extends SqlSessionDaoSupport implements SimpleTransService.SimpleTransDiver , ApplicationListener { +public class TKSimpleTransDiver extends SqlSessionDaoSupport implements SimpleTransService.SimpleTransDiver, ApplicationListener { /** * key 是entityclass value是mapperclass的名字方便拼接sqlid diff --git a/easy-trans-tk-extend/src/main/resources/META-INF/spring.factories b/easy-trans-tk-extend/src/main/resources/META-INF/spring.factories index 67b08c4..3fb851c 100644 --- a/easy-trans-tk-extend/src/main/resources/META-INF/spring.factories +++ b/easy-trans-tk-extend/src/main/resources/META-INF/spring.factories @@ -1,2 +1,2 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - com.fhs.trans.config.EasyTransTKConfig + org.dromara.trans.config.EasyTransTKConfig diff --git a/easy-trans-tk-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/easy-trans-tk-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 523b605..d29da29 100644 --- a/easy-trans-tk-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/easy-trans-tk-extend/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -com.fhs.trans.config.EasyTransTKConfig \ No newline at end of file +org.dromara.trans.config.EasyTransTKConfig \ No newline at end of file diff --git a/easy-trans-untrans-driver/pom.xml b/easy-trans-untrans-driver/pom.xml index 4aaa17e..4524305 100644 --- a/easy-trans-untrans-driver/pom.xml +++ b/easy-trans-untrans-driver/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.fhs-opensource + org.dromara easy-trans ${revision} @@ -18,7 +18,7 @@ - com.fhs-opensource + org.dromara easy-trans-service diff --git a/easy-trans-untrans-driver/src/main/java/com/fhs/trans/untrans/config/UnTransDriverConfig.java b/easy-trans-untrans-driver/src/main/java/org/dromara/trans/untrans/config/UnTransDriverConfig.java similarity index 67% rename from easy-trans-untrans-driver/src/main/java/com/fhs/trans/untrans/config/UnTransDriverConfig.java rename to easy-trans-untrans-driver/src/main/java/org/dromara/trans/untrans/config/UnTransDriverConfig.java index fb6a3d6..634137d 100644 --- a/easy-trans-untrans-driver/src/main/java/com/fhs/trans/untrans/config/UnTransDriverConfig.java +++ b/easy-trans-untrans-driver/src/main/java/org/dromara/trans/untrans/config/UnTransDriverConfig.java @@ -1,8 +1,7 @@ -package com.fhs.trans.untrans.config; +package org.dromara.trans.untrans.config; -import com.fhs.trans.untrans.driver.CommonUnTransDriver; +import org.dromara.trans.untrans.driver.CommonUnTransDriver; import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/easy-trans-untrans-driver/src/main/java/com/fhs/trans/untrans/driver/CommonUnTransDriver.java b/easy-trans-untrans-driver/src/main/java/org/dromara/trans/untrans/driver/CommonUnTransDriver.java similarity index 87% rename from easy-trans-untrans-driver/src/main/java/com/fhs/trans/untrans/driver/CommonUnTransDriver.java rename to easy-trans-untrans-driver/src/main/java/org/dromara/trans/untrans/driver/CommonUnTransDriver.java index 4b0cfa3..f81d411 100644 --- a/easy-trans-untrans-driver/src/main/java/com/fhs/trans/untrans/driver/CommonUnTransDriver.java +++ b/easy-trans-untrans-driver/src/main/java/org/dromara/trans/untrans/driver/CommonUnTransDriver.java @@ -1,8 +1,8 @@ -package com.fhs.trans.untrans.driver; +package org.dromara.trans.untrans.driver; -import com.fhs.core.trans.anno.UnTrans; -import com.fhs.trans.service.impl.SimpleTransService; -import com.fhs.trans.untrans.util.DBUtil; +import org.dromara.core.trans.anno.UnTrans; +import org.dromara.trans.service.impl.SimpleTransService; +import org.dromara.trans.untrans.util.DBUtil; import org.springframework.beans.factory.annotation.Autowired; import javax.sql.DataSource; diff --git a/easy-trans-untrans-driver/src/main/java/com/fhs/trans/untrans/util/DBUtil.java b/easy-trans-untrans-driver/src/main/java/org/dromara/trans/untrans/util/DBUtil.java similarity index 97% rename from easy-trans-untrans-driver/src/main/java/com/fhs/trans/untrans/util/DBUtil.java rename to easy-trans-untrans-driver/src/main/java/org/dromara/trans/untrans/util/DBUtil.java index 713b6b2..5033738 100644 --- a/easy-trans-untrans-driver/src/main/java/com/fhs/trans/untrans/util/DBUtil.java +++ b/easy-trans-untrans-driver/src/main/java/org/dromara/trans/untrans/util/DBUtil.java @@ -1,4 +1,4 @@ -package com.fhs.trans.untrans.util; +package org.dromara.trans.untrans.util; import lombok.Data; import org.apache.commons.dbutils.DbUtils; diff --git a/easy-trans-untrans-driver/src/main/resources/META-INF/spring.factories b/easy-trans-untrans-driver/src/main/resources/META-INF/spring.factories index eae6952..66c9dfe 100644 --- a/easy-trans-untrans-driver/src/main/resources/META-INF/spring.factories +++ b/easy-trans-untrans-driver/src/main/resources/META-INF/spring.factories @@ -1,2 +1,2 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - com.fhs.trans.untrans.config.UnTransDriverConfig + org.dromara.trans.untrans.config.UnTransDriverConfig diff --git a/easy-trans-untrans-driver/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/easy-trans-untrans-driver/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index a057d88..d686cdc 100644 --- a/easy-trans-untrans-driver/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/easy-trans-untrans-driver/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -com.fhs.trans.untrans.config.UnTransDriverConfig \ No newline at end of file +org.dromara.trans.untrans.config.UnTransDriverConfig \ No newline at end of file diff --git a/pom.xml b/pom.xml index d93a3a5..55b1bdc 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ oss-parent 7 - com.fhs-opensource + org.dromara https://gitee.com/fhs-opensource/easy_trans 4.0.0 easy-trans @@ -27,7 +27,7 @@ easy-trans-dependencies - 3.0.7 + 3.1.0 UTF-8 17 17 @@ -43,12 +43,12 @@ - com.fhs-opensource + org.dromara easy-trans-anno ${revision} - com.fhs-opensource + org.dromara easy-trans-service ${revision} -- Gitee From b6910913207f281dadb8d08471b76780d25035a0 Mon Sep 17 00:00:00 2001 From: wanglei <921888199@qq.com> Date: Mon, 21 Oct 2024 16:28:14 +0800 Subject: [PATCH 23/38] =?UTF-8?q?=E4=BF=AE=E6=94=B9readme=E9=87=8C?= =?UTF-8?q?=E9=9D=A2=E7=9A=84=E7=89=88=E6=9C=AC=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index dd35744..517cde2 100644 --- a/README.md +++ b/README.md @@ -52,8 +52,9 @@ https://gitee.com/fhs-opensource/vite_press_easy_trans 5 我有一个唯一键(比如手机号,身份证号码,但是非其他表id字段),但是我需要给客户展示他的title/name 但是我又不想自己手动做表关联查询 6 Excel导入场景,把 用户名 admin 反向翻译为 userid1 把男 反向翻译为 gender_1 (具体看官网文档) # 最新版本 -springboot3.x 最新easy-trans版本:3.0.6 springboot 2.x 最新easy-trans版本 2.2.17 - +springboot3.x 最新easy-trans版本:3.1.0 springboot 2.x 最新easy-trans版本 2.3.0 +# groupid和包名变更说明 +从3.1.0和2.3.0开始,包名和maven的groupid由com.fhs变更为dormara社区统一的org.dromara,以下版本不变。 # 食用步骤 ## 技术经理/架构 需要做的事情 @@ -64,7 +65,7 @@ starter--必须!!! org.dromara easy-trans-spring-boot-starter - 2.2.9 + 2.3.0 ``` Mybatis plus 扩展: @@ -72,7 +73,7 @@ starter--必须!!! org.dromara easy-trans-mybatis-plus-extend - 2.2.9 + 2.3.0 ``` JPA 扩展: @@ -80,7 +81,7 @@ starter--必须!!! org.dromara easy-trans-jpa-extend - 2.2.9 + 2.3.0 ``` JPA SpringBoot3 扩展(本扩如果没bug后面发布版本不在更新版本号): @@ -96,7 +97,7 @@ Beetl SQL 扩展: org.dromara easy-trans-beetl-sql-extend - 2.2.9 + 2.3.0 ``` TK Mybatis(通用mapper) 扩展: @@ -104,7 +105,7 @@ TK Mybatis(通用mapper) 扩展: org.dromara easy-trans-tk-extend - 2.2.9 + 2.3.0 ``` -- Gitee From fc14745aab0deb024b52eec35fa5e1af73ade22a Mon Sep 17 00:00:00 2001 From: wanglei <921888199@qq.com> Date: Mon, 28 Oct 2024 14:41:02 +0800 Subject: [PATCH 24/38] =?UTF-8?q?=E8=A7=A3=E5=86=B3ref=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E6=8C=87=E5=90=91=E4=B8=80=E4=B8=AApo=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E5=80=99=EF=BC=8C=E6=97=A0=E6=B3=95=E8=B5=8B=E5=80=BC=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../target/easy-trans-dependencies-3.1.0.pom | 54 +++++++++++++++++++ .../easy-trans-dependencies-3.1.0.pom.asc | 14 +++++ .../service/impl/SimpleTransService.java | 1 + pom.xml | 2 +- 4 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.1.0.pom create mode 100644 easy-trans-dependencies/target/easy-trans-dependencies-3.1.0.pom.asc diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.1.0.pom b/easy-trans-dependencies/target/easy-trans-dependencies-3.1.0.pom new file mode 100644 index 0000000..d358836 --- /dev/null +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.1.0.pom @@ -0,0 +1,54 @@ + + + 4.0.0 + + org.dromara + easy-trans + 3.1.0 + + org.dromara + easy-trans-dependencies + 3.1.0 + pom + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + + + + + org.dromara + easy-trans-anno + ${revision} + + + org.dromara + easy-trans-spring-boot-starter + ${revision} + + + org.dromara + easy-trans-beetl-sql-extend + ${revision} + + + org.dromara + easy-trans-mybatis-plus-extend + ${revision} + + + org.dromara + easy-trans-mybatis-flex-extend + ${revision} + + + org.dromara + easy-trans-tk-extend + ${revision} + + + + diff --git a/easy-trans-dependencies/target/easy-trans-dependencies-3.1.0.pom.asc b/easy-trans-dependencies/target/easy-trans-dependencies-3.1.0.pom.asc new file mode 100644 index 0000000..d2d2942 --- /dev/null +++ b/easy-trans-dependencies/target/easy-trans-dependencies-3.1.0.pom.asc @@ -0,0 +1,14 @@ +-----BEGIN PGP SIGNATURE----- + +iQGzBAABCAAdFiEEReTtXCh9VkDlzgVFf96UeDvg/LgFAmcWEiYACgkQf96UeDvg +/LjvBQwAxA3BKOEmddC+c6RTxTwmxC8y8HpqfN/GHpO47O5mTwQUXSsmhxIyqla4 +WR7NAcQSOu7o7pdz4ZIdXX9kbHlIU2GrCibiT5HP+bRv8HpTjj/czqs+ejyjlPdn +QYJBit4w0z+jN7N0Yb2deco35o53shfrIa/lCQTh5LiZGLDM/gL0oSeTKo8A0jYA +pE3omqMBGF8LWTyIt5pVkUy4UDfEGpf9p7jswrqYzV4Mm2GBuSharHFHHSPYbwFT +XsXdUgVLuIHa3awdHWXbcHRE+gEVt3dLn7duYoQUw5d+yhsaTb3qhUB07XBz6mgI +xRjy3j3eCLiApyXC/WLZgjEef7KM4vDm3d2ApT85bmlN/FbKxcZdofixck7iFL5m +Ylwj6stKLRNfcXF+bmGGQlnZ4imWYZtlvGSmW4PFPOQ/od9evztdgA1kfXuYeFbm +7he1zDWAFhfDkQzda688QvLfdDG6o4D/XGLgq91i7fX4roB1O++NEOw4s0pKK20B +ocWc8FbL +=0HQk +-----END PGP SIGNATURE----- diff --git a/easy-trans-service/src/main/java/org/dromara/trans/service/impl/SimpleTransService.java b/easy-trans-service/src/main/java/org/dromara/trans/service/impl/SimpleTransService.java index b0ac98f..f6a18a9 100644 --- a/easy-trans-service/src/main/java/org/dromara/trans/service/impl/SimpleTransService.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/service/impl/SimpleTransService.java @@ -371,6 +371,7 @@ public class SimpleTransService implements ITransTypeService, InitializingBean { for (String field : tempTrans.fields()) { resultMap.put(field, voCacheMap.get(field)); } + resultMap.put("targetObject",voCacheMap.get("targetObject")); return resultMap; } } diff --git a/pom.xml b/pom.xml index 55b1bdc..0bb0148 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ easy-trans-dependencies - 3.1.0 + 3.1.1 UTF-8 17 17 -- Gitee From 989bfd02ba9c57b40e688b7d0df89b14e76810c8 Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Mon, 28 Oct 2024 08:19:05 +0000 Subject: [PATCH 25/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 517cde2..88ef887 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,8 @@ kettle调度,kettle 任务/转换 在线设计 ,datax任务在线构建 调 # 插件文档 有问题先看文档哦!!! -http://easy-trans.fhs-opensource.top/ (如果服务器访问不了,需要看文档自己clone代码 npm run吧) + +主站:http://easy-trans.dromara.org/ 备用站:http://easy-trans.fhs-opensource.top/ https://gitee.com/fhs-opensource/vite_press_easy_trans # 求star 我们非常需要您的star支持,就是右上角的那个小星星,帮忙点一下吧,抱拳啦! -- Gitee From 0cef30f1a68328316f59a188c3d0f4c0cce9bbe1 Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Mon, 28 Oct 2024 08:20:01 +0000 Subject: [PATCH 26/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 88ef887..8869e9a 100644 --- a/README.md +++ b/README.md @@ -39,8 +39,8 @@ kettle调度,kettle 任务/转换 在线设计 ,datax任务在线构建 调 # 插件文档 有问题先看文档哦!!! -主站:http://easy-trans.dromara.org/ 备用站:http://easy-trans.fhs-opensource.top/ -https://gitee.com/fhs-opensource/vite_press_easy_trans +主站:http://easy-trans.dromara.org/ 备用站:http://easy-trans.fhs-opensource.top/ +文档源码:https://gitee.com/fhs-opensource/vite_press_easy_trans # 求star 我们非常需要您的star支持,就是右上角的那个小星星,帮忙点一下吧,抱拳啦! -- Gitee From 4dd9330fa53085eee945915126cab094d7362a9c Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Mon, 11 Nov 2024 10:30:12 +0000 Subject: [PATCH 27/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8869e9a..c6af409 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,8 @@ kettle调度,kettle 任务/转换 在线设计 ,datax任务在线构建 调 # 插件文档 有问题先看文档哦!!! -主站:http://easy-trans.dromara.org/ 备用站:http://easy-trans.fhs-opensource.top/ +主站:http://easy-trans.dromara.org/ 备用站:http://easy-trans.fhs-opensource.top/ +备备用站:http://124.221.106.115:8009/ 文档源码:https://gitee.com/fhs-opensource/vite_press_easy_trans # 求star 我们非常需要您的star支持,就是右上角的那个小星星,帮忙点一下吧,抱拳啦! -- Gitee From 4164e82a4526e1cf64fab640d8ebe68979b5f14f Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Wed, 27 Nov 2024 08:22:27 +0000 Subject: [PATCH 28/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index c6af409..58bc460 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,45 @@ +-------------------------------------------------------------------------------- # AD部分 -公司有整套商业版数据中台源码出售,基于doris实现的数据仓库,支持PB级别的数据存储分析,功能模块如下: + 公司有整套商业版数据中台源码出售,基于doris实现的数据仓库,支持PB级别的数据存储分析,功能模块如下: ## 功能模块 ### 1、数据源管理 +支持各类关系型数据库、非关系型数据库。 ### 2、元数据管理 -元模型、最新元数据 +元模型、最新元数据、定版元数据、数据全景图、数据血缘、数据影响分析、多版本元数据对比 ### 3、数据标准管理 标准词根、标准字典、数据元、标准模型、发布、多版本维护、数据标准核对 ### 4、数据仓库管理 -支持主题域、主题、数仓集群、维度建模、模型运维、模型审计、模型数据查看、数仓备份和恢复 +支持主题域、主题、数仓集群、维度建模、模型运维、模型审计、模型数据查看 ### 5、数据质量 规则定义,任务执行,结果查看,统计分析,质量问题修复日志 -### 6、数据血缘 -数据血缘,数据流向 +### 6、数据指标 +数据指标在线开发,数据指标地图 ### 7、数据标签 标签对象、标签管理、置标任务、标签圈群、标签画像 -### 8、数据服务 -接口在线开发(支持通过JS脚本对数据进行处理后返回,支持动态SQL),接口测试,接口发布,应用管理,应用授权 -## 9、资产目录 -目录编目,资产项授权,资产项查看,资产项申请 -### 10、数据集成 -kettle调度,kettle 任务/转换 在线设计 ,datax任务在线构建 调度执行 drois多数据目录维护,简易ETL、FLINK +### 8、数据安全 +分级分类、数据脱敏、分级分类授权 +### 9、数据生命周期 +数据归档,数据恢复 +### 10、数据服务 +接口在线开发(支持通过JS脚本对数据进行处理后返回,支持动态SQL),API注册(手写代码开发的接口注册到数据服务中),接口测试,接口发布,应用管理,应用授权 +## 11、数据资产 +数据资产标签、数据资产目录、数据资产门户、数据资产申请试用 +### 10、数据集成/开发 +实时开发(支持CDC)、离线开发(支持数据库、csv、excel、接口、ftp、kafka、mqtt、mongodb等数据源接入),在线拖拉拽生成数据集成任务 ### 11、数据可视化 -数据集,报表管理,报表设计,报表查看 +数据集,报表管理,报表设计,报表查看、知识图谱构建、知识图谱查看 +### 12、数据运维 +微服务监控、中间件监控、服务器监控、数据仓库定时备份恢复、数据服务接口监控。 +### 13、系统日志 +syslog查询、syslog实时查看、登录日志、审计日志 +### 14、主数据 +主数据模型管理、自动生成代码码段管理、主数据管理、主数据分发 ## 技术栈 后端:Java springboot2.7 springcloud/alibaba mybatis plus hutool 等常见技术 前端:vue elementui vite 等常见技术 中间件:doris,mysql,redis,rabbitmq,minio,zookeeper。 ### 有演示环境和方案PPT,需要加V:abcd19920605 + # 以下为本项目正文 # easy_trans ![输入图片说明](images/logo.png) -- Gitee From 725d7cfa0dfbad20075b66f0ef1d2e4f51bb2352 Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Wed, 27 Nov 2024 08:22:35 +0000 Subject: [PATCH 29/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 58bc460..7e351ef 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ --------------------------------------------------------------------------------- + # AD部分 公司有整套商业版数据中台源码出售,基于doris实现的数据仓库,支持PB级别的数据存储分析,功能模块如下: ## 功能模块 -- Gitee From f554f262780c56081b2c012c4e64021ad333e3f6 Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Wed, 27 Nov 2024 08:24:17 +0000 Subject: [PATCH 30/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 7e351ef..a147d4a 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,8 @@ syslog查询、syslog实时查看、登录日志、审计日志 前端:vue elementui vite 等常见技术 中间件:doris,mysql,redis,rabbitmq,minio,zookeeper。 ### 有演示环境和方案PPT,需要加V:abcd19920605 +## 架构 +![](/images/jiagou.png) # 以下为本项目正文 # easy_trans -- Gitee From eb25d122fe89895a4fccfe91727ed699bf3355a1 Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Wed, 27 Nov 2024 08:24:40 +0000 Subject: [PATCH 31/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a147d4a..030e5c0 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ syslog查询、syslog实时查看、登录日志、审计日志 中间件:doris,mysql,redis,rabbitmq,minio,zookeeper。 ### 有演示环境和方案PPT,需要加V:abcd19920605 ## 架构 -![](/images/jiagou.png) +![输入图片说明](images/jiagou.png) # 以下为本项目正文 # easy_trans -- Gitee From b3810c3ff26487f4b29b347c34fb4081166e30cd Mon Sep 17 00:00:00 2001 From: wanglei <921888199@qq.com> Date: Wed, 27 Nov 2024 16:25:30 +0800 Subject: [PATCH 32/38] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9E=B6=E6=9E=84?= =?UTF-8?q?=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/jiagou.png | Bin 0 -> 123496 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/jiagou.png diff --git a/images/jiagou.png b/images/jiagou.png new file mode 100644 index 0000000000000000000000000000000000000000..d4b31eace0b84024aa4fedf68013a8948e993113 GIT binary patch literal 123496 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 Date: Wed, 27 Nov 2024 08:26:16 +0000 Subject: [PATCH 33/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 030e5c0..39f8ce9 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,6 @@ syslog查询、syslog实时查看、登录日志、审计日志 ### 有演示环境和方案PPT,需要加V:abcd19920605 ## 架构 ![输入图片说明](images/jiagou.png) - # 以下为本项目正文 # easy_trans ![输入图片说明](images/logo.png) -- Gitee From d68731fe2ec50e1286f028ceb6a4c1e5085b72ed Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Wed, 27 Nov 2024 08:27:09 +0000 Subject: [PATCH 34/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 39f8ce9..86d7f55 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ syslog查询、syslog实时查看、登录日志、审计日志 中间件:doris,mysql,redis,rabbitmq,minio,zookeeper。 ### 有演示环境和方案PPT,需要加V:abcd19920605 ## 架构 -![输入图片说明](images/jiagou.png) +![输入图片说明](https://gitee.com/dromara/easy_trans/raw/master/images/jiagou.png) # 以下为本项目正文 # easy_trans ![输入图片说明](images/logo.png) -- Gitee From bdace9b061996e35ec619070137932db31dd5d04 Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Fri, 6 Dec 2024 07:58:58 +0000 Subject: [PATCH 35/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 86d7f55..6d7de20 100644 --- a/README.md +++ b/README.md @@ -53,13 +53,12 @@ syslog查询、syslog实时查看、登录日志、审计日志 # 插件文档 有问题先看文档哦!!! -主站:http://easy-trans.dromara.org/ 备用站:http://easy-trans.fhs-opensource.top/ -备备用站:http://124.221.106.115:8009/ +主站:http://easy-trans.dromara.org/ 备用站:http://easy-trans.fhs-opensource.cn/ 文档源码:https://gitee.com/fhs-opensource/vite_press_easy_trans # 求star 我们非常需要您的star支持,就是右上角的那个小星星,帮忙点一下吧,抱拳啦! -## easy trans适用于6种场景 +## Dromara Easy Trans适用于6种场景 1 我有一个id,但是我需要给客户展示他的title/name 但是我又不想自己手动做表关联查询 2 我有一个字典码 sex 和 一个字典值0 我希望能翻译成 男 给客户展示。 -- Gitee From ea868c598dd747aad552081cb853561b5679c4ae Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Fri, 6 Dec 2024 07:59:27 +0000 Subject: [PATCH 36/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6d7de20..da98f09 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ syslog查询、syslog实时查看、登录日志、审计日志 ## 架构 ![输入图片说明](https://gitee.com/dromara/easy_trans/raw/master/images/jiagou.png) # 以下为本项目正文 -# easy_trans +# Dromara Easy Trans ![输入图片说明](images/logo.png) # 介绍 -- Gitee From dc5d65725d9ffa15c83eab70195a6ffbd24bbac5 Mon Sep 17 00:00:00 2001 From: fhs_opensource <374940117@qq.com> Date: Fri, 6 Dec 2024 08:05:17 +0000 Subject: [PATCH 37/38] update README.md. Signed-off-by: fhs_opensource <374940117@qq.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index da98f09..0123762 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ syslog查询、syslog实时查看、登录日志、审计日志 5 我有一个唯一键(比如手机号,身份证号码,但是非其他表id字段),但是我需要给客户展示他的title/name 但是我又不想自己手动做表关联查询 6 Excel导入场景,把 用户名 admin 反向翻译为 userid1 把男 反向翻译为 gender_1 (具体看官网文档) # 最新版本 -springboot3.x 最新easy-trans版本:3.1.0 springboot 2.x 最新easy-trans版本 2.3.0 +springboot3.x 最新easy-trans版本:3.1.1 springboot 2.x 最新easy-trans版本 2.3.1 # groupid和包名变更说明 从3.1.0和2.3.0开始,包名和maven的groupid由com.fhs变更为dormara社区统一的org.dromara,以下版本不变。 -- Gitee From f852e65d525abd4638e4b4de32a4fa1ffa09121a Mon Sep 17 00:00:00 2001 From: zhengwunong <704199387@qq.com> Date: Wed, 15 Jan 2025 01:32:50 +0000 Subject: [PATCH 38/38] =?UTF-8?q?update=20easy-trans-service/src/main/java?= =?UTF-8?q?/org/dromara/trans/ds/DataSourceSetter.java.=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=B8=85=E7=A9=BA=E6=9C=AC=E5=9C=B0=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=BA=90=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhengwunong <704199387@qq.com> --- .../main/java/org/dromara/trans/ds/DataSourceSetter.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/easy-trans-service/src/main/java/org/dromara/trans/ds/DataSourceSetter.java b/easy-trans-service/src/main/java/org/dromara/trans/ds/DataSourceSetter.java index 38de365..3fecaef 100644 --- a/easy-trans-service/src/main/java/org/dromara/trans/ds/DataSourceSetter.java +++ b/easy-trans-service/src/main/java/org/dromara/trans/ds/DataSourceSetter.java @@ -24,4 +24,12 @@ public interface DataSourceSetter { * @param context */ void setContext(Map context); + + /** + * 清空本地线程数据源 + *

+ * 防止内存泄漏,如手动调用了push可调用此方法确保清除 + *

+ */ + void clear(String dataSourceName); } -- Gitee