From f74779d0ad5b9c67a048e4353d065fbae219c63b Mon Sep 17 00:00:00 2001
From: Leo <98382335+gaoziman@users.noreply.github.com>
Date: Fri, 26 Sep 2025 16:37:26 +0800
Subject: [PATCH] =?UTF-8?q?feat(plugin):=20=E6=96=B0=E5=A2=9E=E5=AD=97?=
=?UTF-8?q?=E5=85=B8=E7=BF=BB=E8=AF=91=E6=8F=92=E4=BB=B6=E6=A8=A1=E5=9D=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 新增coder-common-thin-dict插件模块
- 实现CoderDictAspect AOP切面自动字典翻译
- 支持@CoderDict和@CoderDictClass注解
- 自动翻译List、Page和单对象返回结果
- 集成Redis缓存提升翻译性能
- 提供@EnableCoderDict启用注解
---
.../coder-common-thin-dict/pom.xml | 35 +++
.../thin/dict/anno/EnableCoderDict.java | 16 ++
.../thin/dict/aspect/CoderDictAspect.java | 212 ++++++++++++++++++
.../thin/dict/aspect/CoderDictModel.java | 21 ++
4 files changed, 284 insertions(+)
create mode 100644 coder-common-thin-plugins/coder-common-thin-dict/pom.xml
create mode 100644 coder-common-thin-plugins/coder-common-thin-dict/src/main/java/org/leocoder/thin/dict/anno/EnableCoderDict.java
create mode 100644 coder-common-thin-plugins/coder-common-thin-dict/src/main/java/org/leocoder/thin/dict/aspect/CoderDictAspect.java
create mode 100644 coder-common-thin-plugins/coder-common-thin-dict/src/main/java/org/leocoder/thin/dict/aspect/CoderDictModel.java
diff --git a/coder-common-thin-plugins/coder-common-thin-dict/pom.xml b/coder-common-thin-plugins/coder-common-thin-dict/pom.xml
new file mode 100644
index 0000000..f30e5d8
--- /dev/null
+++ b/coder-common-thin-plugins/coder-common-thin-dict/pom.xml
@@ -0,0 +1,35 @@
+
+
+ 4.0.0
+
+ org.leocoder.thin
+ coder-common-thin-plugins
+ ${revision}
+
+
+ coder-common-thin-dict
+ coder-common-thin-dict
+ 字典翻译插件
+
+
+
+
+ org.leocoder.thin
+ coder-common-thin-common
+ ${revision}
+
+
+
+ org.leocoder.thin
+ coder-common-thin-model
+ ${revision}
+
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
+
+
\ No newline at end of file
diff --git a/coder-common-thin-plugins/coder-common-thin-dict/src/main/java/org/leocoder/thin/dict/anno/EnableCoderDict.java b/coder-common-thin-plugins/coder-common-thin-dict/src/main/java/org/leocoder/thin/dict/anno/EnableCoderDict.java
new file mode 100644
index 0000000..1567534
--- /dev/null
+++ b/coder-common-thin-plugins/coder-common-thin-dict/src/main/java/org/leocoder/thin/dict/anno/EnableCoderDict.java
@@ -0,0 +1,16 @@
+package org.leocoder.thin.dict.anno;
+
+import org.leocoder.thin.common.utils.cache.RedisUtil;
+import org.leocoder.thin.dict.aspect.CoderDictAspect;
+import org.springframework.context.annotation.Import;
+
+import java.lang.annotation.*;
+
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+@Inherited
+@Import({CoderDictAspect.class, RedisUtil.class})
+public @interface EnableCoderDict {
+
+}
\ No newline at end of file
diff --git a/coder-common-thin-plugins/coder-common-thin-dict/src/main/java/org/leocoder/thin/dict/aspect/CoderDictAspect.java b/coder-common-thin-plugins/coder-common-thin-dict/src/main/java/org/leocoder/thin/dict/aspect/CoderDictAspect.java
new file mode 100644
index 0000000..b8cf5b5
--- /dev/null
+++ b/coder-common-thin-plugins/coder-common-thin-dict/src/main/java/org/leocoder/thin/dict/aspect/CoderDictAspect.java
@@ -0,0 +1,212 @@
+package org.leocoder.thin.dict.aspect;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.leocoder.thin.common.anno.CoderDict;
+import org.leocoder.thin.common.anno.CoderDictClass;
+import org.leocoder.thin.common.constants.CoderCacheConstants;
+import org.leocoder.thin.common.utils.cache.RedisUtil;
+import org.leocoder.thin.domain.pojo.system.SysDictData;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Leocoder
+ * @description [CoderDictAspect]
+ */
+@Aspect
+@Order(4)
+@Component
+@Slf4j
+public class CoderDictAspect {
+
+ private Map dictMap = new HashMap<>();
+
+ @Resource
+ private RedisUtil redisUtil;
+
+ @Pointcut("@annotation(org.leocoder.thin.common.anno.CoderDictClass)")
+ public void logPointCut() {
+ }
+
+ /**
+ * @description [翻译数据]
+ * 需要处理的数据类型:
+ * 1、分页数据R>
+ * 2、普通列表R>
+ * 3、普通数据R
+ * @author Leocoder
+ */
+ @Around("@annotation(CoderDictClass)")
+ public Object CoderTypeDictTranslation(final ProceedingJoinPoint proceedingJoinPoint, CoderDictClass CoderDictClass) throws Throwable {
+ Object proceed = proceedingJoinPoint.proceed();
+ if (ObjectUtils.isEmpty(proceed)) {
+ return proceed;
+ }
+ if (proceed instanceof List) {
+ // 数据字典翻译
+ List