Procházet zdrojové kódy

Merge remote-tracking branch 'origin/mqy20260511'

master
humanleft před 2 týdny
rodič
revize
6038641101

+ 0
- 2
iot-platform/src/main/java/com/iot/platform/mapper/SysFaultMapper.java Zobrazit soubor

9
     void insertAlertData(@Param("faultId") String faultId,
9
     void insertAlertData(@Param("faultId") String faultId,
10
                      @Param("faultdescs") String faultdescs,
10
                      @Param("faultdescs") String faultdescs,
11
                      @Param("faultstatus") String faultstatus,
11
                      @Param("faultstatus") String faultstatus,
12
-                     @Param("createtime") String createtime,
13
                      @Param("messageType") String messageType,
12
                      @Param("messageType") String messageType,
14
                      @Param("controllerId") String controllerId,
13
                      @Param("controllerId") String controllerId,
15
                      @Param("deviceId") String deviceId,
14
                      @Param("deviceId") String deviceId,
21
                      @Param("faultdescs")String faultdescs,
20
                      @Param("faultdescs")String faultdescs,
22
                      @Param("controllerId")String controllerId,
21
                      @Param("controllerId")String controllerId,
23
                      @Param("deviceId")String deviceId,
22
                      @Param("deviceId")String deviceId,
24
-                     @Param("createtime")String createtime,
25
                      @Param("timestamp")String timestamp);
23
                      @Param("timestamp")String timestamp);
26
 
24
 
27
 
25
 

+ 2
- 2
iot-platform/src/main/java/com/iot/platform/mapper/SysRealtimeMapper.java Zobrazit soubor

10
     void createRealtime(@Param("tableName")String tableName);
10
     void createRealtime(@Param("tableName")String tableName);
11
     int tableExists(@Param("tableName")String tableName);
11
     int tableExists(@Param("tableName")String tableName);
12
     List<String> selectTables();
12
     List<String> selectTables();
13
-    void insertTables(@Param("tableName")String tableName, @Param("createTime")String createTime, @Param("controllerId")String controllerId, @Param("deviceId")String deviceId, @Param("timestamp")String timestamp, @Param("k")String k, @Param("v")Object v);
14
-    void updateTables(@Param("tableName")String tableName, @Param("createTime")String createTime, @Param("v")Object v, @Param("timestamp")String timestamp, @Param("k")String k, @Param("controllerId")String controllerId, @Param("deviceId")String deviceId);
13
+    void insertTables(@Param("tableName")String tableName, @Param("controllerId")String controllerId, @Param("deviceId")String deviceId, @Param("timestamp")String timestamp, @Param("k")String k, @Param("v")Object v);
14
+    void updateTables(@Param("tableName")String tableName, @Param("v")Object v, @Param("timestamp")String timestamp, @Param("k")String k, @Param("controllerId")String controllerId, @Param("deviceId")String deviceId);
15
     Integer selectKey(@Param("tableName")String tableName, @Param("k")String k, @Param("controllerId")String controllerId);
15
     Integer selectKey(@Param("tableName")String tableName, @Param("k")String k, @Param("controllerId")String controllerId);
16
     List<String> selectAllKeys(@Param("tableName")String tableName, @Param("controllerId")String controllerId);
16
     List<String> selectAllKeys(@Param("tableName")String tableName, @Param("controllerId")String controllerId);
17
 }
17
 }

+ 2
- 2
iot-platform/src/main/java/com/iot/platform/mapper/SysStatusMapper.java Zobrazit soubor

6
 @Mapper
6
 @Mapper
7
 public interface SysStatusMapper {
7
 public interface SysStatusMapper {
8
 
8
 
9
-    void insertSysStatus(@Param("controllerId")String controllerId,@Param("fleetId")String fleetId,@Param("status")String status,@Param("createTime")String createTime);
10
-    void updateStatus(@Param("controllerId")String controllerId,@Param("fleetId")String fleetId,@Param("status")String status,@Param("createTime")String createTime);
9
+    void insertSysStatus(@Param("controllerId")String controllerId,@Param("fleetId")String fleetId,@Param("status")String status);
10
+    void updateStatus(@Param("controllerId")String controllerId,@Param("fleetId")String fleetId,@Param("status")String status);
11
 
11
 
12
     Integer selectStatusCount(@Param("controllerId")String controllerId);
12
     Integer selectStatusCount(@Param("controllerId")String controllerId);
13
 }
13
 }

