feat(X-Pack): [数据填报]表单数据支持字段过滤查询

This commit is contained in:
ulleo
2025-02-13 18:23:44 +08:00
committed by dataeaseShu
parent 0e092ab66e
commit 870222c05d
30 changed files with 158 additions and 34 deletions

View File

@@ -5,7 +5,9 @@ import io.dataease.extensions.datasource.dto.TableField;
import io.dataease.extensions.datafilling.dto.ExtIndexField;
import io.dataease.extensions.datafilling.dto.ExtTableField;
import io.dataease.extensions.datasource.dto.TableFieldWithValue;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
/**
@@ -23,13 +25,56 @@ public abstract class ExtDDLProvider {
public abstract String dropTableColumnSql(String table, List<ExtTableField> formFields);
public abstract String searchSql(String table, List<TableField> formFields, String whereSql, long limit, long offset);
@Deprecated
public String searchSql(String table, List<TableField> formFields, String whereSql, long limit, long offset) {
String baseSql = "SELECT $Column_Fields$ FROM `$TABLE_NAME$` $WHERE_SQL$ ;";
if (limit > 0) {
baseSql = "SELECT $Column_Fields$ FROM `$TABLE_NAME$` $WHERE_SQL$ LIMIT $OFFSET_COUNT$, $LIMIT_COUNT$ ;";
}
baseSql = baseSql.replace("$TABLE_NAME$", table)
.replace("$OFFSET_COUNT$", Long.toString(offset))
.replace("$LIMIT_COUNT$", Long.toString(limit));
if (StringUtils.isBlank(whereSql)) {
baseSql = baseSql.replace("$WHERE_SQL$", "");
} else {
baseSql = baseSql.replace("$WHERE_SQL$", whereSql);
}
baseSql = baseSql.replace("$Column_Fields$", convertSearchFields(formFields));
return baseSql;
}
private String convertSearchFields(List<TableField> formFields) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < formFields.size(); i++) {
TableField f = formFields.get(i);
if (StringUtils.equalsAnyIgnoreCase(f.getFieldType(), "datetime")) {
//特殊处理,全部使用统一格式输出
builder.append("DATE_FORMAT(`").append(f.getOriginName()).append("`,'%Y-%m-%d %H:%i:%S')");
} else {
builder.append("`").append(f.getOriginName()).append("`");
}
if (i < formFields.size() - 1) {
builder.append(", ");
}
}
return builder.toString();
}
public abstract String searchColumnData(String table, String column, String order);
public abstract String searchColumnRowDataOne(String table, List<TableField> searchFields, TableFieldWithValue tableFieldWithValue);
public abstract String countSql(String table, String whereSql);
@Deprecated
public String countSql(String table, String whereSql){
String baseSql = "SELECT COUNT(1) FROM `$TABLE_NAME$` $WHERE_SQL$ ;";
baseSql = baseSql.replace("$TABLE_NAME$", table);
if (StringUtils.isBlank(whereSql)) {
baseSql = baseSql.replace("$WHERE_SQL$", "");
} else {
baseSql = baseSql.replace("$WHERE_SQL$", whereSql);
}
return baseSql;
}
public abstract String dropTableSql(String table);
@@ -45,9 +90,54 @@ public abstract class ExtDDLProvider {
public abstract String checkUniqueValueSql(String tableName, TableFieldWithValue field, TableFieldWithValue pk);
public abstract String whereSql(String tableName, List<TableField> searchFields);
@Deprecated
public String whereSql(String tableName, List<TableField> searchFields) {
StringBuilder builder = new StringBuilder("WHERE 1 = 1 ");
for (TableField searchField : searchFields) {
if (searchField.getInCount() > 1) {
List<String> pList = new ArrayList<>();
for (int i = 0; i < searchField.getInCount(); i++) {
pList.add("?");
}
String str = "AND $Column_Field$ IN (" + String.join(", ", pList) + ")";
builder.append(str.replace("$Column_Field$", searchField.getOriginName()));
} else {
switch (searchField.getTerm()) {
case "not_eq":
builder.append(("AND $Column_Field$ " + "!=" + " ? ").replace("$Column_Field$", searchField.getOriginName()));
break;
case "lt":
builder.append(("AND $Column_Field$ " + "<" + " ? ").replace("$Column_Field$", searchField.getOriginName()));
break;
case "gt":
builder.append(("AND $Column_Field$ " + ">" + " ? ").replace("$Column_Field$", searchField.getOriginName()));
break;
case "le":
builder.append(("AND $Column_Field$ " + "<=" + " ? ").replace("$Column_Field$", searchField.getOriginName()));
break;
case "ge":
builder.append(("AND $Column_Field$ " + ">=" + " ? ").replace("$Column_Field$", searchField.getOriginName()));
break;
case "null":
builder.append("AND $Column_Field$ IS NULL ");
break;
case "not_null":
builder.append("AND $Column_Field$ IS NOT NULL ");
break;
default:
builder.append(("AND $Column_Field$ " + "=" + " ? ").replace("$Column_Field$", searchField.getOriginName()));
break;
}
public abstract String getLowerCaseTaleNames();
}
}
return builder.toString();
}
@Deprecated
public String getLowerCaseTaleNames() {
return "SHOW VARIABLES LIKE 'lower_case_table_names'";
}
public abstract Integer getColumnType(String name);