This commit is contained in:
Redkale
2019-07-29 11:40:33 +08:00
parent 44bd6f235c
commit e2a49eaab7
2 changed files with 34 additions and 30 deletions

View File

@@ -1504,13 +1504,14 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
} }
protected <T, K extends Serializable, N extends Number> CompletableFuture<Map<K, N>> queryColumnMapCompose(final EntityInfo<T> info, final String keyColumn, final FilterFunc func, final String funcColumn, FilterNode node) { protected <T, K extends Serializable, N extends Number> CompletableFuture<Map<K, N>> queryColumnMapCompose(final EntityInfo<T> info, final String keyColumn, final FilterFunc func, final String funcColumn, FilterNode node) {
final String sqlkey = info.getSQLColumn(null, keyColumn); final String keySqlColumn = info.getSQLColumn(null, keyColumn);
final Map<Class, String> joinTabalis = node == null ? null : node.getJoinTabalis(); final Map<Class, String> joinTabalis = node == null ? null : node.getJoinTabalis();
final Set<String> haset = new HashSet<>(); final Set<String> haset = new HashSet<>();
final CharSequence join = node == null ? null : node.createSQLJoin(this, false, joinTabalis, haset, info); final CharSequence join = node == null ? null : node.createSQLJoin(this, false, joinTabalis, haset, info);
final CharSequence where = node == null ? null : node.createSQLExpress(info, joinTabalis); final CharSequence where = node == null ? null : node.createSQLExpress(info, joinTabalis);
final String sql = "SELECT a." + sqlkey + ", " + func.getColumn((funcColumn == null || funcColumn.isEmpty() ? "*" : info.getSQLColumn("a", funcColumn))) final String funcSqlColumn = func == null ? info.getSQLColumn("a", funcColumn) : func.getColumn((funcColumn == null || funcColumn.isEmpty() ? "*" : info.getSQLColumn("a", funcColumn)));
+ " FROM " + info.getTable(node) + " a" + (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where)) + " GROUP BY a." + sqlkey; final String sql = "SELECT a." + keySqlColumn + ", " + funcSqlColumn
+ " FROM " + info.getTable(node) + " a" + (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where)) + " GROUP BY a." + keySqlColumn;
if (info.isLoggable(logger, Level.FINEST, sql)) logger.finest(info.getType().getSimpleName() + " querycolumnmap sql=" + sql); if (info.isLoggable(logger, Level.FINEST, sql)) logger.finest(info.getType().getSimpleName() + " querycolumnmap sql=" + sql);
return queryColumnMapDB(info, sql, keyColumn); return queryColumnMapDB(info, sql, keyColumn);
} }

View File

@@ -265,6 +265,7 @@ public final class EntityCache<T> {
if (filter != null) stream = stream.filter(filter); if (filter != null) stream = stream.filter(filter);
Collector<T, Map, ?> collector = null; Collector<T, Map, ?> collector = null;
final Class valtype = funcAttr == null ? null : funcAttr.type(); final Class valtype = funcAttr == null ? null : funcAttr.type();
if (func != null) {
switch (func) { switch (func) {
case AVG: case AVG:
if (valtype == float.class || valtype == Float.class || valtype == double.class || valtype == Double.class) { if (valtype == float.class || valtype == Float.class || valtype == double.class || valtype == Double.class) {
@@ -292,7 +293,9 @@ public final class EntityCache<T> {
} }
break; break;
} }
Map rs = stream.collect(Collectors.groupingBy(t -> keyAttr.get(t), LinkedHashMap::new, collector)); }
Map rs = collector == null ? stream.collect(Collectors.toMap(t -> keyAttr.get(t), t -> funcAttr.get(t), (key1, key2) -> key2))
: stream.collect(Collectors.groupingBy(t -> keyAttr.get(t), LinkedHashMap::new, collector));
if (func == MAX || func == MIN) { if (func == MAX || func == MIN) {
Map rs2 = new LinkedHashMap(); Map rs2 = new LinkedHashMap();
rs.forEach((x, y) -> { rs.forEach((x, y) -> {