From 9894ac7a348d62241d52d176bb00676e45c7bcf6 Mon Sep 17 00:00:00 2001 From: aguanleishen Date: Wed, 22 Jul 2026 17:04:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0OA=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/cloud/feign/BladeFeignFallback.java | 16 +++++ blade-core-tool/pom.xml | 6 ++ .../core/tool/support/NoErrorFallback.java | 9 +++ .../springblade/core/tool/utils/DateUtil.java | 3 + .../core/log/utils/LogTraceUtil.java | 3 + .../core/mp/config/MyMetaObjectHandler.java | 71 +++++++++++++++++++ .../mp/config/MybatisPlusConfiguration.java | 7 ++ pom.xml | 7 ++ 8 files changed, 122 insertions(+) create mode 100644 blade-core-tool/src/main/java/org/springblade/core/tool/support/NoErrorFallback.java create mode 100644 blade-starter-mybatis/src/main/java/org/springblade/core/mp/config/MyMetaObjectHandler.java diff --git a/blade-core-cloud/src/main/java/org/springblade/core/cloud/feign/BladeFeignFallback.java b/blade-core-cloud/src/main/java/org/springblade/core/cloud/feign/BladeFeignFallback.java index 5e21990..743bcb1 100644 --- a/blade-core-cloud/src/main/java/org/springblade/core/cloud/feign/BladeFeignFallback.java +++ b/blade-core-cloud/src/main/java/org/springblade/core/cloud/feign/BladeFeignFallback.java @@ -40,6 +40,12 @@ import org.springframework.lang.Nullable; import java.lang.reflect.Method; import java.util.*; +import org.springblade.core.tool.support.NoErrorFallback; +import org.springframework.http.HttpStatus; +import org.springblade.core.tool.utils.StringUtil; +import com.alibaba.fastjson2.JSON; + + /** * blade fallBack 代理处理 * @@ -69,6 +75,16 @@ public class BladeFeignFallback implements MethodInterceptor { if (Map.class == returnType) { return Collections.emptyMap(); } + if (cause instanceof FeignException feignException) { + if (feignException.status() == HttpStatus.INTERNAL_SERVER_ERROR.value() && NoErrorFallback.class.isAssignableFrom(returnType)) { + // 500 错误并且 继承了 NoErrorFallback,不拦截 + String body = feignException.contentUTF8(); + if (StringUtil.isBlank(body)) { + return null; + } + return JSON.parseObject(body, returnType); + } + } // 暂时不支持 flux,rx,异步等,返回值不是 R,直接返回 null。 if (R.class != returnType) { return null; diff --git a/blade-core-tool/pom.xml b/blade-core-tool/pom.xml index 043ea46..1943949 100644 --- a/blade-core-tool/pom.xml +++ b/blade-core-tool/pom.xml @@ -82,6 +82,12 @@ blade-core-auto provided + + + cn.hutool + hutool-all + + diff --git a/blade-core-tool/src/main/java/org/springblade/core/tool/support/NoErrorFallback.java b/blade-core-tool/src/main/java/org/springblade/core/tool/support/NoErrorFallback.java new file mode 100644 index 0000000..bba9962 --- /dev/null +++ b/blade-core-tool/src/main/java/org/springblade/core/tool/support/NoErrorFallback.java @@ -0,0 +1,9 @@ +package org.springblade.core.tool.support; + +/** + * 不拦截标识接口 + * @author bfhuange + * @date 2024/9/20 + */ +public interface NoErrorFallback { +} diff --git a/blade-core-tool/src/main/java/org/springblade/core/tool/utils/DateUtil.java b/blade-core-tool/src/main/java/org/springblade/core/tool/utils/DateUtil.java index e56ab4a..b1e2793 100644 --- a/blade-core-tool/src/main/java/org/springblade/core/tool/utils/DateUtil.java +++ b/blade-core-tool/src/main/java/org/springblade/core/tool/utils/DateUtil.java @@ -25,6 +25,9 @@ public class DateUtil { public static final String PATTERN_DATETIME_MINI = "yyyyMMddHHmmss"; public static final String PATTERN_DATE = "yyyy-MM-dd"; public static final String PATTERN_TIME = "HH:mm:ss"; + + public static final String PATTERN_TIME_MINI = "yyyy-MM-dd HH:mm"; + /** * 老 date 格式化 */ diff --git a/blade-starter-log/src/main/java/org/springblade/core/log/utils/LogTraceUtil.java b/blade-starter-log/src/main/java/org/springblade/core/log/utils/LogTraceUtil.java index decc846..9c30239 100644 --- a/blade-starter-log/src/main/java/org/springblade/core/log/utils/LogTraceUtil.java +++ b/blade-starter-log/src/main/java/org/springblade/core/log/utils/LogTraceUtil.java @@ -59,4 +59,7 @@ public class LogTraceUtil { return true; } + public static String getTraceIdFromMDC() { + return MDC.get(UNIQUE_ID); + } } diff --git a/blade-starter-mybatis/src/main/java/org/springblade/core/mp/config/MyMetaObjectHandler.java b/blade-starter-mybatis/src/main/java/org/springblade/core/mp/config/MyMetaObjectHandler.java new file mode 100644 index 0000000..0e520e6 --- /dev/null +++ b/blade-starter-mybatis/src/main/java/org/springblade/core/mp/config/MyMetaObjectHandler.java @@ -0,0 +1,71 @@ +package org.springblade.core.mp.config; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import org.apache.ibatis.reflection.MetaObject; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tool.constant.BladeConstant; +import org.springblade.core.tool.utils.StringUtil; + +import java.util.Date; + +/** + * 自动填充字段处理器 + * @author bfhuange + * @date 2024/8/29 + **/ +public class MyMetaObjectHandler implements MetaObjectHandler { + /** + * 插入操作,自动填充 + * + * @param metaObject + */ + @Override + public void insertFill(MetaObject metaObject) { + Long userId = AuthUtil.getUserId(); + String tenantId = AuthUtil.getTenantId(); + if (StringUtil.isBlank(tenantId)) { + tenantId = BladeConstant.ADMIN_TENANT_ID; + } + String userName = AuthUtil.getNickName(); + + this.strictInsertFill(metaObject, "tenantId", String.class, tenantId); + this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); + this.strictInsertFill(metaObject, "updateTime", Date.class, new Date()); + this.strictInsertFill(metaObject, "createUser", Long.class, userId); + this.strictInsertFill(metaObject, "updateUser", Long.class, userId); + this.strictInsertFill(metaObject, "status", Integer.class, BladeConstant.DB_STATUS_NORMAL); + this.strictInsertFill(metaObject, "isDeleted", Integer.class, BladeConstant.DB_NOT_DELETED); + this.strictInsertFill(metaObject, "createUserName", String.class, userName); + this.strictInsertFill(metaObject, "updateUserName", String.class, userName); + } + + /** + * 更新操作,自动填充 + * + * @param metaObject + */ + @Override + public void updateFill(MetaObject metaObject) { + Long userId = AuthUtil.getUserId(); + String userName = AuthUtil.getNickName(); + this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date()); + this.strictUpdateFill(metaObject, "updateUser", Long.class, userId); + this.strictUpdateFill(metaObject, "updateUserName", String.class, userName); + } + + /** + * 获取创建人部门id + * @return + */ + private Long getCreateDeptId() { + String deptIdStr = AuthUtil.getDeptId(); + if (deptIdStr != null && !deptIdStr.isEmpty()) { + try { + return Long.parseLong(deptIdStr); + } catch (Exception ignore) { + return null; + } + } + return null; + } +} diff --git a/blade-starter-mybatis/src/main/java/org/springblade/core/mp/config/MybatisPlusConfiguration.java b/blade-starter-mybatis/src/main/java/org/springblade/core/mp/config/MybatisPlusConfiguration.java index 2a7ee17..c8f8323 100644 --- a/blade-starter-mybatis/src/main/java/org/springblade/core/mp/config/MybatisPlusConfiguration.java +++ b/blade-starter-mybatis/src/main/java/org/springblade/core/mp/config/MybatisPlusConfiguration.java @@ -27,6 +27,7 @@ package org.springblade.core.mp.config; import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties.CoreConfiguration; import com.baomidou.mybatisplus.autoconfigure.MybatisPlusPropertiesCustomizer; +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.baomidou.mybatisplus.core.injector.ISqlInjector; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; @@ -73,6 +74,12 @@ import java.util.List; @BladePropertySource(value = "classpath:/blade-mybatis.yml") public class MybatisPlusConfiguration implements WebMvcConfigurer { + @Bean + @ConditionalOnMissingBean + public MetaObjectHandler metaObjectHandler() { + return new MyMetaObjectHandler(); + } + /** * 分页拦截器 */ diff --git a/pom.xml b/pom.xml index 31564bc..edb9618 100644 --- a/pom.xml +++ b/pom.xml @@ -935,6 +935,13 @@ bcprov-jdk18on 1.82 + + + cn.hutool + hutool-all + 5.8.27 + +