package com.panzhihua.service_community.config;
|
|
import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
|
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import org.apache.ibatis.executor.Executor;
|
import org.apache.ibatis.executor.statement.StatementHandler;
|
import org.apache.ibatis.mapping.BoundSql;
|
import org.apache.ibatis.mapping.MappedStatement;
|
import org.apache.ibatis.mapping.ParameterMapping;
|
import org.apache.ibatis.plugin.*;
|
import org.apache.ibatis.reflection.DefaultReflectorFactory;
|
import org.apache.ibatis.reflection.MetaObject;
|
import org.apache.ibatis.reflection.SystemMetaObject;
|
import org.apache.ibatis.session.ResultHandler;
|
import org.apache.ibatis.session.RowBounds;
|
import org.springframework.stereotype.Component;
|
|
import java.lang.reflect.Field;
|
import java.sql.SQLException;
|
import java.sql.Statement;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
public class MybatisHmkInterceptor implements InnerInterceptor {
|
@Override
|
public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
|
String sql=boundSql.getSql();
|
if(parameter instanceof Long){
|
if(sql.contains("community_id = ?")&&(long)parameter==10086){
|
sql=sql.replace("community_id = ?","community_id in (?)");
|
parameter="30,31";
|
boundSql.setAdditionalParameter("communityId",parameter);
|
PluginUtils.mpBoundSql(boundSql).sql(sql);
|
}
|
}
|
if(parameter instanceof Map){
|
if(sql.contains("community_id = ?")){
|
List<ParameterMapping> parameterMappingList=new ArrayList<>();
|
if(((Map<?, ?>) parameter).containsValue(10086L)){
|
List<ParameterMapping> parameterMappings=boundSql.getParameterMappings();
|
parameterMappings.forEach(parameterMapping -> {
|
if (parameterMapping.getProperty().equals("communityId")){
|
ParameterMapping parameterMapping1=new ParameterMapping.Builder(ms.getConfiguration(),parameterMapping.getProperty(),Object.class).build();
|
parameterMappingList.add(parameterMapping1);
|
}
|
else {
|
parameterMappingList.add(parameterMapping);
|
}
|
});
|
sql=sql.replace("community_id = ?","community_id in (?)");
|
((Map<?,?>) parameter).replaceAll((k,v)->{
|
if(v.toString().contains("10086")){
|
boundSql.setAdditionalParameter(k.toString(),"30,31");
|
}
|
return v;
|
});
|
PluginUtils.mpBoundSql(boundSql).parameterMappings(parameterMappingList);
|
PluginUtils.mpBoundSql(boundSql).sql(sql);
|
}
|
else{
|
if(((Map<?, ?>) parameter).containsKey("arg0")){
|
Map<?, ?> param= (Map<?, ?>) boundSql.getAdditionalParameter("_parameter");
|
String finalSql = sql;
|
param.forEach((k, v)->{
|
try {
|
Field field= v.getClass().getDeclaredField("communityId");
|
if(field!=null){
|
field.setAccessible(true);
|
if((long)field.get(v)==10086L){
|
String sql1= finalSql.replace("community_id = ?","community_id in (30,31)");
|
boundSql.getParameterMappings().forEach(parameterMapping -> {
|
if(!parameterMapping.getProperty().contains("communityId")){
|
parameterMappingList.add(parameterMapping);
|
}
|
});
|
PluginUtils.mpBoundSql(boundSql).parameterMappings(parameterMappingList);
|
PluginUtils.mpBoundSql(boundSql).sql(sql1);
|
}
|
}
|
} catch (IllegalAccessException e) {
|
e.printStackTrace();
|
} catch (NoSuchFieldException e) {
|
|
}
|
});
|
}
|
}
|
}
|
}
|
InnerInterceptor.super.beforeQuery(executor, ms, parameter, rowBounds, resultHandler, boundSql);
|
}
|
|
}
|