fix: 88247 企业标准-顺序号自动生成,删除后再次新增应该+1

This commit is contained in:
2024-08-07 20:17:55 +08:00
parent 170fe1aa7a
commit b687b6efd1
2 changed files with 71 additions and 1 deletions
@@ -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<Boolean> 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) {
}
}
@@ -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<LawsEnterpris
lambdaQueryWrapper.eq(LawsEnterpriseStandard::getNameCode, esNameCodeDictValue);
lambdaQueryWrapper.eq(StrUtil.isNotBlank(categoryCodeDictValue), LawsEnterpriseStandard::getCategoryCode, categoryCodeDictValue);
lambdaQueryWrapper.isNull(StrUtil.isBlank(categoryCodeDictValue) ,LawsEnterpriseStandard::getCategoryCode);
// 开启逻辑删除失效
LogicDeleteInterceptor.logicDelete.set(false);
List<LawsEnterpriseStandard> esList = this.list(lambdaQueryWrapper);
// 关闭逻辑删除失效
LogicDeleteInterceptor.logicDelete.remove();
return esList.stream()
.filter(s -> StrUtil.isNotBlank(s.getStandardNumberTemp()))