+ 1
- 6
iot-platform/src/main/java/com/iot/platform/mqtt/MqttChargeStationConsumer.java Zobrazit soubor

71
 
71
 
72
         String dbName = topicParts[1];
72
         String dbName = topicParts[1];
73
         String dbPrefix = dbName.length() >= 2 ? dbName.substring(0, 2) : dbName;
73
         String dbPrefix = dbName.length() >= 2 ? dbName.substring(0, 2) : dbName;
74
-        String dbNamePrefix = "pe_iot_" + dbPrefix;
74
+        String dbNamePrefix = "pe_ems_" + dbPrefix;
75
         //先传输为deviceid,到后面进行优化
75
         //先传输为deviceid,到后面进行优化
76
         String superTable = topicParts[3];
76
         String superTable = topicParts[3];
77
-//        String tableName = superTable + "_" + date.getYear() + String.format("%02d", date.getMonthValue());
78
-                           //deviceid_controllerid
79
         String tableName = dbName;
77
         String tableName = dbName;
80
-//        superTable + "_" +
81
-//        int i = ((int) "g".getBytes("UTF-8")[0]) % 10;
82
-
83
         tdengineService.insertBatch(dbNamePrefix, superTable, tableName, batchToInsert);
78
         tdengineService.insertBatch(dbNamePrefix, superTable, tableName, batchToInsert);
84
     }
79
     }
85
 }
80
 }

+ 1
- 2
iot-platform/src/main/java/com/iot/platform/mqtt/MqttDynamicConsumer.java Zobrazit soubor

106
         List<Map<String, Object>> batch = Collections.singletonList(data);
106
         List<Map<String, Object>> batch = Collections.singletonList(data);
107
 
107
 
108
         String controllerPrefix = ctx.controllerId.length() >= 2 ? ctx.controllerId.substring(0, 2) : ctx.controllerId;
108
         String controllerPrefix = ctx.controllerId.length() >= 2 ? ctx.controllerId.substring(0, 2) : ctx.controllerId;
109
-        String dbNamePrefix = "pe_iot_" + controllerPrefix;
109
+        String dbNamePrefix = "pe_ems_" + controllerPrefix;
110
         String controllerId = ctx.controllerId;
110
         String controllerId = ctx.controllerId;
111
         tdengineService.insertBatch(dbNamePrefix, ctx.deviceId, controllerId, batch);
111
         tdengineService.insertBatch(dbNamePrefix, ctx.deviceId, controllerId, batch);
112
     }
112
     }
115
         String redisKey = "pe_iot_" + ctx.controllerId + "_" + ctx.deviceId;
115
         String redisKey = "pe_iot_" + ctx.controllerId + "_" + ctx.deviceId;
116
 
116
 
117
         Map<String, String> hashData = new HashMap<>();
117
         Map<String, String> hashData = new HashMap<>();
118
-        hashData.put("createTime", ctx.currentTime);
119
         hashData.put("timestamp", ctx.timestamp);
118
         hashData.put("timestamp", ctx.timestamp);
120
 
119
 
