package com.zhgd.magic; import com.zhgd.xmgl.security.SecurityUser; import com.zhgd.xmgl.modules.basicdata.service.IProjectService; import com.zhgd.xmgl.security.SecurityUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import org.ssssssss.magicapi.core.context.RequestEntity; import org.ssssssss.magicapi.modules.db.BoundSql; import org.ssssssss.magicapi.modules.db.inteceptor.SQLInterceptor; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @Component public class MagicInterceptor implements SQLInterceptor { @Lazy @Autowired private IProjectService projectService; @Override public void preHandle(BoundSql boundSql, RequestEntity requestEntity) { dataScopeFilterByProject(boundSql); System.out.println("要执行的SQL:" + boundSql.getSql()); System.out.println("要执行的SQL参数:" + Arrays.toString(boundSql.getParameters())); // 这里也可以通过boundSql的方法改写SQL和参数 } private void dataScopeFilterByProject(BoundSql boundSql) { SecurityUser user = SecurityUtil.getUser(); String sql = boundSql.getSql(); if (user.getAccountType() == 2) { if (sql.contains("#gov")) { if (sql.contains("#govalias")) { sql = sql.replace("#govalias", "a.government_sn = '" + user.getSn() + "'"); } else { sql = sql.replace("#gov", "government_sn = '" + user.getSn() + "'"); } } if (sql.contains("#project")) { List projectSns = projectService.getSnListForGov(user.getSn()); if (projectSns.size() == 0) { projectSns.add("0"); } String projectSn = projectSns.stream().collect(Collectors.joining("','")); if (sql.contains("#projectalias")) { sql = sql.replace("#projectalias", "a.project_sn in ('"+ projectSn +"')"); } else { sql = sql.replace("#project", "project_sn in ('" + projectSn + "')"); } } } else if (user.getAccountType() == 4){ if (sql.contains("#project")) { if (sql.contains("#projectalias")) { sql = sql.replace("#projectalias", "a.project_sn = ('"+ user.getSn() +"')"); } else { sql = sql.replace("#project", "project_sn = ('" + user.getSn() + "')"); } } } boundSql.setSql(sql); System.out.println(boundSql); } }