diff --git a/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlDDLProvider.java b/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlDDLProvider.java index 8b18cb33ce..258c4254ca 100644 --- a/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlDDLProvider.java +++ b/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlDDLProvider.java @@ -39,8 +39,11 @@ public class MysqlDDLProvider extends DDLProviderImpl { for (int i = 0; i < strings.length; i++) { if (StringUtils.isEmpty(strings[i])) { strings1[i] = null; - } else { - strings1[i] = strings[i].replace("'", "\\'"); + continue; + } + strings1[i] = strings[i].replace("'", "\\'"); + if(strings1[i].equals("/")){ + strings1[i] = "//"; } } values.append("('").append(UUID.randomUUID()) diff --git a/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java index c9258d88cc..bd791c3563 100644 --- a/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java @@ -1091,7 +1091,7 @@ public class CKQueryProvider extends QueryProvider { return null; } - AtomicReference atomicReference = new AtomicReference<>(); + List chartExtFilterRequests = new ArrayList<>(); requestList.forEach(request -> { DatasetTableField datasetTableField = request.getDatasetTableField(); List requestValue = request.getValue(); @@ -1106,12 +1106,12 @@ public class CKQueryProvider extends QueryProvider { requestCopy.setValue(new ArrayList() {{ add(String.format(toDateTime64, "'" + simpleDateFormat.format(new Date(Long.parseLong(requestValue.get(1)))) + "'")); }}); - atomicReference.set(requestCopy); + chartExtFilterRequests.add(requestCopy); } }); - if (ObjectUtils.isNotEmpty(atomicReference.get())) { - requestList.add(atomicReference.get()); + if (CollectionUtils.isNotEmpty(chartExtFilterRequests)) { + requestList.addAll(chartExtFilterRequests); } List list = new ArrayList<>(); for (ChartExtFilterRequest request : requestList) { diff --git a/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java index c55f1470bb..1ae1bf7049 100644 --- a/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java @@ -54,6 +54,7 @@ public class SqlserverQueryProvider extends QueryProvider { case "NCHAR": case "NTEXT": case "VARCHAR": + case "NVARCHAR": case "TEXT": case "TINYTEXT": case "MEDIUMTEXT": @@ -898,11 +899,19 @@ public class SqlserverQueryProvider extends QueryProvider { } else if (StringUtils.equalsIgnoreCase(item.getTerm(), "not_empty")) { whereValue = "''"; } else if (StringUtils.containsIgnoreCase(item.getTerm(), "in") || StringUtils.containsIgnoreCase(item.getTerm(), "not in")) { - whereValue = "('" + String.join("','", value.split(",")) + "')"; + if(field.getType().equals("NVARCHAR")){ + whereValue = Arrays.asList(value.split(",")).stream().map(str ->{return "N"+ str;}).collect(Collectors.joining(",")); + }else { + whereValue = "('" + String.join("','", value.split(",")) + "')"; + } } else if (StringUtils.containsIgnoreCase(item.getTerm(), "like")) { whereValue = "'%" + value + "%'"; } else { - whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE, value); + if(field.getType().equals("NVARCHAR")){ + whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE_CH, value); + }else { + whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE, value); + } } SQLObj build = SQLObj.builder() .whereField(whereName) @@ -1025,11 +1034,19 @@ public class SqlserverQueryProvider extends QueryProvider { } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { whereValue = "''"; } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in") || StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "not in")) { - whereValue = "('" + String.join("','", value.split(",")) + "')"; + if(field.getType().equals("NVARCHAR")){ + whereValue = Arrays.asList(value.split(",")).stream().map(str ->{return "N"+ str;}).collect(Collectors.joining(",")); + }else { + whereValue = "('" + String.join("','", value.split(",")) + "')"; + } } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { whereValue = "'%" + value + "%'"; } else { - whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE, value); + if(field.getType().equals("NVARCHAR")){ + whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE_CH, value); + }else { + whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE, value); + } } list.add(SQLObj.builder() .whereField(whereName) @@ -1129,7 +1146,11 @@ public class SqlserverQueryProvider extends QueryProvider { String whereValue = ""; if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; + if(request.getDatasetTableField().getType().equals("NVARCHAR")){ + whereValue = value.stream().map(str ->{return "N"+ str;}).collect(Collectors.joining(",")); + }else { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { String keyword = value.get(0).toUpperCase(); whereValue = "'%" + keyword + "%'"; @@ -1144,7 +1165,13 @@ public class SqlserverQueryProvider extends QueryProvider { whereValue = String.format(SqlServerSQLConstants.WHERE_BETWEEN, value.get(0), value.get(1)); } } else { - whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE, value.get(0)); + + if(request.getDatasetTableField().getType().equals("NVARCHAR")){ + whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE_CH, value.get(0)); + }else { + whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE, value.get(0)); + } + } list.add(SQLObj.builder() .whereField(whereName) @@ -1301,11 +1328,19 @@ public class SqlserverQueryProvider extends QueryProvider { } else if (StringUtils.equalsIgnoreCase(f.getTerm(), "not_empty")) { whereValue = "''"; } else if (StringUtils.containsIgnoreCase(f.getTerm(), "in")) { - whereValue = "('" + StringUtils.join(f.getValue(), "','") + "')"; + if(y.getType().equals("NVARCHAR")){ + whereValue = Arrays.asList(f.getValue().split(",")).stream().map(str ->{return "N"+ str;}).collect(Collectors.joining(",")); + }else { + whereValue = "('" + String.join("','", f.getValue().split(",")) + "')"; + } } else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) { whereValue = "'%" + f.getValue() + "%'"; } else { - whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE, f.getValue()); + if(y.getType().equals("NVARCHAR")){ + whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE_CH, f.getValue()); + }else { + whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE, f.getValue()); + } } list.add(SQLObj.builder() .whereField(fieldAlias) diff --git a/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java b/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java index 88646f5326..4df9247e53 100644 --- a/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java +++ b/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java @@ -1,8 +1,8 @@ package io.dataease.service.chart.util; import cn.hutool.core.util.ArrayUtil; -import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs; import io.dataease.dto.chart.*; +import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; import io.dataease.plugins.xpack.auth.dto.request.ColumnPermissionItem; import org.apache.commons.collections4.CollectionUtils; @@ -1071,11 +1071,11 @@ public class ChartDataBuild { break; } if (originStr.length() >= columnPermissionItem.getDesensitizationRule().getM() && originStr.length() >= columnPermissionItem.getDesensitizationRule().getN()) { - desensitizationStr = "***" + StringUtils.substring(originStr, columnPermissionItem.getDesensitizationRule().getM() - 1, columnPermissionItem.getDesensitizationRule().getN()) + "***"; + desensitizationStr = buildPrefix(columnPermissionItem.getDesensitizationRule().getM()) + StringUtils.substring(originStr, columnPermissionItem.getDesensitizationRule().getM() - 1, columnPermissionItem.getDesensitizationRule().getN()) + "***"; break; } if (originStr.length() >= columnPermissionItem.getDesensitizationRule().getM() && originStr.length() < columnPermissionItem.getDesensitizationRule().getN()) { - desensitizationStr = "***" + StringUtils.substring(originStr, columnPermissionItem.getDesensitizationRule().getM() - 1, originStr.length()); + desensitizationStr = buildPrefix(columnPermissionItem.getDesensitizationRule().getM()) + StringUtils.substring(originStr, columnPermissionItem.getDesensitizationRule().getM() - 1, originStr.length()); } break; default: @@ -1086,6 +1086,18 @@ public class ChartDataBuild { return desensitizationStr; } + + private static String buildPrefix(Integer integer) { + String prefix = ""; + if (integer <= 1) { + return prefix; + } + for (int i = 0; i < integer - 1; i++) { + prefix = prefix + "*"; + } + return prefix; + } + private static Map transTableNormal(List fields, ChartViewWithBLOBs view, List data, Map desensitizationList) { Map map = new TreeMap<>(); List> tableRow = new ArrayList<>(); diff --git a/backend/src/main/java/io/dataease/service/dataset/PermissionService.java b/backend/src/main/java/io/dataease/service/dataset/PermissionService.java index 77fba010d0..9199b275ea 100644 --- a/backend/src/main/java/io/dataease/service/dataset/PermissionService.java +++ b/backend/src/main/java/io/dataease/service/dataset/PermissionService.java @@ -208,7 +208,10 @@ public class PermissionService { dataSetColumnPermissionsDTO.setDatasetId(datasetId); dataSetColumnPermissionsDTO.setAuthTargetIds(Collections.singletonList(userId)); dataSetColumnPermissionsDTO.setAuthTargetType("user"); - datasetColumnPermissions.addAll(columnPermissionService.searchPermissions(dataSetColumnPermissionsDTO)); + List dataSetColumnPermissionsDTOS = columnPermissionService.searchPermissions(dataSetColumnPermissionsDTO); + if(CollectionUtils.isNotEmpty(dataSetColumnPermissionsDTOS)){ + datasetColumnPermissions.addAll(dataSetColumnPermissionsDTOS); + } if (CollectionUtils.isNotEmpty(roleIds)) { DataSetColumnPermissionsDTO request = new DataSetColumnPermissionsDTO(); request.setDatasetId(datasetId); diff --git a/frontend/src/views/system/datasource/DsConfiguration.vue b/frontend/src/views/system/datasource/DsConfiguration.vue index ac622af32f..ee7b356c80 100644 --- a/frontend/src/views/system/datasource/DsConfiguration.vue +++ b/frontend/src/views/system/datasource/DsConfiguration.vue @@ -454,6 +454,7 @@ size="840px" :before-close="closeEditItem" direction="rtl" + :wrapper-closable="false" >