121
         for (Map.Entry<String, Object> entry : ctx.metricData.entrySet()) {
120
         for (Map.Entry<String, Object> entry : ctx.metricData.entrySet()) {

+ 2
- 7
iot-platform/src/main/java/com/iot/platform/mqtt/MqttFaultConsumer.java Zobrazit soubor

15
 import java.sql.SQLException;
15
 import java.sql.SQLException;
16
 import java.time.Instant;
16
 import java.time.Instant;
17
 import java.time.LocalDate;
17
 import java.time.LocalDate;
18
-import java.time.LocalDateTime;
19
 import java.time.ZoneId;
18
 import java.time.ZoneId;
20
 import java.time.format.DateTimeFormatter;
19
 import java.time.format.DateTimeFormatter;
21
 import java.util.*;
20
 import java.util.*;
181
         String timestamp = faultData.getTimestamp();
180
         String timestamp = faultData.getTimestamp();
182
         String dateTime = toDateTime(timestamp);
181
         String dateTime = toDateTime(timestamp);
183
         String companyId = COMPANY_ID_PREFIX + numericIdGenerator.nextId();
182
         String companyId = COMPANY_ID_PREFIX + numericIdGenerator.nextId();
184
-        LocalDateTime currentTime = LocalDateTime.now();
185
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_TIME_PATTERN);
186
-        String currentTimeStr = currentTime.format(formatter);
187
-
188
         if ("触发".equals(type)) {
183
         if ("触发".equals(type)) {
189
 //            sysAlarmService.insertAlarm(controllerName, companyId, desc, ALARM_STATUS_TRIGGER, currentTimeStr, ALARM_STATUS_TRIGGER, controllerId, deviceId);
184
 //            sysAlarmService.insertAlarm(controllerName, companyId, desc, ALARM_STATUS_TRIGGER, currentTimeStr, ALARM_STATUS_TRIGGER, controllerId, deviceId);
190
-            sysFaultService.insertAlertData(companyId, desc, ALARM_STATUS_TRIGGER, currentTimeStr, ALARM_STATUS_TRIGGER, controllerId, deviceId, "", dateTime);
185
+            sysFaultService.insertAlertData(companyId, desc, ALARM_STATUS_TRIGGER, ALARM_STATUS_TRIGGER, controllerId, deviceId, "", dateTime);
191
         } else if ("恢复".equals(type)) {
186
         } else if ("恢复".equals(type)) {
192
 //            sysAlarmService.insertAlarm(controllerName, companyId, desc, ALARM_STATUS_RECOVERED, currentTimeStr, ALARM_STATUS_TRIGGER, controllerId, deviceId);
187
 //            sysAlarmService.insertAlarm(controllerName, companyId, desc, ALARM_STATUS_RECOVERED, currentTimeStr, ALARM_STATUS_TRIGGER, controllerId, deviceId);
193
-            sysFaultService.updateAlertData(ALARM_STATUS_RECOVERED, ALARM_STATUS_TRIGGER, desc, controllerId, deviceId, currentTimeStr, dateTime);
188
+            sysFaultService.updateAlertData(ALARM_STATUS_RECOVERED, ALARM_STATUS_TRIGGER, desc, controllerId, deviceId, dateTime);
194
         }
189
         }
195
 
190
 
196
         // controllerId 白名单校验,防止 SSRF
191
         // controllerId 白名单校验,防止 SSRF

+ 4
- 17
iot-platform/src/main/java/com/iot/platform/mqtt/MqttStatusConsumer.java Zobrazit soubor

8
 import org.springframework.data.redis.core.StringRedisTemplate;
8
 import org.springframework.data.redis.core.StringRedisTemplate;
9
 import org.springframework.stereotype.Component;
9
 import org.springframework.stereotype.Component;
10
 
10
 
11
-import java.time.Instant;
12
-import java.time.ZoneId;
13
-import java.time.format.DateTimeFormatter;
14
 import java.util.HashMap;
11
 import java.util.HashMap;
15
 import java.util.Map;
12
 import java.util.Map;
16
 import java.util.concurrent.ExecutorService;
13
 import java.util.concurrent.ExecutorService;
25
     private static final String KEY_CONTROLLER_ID = "controller_id";
22
     private static final String KEY_CONTROLLER_ID = "controller_id";
26
     private static final String KEY_STATUS = "status";
23
     private static final String KEY_STATUS = "status";
27
 
24
 
28
-    private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter
29
-            .ofPattern("yyyy-MM-dd HH:mm:ss")
30
-            .withZone(ZoneId.systemDefault());
31
-
32
     private final StringRedisTemplate stringRedisTemplate;
25
     private final StringRedisTemplate stringRedisTemplate;
33
     private final SysStatusService sysStatusService;
26
     private final SysStatusService sysStatusService;
34
 
27
 
76
             return;
69
             return;
77
         }
70
         }
78
 
71
 
79
-        String dateTime = toDateTime();
80
         String redisKey = "status_" + controllerId;
72
         String redisKey = "status_" + controllerId;
81
 
73
 
82
         // 读取 Redis 旧数据用于比较
74
         // 读取 Redis 旧数据用于比较
87
         Map<String, String> newData = new HashMap<>();
79
         Map<String, String> newData = new HashMap<>();
88
         newData.put("controllerId", controllerId);
80
         newData.put("controllerId", controllerId);
89
         newData.put("status", status);
81
         newData.put("status", status);
