| src/main/java/com/zy/core/task/DeviceLogScheduler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/thread/impl/ZyRgvThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/thread/impl/ZySiemensCrnV2Thread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/thread/impl/ZySiemensDualCrnThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/thread/impl/ZyStationThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/thread/impl/ZyStationV3Thread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/thread/impl/ZyStationV4Thread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/utils/DeviceLogRedisKeyBuilder.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/core/task/DeviceLogScheduler.java
@@ -25,6 +25,7 @@ import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashSet; import java.util.Set; import java.util.List; import java.util.ArrayList; @@ -36,6 +37,10 @@ @Slf4j @Component public class DeviceLogScheduler { private static final int BASE_BATCH_SIZE = 100; private static final int BACKLOG_SCAN_LIMIT = 2000; private static final int MAX_BATCH_SIZE = 1000; @Value("${deviceLogStorage.type}") private String storageType; @@ -70,11 +75,11 @@ @Scheduled(cron = "0/3 * * * * ? ") public void execute() { int maxCount = 100; Set<String> keys = redisUtil.scanKeys(RedisKeyType.DEVICE_LOG_KEY.key, maxCount); if (keys == null || keys.isEmpty()) { Set<String> scannedKeys = redisUtil.scanKeys(RedisKeyType.DEVICE_LOG_KEY.key, BACKLOG_SCAN_LIMIT); if (scannedKeys == null || scannedKeys.isEmpty()) { return; } Set<String> keys = selectBatchKeys(scannedKeys); List<Object> values = redisUtil.multiGet(keys); List<DeviceDataLog> list = new ArrayList<>(); for (Object object : values) { @@ -100,6 +105,31 @@ } } private Set<String> selectBatchKeys(Set<String> scannedKeys) { int backlog = scannedKeys.size(); int batchSize = resolveBatchSize(backlog); if (backlog <= batchSize) { return scannedKeys; } LinkedHashSet<String> selected = new LinkedHashSet<>(); for (String key : scannedKeys) { selected.add(key); if (selected.size() >= batchSize) { break; } } return selected; } private int resolveBatchSize(int backlog) { if (backlog <= BASE_BATCH_SIZE) { return backlog; } int adaptive = Math.max(BASE_BATCH_SIZE, backlog / 2); int rounded = ((adaptive + BASE_BATCH_SIZE - 1) / BASE_BATCH_SIZE) * BASE_BATCH_SIZE; return Math.min(MAX_BATCH_SIZE, rounded); } private void mysqlSave(Set<String> keys, List<DeviceDataLog> list) { if (deviceDataLogService.saveBatch(list)) { redisUtil.del(keys.toArray(new String[0])); src/main/java/com/zy/core/thread/impl/ZyRgvThread.java
@@ -25,6 +25,7 @@ import com.zy.core.network.ZyRgvConnectDriver; import com.zy.core.network.entity.ZyRgvStatusEntity; import com.zy.core.thread.RgvThread; import com.zy.core.utils.DeviceLogRedisKeyBuilder; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -139,7 +140,7 @@ deviceDataLog.setType(String.valueOf(SlaveType.Rgv)); deviceDataLog.setDeviceNo(rgvProtocol.getRgvNo()); deviceDataLog.setCreateTime(new Date()); redisUtil.set(RedisKeyType.DEVICE_LOG_KEY.key + System.currentTimeMillis(), deviceDataLog, 60 * 60 * 24); redisUtil.set(DeviceLogRedisKeyBuilder.build(deviceDataLog), deviceDataLog, 60 * 60 * 24); rgvProtocol.setDeviceDataLog(System.currentTimeMillis()); } src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java
@@ -26,6 +26,7 @@ import com.zy.core.network.entity.ZyCrnStatusEntity; import com.zy.core.service.WrkCommandRollbackService; import com.zy.core.thread.CrnThread; import com.zy.core.utils.DeviceLogRedisKeyBuilder; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -199,7 +200,7 @@ deviceDataLog.setDeviceNo(crnProtocol.getCrnNo()); deviceDataLog.setCreateTime(new Date()); redisUtil.set(RedisKeyType.DEVICE_LOG_KEY.key + System.currentTimeMillis(), deviceDataLog, 60 * 60 * 24); redisUtil.set(DeviceLogRedisKeyBuilder.build(deviceDataLog), deviceDataLog, 60 * 60 * 24); //更新采集时间 crnProtocol.setDeviceDataLog(System.currentTimeMillis()); } src/main/java/com/zy/core/thread/impl/ZySiemensCrnV2Thread.java
@@ -24,6 +24,7 @@ import com.zy.core.network.entity.ZyCrnStatusEntity; import com.zy.core.service.WrkCommandRollbackService; import com.zy.core.thread.CrnThread; import com.zy.core.utils.DeviceLogRedisKeyBuilder; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -196,7 +197,7 @@ deviceDataLog.setDeviceNo(crnProtocol.getCrnNo()); deviceDataLog.setCreateTime(new Date()); redisUtil.set(RedisKeyType.DEVICE_LOG_KEY.key + System.currentTimeMillis(), deviceDataLog, 60 * 60 * 24); redisUtil.set(DeviceLogRedisKeyBuilder.build(deviceDataLog), deviceDataLog, 60 * 60 * 24); //更新采集时间 crnProtocol.setDeviceDataLog(System.currentTimeMillis()); } src/main/java/com/zy/core/thread/impl/ZySiemensDualCrnThread.java
@@ -26,6 +26,7 @@ import com.zy.core.network.entity.ZyDualCrnStatusEntity; import com.zy.core.thread.DualCrnThread; import com.zy.core.thread.StationThread; import com.zy.core.utils.DeviceLogRedisKeyBuilder; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -371,7 +372,7 @@ deviceDataLog.setDeviceNo(crnProtocol.getCrnNo()); deviceDataLog.setCreateTime(new Date()); redisUtil.set(RedisKeyType.DEVICE_LOG_KEY.key + System.currentTimeMillis(), deviceDataLog, 60 * 60 * 24); redisUtil.set(DeviceLogRedisKeyBuilder.build(deviceDataLog), deviceDataLog, 60 * 60 * 24); //更新采集时间 crnProtocol.setDeviceDataLog(System.currentTimeMillis()); } src/main/java/com/zy/core/thread/impl/ZyStationThread.java
@@ -19,7 +19,6 @@ import com.zy.core.network.ZyStationConnectDriver; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; import com.zy.core.enums.RedisKeyType; import com.zy.core.enums.SlaveType; import com.zy.core.enums.StationCommandType; import com.zy.core.model.CommandResponse; @@ -31,6 +30,7 @@ import java.text.MessageFormat; import java.util.*; import com.zy.core.utils.DeviceLogRedisKeyBuilder; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -165,7 +165,7 @@ deviceDataLog.setDeviceNo(deviceConfig.getDeviceNo()); deviceDataLog.setCreateTime(new Date()); redisUtil.set(RedisKeyType.DEVICE_LOG_KEY.key + System.currentTimeMillis(), deviceDataLog, 60 * 60 * 24); redisUtil.set(DeviceLogRedisKeyBuilder.build(deviceDataLog), deviceDataLog, 60 * 60 * 24); //更新采集时间 deviceDataLogTime = System.currentTimeMillis(); } src/main/java/com/zy/core/thread/impl/ZyStationV3Thread.java
@@ -30,6 +30,7 @@ import com.zy.core.network.DeviceConnectPool; import com.zy.core.network.ZyStationConnectDriver; import com.zy.core.network.entity.ZyStationStatusEntity; import com.zy.core.utils.DeviceLogRedisKeyBuilder; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -169,7 +170,7 @@ deviceDataLog.setDeviceNo(deviceConfig.getDeviceNo()); deviceDataLog.setCreateTime(new Date()); redisUtil.set(RedisKeyType.DEVICE_LOG_KEY.key + System.currentTimeMillis(), deviceDataLog, 60 * 60 * 24); redisUtil.set(DeviceLogRedisKeyBuilder.build(deviceDataLog), deviceDataLog, 60 * 60 * 24); deviceDataLogTime = System.currentTimeMillis(); } } src/main/java/com/zy/core/thread/impl/ZyStationV4Thread.java
@@ -30,6 +30,7 @@ import com.zy.core.network.DeviceConnectPool; import com.zy.core.network.ZyStationConnectDriver; import com.zy.core.network.entity.ZyStationStatusEntity; import com.zy.core.utils.DeviceLogRedisKeyBuilder; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -170,7 +171,7 @@ deviceDataLog.setDeviceNo(deviceConfig.getDeviceNo()); deviceDataLog.setCreateTime(new Date()); redisUtil.set(RedisKeyType.DEVICE_LOG_KEY.key + System.currentTimeMillis(), deviceDataLog, 60 * 60 * 24); redisUtil.set(DeviceLogRedisKeyBuilder.build(deviceDataLog), deviceDataLog, 60 * 60 * 24); deviceDataLogTime = System.currentTimeMillis(); } } src/main/java/com/zy/core/utils/DeviceLogRedisKeyBuilder.java
New file @@ -0,0 +1,23 @@ package com.zy.core.utils; import com.zy.asrs.entity.DeviceDataLog; import com.zy.core.enums.RedisKeyType; import java.util.UUID; public class DeviceLogRedisKeyBuilder { public static String build(DeviceDataLog deviceDataLog) { String type = deviceDataLog == null || deviceDataLog.getType() == null ? "unknown" : deviceDataLog.getType(); String deviceNo = deviceDataLog == null || deviceDataLog.getDeviceNo() == null ? "unknown" : String.valueOf(deviceDataLog.getDeviceNo()); long millis = deviceDataLog != null && deviceDataLog.getCreateTime() != null ? deviceDataLog.getCreateTime().getTime() : System.currentTimeMillis(); String uuid = UUID.randomUUID().toString().replace("-", ""); return RedisKeyType.DEVICE_LOG_KEY.key + type + ":" + deviceNo + ":" + millis + ":" + uuid; } }