From c3edf1d33219ea5557370e56d9095a2fbcc1ec75 Mon Sep 17 00:00:00 2001 From: ayan Date: Tue, 31 Dec 2024 10:16:45 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E9=80=9A=E7=94=A8=E6=A8=A1=E5=9D=97):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8DTDengine=E6=8E=92=E5=BA=8F=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TDengineColumnModeQueryOperations.java | 2 +- .../things/TDengineThingDataHelper.java | 25 +++++++++++++------ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/jetlinks-components/tdengine-component/src/main/java/org/jetlinks/community/tdengine/things/TDengineColumnModeQueryOperations.java b/jetlinks-components/tdengine-component/src/main/java/org/jetlinks/community/tdengine/things/TDengineColumnModeQueryOperations.java index 79bcca0cc..8bf1dad93 100644 --- a/jetlinks-components/tdengine-component/src/main/java/org/jetlinks/community/tdengine/things/TDengineColumnModeQueryOperations.java +++ b/jetlinks-components/tdengine-component/src/main/java/org/jetlinks/community/tdengine/things/TDengineColumnModeQueryOperations.java @@ -79,7 +79,7 @@ protected Flux doAggregation(String metric, joiner.add(" ") .add(TDengineThingDataHelper.getGroupByTime(request.getInterval())); } - joiner.add(TDengineThingDataHelper.buildOrderBy(request.getFilter())); + joiner.add(helper.buildOrderBy(metric, request.getFilter())); String format = request.getFormat(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); diff --git a/jetlinks-components/tdengine-component/src/main/java/org/jetlinks/community/tdengine/things/TDengineThingDataHelper.java b/jetlinks-components/tdengine-component/src/main/java/org/jetlinks/community/tdengine/things/TDengineThingDataHelper.java index b4a5a74cb..5bc7c685f 100644 --- a/jetlinks-components/tdengine-component/src/main/java/org/jetlinks/community/tdengine/things/TDengineThingDataHelper.java +++ b/jetlinks-components/tdengine-component/src/main/java/org/jetlinks/community/tdengine/things/TDengineThingDataHelper.java @@ -13,6 +13,7 @@ import org.hswebframework.web.exception.BusinessException; import org.jetlinks.community.tdengine.TDEngineUtils; import org.jetlinks.community.tdengine.term.TDengineQueryConditionBuilder; +import org.jetlinks.community.things.data.ThingsDataConstants; import org.jetlinks.core.metadata.Converter; import org.jetlinks.core.metadata.DataType; import org.jetlinks.community.Interval; @@ -121,14 +122,24 @@ public static Object prepareTimestampValue(Object value, String type) { }); } - public static String buildOrderBy(QueryParamEntity param) { + public String buildOrderBy(String metric, QueryParamEntity param) { + List sorts = param.getSorts(); + if (CollectionUtils.isEmpty(sorts)) { + return " order by `_ts` desc"; + } + StringJoiner joiner = new StringJoiner(", ", " order by ", ""); + for (Sort sort : sorts) { - for (Sort sort : param.getSorts()) { - if (sort.getName().equalsIgnoreCase("timestamp")) { - return " order by `_ts` " + sort.getOrder(); + if ((ThingsDataConstants.COLUMN_TIMESTAMP.equals(sort.getName()) || "_ts".equals(sort.getName()))) { + joiner.add("`_ts` " + sort.getOrder()); + }else { + metadataManager + .getColumn(metric, sort.getName()) + .orElseThrow(() -> new IllegalArgumentException("Unexpected TD engine order column: " + sort.getName())); + joiner.add("`"+ sort.getName() +"` " + sort.getOrder()); } } - return " order by `_ts` desc"; + return joiner.toString(); } public String buildWhere(String metric, QueryParamEntity param, String... and) { @@ -168,7 +179,7 @@ protected Flux doQuery(String metric, Query .add(metric) .add("` ") .add(buildWhere(metric, param)) - .add(buildOrderBy(param)); + .add(buildOrderBy(metric, param)); if (param.isPaging()) { joiner.add(" limit ").add(String.valueOf(param.getPageSize())) @@ -192,7 +203,7 @@ protected Mono> doQueryPage(String metric, QueryParamEntity param = query.getParam(); String sql = "`" + metric + "` " + buildWhere(metric, param); String countSql = "select count(1) total from " + sql; - String dataSql = "select * from " + sql + buildOrderBy(param) + " limit " + param.getPageSize() + " offset " + param + String dataSql = "select * from " + sql + buildOrderBy(metric, param) + " limit " + param.getPageSize() + " offset " + param .getPageIndex() * param.getPageSize(); return Mono.zip(