90
-        newData.put("createTime", dateTime);
91
         stringRedisTemplate.opsForHash().putAll(redisKey, newData);
82
         stringRedisTemplate.opsForHash().putAll(redisKey, newData);
92
         stringRedisTemplate.expire(redisKey, 24, TimeUnit.HOURS);
83
         stringRedisTemplate.expire(redisKey, 24, TimeUnit.HOURS);
93
 
84
 
95
             // 首次写入:查一次 MySQL 判断新增还是更新
86
             // 首次写入:查一次 MySQL 判断新增还是更新
96
             Integer count = sysStatusService.selectStatusCount(controllerId);
87
             Integer count = sysStatusService.selectStatusCount(controllerId);
97
             if (count <= 0) {
88
             if (count <= 0) {
98
-                sysStatusService.insertSysStatus(controllerId, "", status, dateTime);
89
+                sysStatusService.insertSysStatus(controllerId, "", status);
99
             } else {
90
             } else {
100
-                sysStatusService.updateStatus(controllerId, "", status, dateTime);
91
+                sysStatusService.updateStatus(controllerId, "", status);
101
             }
92
             }
102
         } else {
93
         } else {
103
-            // Redis 有旧数据:比较关键字段(忽略 createTime),变化时直接更新 MySQL
94
+            // Redis 有旧数据:比较关键字段,变化时直接更新 MySQL
104
             if (!equals(oldData.get("status"), status)) {
95
             if (!equals(oldData.get("status"), status)) {
105
-                sysStatusService.updateStatus(controllerId, "", status, dateTime);
96
+                sysStatusService.updateStatus(controllerId, "", status);
106
             }
97
             }
107
         }
98
         }
108
     }
99
     }
109
 
100
 
110
-    private String toDateTime() {
111
-        return DATE_TIME_FORMATTER.format(Instant.now());
112
-    }
113
-
114
     private static boolean equals(Object a, Object b) {
101
     private static boolean equals(Object a, Object b) {
115
         return (a == b) || (a != null && a.equals(b));
102
         return (a == b) || (a != null && a.equals(b));
116
     }
103
     }

+ 2
- 4
iot-platform/src/main/java/com/iot/platform/service/SysFaultService.java Zobrazit soubor

18
     public void insertAlertData(String faultId,
18
     public void insertAlertData(String faultId,
19
                             String faultdescs,
19
                             String faultdescs,
20
                             String faultstatus,
20
                             String faultstatus,
21
-                            String createtime,
22
                             String messageType,
21
                             String messageType,
23
                             String controllerId,
22
                             String controllerId,
24
                             String deviceId,
23
                             String deviceId,
25
                             String readpeople,
24
                             String readpeople,
26
                             String timestamp){
25
                             String timestamp){
27
-        sysFaultMapper.insertAlertData(faultId,faultdescs,faultstatus,createtime,messageType,controllerId,deviceId,readpeople,timestamp);
26
+        sysFaultMapper.insertAlertData(faultId,faultdescs,faultstatus,messageType,controllerId,deviceId,readpeople,timestamp);
28
     }
27
     }
29
 
28
 
30
     public void updateAlertData(
29
     public void updateAlertData(
33
                      String faultdescs,
32
                      String faultdescs,
34
                      String controllerId,
33
                      String controllerId,
35
                      String deviceId,
34
                      String deviceId,
36
-                     String createtime,
37
                      String timestamp){
35
                      String timestamp){
38
-        sysFaultMapper.updateAlertData(faultstatus, messageType, faultdescs, controllerId, deviceId, createtime, timestamp);
36
+        sysFaultMapper.updateAlertData(faultstatus, messageType, faultdescs, controllerId, deviceId, timestamp);
39
     }
37
     }
40
 
38
 
41
     public Integer selectFaultCount(@Param("fleetId")String fleetId){
39
     public Integer selectFaultCount(@Param("fleetId")String fleetId){

+ 4
- 4
iot-platform/src/main/java/com/iot/platform/service/SysRealtimeService.java Zobrazit soubor

35
         return sysRealtimeMapper.selectTables();
35
         return sysRealtimeMapper.selectTables();
36
     }
36
     }
37
 
37
 
