mitao
2025-05-20 179c4d64313c9b7572778da4aaaf6c6584fe457d
springcloud_k8s_panzhihuazhihuishequ/service_grid/src/main/java/com/panzhihua/service_grid/config/MybatisHmkInterceptor.java
@@ -5,81 +5,18 @@
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import java.lang.reflect.Field;
import java.sql.SQLException;
import java.util.ArrayList;
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);
            if(sql.contains("community_id = 10086")){
                sql=sql.replace("community_id = 10086","community_id in (30,31)");
                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);
    }