feat: 视图支持计算字段

This commit is contained in:
junjun 2022-06-22 19:59:38 +08:00
parent 30435e00cf
commit b5e4aea1dc

View File

@ -533,7 +533,7 @@ public class DataSetTableService {
.checked(Boolean.TRUE).build(); .checked(Boolean.TRUE).build();
List<DatasetTableField> fields = dataSetTableFieldsService.list(datasetTableField); List<DatasetTableField> fields = dataSetTableFieldsService.list(datasetTableField);
if (CollectionUtils.isNotEmpty(extFields)) { if (CollectionUtils.isNotEmpty(extFields)) {
fields.addAll(extFields); fields = extFields;
} }
if (CollectionUtils.isEmpty(fields)) { if (CollectionUtils.isEmpty(fields)) {
map.put("fields", fields); map.put("fields", fields);
@ -628,7 +628,6 @@ public class DataSetTableService {
datasourceRequest.setQuery( datasourceRequest.setQuery(
qp.createQueryTableWithPage(table, fields, page, pageSize, realSize, false, ds, customFilter)); qp.createQueryTableWithPage(table, fields, page, pageSize, realSize, false, ds, customFilter));
map.put("sql", datasourceRequest.getQuery()); map.put("sql", datasourceRequest.getQuery());
logger.error(datasourceRequest.getQuery());
try { try {
data.addAll(jdbcProvider.getData(datasourceRequest)); data.addAll(jdbcProvider.getData(datasourceRequest));
} catch (Exception e) { } catch (Exception e) {
@ -750,7 +749,7 @@ public class DataSetTableService {
conditionEntities.add(entity2); conditionEntities.add(entity2);
request.setConditions(conditionEntities); request.setConditions(conditionEntities);
List<DataSetTaskLogDTO> dataSetTaskLogDTOS = dataSetTableTaskLogService.listTaskLog(request, "excel"); List<DataSetTaskLogDTO> dataSetTaskLogDTOS = dataSetTableTaskLogService.listTaskLog(request, "excel");
if(CollectionUtils.isNotEmpty(dataSetTaskLogDTOS)){ if (CollectionUtils.isNotEmpty(dataSetTaskLogDTOS)) {
dataSetTaskLogDTOS.get(0).getStatus().equalsIgnoreCase(JobStatus.Underway.name()); dataSetTaskLogDTOS.get(0).getStatus().equalsIgnoreCase(JobStatus.Underway.name());
sycnStatus = dataSetTaskLogDTOS.get(0).getStatus(); sycnStatus = dataSetTaskLogDTOS.get(0).getStatus();
} }
@ -944,14 +943,15 @@ public class DataSetTableService {
List<SqlVariableDetails> sqlVariableDetails = new ArrayList<>(); List<SqlVariableDetails> sqlVariableDetails = new ArrayList<>();
datasetTables.forEach(datasetTable -> { datasetTables.forEach(datasetTable -> {
if (StringUtils.isNotEmpty(datasetTable.getSqlVariableDetails())) { if (StringUtils.isNotEmpty(datasetTable.getSqlVariableDetails())) {
sqlVariableDetails.addAll(new Gson().fromJson(datasetTable.getSqlVariableDetails(), new TypeToken<List<SqlVariableDetails>>() {}.getType())); sqlVariableDetails.addAll(new Gson().fromJson(datasetTable.getSqlVariableDetails(), new TypeToken<List<SqlVariableDetails>>() {
}.getType()));
} }
}); });
return sqlVariableDetails; return sqlVariableDetails;
} }
public String handleVariableDefaultValue(String sql, String sqlVariableDetails){ public String handleVariableDefaultValue(String sql, String sqlVariableDetails) {
if (StringUtils.isEmpty(sql)) { if (StringUtils.isEmpty(sql)) {
DataEaseException.throwException(Translator.get("i18n_sql_not_empty")); DataEaseException.throwException(Translator.get("i18n_sql_not_empty"));
} }
@ -959,7 +959,8 @@ public class DataSetTableService {
Matcher matcher = pattern.matcher(sql); Matcher matcher = pattern.matcher(sql);
while (matcher.find()) { while (matcher.find()) {
SqlVariableDetails defaultsSqlVariableDetail = null; SqlVariableDetails defaultsSqlVariableDetail = null;
List<SqlVariableDetails> defaultsSqlVariableDetails = new Gson().fromJson(sqlVariableDetails, new TypeToken<List<SqlVariableDetails>>() {}.getType()); List<SqlVariableDetails> defaultsSqlVariableDetails = new Gson().fromJson(sqlVariableDetails, new TypeToken<List<SqlVariableDetails>>() {
}.getType());
for (SqlVariableDetails sqlVariableDetail : defaultsSqlVariableDetails) { for (SqlVariableDetails sqlVariableDetail : defaultsSqlVariableDetails) {
if (matcher.group().substring(2, matcher.group().length() - 1).equalsIgnoreCase(sqlVariableDetail.getVariableName())) { if (matcher.group().substring(2, matcher.group().length() - 1).equalsIgnoreCase(sqlVariableDetail.getVariableName())) {
defaultsSqlVariableDetail = sqlVariableDetail; defaultsSqlVariableDetail = sqlVariableDetail;
@ -970,11 +971,11 @@ public class DataSetTableService {
sql = sql.replace(matcher.group(), defaultsSqlVariableDetail.getDefaultValue()); sql = sql.replace(matcher.group(), defaultsSqlVariableDetail.getDefaultValue());
} }
} }
try { try {
sql = removeVariables(sql); sql = removeVariables(sql);
}catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
return sql; return sql;
} }
@ -986,7 +987,7 @@ public class DataSetTableService {
hasVariables = true; hasVariables = true;
sql = sql.replace(matcher.group(), SubstitutedParams); sql = sql.replace(matcher.group(), SubstitutedParams);
} }
if(!hasVariables){ if (!hasVariables) {
return sql; return sql;
} }
CCJSqlParserUtil.parse(sql, parser -> parser.withSquareBracketQuotation(true)); CCJSqlParserUtil.parse(sql, parser -> parser.withSquareBracketQuotation(true));
@ -994,15 +995,15 @@ public class DataSetTableService {
Select select = (Select) statement; Select select = (Select) statement;
PlainSelect plainSelect = ((PlainSelect) select.getSelectBody()); PlainSelect plainSelect = ((PlainSelect) select.getSelectBody());
Expression expr = plainSelect.getWhere(); Expression expr = plainSelect.getWhere();
if(expr == null){ if (expr == null) {
return sql; return sql;
} }
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
BinaryExpression binaryExpression = (BinaryExpression)expr; BinaryExpression binaryExpression = (BinaryExpression) expr;
if(!(binaryExpression.getLeftExpression() instanceof BinaryExpression) && !(binaryExpression.getRightExpression() instanceof BinaryExpression) && hasVarible(binaryExpression.toString())){ if (!(binaryExpression.getLeftExpression() instanceof BinaryExpression) && !(binaryExpression.getRightExpression() instanceof BinaryExpression) && hasVarible(binaryExpression.toString())) {
stringBuilder.append(SubstitutedSql); stringBuilder.append(SubstitutedSql);
}else { } else {
expr.accept(getExpressionDeParser(stringBuilder)); expr.accept(getExpressionDeParser(stringBuilder));
} }
plainSelect.setWhere(CCJSqlParserUtil.parseCondExpression(stringBuilder.toString())); plainSelect.setWhere(CCJSqlParserUtil.parseCondExpression(stringBuilder.toString()));
@ -2627,6 +2628,7 @@ public class DataSetTableService {
}; };
return expressionDeParser; return expressionDeParser;
} }
static private boolean hasVarible(String sql) { static private boolean hasVarible(String sql) {
return sql.contains(SubstitutedParams); return sql.contains(SubstitutedParams);
} }