38
-    public void insertTables(String tableName, String createTime, String controllerId, String deviceId, String timestamp, String k, Object v) {
38
+    public void insertTables(String tableName, String controllerId, String deviceId, String timestamp, String k, Object v) {
39
         validateTableName(tableName);
39
         validateTableName(tableName);
40
-        sysRealtimeMapper.insertTables(tableName, createTime, controllerId, deviceId, timestamp, k, v);
40
+        sysRealtimeMapper.insertTables(tableName, controllerId, deviceId, timestamp, k, v);
41
     }
41
     }
42
 
42
 
43
-    public void updateTables(String tableName, String createTime, Object v, String timestamp, String k, String controllerId, String deviceId) {
43
+    public void updateTables(String tableName, Object v, String timestamp, String k, String controllerId, String deviceId) {
44
         validateTableName(tableName);
44
         validateTableName(tableName);
45
-        sysRealtimeMapper.updateTables(tableName, createTime, v, timestamp, k, controllerId, deviceId);
45
+        sysRealtimeMapper.updateTables(tableName, v, timestamp, k, controllerId, deviceId);
46
     }
46
     }
47
 
47
 
48
     public Integer selectKey(String tableName, String k, String controllerId) {
48
     public Integer selectKey(String tableName, String k, String controllerId) {

+ 4
- 4
iot-platform/src/main/java/com/iot/platform/service/SysStatusService.java Zobrazit soubor

10
     @Resource
10
     @Resource
11
     public SysStatusMapper sysStatusMapper;
11
     public SysStatusMapper sysStatusMapper;
12
 
12
 
13
-    public void insertSysStatus(String controllerId, String fleetId, String status,String createTime){
14
-        sysStatusMapper.insertSysStatus(controllerId, fleetId, status,createTime);
13
+    public void insertSysStatus(String controllerId, String fleetId, String status){
14
+        sysStatusMapper.insertSysStatus(controllerId, fleetId, status);
15
     }
15
     }
16
-    public void updateStatus(String controllerId,String fleetId, String status, String createTime){
17
-        sysStatusMapper.updateStatus(controllerId,fleetId, status, createTime);
16
+    public void updateStatus(String controllerId,String fleetId, String status){
17
+        sysStatusMapper.updateStatus(controllerId,fleetId, status);
18
     }
18
     }
19
     public Integer selectStatusCount(String controllerId){
19
     public Integer selectStatusCount(String controllerId){
20
         return sysStatusMapper.selectStatusCount(controllerId);
20
         return sysStatusMapper.selectStatusCount(controllerId);

+ 45
- 6
iot-platform/src/main/java/com/iot/platform/service/TdEngineService.java Zobrazit soubor

325
     }
325
     }
326
 
326
 
327
     /**
327
     /**
328
-     * 获取列名首字符的 UTF-8 值模 10,作为分组 ID
328
+     * 使用列名完整 hashCode 模 10 作为分组 ID,分布更均匀
329
      */
329
      */
330
     private int getFirstCharGroupId(String columnName) {
330
     private int getFirstCharGroupId(String columnName) {
331
         if (columnName == null || columnName.isEmpty()) {
331
         if (columnName == null || columnName.isEmpty()) {
332
             return 0;
332
             return 0;
333
         }
333
         }
334
-        String firstChar = columnName.substring(0, 1);
335
-        byte[] bytes = firstChar.getBytes(StandardCharsets.UTF_8);
336
-        return (bytes[0] & 0xFF) % 10;
334
+        return Math.abs(columnName.hashCode()) % 10;
337
     }
335
     }
338
 
336
 
339
     /**
337
     /**
368
             for (Map.Entry<String, Object> entry : data.entrySet()) {
366
             for (Map.Entry<String, Object> entry : data.entrySet()) {
369
                 String key = entry.getKey();
367
                 String key = entry.getKey();
370
                 if (isValidFieldName(key) && !isReservedColumn(key) && !columnTypes.containsKey(key)) {
368
                 if (isValidFieldName(key) && !isReservedColumn(key) && !columnTypes.containsKey(key)) {
371
-                    columnTypes.put(key, getValueType(entry.getValue()));
369
+                    columnTypes.put(key, getValueType(key, entry.getValue()));
372
                 }
370
                 }
373
             }
371
             }
374
         }
372
         }
566
     /**
564
     /**
567
      * 判断值类型,返回 TdEngine 对应的数据类型
565
      * 判断值类型,返回 TdEngine 对应的数据类型
568
      */
566
      */
569
-    private String getValueType(Object value) {
567
+    private String getValueType(String columnName, Object value) {
568
+        // timestamp 和 createTime 字段始终使用 TIMESTAMP 类型
569
+        if ("timestamp".equalsIgnoreCase(columnName) || "createTime".equalsIgnoreCase(columnName)) {
570
+            return "TIMESTAMP";
571
+        }
570
         if (value == null) {
572
         if (value == null) {
571
             return "VARCHAR";
573
             return "VARCHAR";
572
         }
574
         }
642
             if (value instanceof java.time.Instant) {
644
             if (value instanceof java.time.Instant) {
643
                 return String.valueOf(((java.time.Instant) value).toEpochMilli());
645
                 return String.valueOf(((java.time.Instant) value).toEpochMilli());
644
             }
646
             }
647
+            // 字符串值:尝试解析为 epoch 毫秒或格式化日期
648
+            String str = value.toString();
649
+            if (str == null || str.isEmpty()) {
650
+                return "NULL";
651
+            }
652
+            // 尝试解析为纯数字(epoch 毫秒/秒)
653
+            try {
654
+                long num = Long.parseLong(str);
655
+                if (num > 0) {
656
+                    // 如果是秒级时间戳(10位),转为毫秒
657
+                    if (str.length() == 10) {
658
+                        num = num * 1000;
659
+                    }
660
+                    return String.valueOf(num);
661
+                }
662
+                return "NULL";
663
+            } catch (NumberFormatException ignored) {
664
+                // 非数字,尝试按日期格式解析
665
+            }
666
+            // 尝试常见日期格式
667
+            java.time.format.DateTimeFormatter[] formatters = {
668
+                java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"),
669
+                java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"),
670
+                java.time.format.DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"),
671
+                java.time.format.DateTimeFormatter.ISO_LOCAL_DATE_TIME
672
+            };
673
+            for (java.time.format.DateTimeFormatter fmt : formatters) {
674
+                try {
675
+                    java.time.LocalDateTime ldt = java.time.LocalDateTime.parse(str, fmt);
676
+                    return String.valueOf(ldt.toInstant(ZONE_OFFSET_8).toEpochMilli());
677
+                } catch (Exception ignored) {
678
+                    // 继续尝试下一个格式
679
+                }
680
+            }
681
+            // 所有格式都失败,返回当前时间
682
+            log.warn("无法解析 TIMESTAMP 列 {} 的值 '{}',使用当前时间", columnName, str);
683
+            return String.valueOf(System.currentTimeMillis());
645
         }
684
         }
646
 
685
 
647
         // 字符串类型:使用实际值长度 + 5 冗余,不截断
686
         // 字符串类型:使用实际值长度 + 5 冗余,不截断

+ 5
- 6
iot-platform/src/main/java/com/iot/platform/task/VehicleSyncTask.java Zobrazit soubor

105
                     }
105
                     }
