Browse Source

fix(TDEngine): 修复TDEngine数据库事件精度不是毫秒时无法按时间查询问题

zhouhao 2 years ago
parent
commit
037c790550

+ 10 - 0
jetlinks-components/tdengine-component/src/main/java/org/jetlinks/community/tdengine/TDEngineUtils.java

@@ -3,12 +3,22 @@ package org.jetlinks.community.tdengine;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
 import org.springframework.web.reactive.function.client.ClientResponse;
 import reactor.core.publisher.Mono;
 
 @Slf4j
 public class TDEngineUtils {
 
+    public static final DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS");
+
+
+    public static String formatTime(long timestamp) {
+        return new DateTime(timestamp).toString(format);
+    }
+
 
     public static Mono<JSONObject> checkExecuteResult(ClientResponse response) {
         if (response.statusCode().isError()) {

+ 3 - 2
jetlinks-components/tdengine-component/src/main/java/org/jetlinks/community/tdengine/things/TDengineThingDataHelper.java

@@ -11,6 +11,7 @@ import org.hswebframework.utils.time.DefaultDateFormatter;
 import org.hswebframework.web.api.crud.entity.PagerResult;
 import org.hswebframework.web.api.crud.entity.QueryParamEntity;
 import org.hswebframework.web.exception.BusinessException;
+import org.jetlinks.community.tdengine.TDEngineUtils;
 import org.jetlinks.community.tdengine.term.TDengineQueryConditionBuilder;
 import org.jetlinks.core.metadata.Converter;
 import org.jetlinks.core.metadata.DataType;
@@ -114,9 +115,9 @@ class TDengineThingDataHelper implements Disposable {
 
     public static Object prepareTimestampValue(Object value, String type) {
 
-        return ConverterUtils.tryConvertToList(value,v->{
+        return ConverterUtils.tryConvertToList(value, v -> {
             Date date = CastUtils.castDate(v);
-            return date.getTime();
+            return TDEngineUtils.formatTime(date.getTime());
         });
     }