|
@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
|
|
|
import net.sf.jsqlparser.JSQLParserException;
|
|
|
import net.sf.jsqlparser.expression.Expression;
|
|
|
-import net.sf.jsqlparser.expression.Parenthesis;
|
|
|
import net.sf.jsqlparser.expression.StringValue;
|
|
|
import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
|
|
|
import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
|
|
@@ -20,6 +19,8 @@ import org.apache.ibatis.mapping.BoundSql;
|
|
|
import org.apache.ibatis.mapping.MappedStatement;
|
|
|
import org.apache.ibatis.session.ResultHandler;
|
|
|
import org.apache.ibatis.session.RowBounds;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.web.context.request.RequestContextHolder;
|
|
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
|
|
|
@@ -31,12 +32,20 @@ import java.sql.SQLException;
|
|
|
* 处理基础架构中统一带上 project 字段
|
|
|
*/
|
|
|
public class ProjectInterceptor implements InnerInterceptor {
|
|
|
+ Logger logger = LoggerFactory.getLogger(ProjectInterceptor.class);
|
|
|
@Override
|
|
|
public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
|
|
|
HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
|
|
|
String project = request.getHeader("project");
|
|
|
if (StringUtils.isNotBlank(project)) {
|
|
|
String originSql = boundSql.getSql();
|
|
|
+ logger.debug("origin sql: " + originSql);
|
|
|
+// Map parameterMap = (Map) parameter;
|
|
|
+// // QueryWrapper,实际上就是 在 代码查询的地方创建的QueryWrapper。
|
|
|
+// Object obj = parameterMap.get("ew");
|
|
|
+// QueryWrapper queryWrapper = (QueryWrapper) obj;
|
|
|
+// queryWrapper.eq("project", project);
|
|
|
+// queryWrapper.eq("delete_flag",0);
|
|
|
//获取 Statement 执行sql的对象
|
|
|
Statement statement = null;
|
|
|
try {
|
|
@@ -61,15 +70,12 @@ public class ProjectInterceptor implements InnerInterceptor {
|
|
|
deleteFlag.setLeftExpression(new Column("delete_flag"));
|
|
|
deleteFlag.setRightExpression(new StringValue("0"));
|
|
|
String plainSelectString = plainSelect.toString();
|
|
|
- if (plainSelectString.contains("project") && plainSelectString.contains("delete_flag")) {
|
|
|
-
|
|
|
- }else {
|
|
|
- if (where != null) {
|
|
|
- AndExpression targetExpression = new AndExpression(projectEq, deleteFlag);
|
|
|
+ if (!plainSelectString.contains("project = ") && !plainSelectString.contains("delete_flag = ")) {
|
|
|
+ AndExpression targetExpression = new AndExpression(projectEq, deleteFlag);
|
|
|
+ if (plainSelectString.contains("where") || plainSelectString.contains("WHERE")) {
|
|
|
AndExpression andExpression = new AndExpression(where, targetExpression);
|
|
|
plainSelect.setWhere(andExpression);
|
|
|
}else {
|
|
|
- AndExpression targetExpression = new AndExpression(projectEq, deleteFlag);
|
|
|
plainSelect.setWhere(targetExpression);
|
|
|
}
|
|
|
|
|
@@ -79,6 +85,7 @@ public class ProjectInterceptor implements InnerInterceptor {
|
|
|
}
|
|
|
// 修改完成的sql 再设置回去
|
|
|
PluginUtils.MPBoundSql mpBoundSql = PluginUtils.mpBoundSql(boundSql);
|
|
|
+ System.out.println(targetSql);
|
|
|
mpBoundSql.sql(targetSql);
|
|
|
|
|
|
}
|