From b687b6efd15b1994a3c39e2f101aac85aea911a1 Mon Sep 17 00:00:00 2001 From: caihaohan Date: Wed, 7 Aug 2024 20:17:34 +0800 Subject: [PATCH] =?UTF-8?q?fix:=2088247=20=E4=BC=81=E4=B8=9A=E6=A0=87?= =?UTF-8?q?=E5=87=86-=E9=A1=BA=E5=BA=8F=E5=8F=B7=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E7=94=9F=E6=88=90=EF=BC=8C=E5=88=A0=E9=99=A4=E5=90=8E=E5=86=8D?= =?UTF-8?q?=E6=AC=A1=E6=96=B0=E5=A2=9E=E5=BA=94=E8=AF=A5+1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../intercepts/LogicDeleteInterceptor.java | 66 +++++++++++++++++++ .../LawsEnterpriseStandardServiceImpl.java | 6 +- 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 laws-modules/src/main/java/com/jero/modules/laws/intercepts/LogicDeleteInterceptor.java diff --git a/laws-modules/src/main/java/com/jero/modules/laws/intercepts/LogicDeleteInterceptor.java b/laws-modules/src/main/java/com/jero/modules/laws/intercepts/LogicDeleteInterceptor.java new file mode 100644 index 00000000..49b2de2e --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/laws/intercepts/LogicDeleteInterceptor.java @@ -0,0 +1,66 @@ +package com.jero.modules.laws.intercepts; + +import com.baomidou.mybatisplus.core.toolkit.PluginUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.executor.statement.StatementHandler; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.SqlCommandType; +import org.apache.ibatis.plugin.*; +import org.apache.ibatis.reflection.MetaObject; +import org.apache.ibatis.reflection.SystemMetaObject; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.sql.Connection; +import java.util.Properties; + +@Slf4j +@Component +@Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})}) +public class LogicDeleteInterceptor implements Interceptor { + + @Value("${mybatis-plus.global-config.db-config.logic-delete-field}") + private String logicDeleteField; + + @Value("${mybatis-plus.global-config.db-config.logic-delete-value}") + private String logicDeleteValue; + + @Value("${mybatis-plus.global-config.db-config.logic-not-delete-value}") + private String logicNotDelValue; + + // 通过ThreadLocal给当前线程打上标识 + public static ThreadLocal logicDelete = new ThreadLocal<>(); + + @Override + public Object intercept(Invocation invocation) throws Throwable { + log.info("====SqlModifyInterceptor======(" + logicDelete.get() + ")====="); + // 判断线程标识 + if (!Boolean.FALSE.equals(logicDelete.get())) { + return invocation.proceed(); + } + StatementHandler statementHandler = PluginUtils.realTarget(invocation.getTarget()); + MetaObject metaObject = SystemMetaObject.forObject(statementHandler); + MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement"); + if (!SqlCommandType.SELECT.equals(mappedStatement.getSqlCommandType())) { + return invocation.proceed(); + } + BoundSql boundSql = (BoundSql) metaObject.getValue("delegate.boundSql"); + String sql = boundSql.getSql(); + log.info("origin sql:" + sql); + // 在这里替换字段,改成不影响结果的条件即可 + sql = sql.replace(logicDeleteField + " = " + logicNotDelValue, "1=1"); + metaObject.setValue("delegate.boundSql.sql", sql); + log.info("modify sql:" + sql); + return invocation.proceed(); + } + + @Override + public Object plugin(Object target) { + return Plugin.wrap(target, this); + } + + @Override + public void setProperties(Properties properties) { + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/LawsEnterpriseStandardServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/LawsEnterpriseStandardServiceImpl.java index 9f5f95bf..445ab442 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/LawsEnterpriseStandardServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/LawsEnterpriseStandardServiceImpl.java @@ -11,6 +11,7 @@ import com.jero.common.exception.JeroBootException; import com.jero.modules.activiti.process.common.enums.StandardStateEnum; import com.jero.modules.laws.enterprise.service.ESSequenceNumberProvider; import com.jero.modules.laws.enterprise.util.EnterpriseStandardUtil; +import com.jero.modules.laws.intercepts.LogicDeleteInterceptor; import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard; import com.jero.modules.laws.standard.mapper.LawsEnterpriseStandardMapper; import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService; @@ -84,8 +85,11 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl esList = this.list(lambdaQueryWrapper); - + // 关闭逻辑删除失效 + LogicDeleteInterceptor.logicDelete.remove(); return esList.stream() .filter(s -> StrUtil.isNotBlank(s.getStandardNumberTemp()))