|
|
@@ -77,15 +77,21 @@ public class VehicleSyncTask {
|
|
77
|
77
|
}
|
|
78
|
78
|
|
|
79
|
79
|
// redisKey 格式: pe_iot_<controllerId>_<deviceId>
|
|
80
|
|
- // 从右往左取,避免 id 本身含下划线的问题
|
|
81
|
|
- String[] parts = redisKey.split("_");
|
|
82
|
|
- if (parts.length < 3) {
|
|
|
80
|
+ String prefix = "pe_iot_";
|
|
|
81
|
+ if (!redisKey.startsWith(prefix) || redisKey.length() <= prefix.length()) {
|
|
83
|
82
|
log.warn("跳过非法 redis key: {}", redisKey);
|
|
84
|
83
|
continue;
|
|
85
|
84
|
}
|
|
86
|
|
- String controllerId = parts[parts.length - 2];
|
|
87
|
|
- String deviceId = parts[parts.length - 1];
|
|
88
|
|
- String tableName = "pe_iot_" + controllerId.substring(0, 2);
|
|
|
85
|
+ String remainder = redisKey.substring(prefix.length());
|
|
|
86
|
+ int lastUnderscore = remainder.lastIndexOf('_');
|
|
|
87
|
+ if (lastUnderscore <= 0 || lastUnderscore == remainder.length() - 1) {
|
|
|
88
|
+ log.warn("跳过非法 redis key: {}", redisKey);
|
|
|
89
|
+ continue;
|
|
|
90
|
+ }
|
|
|
91
|
+ String controllerId = remainder.substring(0, lastUnderscore);
|
|
|
92
|
+ String deviceId = remainder.substring(lastUnderscore + 1);
|
|
|
93
|
+ String dbPrefix = controllerId.length() >= 2 ? controllerId.substring(0, 2) : controllerId;
|
|
|
94
|
+ String tableName = "pe_iot_" + dbPrefix;
|
|
89
|
95
|
|
|
90
|
96
|
try {
|
|
91
|
97
|
sysrealtimeService.createRealtime(tableName);
|