Bläddra i källkod

refactor(service): 统一 VARCHAR 长度为 255,移除 device_id 特殊处理

- DEFAULT_VARCHAR_LENGTH 38 → 255
- 删除 DEVICE_ID_VARCHAR_LENGTH 常量
- 删除 getColumnTypeForDDL 中 device_id 的 VARCHAR(32) 特殊分支
- 删除 formatValue 中 device_id 的 UUID 去连字符逻辑
- 同步更新相关单元测试断言
mqy20260511
humanleft 2 veckor sedan
förälder
incheckning
72e23e493c

+ 4
- 20
iot-platform/src/main/java/com/iot/platform/service/TdEngineService.java Visa fil

@@ -44,11 +44,8 @@ public class TdEngineService {
44 44
     // 默认批量大小
45 45
     private static final int DEFAULT_BATCH_SIZE = 50;
46 46
 
47
-    // device_id 字段长度限制
48
-    private static final int DEVICE_ID_VARCHAR_LENGTH = 32;
49
-
50 47
     // 默认 VARCHAR 字段长度限制
51
-    private static final int DEFAULT_VARCHAR_LENGTH = 38;
48
+    private static final int DEFAULT_VARCHAR_LENGTH = 255;
52 49
 
53 50
     // 东八区时区偏移(避免重复创建)
54 51
     private static final ZoneOffset ZONE_OFFSET_8 = ZoneOffset.of("+8");
@@ -412,10 +409,6 @@ public class TdEngineService {
412 409
      * 根据 TdEngine 列类型获取创建列的 SQL 类型
413 410
      */
414 411
     private String getColumnTypeForDDL(String tdType, String columnName) {
415
-        // device_id 固定 32,兼容旧表(旧表为 VARCHAR(32))
416
-        if ("device_id".equalsIgnoreCase(columnName)) {
417
-            return "VARCHAR(" + DEVICE_ID_VARCHAR_LENGTH + ")";
418
-        }
419 412
         switch (tdType) {
420 413
             case "BOOL":
421 414
             case "BIGINT":
@@ -469,19 +462,10 @@ public class TdEngineService {
469 462
         }
470 463
 
471 464
         // 字符串类型校验长度
472
-        int maxLen = "device_id".equalsIgnoreCase(columnName) ? DEVICE_ID_VARCHAR_LENGTH : DEFAULT_VARCHAR_LENGTH;
473
-        if ("device_id".equalsIgnoreCase(columnName)) {
474
-            // UUID 去掉连字符适配旧表 VARCHAR(32)
475
-            if (strValue.length() == 36 && strValue.charAt(8) == '-' && strValue.charAt(13) == '-'
476
-                    && strValue.charAt(18) == '-' && strValue.charAt(23) == '-') {
477
-                strValue = strValue.replace("-", "");
478
-                log.debug("device_id UUID 去连字符: {} -> {}", value, strValue);
479
-            }
480
-        }
481
-        if (strValue.length() > maxLen) {
465
+        if (strValue.length() > DEFAULT_VARCHAR_LENGTH) {
482 466
             log.debug("字段值超长,截断存储 | 列: {} | 值长度: {} | 最大: {} | 截断后: {}...",
483
-                    columnName, strValue.length(), maxLen, strValue.substring(0, maxLen));
484
-            strValue = strValue.substring(0, maxLen);
467
+                    columnName, strValue.length(), DEFAULT_VARCHAR_LENGTH, strValue.substring(0, DEFAULT_VARCHAR_LENGTH));
468
+            strValue = strValue.substring(0, DEFAULT_VARCHAR_LENGTH);
485 469
         }
486 470
         return "'" + escapeValue(strValue) + "'";
487 471
     }

+ 4
- 5
iot-platform/src/test/java/com/iot/platform/service/TDengineServiceTest.java Visa fil

@@ -195,13 +195,12 @@ class TDengineServiceTest {
195 195
     }
196 196
 
197 197
     @Test
198
-    @DisplayName("getColumnTypeForDDL: VARCHAR 返回 VARCHAR(38)")
198
+    @DisplayName("getColumnTypeForDDL: VARCHAR 返回 VARCHAR(255)")
199 199
     void getColumnTypeForDDL_varchar_returnsWithLength() throws Exception {
200 200
         Method method = TdEngineService.class.getDeclaredMethod("getColumnTypeForDDL", String.class, String.class);
201 201
         method.setAccessible(true);
202 202
 
203
-        assertThat(method.invoke(tdengineService, "VARCHAR", "col")).isEqualTo("VARCHAR(38)");
204
-        assertThat(method.invoke(tdengineService, "VARCHAR", "device_id")).isEqualTo("VARCHAR(32)");
203
+        assertThat(method.invoke(tdengineService, "VARCHAR", "col")).isEqualTo("VARCHAR(255)");
205 204
     }
206 205
 
207 206
     @Test
@@ -247,9 +246,9 @@ class TDengineServiceTest {
247 246
         Method method = TdEngineService.class.getDeclaredMethod("formatValue", Object.class, String.class, String.class);
248 247
         method.setAccessible(true);
249 248
 
250
-        String longStr = "123456789012345678901234567890123456789012345678901234567890123456789"; // 69 chars
249
+        String longStr = "a".repeat(300);
251 250
         assertThat(method.invoke(tdengineService, longStr, "col", "VARCHAR"))
252
-                .isEqualTo("'12345678901234567890123456789012345678'");
251
+                .isEqualTo("'" + "a".repeat(255) + "'");
253 252
     }
254 253
 
255 254
     @Test

Laddar…
Avbryt
Spara