Преглед изворни кода

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 недеља
родитељ
комит
72e23e493c

+ 4
- 20
iot-platform/src/main/java/com/iot/platform/service/TdEngineService.java Прегледај датотеку

44
     // 默认批量大小
44
     // 默认批量大小
45
     private static final int DEFAULT_BATCH_SIZE = 50;
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
     // 默认 VARCHAR 字段长度限制
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
     private static final ZoneOffset ZONE_OFFSET_8 = ZoneOffset.of("+8");
51
     private static final ZoneOffset ZONE_OFFSET_8 = ZoneOffset.of("+8");
412
      * 根据 TdEngine 列类型获取创建列的 SQL 类型
409
      * 根据 TdEngine 列类型获取创建列的 SQL 类型
413
      */
410
      */
414
     private String getColumnTypeForDDL(String tdType, String columnName) {
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
         switch (tdType) {
412
         switch (tdType) {
420
             case "BOOL":
413
             case "BOOL":
421
             case "BIGINT":
414
             case "BIGINT":
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
             log.debug("字段值超长,截断存储 | 列: {} | 值长度: {} | 最大: {} | 截断后: {}...",
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
         return "'" + escapeValue(strValue) + "'";
470
         return "'" + escapeValue(strValue) + "'";
487
     }
471
     }

+ 4
- 5
iot-platform/src/test/java/com/iot/platform/service/TDengineServiceTest.java Прегледај датотеку

195
     }
195
     }
196
 
196
 
197
     @Test
197
     @Test
198
-    @DisplayName("getColumnTypeForDDL: VARCHAR 返回 VARCHAR(38)")
198
+    @DisplayName("getColumnTypeForDDL: VARCHAR 返回 VARCHAR(255)")
199
     void getColumnTypeForDDL_varchar_returnsWithLength() throws Exception {
199
     void getColumnTypeForDDL_varchar_returnsWithLength() throws Exception {
200
         Method method = TdEngineService.class.getDeclaredMethod("getColumnTypeForDDL", String.class, String.class);
200
         Method method = TdEngineService.class.getDeclaredMethod("getColumnTypeForDDL", String.class, String.class);
201
         method.setAccessible(true);
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
     @Test
206
     @Test
247
         Method method = TdEngineService.class.getDeclaredMethod("formatValue", Object.class, String.class, String.class);
246
         Method method = TdEngineService.class.getDeclaredMethod("formatValue", Object.class, String.class, String.class);
248
         method.setAccessible(true);
247
         method.setAccessible(true);
249
 
248
 
250
-        String longStr = "123456789012345678901234567890123456789012345678901234567890123456789"; // 69 chars
249
+        String longStr = "a".repeat(300);
251
         assertThat(method.invoke(tdengineService, longStr, "col", "VARCHAR"))
250
         assertThat(method.invoke(tdengineService, longStr, "col", "VARCHAR"))
252
-                .isEqualTo("'12345678901234567890123456789012345678'");
251
+                .isEqualTo("'" + "a".repeat(255) + "'");
253
     }
252
     }
254
 
253
 
255
     @Test
254
     @Test

Loading…
Откажи
Сачувај