#
Junjie
18 小时以前 319114168ac26843b06431c3a10e0075526398d4
#
1个文件已添加
8个文件已修改
81 ■■■■ 已修改文件
src/main/java/com/zy/core/task/DeviceLogScheduler.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/impl/ZyRgvThread.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/impl/ZySiemensCrnV2Thread.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/impl/ZySiemensDualCrnThread.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/impl/ZyStationThread.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/impl/ZyStationV3Thread.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/impl/ZyStationV4Thread.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/utils/DeviceLogRedisKeyBuilder.java 23 ●●●●● 补丁 | 查看 | 原始文档 | 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;
    }
}