fuyuchuan 10 часов назад
Родитель
Сommit
4276dc4036

+ 5 - 3
service-cdi/service-cdi-biz/src/main/java/com/usky/cdi/service/util/FixedWaterLevelGenerator.java

@@ -30,16 +30,18 @@ public class FixedWaterLevelGenerator {
 
     private static final Map<String, Double> DEVICE_LEVEL_MAP = new ConcurrentHashMap<>();
 
-    private static final double MIN_VALUE = 0.03;
-    private static final double MAX_VALUE = 0.06;
+    private static final double MIN_VALUE = 0.02;
+    private static final double MAX_VALUE = 0.05;
 
     public static double getSensorValue(String deviceId) {
         return DEVICE_LEVEL_MAP.computeIfAbsent(deviceId, FixedWaterLevelGenerator::computeFixedValue);
     }
 
     private static double computeFixedValue(String deviceId) {
-        long seed = deviceId.hashCode() & 0xFFFFFFFFL;
+        // 乘以一个大的质数,打乱原本连续ID的哈希值分布
+        long seed = (deviceId.hashCode() * 2654435761L) & 0xFFFFFFFFL;
         Random random = new Random(seed);
+
         double value = MIN_VALUE + random.nextDouble() * (MAX_VALUE - MIN_VALUE);
         log.info("生成设备[{}]的固定水位值:{}", deviceId, value);
         return Math.round(value * 1000) / 1000.0;