wisdomisitezw_java/src/main/java/com/zhgd/magic/MagicInterceptor.java
2024-03-21 11:01:12 +08:00

68 lines
2.7 KiB
Java

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<String> 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);
}
}