Ver código fonte

权限组行权限过滤器支持全局系统变量,修改数据集权限组逻辑:支持预览时动态解析SQL;旧逻辑:添加权限组时生成sql片段保存。

aokunsang 3 semanas atrás
pai
commit
176110a32a

+ 1 - 1
platomix-gmetry-bi-api/src/main/java/org/springblade/cube/controller/CubeDataController.java

@@ -306,7 +306,7 @@ public class CubeDataController extends BladeController {
         }
         // 组装权限组过滤条件
         if (queryParam.getCubeDataId() != null) {
-            CubePermParseDto cubePermParseDto = cubeDataPermissionService.parseCubePermission(queryParam.getCubeDataId(), getUser(), extraParams);
+            CubePermParseDto cubePermParseDto = cubeDataPermissionService.parseAllPermission(queryParam.getCubeDataId(), getUser(), dsTypeEnum, extraParams);
             if (StrUtil.isNotBlank(cubePermParseDto.getFilterSql())) {
                 conditionSqlList.add(cubePermParseDto.getFilterSql());
             }

+ 8 - 6
platomix-gmetry-bi-api/src/main/java/org/springblade/cube/controller/CubeDataPermissionController.java

@@ -114,12 +114,14 @@ public class CubeDataPermissionController extends BladeController {
 		if (reportDatasource == null) {
 			return R.fail("数据集所在数据源不存在");
 		}
-		DsTypeEnum dsTypeEnum = DsTypeEnum.resolve(reportDatasource.getDsType());
-		PreviewBaseDto previewDto = JSON.parseObject(cubeDataPerm.getFilterJson(), PreviewBaseDto.class);
-		//解析SQL - 注意:此处不能解析全局参数
-		Tuple2<String, String> whereHavingSqlTuple = querySqlService.parseFilters(JSON.parseArray(previewDto.getFilterList(), ComponentFilter.class), 
-				JSON.parseObject(previewDto.getFilterRelation(), ComponentFilterRelation.class), dsTypeEnum, previewDto.getExtraParams(), false);
-		cubeDataPerm.setFilterSql(whereHavingSqlTuple.getT1());
+		//@TODO 以下代码没有意义,可以删除
+//		DsTypeEnum dsTypeEnum = DsTypeEnum.resolve(reportDatasource.getDsType());
+//		PreviewBaseDto previewDto = JSON.parseObject(cubeDataPerm.getFilterJson(), PreviewBaseDto.class);
+//		//解析SQL - 注意:此处不能解析全局参数
+//		Tuple2<String, String> whereHavingSqlTuple = querySqlService.parseFilters(JSON.parseArray(previewDto.getFilterList(), ComponentFilter.class),
+//				JSON.parseObject(previewDto.getFilterRelation(), ComponentFilterRelation.class), dsTypeEnum, previewDto.getExtraParams(), false);
+//		cubeDataPerm.setFilterSql(whereHavingSqlTuple.getT1());
+		//@TODO 以上代码没有意义,可以删除
 		//更新为非公开[否则权限组无效]
 		cubeData.setPublicStatus(0);
 		cubeDataService.updateById(cubeData);

+ 3 - 5
platomix-gmetry-bi-api/src/main/java/org/springblade/cube/controller/CubeTableColumnController.java

@@ -28,7 +28,6 @@ import org.springblade.datasource.enums.ViewColumnTypeEnum;
 import org.springblade.datasource.model.TableColumnDto;
 import org.springblade.report.entity.ReportDatasource;
 import org.springblade.report.service.IReportDatasourceService;
-import org.springblade.resouces.CubeTableColumnResource;
 import org.springblade.visual.dto.CubePermParseDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -82,7 +81,7 @@ public class CubeTableColumnController extends BladeController {
     public R<List<CubeTableColumn>> list(@RequestParam Integer cubeDataId) {
         List<CubeTableColumn> columnList = cubeTableColumnService.list(Wrappers.<CubeTableColumn>lambdaQuery().eq(CubeTableColumn::getCubeDataId, cubeDataId).orderByDesc(CubeTableColumn::getSortNum));
         //列权限,删除掉不显示的列
-        CubePermParseDto cubePermParseDto = cubeDataPermissionService.parseCubePermission(cubeDataId, getUser());
+        CubePermParseDto cubePermParseDto = cubeDataPermissionService.parseColumnPermission(cubeDataId, getUser());
         if (CollectionUtil.isNotEmpty(cubePermParseDto.getExcludeColumnIdList()) && CollectionUtil.isNotEmpty(columnList)) {
             columnList.removeIf(item -> cubePermParseDto.getExcludeColumnIdList().contains(item.getId()));
         }
@@ -96,7 +95,7 @@ public class CubeTableColumnController extends BladeController {
         for (Integer cubeDataId : cubeDataIds) {
             List<CubeTableColumn> columnList = cubeTableColumnService.list(Wrappers.<CubeTableColumn>lambdaQuery().eq(CubeTableColumn::getCubeDataId, cubeDataId).orderByDesc(CubeTableColumn::getSortNum));
             //列权限,删除掉不显示的列
-            CubePermParseDto cubePermParseDto = cubeDataPermissionService.parseCubePermission(cubeDataId, getUser());
+            CubePermParseDto cubePermParseDto = cubeDataPermissionService.parseColumnPermission(cubeDataId, getUser());
             if (CollectionUtil.isNotEmpty(cubePermParseDto.getExcludeColumnIdList()) && CollectionUtil.isNotEmpty(columnList)) {
                 columnList.removeIf(item -> cubePermParseDto.getExcludeColumnIdList().contains(item.getId()));
             }
@@ -117,7 +116,6 @@ public class CubeTableColumnController extends BladeController {
 
     /**
      * @param dsId
-     * @param cubeDataId
      * @param tableName
      * @return
      */
@@ -173,7 +171,7 @@ public class CubeTableColumnController extends BladeController {
     }
 
     /**
-     * @param columnId
+     * @param value
      * @return
      * @throws Exception
      */

+ 4 - 4
platomix-gmetry-bi-api/src/main/java/org/springblade/cube/service/CubeDataBrowserService.java

@@ -151,7 +151,7 @@ public class CubeDataBrowserService {
         monitor.stop();
         monitor.start("行列权限获取");
         // 行/列 权限
-        CubePermParseDto cubePermParseDto = cubeDataPermissionService.parseCubePermission(cubeId, bladeUser, extraParams);
+        CubePermParseDto cubePermParseDto = cubeDataPermissionService.parseAllPermission(cubeId, bladeUser, dsTypeEnum, extraParams);
         Set<Integer> excludeColumnIdSet = Optional.ofNullable(cubePermParseDto.getExcludeColumnIdList()).orElse(new HashSet<>());
         monitor.stop();
         monitor.start("字段列表构造");
@@ -336,7 +336,7 @@ public class CubeDataBrowserService {
         }
         Map<String, List<Object>> extraParams = querySqlService.buildGlobalParams(null, bladeUser);
         // 行/列 权限
-        CubePermParseDto cubePermParseDto = cubeDataPermissionService.parseCubePermission(cubeId, bladeUser, extraParams);
+        CubePermParseDto cubePermParseDto = cubeDataPermissionService.parseAllPermission(cubeId, bladeUser, dsTypeEnum, extraParams);
         Set<Integer> excludeColumnIdSet = Optional.ofNullable(cubePermParseDto.getExcludeColumnIdList()).orElse(new HashSet<>());
         for (CubeTableColumn column : columnList) {
             // 计算字段包含聚合函数 OR 列权限包含该列,不做查询
@@ -532,7 +532,7 @@ public class CubeDataBrowserService {
         }
         Map<String, List<Object>> extraParams = querySqlService.buildGlobalParams(null, bladeUser);
         // 行/列 权限
-        CubePermParseDto cubePermParseDto = cubeDataPermissionService.parseCubePermission(cubeId, bladeUser, extraParams);
+        CubePermParseDto cubePermParseDto = cubeDataPermissionService.parseAllPermission(cubeId, bladeUser, dsTypeEnum, extraParams);
         Set<Integer> excludeColumnIdSet = Optional.ofNullable(cubePermParseDto.getExcludeColumnIdList()).orElse(new HashSet<>());
 
         Map<Integer, String> masterTableColumnMap = new HashedMap<>();
@@ -690,7 +690,7 @@ public class CubeDataBrowserService {
         Map<String, String> conditionSqlMap = new HashMap<>();
         Map<String, List<Object>> extraParams = querySqlService.buildGlobalParams(null, bladeUser);
         // 行/列 权限
-        CubePermParseDto cubePermParseDto = cubeDataPermissionService.parseCubePermission(cubeId, bladeUser);
+        CubePermParseDto cubePermParseDto = cubeDataPermissionService.parseAllPermission(cubeId, bladeUser, dsTypeEnum, extraParams);
         Set<Integer> excludeColumnIdSet = Optional.ofNullable(cubePermParseDto.getExcludeColumnIdList()).orElse(new HashSet<>());
         String rowPermissionSql = RowPermissionConstants.sql;
         if (rowPermissionParam == null) {

+ 27 - 13
platomix-gmetry-bi-api/src/main/java/org/springblade/cube/service/CubeDataPermissionService.java

@@ -8,11 +8,13 @@ import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import com.alibaba.fastjson2.JSON;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.tool.exception.ServiceException;
 import org.springblade.core.tool.utils.CollectionUtil;
@@ -20,10 +22,15 @@ import org.springblade.cube.dto.CubeDataPermRelation;
 import org.springblade.cube.mapper.CubeDataPermissionMapper;
 import org.springblade.cube.model.CubeData;
 import org.springblade.cube.model.CubeDataPermission;
-import org.springblade.cube.utils.CubeUtils;
+import org.springblade.datasource.enums.DsTypeEnum;
 import org.springblade.system.client.DataPermClient;
+import org.springblade.visual.dto.ComponentFilter;
+import org.springblade.visual.dto.ComponentFilterRelation;
 import org.springblade.visual.dto.CubePermParseDto;
 import org.springblade.visual.dto.CubePermParseDto.CubePermParseDtoBuilder;
+import org.springblade.visual.dto.PreviewBaseDto;
+import org.springblade.visual.service.QuerySqlService;
+import org.springblade.visual.utils.Tuple2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -32,8 +39,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 import cn.hutool.core.util.StrUtil;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
 
 /**
  * @author wookvn
@@ -48,6 +53,9 @@ public class CubeDataPermissionService extends ServiceImpl<CubeDataPermissionMap
 	@Autowired
 	private CubeDataService cubeDataService;
 
+	@Autowired
+	private QuerySqlService querySqlService;
+
 	/**
 	 *
 	 * @param cubeId
@@ -138,23 +146,25 @@ public class CubeDataPermissionService extends ServiceImpl<CubeDataPermissionMap
 	}
 
 	/**
-	 * <p>(自定义方法描述)</p>
+	 * <p>解析列权限</p>
 	 * @author wookvn
 	 * @datetime 2024-10-23 16:02:15
-	 * @param cubeDataId: (参数说明)
-	 * @param bladeUser: (参数说明)
+	 * @param cubeDataId: 数据集ID
+	 * @param bladeUser: 当前用户信息
 	 * @return org.springblade.visual.dto.CubePermParseDto
 	 **/
-	public CubePermParseDto parseCubePermission(Integer cubeDataId, BladeUser bladeUser) {
-		return parseCubePermission(cubeDataId, bladeUser, null);
+	public CubePermParseDto parseColumnPermission(Integer cubeDataId, BladeUser bladeUser) {
+		return parseAllPermission(cubeDataId, bladeUser, null,null);
 	}
 	/**
-	 * 
+	 * <p>解析行列权限数据</p>
 	 * @param cubeDataId
+	 * @param dsTypeEnum
 	 * @param bladeUser
+	 * @param extraParams
 	 * @return
 	 */
-	public CubePermParseDto parseCubePermission(Integer cubeDataId, BladeUser bladeUser, Map<String, List<Object>> extraParams) {
+	public CubePermParseDto parseAllPermission(Integer cubeDataId, BladeUser bladeUser, DsTypeEnum dsTypeEnum, Map<String, List<Object>> extraParams) {
 		CubePermParseDtoBuilder parseDtoBuilder = CubePermParseDto.builder();
 		//智能预警,用户为Null,兼容处理
 		if(bladeUser == null) {
@@ -170,8 +180,12 @@ public class CubeDataPermissionService extends ServiceImpl<CubeDataPermissionMap
 			List<String> whereSqlList = new ArrayList<>();
 			Set<Integer> excludeColumnIdSet = new HashSet<>();
 			for(CubeDataPermission cubePermission : cubeDataPermList) {
-				if(StrUtil.isNotEmpty(cubePermission.getFilterSql())) {
-					whereSqlList.add("(" + CubeUtils.formatVirtualSqlFragment(cubePermission.getFilterSql(), extraParams) + ")");
+				if(StrUtil.isNotEmpty(cubePermission.getFilterJson()) && dsTypeEnum != null) {
+					PreviewBaseDto previewDto = JSON.parseObject(cubePermission.getFilterJson(), PreviewBaseDto.class);
+					//解析SQL
+					Tuple2<String, String> whereHavingSqlTuple = querySqlService.parseFilters(JSON.parseArray(previewDto.getFilterList(), ComponentFilter.class),
+							JSON.parseObject(previewDto.getFilterRelation(), ComponentFilterRelation.class), dsTypeEnum, extraParams);
+					whereSqlList.add("(" + whereHavingSqlTuple.getT1() + ")");
 				}
 				if(StrUtil.isNotEmpty(cubePermission.getExcludeColumnIds())) {
 					String[] _columnIds = cubePermission.getExcludeColumnIds().split(",|,");
@@ -189,7 +203,7 @@ public class CubeDataPermissionService extends ServiceImpl<CubeDataPermissionMap
 		for (Integer cubeDataId : cubeDataIds) {
 			CubeData cubeData = cubeDataService.getById(cubeDataId);
 			Integer dbPublicStatus = cubeData.getPublicStatus();
-			if (publicStatus != dbPublicStatus){
+			if (!Objects.equals(publicStatus, dbPublicStatus)){
 				cubeData.setPublicStatus(publicStatus);
 				cubeDataService.updateById(cubeData);
 			}

+ 8 - 2
platomix-gmetry-bi-api/src/main/java/org/springblade/visual/dto/CubePermParseDto.java

@@ -24,9 +24,15 @@ public class CubePermParseDto implements Serializable {
 	 * 
 	 */
 	private static final long serialVersionUID = 1L;
-	
+
+	/**
+	 * 在预览报表时候,动态解析的片段条件SQL
+	 */
 	private String filterSql;
-	
+
+	/**
+	 * 数据集权限组 - 过滤的列ID列表
+	 */
 	private Set<Integer> excludeColumnIdList;
 
 }

+ 6 - 6
platomix-gmetry-bi-api/src/main/java/org/springblade/visual/service/DefineGroupSqlService.java

@@ -1,5 +1,5 @@
 /**
- * 
+ *
  */
 package org.springblade.visual.service;
 
@@ -58,7 +58,7 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 @Service
 public class DefineGroupSqlService {
-	
+
 	@Autowired
 	private CubeDataService cubeDataService;
 
@@ -67,7 +67,7 @@ public class DefineGroupSqlService {
 
 	@Autowired
 	private CubeDataPermissionService cubeDataPermissionService;
-	
+
 	@Autowired
 	private DialectContext dialectContext;
 
@@ -172,7 +172,7 @@ public class DefineGroupSqlService {
 
 		List<String> whereSqlList = new ArrayList<>();
 		//解析权限组全局SQL
-		CubePermParseDto cubePermParseDto = cubeDataPermissionService.parseCubePermission(cubeDataId, bladeUser);
+		CubePermParseDto cubePermParseDto = cubeDataPermissionService.parseAllPermission(cubeDataId, bladeUser, dsTypeEnum, null);
 		if(StrUtil.isNotBlank(cubePermParseDto.getFilterSql())) {
 			whereSqlList.add(cubePermParseDto.getFilterSql());
 		}
@@ -230,7 +230,7 @@ public class DefineGroupSqlService {
 		}
 		return R.data(new QuerySqlParam(strBuilder.toString(), cubeData, reportDatasource, columnList, cubePermParseDto.getExcludeColumnIdList(),null,null,null));
 	}
-	
+
 	/**
 	 * 解析自定义人群过滤器
 	 * @return
@@ -281,7 +281,7 @@ public class DefineGroupSqlService {
 		}
 		return new Tuple2<String, String>(whereSql, havingSql);
 	}
-	
+
 	/**
 	 * 构造查询条件
 	 * @param compFilterList

+ 16 - 24
platomix-gmetry-bi-api/src/main/java/org/springblade/visual/service/QuerySqlService.java

@@ -31,8 +31,6 @@ import org.springblade.cube.utils.CubeUtils;
 import org.springblade.datasource.context.DialectContext;
 import org.springblade.datasource.enums.DateFormatEnum;
 import org.springblade.datasource.enums.DsTypeEnum;
-import org.springblade.datasource.enums.FunctionMethodEnum;
-import org.springblade.datasource.enums.NumberFormatEnum;
 import org.springblade.datasource.enums.ViewColumnTypeEnum;
 import org.springblade.report.entity.ReportDatasource;
 import org.springblade.report.service.IReportDatasourceService;
@@ -61,8 +59,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.alibaba.fastjson2.JSON;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.ListUtil;
@@ -437,7 +433,7 @@ public class QuerySqlService {
             }
         }
         //解析当前登录用户的行/列权限
-        CubePermParseDto cubePermParseDto = cubeDataPermissionService.parseCubePermission(cubeData.getId(), bladeUser, extraParams);
+        CubePermParseDto cubePermParseDto = cubeDataPermissionService.parseAllPermission(cubeData.getId(), bladeUser, dsTypeEnum, extraParams);
         if (StrUtil.isNotBlank(cubePermParseDto.getFilterSql())) {
             whereSqlList.add(cubePermParseDto.getFilterSql());
         }
@@ -466,23 +462,15 @@ public class QuerySqlService {
 
     /**
      * <p>解析过滤器</p>
-     */
-    public Tuple2<String, String> parseFilters(List<ComponentFilter> filterList, ComponentFilterRelation componentFilterRelation, DsTypeEnum dsTypeEnum, Map<String, List<Object>> extraParams) {
-        return parseFilters(filterList, componentFilterRelation, dsTypeEnum, extraParams, true);
-    }
-
-    /**
-     * <p>解析过滤器</p>
      * @author wookvn
      * @datetime 2024-10-23 16:17:11
      * @param filterList: 过滤器列表
      * @param componentFilterRelation: 过滤器关系对象
      * @param dsTypeEnum: 数据源类型
      * @param extraParams: 全局参数值Map
-     * @param isReplaceGlobalParams: 是否替换全局参数:当只需要拿到whereSql片段存储到数据库时,不需要解析全局变量;在执行过程中解析【场景:权限组过滤器使用】
      * @return org.springblade.visual.utils.Tuple2<java.lang.String,java.lang.String>
      **/
-    public Tuple2<String, String> parseFilters(List<ComponentFilter> filterList, ComponentFilterRelation componentFilterRelation, DsTypeEnum dsTypeEnum, Map<String, List<Object>> extraParams, boolean isReplaceGlobalParams) {
+    public Tuple2<String, String> parseFilters(List<ComponentFilter> filterList, ComponentFilterRelation componentFilterRelation, DsTypeEnum dsTypeEnum, Map<String, List<Object>> extraParams) {
         String whereSql = "", havingSql = "";
         if (CollectionUtil.isNotEmpty(filterList)) {
             //当外部调用该解析器时,判断extraParams是否为null
@@ -490,25 +478,25 @@ public class QuerySqlService {
             //过滤关系
             if (componentFilterRelation != null) {
                 //filterRelation包含where和having的过滤关系,依次处理
-                Tuple2<String, String> whereSqlTuple = _buildFilters(componentFilterRelation.getWhere(), filterList, dsTypeEnum, extraParams, isReplaceGlobalParams);
+                Tuple2<String, String> whereSqlTuple = _buildFilters(componentFilterRelation.getWhere(), filterList, dsTypeEnum, extraParams);
                 if (whereSqlTuple != null) {
                     whereSql = whereSqlTuple.getT1();
                 }
                 //having处理
-                Tuple2<String, String> havingSqlTuple = _buildFilters(componentFilterRelation.getHaving(), filterList, dsTypeEnum, extraParams, isReplaceGlobalParams);
+                Tuple2<String, String> havingSqlTuple = _buildFilters(componentFilterRelation.getHaving(), filterList, dsTypeEnum, extraParams);
                 if (havingSqlTuple != null) {
                     havingSql = havingSqlTuple.getT2();
                 }
                 //构造非uniqId的条件集合【主要是全局筛选器,因此只需要处理where】
                 List<ComponentFilter> dataList = filterList.stream().filter(f -> StrUtil.isEmpty(f.getUniqId())).collect(Collectors.toList());
                 if (!dataList.isEmpty()) {
-                    Tuple2<String, String> globalWhereSqlTuple = _buildConditions(dataList, FilterConnectTypeEnum.AND, dsTypeEnum, extraParams, isReplaceGlobalParams);
+                    Tuple2<String, String> globalWhereSqlTuple = _buildConditions(dataList, FilterConnectTypeEnum.AND, dsTypeEnum, extraParams);
                     if (globalWhereSqlTuple != null && !"".equals(globalWhereSqlTuple.getT1())) {
                         whereSql += (StrUtil.isNotBlank(whereSql) ? " AND " : "") + globalWhereSqlTuple.getT1();
                     }
                 }
             } else { //没有过滤关系
-                Tuple2<String, String> whereHavingSqlTuple = _buildConditions(filterList, FilterConnectTypeEnum.AND, dsTypeEnum, extraParams, isReplaceGlobalParams);
+                Tuple2<String, String> whereHavingSqlTuple = _buildConditions(filterList, FilterConnectTypeEnum.AND, dsTypeEnum, extraParams);
                 if (whereHavingSqlTuple != null) {
                     whereSql = whereHavingSqlTuple.getT1();
                     havingSql = whereHavingSqlTuple.getT2();
@@ -552,7 +540,7 @@ public class QuerySqlService {
      *
      * @param compFilterDto
      */
-    private Tuple2<String, String> _buildFilters(ComponentFilterDto compFilterDto, List<ComponentFilter> filterList, DsTypeEnum dsTypeEnum, Map<String, List<Object>> extraParams, boolean isReplaceGlobalParams) {
+    private Tuple2<String, String> _buildFilters(ComponentFilterDto compFilterDto, List<ComponentFilter> filterList, DsTypeEnum dsTypeEnum, Map<String, List<Object>> extraParams) {
         if (compFilterDto == null || compFilterDto.getRelation() == null
                 || (CollectionUtil.isEmpty(compFilterDto.getConditions()) && CollectionUtil.isEmpty(compFilterDto.getFilters()))) {
             return null;
@@ -563,7 +551,7 @@ public class QuerySqlService {
         if (compFilterDto.getConditions() != null && !compFilterDto.getConditions().isEmpty()) {
             List<String> uniqIdList = compFilterDto.getConditions().stream().filter(f -> StrUtil.isNotBlank(f.getUniqId())).map(ComponentFilterItem::getUniqId).collect(Collectors.toList());
             List<ComponentFilter> filterDataList = filterList.stream().filter(f -> uniqIdList.contains(f.getUniqId())).collect(Collectors.toList());
-            Tuple2<String, String> tuple = _buildConditions(filterDataList, compFilterDto.getRelation(), dsTypeEnum, extraParams, isReplaceGlobalParams);
+            Tuple2<String, String> tuple = _buildConditions(filterDataList, compFilterDto.getRelation(), dsTypeEnum, extraParams);
             if (StrUtil.isNotBlank(tuple.getT1())) {
                 whereSqlList.add(tuple.getT1());
             }
@@ -578,7 +566,7 @@ public class QuerySqlService {
                 List<ComponentFilter> conds = filterList.stream().filter(f -> uniqIdList.contains(f.getUniqId())).collect(Collectors.toList());
                 FilterConnectTypeEnum relation = filterPlus.getRelation();
                 if (conds != null && relation != null && !conds.isEmpty()) {
-                    Tuple2<String, String> tuple = _buildConditions(conds, relation, dsTypeEnum, extraParams, isReplaceGlobalParams);
+                    Tuple2<String, String> tuple = _buildConditions(conds, relation, dsTypeEnum, extraParams);
                     if (StrUtil.isNotBlank(tuple.getT1())) {
                         whereSqlList.add(tuple.getT1());
                     }
@@ -599,7 +587,7 @@ public class QuerySqlService {
      * @param dsTypeEnum
      * @return
      */
-    private Tuple2<String, String> _buildConditions(List<ComponentFilter> compFilterList, FilterConnectTypeEnum relation, DsTypeEnum dsTypeEnum, Map<String, List<Object>> extraParams, boolean isReplaceGlobalParams) {
+    private Tuple2<String, String> _buildConditions(List<ComponentFilter> compFilterList, FilterConnectTypeEnum relation, DsTypeEnum dsTypeEnum, Map<String, List<Object>> extraParams) {
         List<String> whereSqlList = new ArrayList<String>();
         List<String> havingSqlList = new ArrayList<String>();
         for (ComponentFilter columnFilter : compFilterList) {
@@ -636,8 +624,12 @@ public class QuerySqlService {
                 for (ComponentFilterCondition condition : conditions) {
                     //替换变量参数
                     if (StrUtil.isNotBlank(condition.getParamKey())) {
-                        //当不需要替换全局变量值时:把"${key}"设置为value,数据查询过程中替换
-                        condition.setValues(isReplaceGlobalParams ? extraParams.get(condition.getParamKey()) : ListUtil.toList("${"+condition.getParamKey()+"}"));
+                        List<Object> values = extraParams.get(condition.getParamKey());
+                        if(values == null) {
+                            log.warn("解析构造where条件时,不能从全局变量中获取到对应的值,该条件已去掉|paramKey:{}", condition.getParamKey());
+                            continue;
+                        }
+                        condition.setValues(values);
                     }
                     String conditionSql = condition.getFunction().handle(columnName, column.getViewDataType(), condition.getValues(), dsTypeEnum);
                     if (!StrUtil.isEmpty(conditionSql)) {