106
                 }
106
                 }
107
 
107
 
108
-                String createTime = getStringValue(dataMap, "createTime");
109
                 String timestamp = getStringValue(dataMap, "timestamp");
108
                 String timestamp = getStringValue(dataMap, "timestamp");
110
 
109
 
111
-                if (createTime == null || timestamp == null) {
110
+                if (timestamp == null) {
112
                     continue;
111
                     continue;
113
                 }
112
                 }
114
 
113
 
115
                 timestamp = formatTimestamp(timestamp);
114
                 timestamp = formatTimestamp(timestamp);
116
 
115
 
117
-                syncToTable(tableName, dataMap, createTime, timestamp, controllerId, deviceId);
116
+                syncToTable(tableName, dataMap, timestamp, controllerId, deviceId);
118
             } catch (RedisConnectionFailureException e) {
117
             } catch (RedisConnectionFailureException e) {
119
                 log.error("Redis 连接失败: {} | {}", redisKey, e.getMessage());
118
                 log.error("Redis 连接失败: {} | {}", redisKey, e.getMessage());
120
             } catch (DataAccessException e) {
119
             } catch (DataAccessException e) {
126
     }
125
     }
127
 
126
 
128
     private void syncToTable(String tableName, Map<Object, Object> dataMap,
127
     private void syncToTable(String tableName, Map<Object, Object> dataMap,
129
-                               String createTime, String timestamp,
128
+                               String timestamp,
130
                                String controllerId, String deviceId) {
129
                                String controllerId, String deviceId) {
131
         List<String> existingKeys = sysrealtimeService.selectAllKeys(tableName, controllerId);
130
         List<String> existingKeys = sysrealtimeService.selectAllKeys(tableName, controllerId);
132
         Set<String> existingKeySet = existingKeys != null ? new HashSet<>(existingKeys) : Collections.emptySet();
131
         Set<String> existingKeySet = existingKeys != null ? new HashSet<>(existingKeys) : Collections.emptySet();
141
             if (fieldValue == null) continue;
140
             if (fieldValue == null) continue;
142
 
141
 
143
             if (existingKeySet.contains(fieldKey)) {
142
             if (existingKeySet.contains(fieldKey)) {
144
-                sysrealtimeService.updateTables(tableName, createTime, fieldValue, timestamp, fieldKey, controllerId, deviceId);
143
+                sysrealtimeService.updateTables(tableName, fieldValue, timestamp, fieldKey, controllerId, deviceId);
145
             } else {
144
             } else {
146
-                sysrealtimeService.insertTables(tableName, createTime, controllerId, deviceId, timestamp, fieldKey, fieldValue);
145
+                sysrealtimeService.insertTables(tableName, controllerId, deviceId, timestamp, fieldKey, fieldValue);
147
             }
146
             }
148
         }
147
         }
