소스 검색

feat Dockerfile部署脚本添加

1 주 전
부모
커밋
b3cf38c4c3
1개의 변경된 파일30개의 추가작업 그리고 7개의 파일을 삭제
  1. 30 7
      edu-travel-common/edu-travel-common-datasource/src/main/java/edu/travel/datasource/ProjectInterceptor.java

+ 30 - 7
edu-travel-common/edu-travel-common-datasource/src/main/java/edu/travel/datasource/ProjectInterceptor.java

@@ -5,6 +5,7 @@ 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.LongValue;
 import net.sf.jsqlparser.expression.StringValue;
 import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
 import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
@@ -17,6 +18,7 @@ import net.sf.jsqlparser.statement.select.SelectBody;
 import org.apache.ibatis.executor.Executor;
 import org.apache.ibatis.mapping.BoundSql;
 import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.mapping.SqlCommandType;
 import org.apache.ibatis.session.ResultHandler;
 import org.apache.ibatis.session.RowBounds;
 import org.slf4j.Logger;
@@ -25,6 +27,7 @@ import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Field;
 import java.sql.SQLException;
 
 /**
@@ -33,6 +36,32 @@ import java.sql.SQLException;
  */
 public class ProjectInterceptor implements InnerInterceptor {
     Logger logger = LoggerFactory.getLogger(ProjectInterceptor.class);
+    private String convertDeleteToUpdate(String originalSql) {
+        // 示例:将DELETE FROM table WHERE ... 转为 UPDATE table SET deleted=1 WHERE ...
+        return originalSql.replaceFirst("DELETE FROM", "UPDATE") + " SET delete_flag=1";
+    }
+
+    @Override
+    public void beforeUpdate(Executor executor, MappedStatement ms, Object parameter) throws SQLException {
+        BoundSql boundSql = ms.getBoundSql(parameter);
+        if (ms.getSqlCommandType().equals(SqlCommandType.DELETE)) {
+            // 转换DELETE为UPDATE,此处需复杂处理,示例简化
+            // 实际需解析原始SQL并替换,此处仅为思路
+            String newSql = convertDeleteToUpdate(boundSql.getSql());
+            // 反射修改BoundSql中的SQL
+            Class<? extends BoundSql> aClass = boundSql.getClass();
+            Field declaredField = null;
+            try {
+                declaredField = aClass.getDeclaredField("sql");
+                declaredField.setAccessible(true);
+                declaredField.set(boundSql,newSql);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+
+        }
+    }
+
     @Override
     public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
         HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
@@ -43,12 +72,6 @@ public class ProjectInterceptor implements InnerInterceptor {
                 return;
             }
             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 {
@@ -71,7 +94,7 @@ public class ProjectInterceptor implements InnerInterceptor {
                 projectEq.setRightExpression(new StringValue(project));
                 EqualsTo deleteFlag = new EqualsTo();
                 deleteFlag.setLeftExpression(new Column("delete_flag"));
-                deleteFlag.setRightExpression(new StringValue("0"));
+                deleteFlag.setRightExpression(new LongValue(0));
                 String plainSelectString = plainSelect.toString();
                 if (!plainSelectString.contains("project = ") && !plainSelectString.contains("delete_flag = ")) {
                     AndExpression targetExpression = new AndExpression(projectEq, deleteFlag);