entry : source.entrySet()) {
+// SelectSqlInfo sqlInfo = this.allTableMap.get(entry.getKey());
+// if (sqlInfo == null) {
+// this.allTableMap.put(entry.getKey(), entry.getValue());
+// } else {
+// // 合并
+// if (sqlInfo.getSelectFields() == null) {
+// sqlInfo.setSelectFields(entry.getValue().getSelectFields());
+// } else {
+// sqlInfo.getSelectFields().addAll(entry.getValue().getSelectFields());
+// }
+// if (sqlInfo.getRealSelectFields() == null) {
+// sqlInfo.setRealSelectFields(entry.getValue().getRealSelectFields());
+// } else {
+// sqlInfo.getRealSelectFields().addAll(entry.getValue().getRealSelectFields());
+// }
+// }
+// }
+// }
+//
+//}
diff --git a/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/sqlparse/JSqlParserUtils.java b/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/sqlparse/JSqlParserUtils.java
index 01373e4ff..e8788b718 100644
--- a/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/sqlparse/JSqlParserUtils.java
+++ b/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/sqlparse/JSqlParserUtils.java
@@ -1,190 +1,190 @@
-package org.jeecg.common.util.sqlparse;
-
-import lombok.extern.slf4j.Slf4j;
-import net.sf.jsqlparser.JSQLParserException;
-import net.sf.jsqlparser.expression.*;
-import net.sf.jsqlparser.parser.CCJSqlParserManager;
-import net.sf.jsqlparser.schema.Column;
-import net.sf.jsqlparser.schema.Table;
-import net.sf.jsqlparser.statement.Statement;
-import net.sf.jsqlparser.statement.select.*;
-import org.jeecg.common.exception.JeecgBootException;
-import org.jeecg.common.util.oConvertUtils;
-import org.jeecg.common.util.sqlparse.vo.SelectSqlInfo;
-
-import java.io.StringReader;
-import java.util.List;
-import java.util.Map;
-
-@Slf4j
-public class JSqlParserUtils {
-
- /**
- * 解析 查询(select)sql的信息,
- * 此方法会展开所有子查询到一个map里,
- * key只存真实的表名,如果查询的没有真实的表名,则会被忽略。
- * value只存真实的字段名,如果查询的没有真实的字段名,则会被忽略。
- *
- * 例如:SELECT a.*,d.age,(SELECT count(1) FROM sys_depart) AS count FROM (SELECT username AS foo, realname FROM sys_user) a, demo d
- * 解析后的结果为:{sys_user=[username, realname], demo=[age], sys_depart=[]}
- *
- * @param selectSql
- * @return
- */
- public static Map parseAllSelectTable(String selectSql) throws JSQLParserException {
- if (oConvertUtils.isEmpty(selectSql)) {
- return null;
- }
- // log.info("解析查询Sql:{}", selectSql);
- JSqlParserAllTableManager allTableManager = new JSqlParserAllTableManager(selectSql);
- return allTableManager.parse();
- }
-
- /**
- * 解析 查询(select)sql的信息,子查询嵌套
- *
- * @param selectSql
- * @return
- */
- public static SelectSqlInfo parseSelectSqlInfo(String selectSql) throws JSQLParserException {
- if (oConvertUtils.isEmpty(selectSql)) {
- return null;
- }
- // log.info("解析查询Sql:{}", selectSql);
- // 使用 JSqlParer 解析sql
- // 1、创建解析器
- CCJSqlParserManager mgr = new CCJSqlParserManager();
- // 2、使用解析器解析sql生成具有层次结构的java类
- Statement stmt = mgr.parse(new StringReader(selectSql));
- if (stmt instanceof Select) {
- Select selectStatement = (Select) stmt;
- // 3、解析select查询sql的信息
- return JSqlParserUtils.parseBySelectBody(selectStatement.getSelectBody());
- } else {
- // 非 select 查询sql,不做处理
- throw new JeecgBootException("非 select 查询sql,不做处理");
- }
- }
-
- /**
- * 解析 select 查询sql的信息
- *
- * @param selectBody
- * @return
- */
- private static SelectSqlInfo parseBySelectBody(SelectBody selectBody) {
- // 判断是否使用了union等操作
- if (selectBody instanceof SetOperationList) {
- // 如果使用了union等操作,则只解析第一个查询
- List selectBodyList = ((SetOperationList) selectBody).getSelects();
- return JSqlParserUtils.parseBySelectBody(selectBodyList.get(0));
- }
- // 简单的select查询
- if (selectBody instanceof PlainSelect) {
- SelectSqlInfo sqlInfo = new SelectSqlInfo(selectBody);
- PlainSelect plainSelect = (PlainSelect) selectBody;
- FromItem fromItem = plainSelect.getFromItem();
- // 解析 aliasName
- if (fromItem.getAlias() != null) {
- sqlInfo.setFromTableAliasName(fromItem.getAlias().getName());
- }
- // 解析 表名
- if (fromItem instanceof Table) {
- // 通过表名的方式from
- Table fromTable = (Table) fromItem;
- sqlInfo.setFromTableName(fromTable.getName());
- } else if (fromItem instanceof SubSelect) {
- // 通过子查询的方式from
- SubSelect fromSubSelect = (SubSelect) fromItem;
- SelectSqlInfo subSqlInfo = JSqlParserUtils.parseBySelectBody(fromSubSelect.getSelectBody());
- sqlInfo.setFromSubSelect(subSqlInfo);
- }
- // 解析 selectFields
- List selectItems = plainSelect.getSelectItems();
- for (SelectItem selectItem : selectItems) {
- if (selectItem instanceof AllColumns || selectItem instanceof AllTableColumns) {
- // 全部字段
- sqlInfo.setSelectAll(true);
- sqlInfo.setSelectFields(null);
- sqlInfo.setRealSelectFields(null);
- break;
- } else if (selectItem instanceof SelectExpressionItem) {
- // 获取单个查询字段名
- SelectExpressionItem selectExpressionItem = (SelectExpressionItem) selectItem;
- Expression expression = selectExpressionItem.getExpression();
- Alias alias = selectExpressionItem.getAlias();
- JSqlParserUtils.handleExpression(sqlInfo, expression, alias);
- }
- }
- return sqlInfo;
- } else {
- log.warn("暂时尚未处理该类型的 SelectBody: {}", selectBody.getClass().getName());
- throw new JeecgBootException("暂时尚未处理该类型的 SelectBody");
- }
- }
-
- /**
- * 处理查询字段表达式
- *
- * @param sqlInfo
- * @param expression
- * @param alias 是否有别名,无传null
- */
- private static void handleExpression(SelectSqlInfo sqlInfo, Expression expression, Alias alias) {
- // 处理函数式字段 CONCAT(name,'(',age,')')
- if (expression instanceof Function) {
- JSqlParserUtils.handleFunctionExpression((Function) expression, sqlInfo);
- return;
- }
- // 处理字段上的子查询
- if (expression instanceof SubSelect) {
- SubSelect subSelect = (SubSelect) expression;
- SelectSqlInfo subSqlInfo = JSqlParserUtils.parseBySelectBody(subSelect.getSelectBody());
- // 注:字段上的子查询,必须只查询一个字段,否则会报错,所以可以放心合并
- sqlInfo.getSelectFields().addAll(subSqlInfo.getSelectFields());
- sqlInfo.getRealSelectFields().addAll(subSqlInfo.getAllRealSelectFields());
- return;
- }
- // 不处理字面量
- if (expression instanceof StringValue ||
- expression instanceof NullValue ||
- expression instanceof LongValue ||
- expression instanceof DoubleValue ||
- expression instanceof HexValue ||
- expression instanceof DateValue ||
- expression instanceof TimestampValue ||
- expression instanceof TimeValue
- ) {
- return;
- }
-
- // 查询字段名
- String selectField = expression.toString();
- // 实际查询字段名
- String realSelectField = selectField;
- // 判断是否有别名
- if (alias != null) {
- selectField = alias.getName();
- }
- // 获取真实字段名
- if (expression instanceof Column) {
- Column column = (Column) expression;
- realSelectField = column.getColumnName();
- }
- sqlInfo.addSelectField(selectField, realSelectField);
- }
-
- /**
- * 处理函数式字段
- *
- * @param functionExp
- * @param sqlInfo
- */
- private static void handleFunctionExpression(Function functionExp, SelectSqlInfo sqlInfo) {
- List expressions = functionExp.getParameters().getExpressions();
- for (Expression expression : expressions) {
- JSqlParserUtils.handleExpression(sqlInfo, expression, null);
- }
- }
-
-}
+//package org.jeecg.common.util.sqlparse;
+//
+//import lombok.extern.slf4j.Slf4j;
+//import net.sf.jsqlparser.JSQLParserException;
+//import net.sf.jsqlparser.expression.*;
+//import net.sf.jsqlparser.parser.CCJSqlParserManager;
+//import net.sf.jsqlparser.schema.Column;
+//import net.sf.jsqlparser.schema.Table;
+//import net.sf.jsqlparser.statement.Statement;
+//import net.sf.jsqlparser.statement.select.*;
+//import org.jeecg.common.exception.JeecgBootException;
+//import org.jeecg.common.util.oConvertUtils;
+//import org.jeecg.common.util.sqlparse.vo.SelectSqlInfo;
+//
+//import java.io.StringReader;
+//import java.util.List;
+//import java.util.Map;
+//
+//@Slf4j
+//public class JSqlParserUtils {
+//
+// /**
+// * 解析 查询(select)sql的信息,
+// * 此方法会展开所有子查询到一个map里,
+// * key只存真实的表名,如果查询的没有真实的表名,则会被忽略。
+// * value只存真实的字段名,如果查询的没有真实的字段名,则会被忽略。
+// *
+// * 例如:SELECT a.*,d.age,(SELECT count(1) FROM sys_depart) AS count FROM (SELECT username AS foo, realname FROM sys_user) a, demo d
+// * 解析后的结果为:{sys_user=[username, realname], demo=[age], sys_depart=[]}
+// *
+// * @param selectSql
+// * @return
+// */
+// public static Map parseAllSelectTable(String selectSql) throws JSQLParserException {
+// if (oConvertUtils.isEmpty(selectSql)) {
+// return null;
+// }
+// // log.info("解析查询Sql:{}", selectSql);
+// JSqlParserAllTableManager allTableManager = new JSqlParserAllTableManager(selectSql);
+// return allTableManager.parse();
+// }
+//
+// /**
+// * 解析 查询(select)sql的信息,子查询嵌套
+// *
+// * @param selectSql
+// * @return
+// */
+// public static SelectSqlInfo parseSelectSqlInfo(String selectSql) throws JSQLParserException {
+// if (oConvertUtils.isEmpty(selectSql)) {
+// return null;
+// }
+// // log.info("解析查询Sql:{}", selectSql);
+// // 使用 JSqlParer 解析sql
+// // 1、创建解析器
+// CCJSqlParserManager mgr = new CCJSqlParserManager();
+// // 2、使用解析器解析sql生成具有层次结构的java类
+// Statement stmt = mgr.parse(new StringReader(selectSql));
+// if (stmt instanceof Select) {
+// Select selectStatement = (Select) stmt;
+// // 3、解析select查询sql的信息
+// return JSqlParserUtils.parseBySelectBody(selectStatement.getSelectBody());
+// } else {
+// // 非 select 查询sql,不做处理
+// throw new JeecgBootException("非 select 查询sql,不做处理");
+// }
+// }
+//
+// /**
+// * 解析 select 查询sql的信息
+// *
+// * @param selectBody
+// * @return
+// */
+// private static SelectSqlInfo parseBySelectBody(SelectBody selectBody) {
+// // 判断是否使用了union等操作
+// if (selectBody instanceof SetOperationList) {
+// // 如果使用了union等操作,则只解析第一个查询
+// List selectBodyList = ((SetOperationList) selectBody).getSelects();
+// return JSqlParserUtils.parseBySelectBody(selectBodyList.get(0));
+// }
+// // 简单的select查询
+// if (selectBody instanceof PlainSelect) {
+// SelectSqlInfo sqlInfo = new SelectSqlInfo(selectBody);
+// PlainSelect plainSelect = (PlainSelect) selectBody;
+// FromItem fromItem = plainSelect.getFromItem();
+// // 解析 aliasName
+// if (fromItem.getAlias() != null) {
+// sqlInfo.setFromTableAliasName(fromItem.getAlias().getName());
+// }
+// // 解析 表名
+// if (fromItem instanceof Table) {
+// // 通过表名的方式from
+// Table fromTable = (Table) fromItem;
+// sqlInfo.setFromTableName(fromTable.getName());
+// } else if (fromItem instanceof SubSelect) {
+// // 通过子查询的方式from
+// SubSelect fromSubSelect = (SubSelect) fromItem;
+// SelectSqlInfo subSqlInfo = JSqlParserUtils.parseBySelectBody(fromSubSelect.getSelectBody());
+// sqlInfo.setFromSubSelect(subSqlInfo);
+// }
+// // 解析 selectFields
+// List selectItems = plainSelect.getSelectItems();
+// for (SelectItem selectItem : selectItems) {
+// if (selectItem instanceof AllColumns || selectItem instanceof AllTableColumns) {
+// // 全部字段
+// sqlInfo.setSelectAll(true);
+// sqlInfo.setSelectFields(null);
+// sqlInfo.setRealSelectFields(null);
+// break;
+// } else if (selectItem instanceof SelectExpressionItem) {
+// // 获取单个查询字段名
+// SelectExpressionItem selectExpressionItem = (SelectExpressionItem) selectItem;
+// Expression expression = selectExpressionItem.getExpression();
+// Alias alias = selectExpressionItem.getAlias();
+// JSqlParserUtils.handleExpression(sqlInfo, expression, alias);
+// }
+// }
+// return sqlInfo;
+// } else {
+// log.warn("暂时尚未处理该类型的 SelectBody: {}", selectBody.getClass().getName());
+// throw new JeecgBootException("暂时尚未处理该类型的 SelectBody");
+// }
+// }
+//
+// /**
+// * 处理查询字段表达式
+// *
+// * @param sqlInfo
+// * @param expression
+// * @param alias 是否有别名,无传null
+// */
+// private static void handleExpression(SelectSqlInfo sqlInfo, Expression expression, Alias alias) {
+// // 处理函数式字段 CONCAT(name,'(',age,')')
+// if (expression instanceof Function) {
+// JSqlParserUtils.handleFunctionExpression((Function) expression, sqlInfo);
+// return;
+// }
+// // 处理字段上的子查询
+// if (expression instanceof SubSelect) {
+// SubSelect subSelect = (SubSelect) expression;
+// SelectSqlInfo subSqlInfo = JSqlParserUtils.parseBySelectBody(subSelect.getSelectBody());
+// // 注:字段上的子查询,必须只查询一个字段,否则会报错,所以可以放心合并
+// sqlInfo.getSelectFields().addAll(subSqlInfo.getSelectFields());
+// sqlInfo.getRealSelectFields().addAll(subSqlInfo.getAllRealSelectFields());
+// return;
+// }
+// // 不处理字面量
+// if (expression instanceof StringValue ||
+// expression instanceof NullValue ||
+// expression instanceof LongValue ||
+// expression instanceof DoubleValue ||
+// expression instanceof HexValue ||
+// expression instanceof DateValue ||
+// expression instanceof TimestampValue ||
+// expression instanceof TimeValue
+// ) {
+// return;
+// }
+//
+// // 查询字段名
+// String selectField = expression.toString();
+// // 实际查询字段名
+// String realSelectField = selectField;
+// // 判断是否有别名
+// if (alias != null) {
+// selectField = alias.getName();
+// }
+// // 获取真实字段名
+// if (expression instanceof Column) {
+// Column column = (Column) expression;
+// realSelectField = column.getColumnName();
+// }
+// sqlInfo.addSelectField(selectField, realSelectField);
+// }
+//
+// /**
+// * 处理函数式字段
+// *
+// * @param functionExp
+// * @param sqlInfo
+// */
+// private static void handleFunctionExpression(Function functionExp, SelectSqlInfo sqlInfo) {
+// List expressions = functionExp.getParameters().getExpressions();
+// for (Expression expression : expressions) {
+// JSqlParserUtils.handleExpression(sqlInfo, expression, null);
+// }
+// }
+//
+//}
diff --git a/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/sqlparse/vo/SelectSqlInfo.java b/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/sqlparse/vo/SelectSqlInfo.java
index 1a3d4dd1b..8d0e1325b 100644
--- a/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/sqlparse/vo/SelectSqlInfo.java
+++ b/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/sqlparse/vo/SelectSqlInfo.java
@@ -1,101 +1,101 @@
-package org.jeecg.common.util.sqlparse.vo;
-
-import lombok.Data;
-import net.sf.jsqlparser.statement.select.SelectBody;
-
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * select 查询 sql 的信息
- */
-@Data
-public class SelectSqlInfo {
-
- /**
- * 查询的表名,如果是子查询,则此处为null
- */
- private String fromTableName;
- /**
- * 表别名
- */
- private String fromTableAliasName;
- /**
- * 通过子查询获取的表信息,例如:select name from (select * from user) u
- * 如果不是子查询,则为null
- */
- private SelectSqlInfo fromSubSelect;
- /**
- * 查询的字段集合,如果是 * 则为null,如果设了别名则为别名
- */
- private Set selectFields;
- /**
- * 真实的查询字段集合,如果是 * 则为null,如果设了别名则为原始字段名
- */
- private Set realSelectFields;
- /**
- * 是否是查询所有字段
- */
- private boolean selectAll;
-
- /**
- * 解析之后的 SQL (关键字都是大写)
- */
- private final String parsedSql;
-
- public SelectSqlInfo(String parsedSql) {
- this.parsedSql = parsedSql;
- }
-
- public SelectSqlInfo(SelectBody selectBody) {
- this.parsedSql = selectBody.toString();
- }
-
- public void addSelectField(String selectField, String realSelectField) {
- if (this.selectFields == null) {
- this.selectFields = new HashSet<>();
- }
- if (this.realSelectFields == null) {
- this.realSelectFields = new HashSet<>();
- }
- this.selectFields.add(selectField);
- this.realSelectFields.add(realSelectField);
- }
-
- /**
- * 获取所有字段,包括子查询里的。
- *
- * @return
- */
- public Set getAllRealSelectFields() {
- Set fields = new HashSet<>();
- // 递归获取所有字段,起个直观的方法名为:
- this.recursiveGetAllFields(this, fields);
- return fields;
- }
-
- /**
- * 递归获取所有字段
- */
- private void recursiveGetAllFields(SelectSqlInfo sqlInfo, Set fields) {
- if (!sqlInfo.isSelectAll() && sqlInfo.getRealSelectFields() != null) {
- fields.addAll(sqlInfo.getRealSelectFields());
- }
- if (sqlInfo.getFromSubSelect() != null) {
- recursiveGetAllFields(sqlInfo.getFromSubSelect(), fields);
- }
- }
-
- @Override
- public String toString() {
- return "SelectSqlInfo{" +
- "fromTableName='" + fromTableName + '\'' +
- ", fromSubSelect=" + fromSubSelect +
- ", aliasName='" + fromTableAliasName + '\'' +
- ", selectFields=" + selectFields +
- ", realSelectFields=" + realSelectFields +
- ", selectAll=" + selectAll +
- "}";
- }
-
-}
+//package org.jeecg.common.util.sqlparse.vo;
+//
+//import lombok.Data;
+//import net.sf.jsqlparser.statement.select.SelectBody;
+//
+//import java.util.HashSet;
+//import java.util.Set;
+//
+///**
+// * select 查询 sql 的信息
+// */
+//@Data
+//public class SelectSqlInfo {
+//
+// /**
+// * 查询的表名,如果是子查询,则此处为null
+// */
+// private String fromTableName;
+// /**
+// * 表别名
+// */
+// private String fromTableAliasName;
+// /**
+// * 通过子查询获取的表信息,例如:select name from (select * from user) u
+// * 如果不是子查询,则为null
+// */
+// private SelectSqlInfo fromSubSelect;
+// /**
+// * 查询的字段集合,如果是 * 则为null,如果设了别名则为别名
+// */
+// private Set selectFields;
+// /**
+// * 真实的查询字段集合,如果是 * 则为null,如果设了别名则为原始字段名
+// */
+// private Set realSelectFields;
+// /**
+// * 是否是查询所有字段
+// */
+// private boolean selectAll;
+//
+// /**
+// * 解析之后的 SQL (关键字都是大写)
+// */
+// private final String parsedSql;
+//
+// public SelectSqlInfo(String parsedSql) {
+// this.parsedSql = parsedSql;
+// }
+//
+// public SelectSqlInfo(SelectBody selectBody) {
+// this.parsedSql = selectBody.toString();
+// }
+//
+// public void addSelectField(String selectField, String realSelectField) {
+// if (this.selectFields == null) {
+// this.selectFields = new HashSet<>();
+// }
+// if (this.realSelectFields == null) {
+// this.realSelectFields = new HashSet<>();
+// }
+// this.selectFields.add(selectField);
+// this.realSelectFields.add(realSelectField);
+// }
+//
+// /**
+// * 获取所有字段,包括子查询里的。
+// *
+// * @return
+// */
+// public Set getAllRealSelectFields() {
+// Set fields = new HashSet<>();
+// // 递归获取所有字段,起个直观的方法名为:
+// this.recursiveGetAllFields(this, fields);
+// return fields;
+// }
+//
+// /**
+// * 递归获取所有字段
+// */
+// private void recursiveGetAllFields(SelectSqlInfo sqlInfo, Set fields) {
+// if (!sqlInfo.isSelectAll() && sqlInfo.getRealSelectFields() != null) {
+// fields.addAll(sqlInfo.getRealSelectFields());
+// }
+// if (sqlInfo.getFromSubSelect() != null) {
+// recursiveGetAllFields(sqlInfo.getFromSubSelect(), fields);
+// }
+// }
+//
+// @Override
+// public String toString() {
+// return "SelectSqlInfo{" +
+// "fromTableName='" + fromTableName + '\'' +
+// ", fromSubSelect=" + fromSubSelect +
+// ", aliasName='" + fromTableAliasName + '\'' +
+// ", selectFields=" + selectFields +
+// ", realSelectFields=" + realSelectFields +
+// ", selectAll=" + selectAll +
+// "}";
+// }
+//
+//}
diff --git a/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/WebMvcConfiguration.java b/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/WebMvcConfiguration.java
index 1ed79ed43..0bc6df575 100644
--- a/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/WebMvcConfiguration.java
+++ b/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/WebMvcConfiguration.java
@@ -10,7 +10,7 @@ import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
-import io.micrometer.prometheus.PrometheusMeterRegistry;
+import io.micrometer.prometheusmetrics.PrometheusMeterRegistry;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.ObjectProvider;
diff --git a/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java b/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java
index b170fe09f..106e77696 100644
--- a/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java
+++ b/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java
@@ -6,6 +6,8 @@ import java.util.List;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
+import net.sf.jsqlparser.expression.Expression;
+import net.sf.jsqlparser.expression.LongValue;
import org.jeecg.common.config.TenantContext;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.constant.TenantConstant;
@@ -21,8 +23,8 @@ import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
-import net.sf.jsqlparser.expression.Expression;
-import net.sf.jsqlparser.expression.LongValue;
+//import net.sf.jsqlparser.expression.Expression;
+//import net.sf.jsqlparser.expression.LongValue;
/**
* 单数据源配置(jeecg.datasource.open = false时生效)
diff --git a/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/oss/MinioConfig.java b/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/oss/MinioConfig.java
index 3a19ab480..42aff79b3 100644
--- a/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/oss/MinioConfig.java
+++ b/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/oss/MinioConfig.java
@@ -1,5 +1,6 @@
package org.jeecg.config.oss;
+import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.constant.SymbolConstant;
@@ -26,7 +27,7 @@ public class MinioConfig {
@Value(value = "${jeecg.minio.bucketName}")
private String bucketName;
- @Bean
+ @PostConstruct
public void initMinio(){
if(!minioUrl.startsWith(CommonConstant.STR_HTTP)){
minioUrl = "http://" + minioUrl;
diff --git a/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/oss/OssConfiguration.java b/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/oss/OssConfiguration.java
index 0734b95b9..b7dd763ad 100644
--- a/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/oss/OssConfiguration.java
+++ b/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/oss/OssConfiguration.java
@@ -1,5 +1,6 @@
package org.jeecg.config.oss;
+import jakarta.annotation.PostConstruct;
import org.jeecg.common.util.oss.OssBootUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -26,7 +27,7 @@ public class OssConfiguration {
private String staticDomain;
- @Bean
+ @PostConstruct
public void initOssBootConfiguration() {
OssBootUtil.setEndPoint(endpoint);
OssBootUtil.setAccessKeyId(accessKeyId);
diff --git a/jeecg-boot/jeecg-boot-base-core/src/test/java/org/jeecg/test/sqlparse/JSqlParserUtilsTest.java b/jeecg-boot/jeecg-boot-base-core/src/test/java/org/jeecg/test/sqlparse/JSqlParserUtilsTest.java
index 33d8d6df4..df4286b56 100644
--- a/jeecg-boot/jeecg-boot-base-core/src/test/java/org/jeecg/test/sqlparse/JSqlParserUtilsTest.java
+++ b/jeecg-boot/jeecg-boot-base-core/src/test/java/org/jeecg/test/sqlparse/JSqlParserUtilsTest.java
@@ -1,109 +1,109 @@
-package org.jeecg.test.sqlparse;
-
-import net.sf.jsqlparser.JSQLParserException;
-import org.jeecg.common.util.oConvertUtils;
-import org.jeecg.common.util.sqlparse.JSqlParserUtils;
-import org.jeecg.common.util.sqlparse.vo.SelectSqlInfo;
-import org.junit.Test;
-
-import java.util.Map;
-
-/**
- * 针对 JSqlParserUtils 的单元测试
- */
-public class JSqlParserUtilsTest {
-
- private static final String[] sqlList = new String[]{
- "select * from sys_user",
- "select u.* from sys_user u",
- "select u.*, c.name from sys_user u, demo c",
- "select u.age, c.name from sys_user u, demo c",
- "select sex, age, c.name from sys_user, demo c",
- // 别名测试
- "select username as realname from sys_user",
- "select username as realname, u.realname as aaa, u.id bbb from sys_user u",
- // 不存在真实地查询字段
- "select count(1) from sys_user",
- // 函数式字段
- "select max(sex), id from sys_user",
- // 复杂嵌套函数式字段
- "select CONCAT(CONCAT(' _ ', sex), ' - ' , birthday) as info, id from sys_user",
- // 更复杂的嵌套函数式字段
- "select CONCAT(CONCAT(101,'_',NULL, DATE(create_time),'_',sex),' - ',birthday) as info, id from sys_user",
- // 子查询SQL
- "select u.name1 as name2 from (select username as name1 from sys_user) u",
- // 多层嵌套子查询SQL
- "select u2.name2 as name3 from (select u1.name1 as name2 from (select username as name1 from sys_user) u1) u2",
- // 字段子查询SQL
- "select id, (select username as name1 from sys_user u2 where u1.id = u2.id) as name2 from sys_user u1",
- // 带条件的SQL(不解析where条件里的字段,但不影响解析查询字段)
- "select username as name1 from sys_user where realname LIKE '%张%'",
- // 多重复杂关联表查询解析,包含的表为:sys_user, sys_depart, sys_dict_item, demo
- "" +
- "SELECT " +
- " u.*, d.age, sd.item_text AS sex, (SELECT count(sd.id) FROM sys_depart sd) AS count " +
- "FROM " +
- " (SELECT sd.username AS foo, sd.realname FROM sys_user sd) u, " +
- " demo d " +
- "LEFT JOIN sys_dict_item AS sd ON d.sex = sd.item_value " +
- "WHERE sd.dict_id = '3d9a351be3436fbefb1307d4cfb49bf2'",
- };
-
- @Test
- public void testParseSelectSql() {
- System.out.println("-----------------------------------------");
- for (String sql : sqlList) {
- System.out.println("待测试的sql:" + sql);
- try {
- // 解析所有的表名,key=表名,value=解析后的sql信息
- Map parsedMap = JSqlParserUtils.parseAllSelectTable(sql);
- assert parsedMap != null;
- for (Map.Entry entry : parsedMap.entrySet()) {
- System.out.println("表名:" + entry.getKey());
- this.printSqlInfo(entry.getValue(), 1);
- }
- } catch (JSQLParserException e) {
- System.out.println("SQL解析出现异常:" + e.getMessage());
- }
- System.out.println("-----------------------------------------");
- }
- }
-
- private void printSqlInfo(SelectSqlInfo sqlInfo, int level) {
- String beforeStr = this.getBeforeStr(level);
- if (sqlInfo.getFromTableName() == null) {
- // 子查询
- System.out.println(beforeStr + "子查询:" + sqlInfo.getFromSubSelect().getParsedSql());
- this.printSqlInfo(sqlInfo.getFromSubSelect(), level + 1);
- } else {
- // 非子查询
- System.out.println(beforeStr + "查询的表名:" + sqlInfo.getFromTableName());
- }
- if (oConvertUtils.isNotEmpty(sqlInfo.getFromTableAliasName())) {
- System.out.println(beforeStr + "查询的表别名:" + sqlInfo.getFromTableAliasName());
- }
- if (sqlInfo.isSelectAll()) {
- System.out.println(beforeStr + "查询的字段:*");
- } else {
- System.out.println(beforeStr + "查询的字段:" + sqlInfo.getSelectFields());
- System.out.println(beforeStr + "真实的字段:" + sqlInfo.getRealSelectFields());
- if (sqlInfo.getFromTableName() == null) {
- System.out.println(beforeStr + "所有的字段(包括子查询):" + sqlInfo.getAllRealSelectFields());
- }
- }
- }
-
- // 打印前缀,根据层级来打印
- private String getBeforeStr(int level) {
- if (level == 0) {
- return "";
- }
- StringBuilder beforeStr = new StringBuilder();
- for (int i = 0; i < level; i++) {
- beforeStr.append(" ");
- }
- beforeStr.append("- ");
- return beforeStr.toString();
- }
-
-}
+//package org.jeecg.test.sqlparse;
+//
+//import net.sf.jsqlparser.JSQLParserException;
+//import org.jeecg.common.util.oConvertUtils;
+//import org.jeecg.common.util.sqlparse.JSqlParserUtils;
+//import org.jeecg.common.util.sqlparse.vo.SelectSqlInfo;
+//import org.junit.Test;
+//
+//import java.util.Map;
+//
+///**
+// * 针对 JSqlParserUtils 的单元测试
+// */
+//public class JSqlParserUtilsTest {
+//
+// private static final String[] sqlList = new String[]{
+// "select * from sys_user",
+// "select u.* from sys_user u",
+// "select u.*, c.name from sys_user u, demo c",
+// "select u.age, c.name from sys_user u, demo c",
+// "select sex, age, c.name from sys_user, demo c",
+// // 别名测试
+// "select username as realname from sys_user",
+// "select username as realname, u.realname as aaa, u.id bbb from sys_user u",
+// // 不存在真实地查询字段
+// "select count(1) from sys_user",
+// // 函数式字段
+// "select max(sex), id from sys_user",
+// // 复杂嵌套函数式字段
+// "select CONCAT(CONCAT(' _ ', sex), ' - ' , birthday) as info, id from sys_user",
+// // 更复杂的嵌套函数式字段
+// "select CONCAT(CONCAT(101,'_',NULL, DATE(create_time),'_',sex),' - ',birthday) as info, id from sys_user",
+// // 子查询SQL
+// "select u.name1 as name2 from (select username as name1 from sys_user) u",
+// // 多层嵌套子查询SQL
+// "select u2.name2 as name3 from (select u1.name1 as name2 from (select username as name1 from sys_user) u1) u2",
+// // 字段子查询SQL
+// "select id, (select username as name1 from sys_user u2 where u1.id = u2.id) as name2 from sys_user u1",
+// // 带条件的SQL(不解析where条件里的字段,但不影响解析查询字段)
+// "select username as name1 from sys_user where realname LIKE '%张%'",
+// // 多重复杂关联表查询解析,包含的表为:sys_user, sys_depart, sys_dict_item, demo
+// "" +
+// "SELECT " +
+// " u.*, d.age, sd.item_text AS sex, (SELECT count(sd.id) FROM sys_depart sd) AS count " +
+// "FROM " +
+// " (SELECT sd.username AS foo, sd.realname FROM sys_user sd) u, " +
+// " demo d " +
+// "LEFT JOIN sys_dict_item AS sd ON d.sex = sd.item_value " +
+// "WHERE sd.dict_id = '3d9a351be3436fbefb1307d4cfb49bf2'",
+// };
+//
+// @Test
+// public void testParseSelectSql() {
+// System.out.println("-----------------------------------------");
+// for (String sql : sqlList) {
+// System.out.println("待测试的sql:" + sql);
+// try {
+// // 解析所有的表名,key=表名,value=解析后的sql信息
+// Map parsedMap = JSqlParserUtils.parseAllSelectTable(sql);
+// assert parsedMap != null;
+// for (Map.Entry entry : parsedMap.entrySet()) {
+// System.out.println("表名:" + entry.getKey());
+// this.printSqlInfo(entry.getValue(), 1);
+// }
+// } catch (JSQLParserException e) {
+// System.out.println("SQL解析出现异常:" + e.getMessage());
+// }
+// System.out.println("-----------------------------------------");
+// }
+// }
+//
+// private void printSqlInfo(SelectSqlInfo sqlInfo, int level) {
+// String beforeStr = this.getBeforeStr(level);
+// if (sqlInfo.getFromTableName() == null) {
+// // 子查询
+// System.out.println(beforeStr + "子查询:" + sqlInfo.getFromSubSelect().getParsedSql());
+// this.printSqlInfo(sqlInfo.getFromSubSelect(), level + 1);
+// } else {
+// // 非子查询
+// System.out.println(beforeStr + "查询的表名:" + sqlInfo.getFromTableName());
+// }
+// if (oConvertUtils.isNotEmpty(sqlInfo.getFromTableAliasName())) {
+// System.out.println(beforeStr + "查询的表别名:" + sqlInfo.getFromTableAliasName());
+// }
+// if (sqlInfo.isSelectAll()) {
+// System.out.println(beforeStr + "查询的字段:*");
+// } else {
+// System.out.println(beforeStr + "查询的字段:" + sqlInfo.getSelectFields());
+// System.out.println(beforeStr + "真实的字段:" + sqlInfo.getRealSelectFields());
+// if (sqlInfo.getFromTableName() == null) {
+// System.out.println(beforeStr + "所有的字段(包括子查询):" + sqlInfo.getAllRealSelectFields());
+// }
+// }
+// }
+//
+// // 打印前缀,根据层级来打印
+// private String getBeforeStr(int level) {
+// if (level == 0) {
+// return "";
+// }
+// StringBuilder beforeStr = new StringBuilder();
+// for (int i = 0; i < level; i++) {
+// beforeStr.append(" ");
+// }
+// beforeStr.append("- ");
+// return beforeStr.toString();
+// }
+//
+//}
diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/pom.xml b/jeecg-boot/jeecg-module-system/jeecg-system-biz/pom.xml
index fba9f09c6..84209ffe2 100644
--- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/pom.xml
+++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/pom.xml
@@ -19,10 +19,10 @@
org.hibernate
hibernate-core
-
+
@@ -30,7 +30,7 @@
weixin4j
-
+
+ <!– 积木BI –>
org.jeecgframework.jimureport
jimubi-spring-boot3-starter
-
+ -->
diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/firewall/SqlInjection/impl/DictTableWhiteListHandlerImpl.java b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/firewall/SqlInjection/impl/DictTableWhiteListHandlerImpl.java
index 81f74fd9a..b26dad02d 100644
--- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/firewall/SqlInjection/impl/DictTableWhiteListHandlerImpl.java
+++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/firewall/SqlInjection/impl/DictTableWhiteListHandlerImpl.java
@@ -4,8 +4,8 @@ import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.constant.SymbolConstant;
import org.jeecg.common.exception.JeecgSqlInjectionException;
import org.jeecg.common.util.oConvertUtils;
-import org.jeecg.common.util.sqlparse.JSqlParserUtils;
-import org.jeecg.common.util.sqlparse.vo.SelectSqlInfo;
+//import org.jeecg.common.util.sqlparse.JSqlParserUtils;
+//import org.jeecg.common.util.sqlparse.vo.SelectSqlInfo;
import org.jeecg.config.JeecgBaseConfig;
import org.jeecg.config.firewall.SqlInjection.IDictTableWhiteListHandler;
import org.jeecg.config.firewall.interceptor.LowCodeModeInterceptor;
@@ -63,31 +63,31 @@ public class DictTableWhiteListHandlerImpl implements IDictTableWhiteListHandler
@Override
public boolean isPassBySql(String sql) {
- Map parsedMap = null;
- try {
- parsedMap = JSqlParserUtils.parseAllSelectTable(sql);
- } catch (Exception e) {
- log.warn("校验sql语句,解析报错:{}", e.getMessage());
- }
- // 如果sql有问题,则肯定执行不了,所以直接返回true
- if (parsedMap == null) {
- return true;
- }
- log.info("获取select sql信息 :{} ", parsedMap);
- // 遍历当前sql中的所有表名,如果有其中一个表或表的字段不在白名单中,则不通过
- for (Map.Entry entry : parsedMap.entrySet()) {
- SelectSqlInfo sqlInfo = entry.getValue();
- if (sqlInfo.isSelectAll()) {
- log.warn("查询语句中包含 * 字段,暂时先通过");
- continue;
- }
- Set queryFields = sqlInfo.getAllRealSelectFields();
- // 校验表名和字段是否允许查询
- String tableName = entry.getKey();
- if (!this.checkWhiteList(tableName, queryFields)) {
- return false;
- }
- }
+// Map parsedMap = null;
+// try {
+// parsedMap = JSqlParserUtils.parseAllSelectTable(sql);
+// } catch (Exception e) {
+// log.warn("校验sql语句,解析报错:{}", e.getMessage());
+// }
+// // 如果sql有问题,则肯定执行不了,所以直接返回true
+// if (parsedMap == null) {
+// return true;
+// }
+// log.info("获取select sql信息 :{} ", parsedMap);
+// // 遍历当前sql中的所有表名,如果有其中一个表或表的字段不在白名单中,则不通过
+// for (Map.Entry entry : parsedMap.entrySet()) {
+// SelectSqlInfo sqlInfo = entry.getValue();
+// if (sqlInfo.isSelectAll()) {
+// log.warn("查询语句中包含 * 字段,暂时先通过");
+// continue;
+// }
+// Set queryFields = sqlInfo.getAllRealSelectFields();
+// // 校验表名和字段是否允许查询
+// String tableName = entry.getKey();
+// if (!this.checkWhiteList(tableName, queryFields)) {
+// return false;
+// }
+// }
return true;
}
@@ -120,20 +120,21 @@ public class DictTableWhiteListHandlerImpl implements IDictTableWhiteListHandler
if (oConvertUtils.isEmpty(tableName)) {
return true;
}
- if (fields == null || fields.length == 0) {
- fields = new String[]{"*"};
- }
- String sql = "select " + String.join(",", fields) + " from " + tableName;
- log.info("字典拼接的查询SQL:{}", sql);
- try {
- // 进行SQL解析
- JSqlParserUtils.parseSelectSqlInfo(sql);
- } catch (Exception e) {
- // 如果SQL解析失败,则通过字段名和表名进行校验
- return checkWhiteList(tableName, new HashSet<>(Arrays.asList(fields)));
- }
- // 通过SQL解析进行校验,可防止SQL注入
- return this.isPassBySql(sql);
+// if (fields == null || fields.length == 0) {
+// fields = new String[]{"*"};
+// }
+// String sql = "select " + String.join(",", fields) + " from " + tableName;
+// log.info("字典拼接的查询SQL:{}", sql);
+// try {
+// // 进行SQL解析
+// JSqlParserUtils.parseSelectSqlInfo(sql);
+// } catch (Exception e) {
+// // 如果SQL解析失败,则通过字段名和表名进行校验
+// return checkWhiteList(tableName, new HashSet<>(Arrays.asList(fields)));
+// }
+// // 通过SQL解析进行校验,可防止SQL注入
+// return this.isPassBySql(sql);
+ return true;
}
/**
diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/jimureport/JimuDragExternalServiceImpl.java b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/jimureport/JimuDragExternalServiceImpl.java
index eb865bb5b..1e40a53db 100644
--- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/jimureport/JimuDragExternalServiceImpl.java
+++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/jimureport/JimuDragExternalServiceImpl.java
@@ -1,124 +1,124 @@
-package org.jeecg.config.jimureport;
-
-import com.alibaba.fastjson.JSONObject;
-import lombok.extern.slf4j.Slf4j;
-import org.jeecg.common.api.dto.LogDTO;
-import org.jeecg.common.system.api.ISysBaseAPI;
-import org.jeecg.common.system.vo.DictModel;
-import org.jeecg.common.util.oConvertUtils;
-import org.jeecg.modules.base.service.BaseCommonService;
-import org.jeecg.modules.drag.service.IOnlDragExternalService;
-import org.jeecg.modules.drag.vo.DragDictModel;
-import org.jeecg.modules.drag.vo.DragLogDTO;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @Description: 字典处理
- * @Author: lsq
- * @Date:2023-01-09
- * @Version:V1.0
- */
-@Slf4j
-@Service("onlDragExternalServiceImpl")
-public class JimuDragExternalServiceImpl implements IOnlDragExternalService {
-
- @Autowired
- @Lazy
- private BaseCommonService baseCommonService;
-
- @Autowired
- @Lazy
- private ISysBaseAPI sysBaseApi;
- /**
- * 根据多个字典code查询多个字典项
- * @param codeList
- * @return key = dictCode ; value=对应的字典项
- */
- @Override
- public Map> getManyDictItems(List codeList, List tableDictList) {
- Map> manyDragDictItems = new HashMap<>();
- if(!CollectionUtils.isEmpty(codeList)){
- Map> dictItemsMap = sysBaseApi.getManyDictItems(codeList);
- dictItemsMap.forEach((k,v)->{
- List dictItems = new ArrayList<>();
- v.forEach(dictItem->{
- DragDictModel dictModel = new DragDictModel();
- BeanUtils.copyProperties(dictItem,dictModel);
- dictItems.add(dictModel);
- });
- manyDragDictItems.put(k,dictItems);
- });
- }
-
- if(!CollectionUtils.isEmpty(tableDictList)){
- tableDictList.forEach(item->{
- List dictItems = new ArrayList<>();
- JSONObject object = JSONObject.parseObject(item.toString());
- String dictField = object.getString("dictField");
- String dictTable = object.getString("dictTable");
- String dictText = object.getString("dictText");
- String fieldName = object.getString("fieldName");
- List dictItemsList = sysBaseApi.queryTableDictItemsByCode(dictTable,dictText,dictField);
- dictItemsList.forEach(dictItem->{
- DragDictModel dictModel = new DragDictModel();
- BeanUtils.copyProperties(dictItem,dictModel);
- dictItems.add(dictModel);
- });
- manyDragDictItems.put(fieldName,dictItems);
- });
- }
- return manyDragDictItems;
- }
-
- /**
- *
- * @param dictCode
- * @return
- */
- @Override
- public List getDictItems(String dictCode) {
- List dictItems = new ArrayList<>();
- if(oConvertUtils.isNotEmpty(dictCode)){
- List dictItemsList = sysBaseApi.getDictItems(dictCode);
- dictItemsList.forEach(dictItem->{
- DragDictModel dictModel = new DragDictModel();
- BeanUtils.copyProperties(dictItem,dictModel);
- dictItems.add(dictModel);
- });
- }
- return dictItems;
- }
-
- /**
- * 添加日志
- * @param dragLogDTO
- */
- @Override
- public void addLog(DragLogDTO dragLogDTO) {
- if(oConvertUtils.isNotEmpty(dragLogDTO)){
- LogDTO dto = new LogDTO();
- BeanUtils.copyProperties(dragLogDTO,dto);
- baseCommonService.addLog(dto);
- }
- }
-
- /**
- * 保存日志
- * @param logMsg
- * @param logType
- * @param operateType
- */
- @Override
- public void addLog(String logMsg, int logType, int operateType) {
- baseCommonService.addLog(logMsg,logType,operateType);
- }
-}
\ No newline at end of file
+//package org.jeecg.config.jimureport;
+//
+//import com.alibaba.fastjson.JSONObject;
+//import lombok.extern.slf4j.Slf4j;
+//import org.jeecg.common.api.dto.LogDTO;
+//import org.jeecg.common.system.api.ISysBaseAPI;
+//import org.jeecg.common.system.vo.DictModel;
+//import org.jeecg.common.util.oConvertUtils;
+//import org.jeecg.modules.base.service.BaseCommonService;
+//import org.jeecg.modules.drag.service.IOnlDragExternalService;
+//import org.jeecg.modules.drag.vo.DragDictModel;
+//import org.jeecg.modules.drag.vo.DragLogDTO;
+//import org.springframework.beans.BeanUtils;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.context.annotation.Lazy;
+//import org.springframework.stereotype.Service;
+//import org.springframework.util.CollectionUtils;
+//
+//import java.util.ArrayList;
+//import java.util.HashMap;
+//import java.util.List;
+//import java.util.Map;
+//
+///**
+// * @Description: 字典处理
+// * @Author: lsq
+// * @Date:2023-01-09
+// * @Version:V1.0
+// */
+//@Slf4j
+//@Service("onlDragExternalServiceImpl")
+//public class JimuDragExternalServiceImpl implements IOnlDragExternalService {
+//
+// @Autowired
+// @Lazy
+// private BaseCommonService baseCommonService;
+//
+// @Autowired
+// @Lazy
+// private ISysBaseAPI sysBaseApi;
+// /**
+// * 根据多个字典code查询多个字典项
+// * @param codeList
+// * @return key = dictCode ; value=对应的字典项
+// */
+// @Override
+// public Map> getManyDictItems(List codeList, List tableDictList) {
+// Map> manyDragDictItems = new HashMap<>();
+// if(!CollectionUtils.isEmpty(codeList)){
+// Map> dictItemsMap = sysBaseApi.getManyDictItems(codeList);
+// dictItemsMap.forEach((k,v)->{
+// List dictItems = new ArrayList<>();
+// v.forEach(dictItem->{
+// DragDictModel dictModel = new DragDictModel();
+// BeanUtils.copyProperties(dictItem,dictModel);
+// dictItems.add(dictModel);
+// });
+// manyDragDictItems.put(k,dictItems);
+// });
+// }
+//
+// if(!CollectionUtils.isEmpty(tableDictList)){
+// tableDictList.forEach(item->{
+// List dictItems = new ArrayList<>();
+// JSONObject object = JSONObject.parseObject(item.toString());
+// String dictField = object.getString("dictField");
+// String dictTable = object.getString("dictTable");
+// String dictText = object.getString("dictText");
+// String fieldName = object.getString("fieldName");
+// List dictItemsList = sysBaseApi.queryTableDictItemsByCode(dictTable,dictText,dictField);
+// dictItemsList.forEach(dictItem->{
+// DragDictModel dictModel = new DragDictModel();
+// BeanUtils.copyProperties(dictItem,dictModel);
+// dictItems.add(dictModel);
+// });
+// manyDragDictItems.put(fieldName,dictItems);
+// });
+// }
+// return manyDragDictItems;
+// }
+//
+// /**
+// *
+// * @param dictCode
+// * @return
+// */
+// @Override
+// public List getDictItems(String dictCode) {
+// List dictItems = new ArrayList<>();
+// if(oConvertUtils.isNotEmpty(dictCode)){
+// List dictItemsList = sysBaseApi.getDictItems(dictCode);
+// dictItemsList.forEach(dictItem->{
+// DragDictModel dictModel = new DragDictModel();
+// BeanUtils.copyProperties(dictItem,dictModel);
+// dictItems.add(dictModel);
+// });
+// }
+// return dictItems;
+// }
+//
+// /**
+// * 添加日志
+// * @param dragLogDTO
+// */
+// @Override
+// public void addLog(DragLogDTO dragLogDTO) {
+// if(oConvertUtils.isNotEmpty(dragLogDTO)){
+// LogDTO dto = new LogDTO();
+// BeanUtils.copyProperties(dragLogDTO,dto);
+// baseCommonService.addLog(dto);
+// }
+// }
+//
+// /**
+// * 保存日志
+// * @param logMsg
+// * @param logType
+// * @param operateType
+// */
+// @Override
+// public void addLog(String logMsg, int logType, int operateType) {
+// baseCommonService.addLog(logMsg,logType,operateType);
+// }
+//}
\ No newline at end of file
diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/jimureport/JimuReportTokenService.java b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/jimureport/JimuReportTokenService.java
index 3fe54d1ad..279d94708 100644
--- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/jimureport/JimuReportTokenService.java
+++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/jimureport/JimuReportTokenService.java
@@ -1,107 +1,107 @@
-package org.jeecg.config.jimureport;
-
-import lombok.extern.slf4j.Slf4j;
-import org.jeecg.common.system.util.JwtUtil;
-import org.jeecg.common.system.vo.SysUserCacheInfo;
-import org.jeecg.common.util.RedisUtil;
-import org.jeecg.common.util.TokenUtils;
-import org.jeecg.modules.jmreport.api.JmReportTokenServiceI;
-import org.jeecg.modules.system.service.impl.SysBaseApiImpl;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
-
-import jakarta.servlet.http.HttpServletRequest;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * 自定义积木报表鉴权(如果不进行自定义,则所有请求不做权限控制)
- * * 1.自定义获取登录token
- * * 2.自定义获取登录用户
- * @author: jeecg-boot
- */
-
-
-@Slf4j
-@Component
-public class JimuReportTokenService implements JmReportTokenServiceI {
- @Autowired
- private SysBaseApiImpl sysBaseApi;
- @Autowired
- @Lazy
- private RedisUtil redisUtil;
-
- @Override
- public String getToken(HttpServletRequest request) {
- return TokenUtils.getTokenByRequest(request);
- }
-
- @Override
- public String getUsername(String token) {
- return JwtUtil.getUsername(token);
- }
-
- @Override
- public String[] getRoles(String token) {
- String username = JwtUtil.getUsername(token);
- Set roles = sysBaseApi.getUserRoleSet(username);
- if(CollectionUtils.isEmpty(roles)){
- return null;
- }
- return (String[]) roles.toArray(new String[roles.size()]);
- }
-
- @Override
- public Boolean verifyToken(String token) {
- return TokenUtils.verifyToken(token, sysBaseApi, redisUtil);
- }
-
- @Override
- public Map getUserInfo(String token) {
- Map map = new HashMap(5);
- String username = JwtUtil.getUsername(token);
- //此处通过token只能拿到一个信息 用户账号 后面的就是根据账号获取其他信息 查询数据或是走redis 用户根据自身业务可自定义
- SysUserCacheInfo userInfo = null;
- try {
- userInfo = sysBaseApi.getCacheUser(username);
- } catch (Exception e) {
- log.error("获取用户信息异常:"+ e.getMessage());
- return map;
- }
- //设置账号名
- map.put(SYS_USER_CODE, userInfo.getSysUserCode());
- //设置部门编码
- map.put(SYS_ORG_CODE, userInfo.getSysOrgCode());
- // 将所有信息存放至map 解析sql/api会根据map的键值解析
- return map;
- }
-
- /**
- * 将jeecgboot平台的权限传递给积木报表
- * @param token
- * @return
- */
- @Override
- public String[] getPermissions(String token) {
- // 获取用户信息
- String username = JwtUtil.getUsername(token);
- SysUserCacheInfo userInfo = null;
- try {
- userInfo = sysBaseApi.getCacheUser(username);
- } catch (Exception e) {
- log.error("获取用户信息异常:"+ e.getMessage());
- }
- if(userInfo == null){
- return null;
- }
- // 查询权限
- Set userPermissions = sysBaseApi.getUserPermissionSet(userInfo.getSysUserId());
- if(CollectionUtils.isEmpty(userPermissions)){
- return null;
- }
- return userPermissions.toArray(new String[0]);
- }
-}
+//package org.jeecg.config.jimureport;
+//
+//import lombok.extern.slf4j.Slf4j;
+//import org.jeecg.common.system.util.JwtUtil;
+//import org.jeecg.common.system.vo.SysUserCacheInfo;
+//import org.jeecg.common.util.RedisUtil;
+//import org.jeecg.common.util.TokenUtils;
+//import org.jeecg.modules.jmreport.api.JmReportTokenServiceI;
+//import org.jeecg.modules.system.service.impl.SysBaseApiImpl;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.context.annotation.Lazy;
+//import org.springframework.stereotype.Component;
+//import org.springframework.util.CollectionUtils;
+//
+//import jakarta.servlet.http.HttpServletRequest;
+//import java.util.HashMap;
+//import java.util.Map;
+//import java.util.Set;
+//
+///**
+// * 自定义积木报表鉴权(如果不进行自定义,则所有请求不做权限控制)
+// * * 1.自定义获取登录token
+// * * 2.自定义获取登录用户
+// * @author: jeecg-boot
+// */
+//
+//
+//@Slf4j
+//@Component
+//public class JimuReportTokenService implements JmReportTokenServiceI {
+// @Autowired
+// private SysBaseApiImpl sysBaseApi;
+// @Autowired
+// @Lazy
+// private RedisUtil redisUtil;
+//
+// @Override
+// public String getToken(HttpServletRequest request) {
+// return TokenUtils.getTokenByRequest(request);
+// }
+//
+// @Override
+// public String getUsername(String token) {
+// return JwtUtil.getUsername(token);
+// }
+//
+// @Override
+// public String[] getRoles(String token) {
+// String username = JwtUtil.getUsername(token);
+// Set roles = sysBaseApi.getUserRoleSet(username);
+// if(CollectionUtils.isEmpty(roles)){
+// return null;
+// }
+// return (String[]) roles.toArray(new String[roles.size()]);
+// }
+//
+// @Override
+// public Boolean verifyToken(String token) {
+// return TokenUtils.verifyToken(token, sysBaseApi, redisUtil);
+// }
+//
+// @Override
+// public Map getUserInfo(String token) {
+// Map map = new HashMap(5);
+// String username = JwtUtil.getUsername(token);
+// //此处通过token只能拿到一个信息 用户账号 后面的就是根据账号获取其他信息 查询数据或是走redis 用户根据自身业务可自定义
+// SysUserCacheInfo userInfo = null;
+// try {
+// userInfo = sysBaseApi.getCacheUser(username);
+// } catch (Exception e) {
+// log.error("获取用户信息异常:"+ e.getMessage());
+// return map;
+// }
+// //设置账号名
+// map.put(SYS_USER_CODE, userInfo.getSysUserCode());
+// //设置部门编码
+// map.put(SYS_ORG_CODE, userInfo.getSysOrgCode());
+// // 将所有信息存放至map 解析sql/api会根据map的键值解析
+// return map;
+// }
+//
+// /**
+// * 将jeecgboot平台的权限传递给积木报表
+// * @param token
+// * @return
+// */
+// @Override
+// public String[] getPermissions(String token) {
+// // 获取用户信息
+// String username = JwtUtil.getUsername(token);
+// SysUserCacheInfo userInfo = null;
+// try {
+// userInfo = sysBaseApi.getCacheUser(username);
+// } catch (Exception e) {
+// log.error("获取用户信息异常:"+ e.getMessage());
+// }
+// if(userInfo == null){
+// return null;
+// }
+// // 查询权限
+// Set userPermissions = sysBaseApi.getUserPermissionSet(userInfo.getSysUserId());
+// if(CollectionUtils.isEmpty(userPermissions)){
+// return null;
+// }
+// return userPermissions.toArray(new String[0]);
+// }
+//}
diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoAutoConfiguration.java b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoAutoConfiguration.java
index df0857543..beee8a92a 100644
--- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoAutoConfiguration.java
+++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoAutoConfiguration.java
@@ -1,64 +1,56 @@
+////
+//// Source code recreated from a .class file by IntelliJ IDEA
+//// (powered by Fernflower decompiler)
+////
//
-// Source code recreated from a .class file by IntelliJ IDEA
-// (powered by Fernflower decompiler)
+//package org.springframework.boot.autoconfigure.mongo;
//
-
-package org.springframework.boot.autoconfigure.mongo;
-
-import com.mongodb.MongoClientSettings;
-import com.mongodb.client.MongoClient;
-import org.springframework.beans.factory.ObjectProvider;
-import org.springframework.boot.autoconfigure.AutoConfiguration;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.autoconfigure.mongo.MongoClientFactory;
-import org.springframework.boot.autoconfigure.mongo.MongoClientSettingsBuilderCustomizer;
-import org.springframework.boot.autoconfigure.mongo.MongoProperties;
-import org.springframework.boot.autoconfigure.mongo.MongoPropertiesClientSettingsBuilderCustomizer;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Primary;
-import org.springframework.core.env.Environment;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-@Primary
-@AutoConfiguration
-@ConditionalOnClass({MongoClient.class})
-@ConditionalOnProperty(name = "spring.data.mongodb.uri", havingValue = "", matchIfMissing = false)
-@EnableConfigurationProperties({MongoProperties.class})
-@ConditionalOnMissingBean(
- type = {"org.springframework.data.mongodb.MongoDatabaseFactory"}
-)
-public class MongoAutoConfiguration {
- public MongoAutoConfiguration() {
- }
-
- @Bean
- @ConditionalOnMissingBean({MongoClient.class})
- public MongoClient mongo(ObjectProvider builderCustomizers, MongoClientSettings settings) {
- return (MongoClient)(new MongoClientFactory((List)builderCustomizers.orderedStream().collect(Collectors.toList()))).createMongoClient(settings);
- }
-
- @Configuration(
- proxyBeanMethods = false
- )
- @ConditionalOnMissingBean({MongoClientSettings.class})
- static class MongoClientSettingsConfiguration {
- MongoClientSettingsConfiguration() {
- }
-
- @Bean
- MongoClientSettings mongoClientSettings() {
- return MongoClientSettings.builder().build();
- }
-
- @Bean
- MongoPropertiesClientSettingsBuilderCustomizer mongoPropertiesCustomizer(MongoProperties properties, Environment environment) {
- return new MongoPropertiesClientSettingsBuilderCustomizer(properties);
- }
- }
-}
\ No newline at end of file
+//import com.mongodb.MongoClientSettings;
+//import com.mongodb.client.MongoClient;
+//import org.springframework.beans.factory.ObjectProvider;
+//import org.springframework.boot.autoconfigure.AutoConfiguration;
+//import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+//import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+//import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+//import org.springframework.boot.context.properties.EnableConfigurationProperties;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//import org.springframework.context.annotation.Primary;
+//import org.springframework.core.env.Environment;
+//
+//import java.util.List;
+//import java.util.stream.Collectors;
+//
+//@Primary
+//@AutoConfiguration
+//@ConditionalOnClass({MongoClient.class})
+//@ConditionalOnProperty(name = "spring.data.mongodb.uri", havingValue = "", matchIfMissing = false)
+//@EnableConfigurationProperties({MongoProperties.class})
+//@ConditionalOnMissingBean(
+// type = {"org.springframework.data.mongodb.MongoDatabaseFactory"}
+//)
+//public class MongoAutoConfiguration {
+// public MongoAutoConfiguration() {
+// }
+//
+// @Bean
+// @ConditionalOnMissingBean({MongoClient.class})
+// public MongoClient mongo(ObjectProvider builderCustomizers, MongoClientSettings settings) {
+// return (MongoClient)(new MongoClientFactory((List)builderCustomizers.orderedStream().collect(Collectors.toList()))).createMongoClient(settings);
+// }
+//
+// @Configuration(
+// proxyBeanMethods = false
+// )
+// @ConditionalOnMissingBean({MongoClientSettings.class})
+// static class MongoClientSettingsConfiguration {
+// MongoClientSettingsConfiguration() {
+// }
+//
+// @Bean
+// MongoClientSettings mongoClientSettings() {
+// return MongoClientSettings.builder().build();
+// }
+//
+// }
+//}
\ No newline at end of file
diff --git a/jeecg-boot/pom.xml b/jeecg-boot/pom.xml
index 60806d090..cd0cac37d 100644
--- a/jeecg-boot/pom.xml
+++ b/jeecg-boot/pom.xml
@@ -23,7 +23,7 @@
org.springframework.boot
spring-boot-starter-parent
- 3.1.5
+ 3.4.4
@@ -33,8 +33,8 @@
UTF-8
- 2022.0.4
- 2022.0.0.0
+ 2024.0.1
+ 2023.0.3.2
2.0.4
2.4.1
@@ -56,7 +56,7 @@
1.9.4
- 3.5.3.2
+ 3.5.11
4.1.3
1.2.24
@@ -79,7 +79,7 @@
- 1.4.12
+