149
     }
148
     }

+ 2
- 6
iot-platform/src/main/resources/mapper/SysFaultMapper.xml Zobrazit soubor

13
     </resultMap>
13
     </resultMap>
14
 
14
 
15
     <insert id="insertAlertData">
15
     <insert id="insertAlertData">
16
-        insert into alert_data(faultId,faultdescs,faultstatus,createtime,messageType,controller_id,device_id,readpeople,timestamp)
17
-        VALUES(#{faultId},#{faultdescs},#{faultstatus},#{createtime},#{messageType},#{controllerId},#{deviceId},#{readpeople},#{timestamp})
16
+        insert into alert_data(faultId,faultdescs,faultstatus,messageType,controller_id,device_id,readpeople,timestamp)
17
+        VALUES(#{faultId},#{faultdescs},#{faultstatus},#{messageType},#{controllerId},#{deviceId},#{readpeople},#{timestamp})
18
     </insert>
18
     </insert>
19
     <insert id="updateAlertData">
19
     <insert id="updateAlertData">
20
         update alert_data set faultstatus=#{faultstatus},
20
         update alert_data set faultstatus=#{faultstatus},
23
         where faultdescs=#{faultdescs}
23
         where faultdescs=#{faultdescs}
24
           and controller_id=#{controllerId}
24
           and controller_id=#{controllerId}
25
           and device_id=#{deviceId}
25
           and device_id=#{deviceId}
26
-          AND createtime &lt; #{createtime}  -- 1. 必须是当前传输时间之前的
27
-        ORDER BY createtime DESC         -- 2. 按时间倒序,取最近的一条
28
-        LIMIT 1;
29
     </insert>
26
     </insert>
30
 
27
 
31
     <select id="selectFaultCount" resultType="Integer">
28
     <select id="selectFaultCount" resultType="Integer">
36
         `faultId` varchar(255) DEFAULT NULL COMMENT '消息id',
33
         `faultId` varchar(255) DEFAULT NULL COMMENT '消息id',
37
         `faultdescs` varchar(255) DEFAULT NULL COMMENT '故障描述',
34
         `faultdescs` varchar(255) DEFAULT NULL COMMENT '故障描述',
38
         `faultstatus` varchar(255) DEFAULT NULL COMMENT '故障是否恢复(0:触发,1:恢复)',
35
         `faultstatus` varchar(255) DEFAULT NULL COMMENT '故障是否恢复(0:触发,1:恢复)',
39
-        `createtime` varchar(255) DEFAULT NULL COMMENT '故障发生事件',
40
         `messageType` varchar(255) DEFAULT NULL COMMENT '消息状态(0未读,1已读)',
36
         `messageType` varchar(255) DEFAULT NULL COMMENT '消息状态(0未读,1已读)',
41
         `controller_id` varchar(255) DEFAULT NULL COMMENT '控制器id',
37
         `controller_id` varchar(255) DEFAULT NULL COMMENT '控制器id',
42
         `device_id` varchar(255) DEFAULT NULL COMMENT '设备id',
38
         `device_id` varchar(255) DEFAULT NULL COMMENT '设备id',

+ 2
- 4
iot-platform/src/main/resources/mapper/SysRealtimeMapper.xml Zobrazit soubor

20
     <update id="createRealtime">
20
     <update id="createRealtime">
21
         CREATE TABLE IF NOT EXISTS `${tableName}` (
21
         CREATE TABLE IF NOT EXISTS `${tableName}` (
22
             id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
22
             id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
23
-            create_time VARCHAR(255) NOT NULL COMMENT '时间戳',
24
             controller_id VARCHAR(255) NOT NULL COMMENT '控制器id',
23
             controller_id VARCHAR(255) NOT NULL COMMENT '控制器id',
25
             device_id VARCHAR(255) NOT NULL COMMENT '设备id',
24
             device_id VARCHAR(255) NOT NULL COMMENT '设备id',
26
             timestamp VARCHAR(255) NOT NULL COMMENT '时间戳',
25
             timestamp VARCHAR(255) NOT NULL COMMENT '时间戳',
31
             INDEX idx_controller_device (controller_id, device_id),
30
             INDEX idx_controller_device (controller_id, device_id),
32
             INDEX idx_controller_k (controller_id, k),
31
             INDEX idx_controller_k (controller_id, k),
33
             INDEX idx_device_id (device_id),
32
             INDEX idx_device_id (device_id),
34
-            INDEX idx_device_create_time (device_id, create_time),
35
             INDEX idx_k (k)
33
             INDEX idx_k (k)
36
         ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='实时数据信息';
34
         ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='实时数据信息';
37
     </update>
35
     </update>
40
         SHOW TABLES;
38
         SHOW TABLES;
41
     </select>
39
     </select>
42
     <insert id="insertTables">
40
     <insert id="insertTables">
43
-        insert into `${tableName}`(create_time,controller_id,device_id,timestamp,k,v) values(#{createTime},#{controllerId},#{deviceId},#{timestamp},#{k},#{v})
41
+        insert into `${tableName}`(controller_id,device_id,timestamp,k,v) values(#{controllerId},#{deviceId},#{timestamp},#{k},#{v})
44
     </insert>
42
     </insert>
45
     <update id="updateTables">
43
     <update id="updateTables">
46
-        update `${tableName}` set create_time=#{createTime},v=#{v},timestamp=#{timestamp} where k=#{k} and device_id=#{deviceId} and controller_id=#{controllerId}
44
+        update `${tableName}` set v=#{v},timestamp=#{timestamp} where k=#{k} and device_id=#{deviceId} and controller_id=#{controllerId}
47
     </update>
45
     </update>
48
 
46
 
49
     <select id="selectKey" resultType="Integer">
47
     <select id="selectKey" resultType="Integer">

+ 2
- 2
iot-platform/src/main/resources/mapper/SysStatusMapper.xml Zobrazit soubor

10
         <result column="status" property="status"/>
10
         <result column="status" property="status"/>
11
     </resultMap>
11
     </resultMap>
12
     <insert id="insertSysStatus">
12
     <insert id="insertSysStatus">
13
-        Insert into controller_status(controller_id,fleet_id,status,create_time) values(#{controllerId},#{fleetId},#{status},#{createTime})
13
+        Insert into controller_status(controller_id,fleet_id,status) values(#{controllerId},#{fleetId},#{status})
14
     </insert>
14
     </insert>
15
     <update id="updateStatus">
15
     <update id="updateStatus">
16
-        update controller_status set fleet_id=#{fleetId},status=#{status},create_time=#{createTime} where controller_id=#{controllerId}
16
+        update controller_status set fleet_id=#{fleetId},status=#{status} where controller_id=#{controllerId}
17
     </update>
17
     </update>
18
     <select id="selectStatusCount" resultType="Integer">
18
     <select id="selectStatusCount" resultType="Integer">
19
         select COUNT(*) from controller_status where controller_id=#{controllerId}
19
         select COUNT(*) from controller_status where controller_id=#{controllerId}

Načítá se…
Zrušit
Uložit