瀏覽代碼

人防代码优化

fuyuchuan 11 小時之前
父節點
當前提交
b08f5cb37f

+ 14 - 14
service-cdi/service-cdi-biz/src/main/java/com/usky/cdi/service/util/DeviceDataSyncService.java

@@ -26,18 +26,18 @@ public class DeviceDataSyncService {
      * fixedDelay:任务执行完成后固定延迟29分钟执行下一次
      * initialDelay:初始化后立即执行第一次任务
      */
-    // @Scheduled(fixedDelay = 2 * 60 * 1000, initialDelay = 0)
-    // public void scheduledDeviceDataSync() {
-    //     Integer tenantId = 1222;
-    //     Long engineeringId = 3101100021L;
-    //     String username = "3101100021";
-    //     String password = "SIixzph1";
-    //     log.info("开始执行桃浦象屿人防设备数据同步定时任务,租户ID:{},工程ID:{}", tenantId, engineeringId);
-    //
-    //     try {
-    //         iotDataTransferService.synchronizeDeviceData(tenantId, engineeringId, username, password);
-    //     } catch (Exception e) {
-    //         log.error("定时任务执行设备数据同步失败:{}", e.getMessage(), e);
-    //     }
-    // }
+    @Scheduled(fixedDelay = 5 * 60 * 1000, initialDelay = 0)
+    public void scheduledDeviceDataSync() {
+        Integer tenantId = 1222;
+        Long engineeringId = 3101100021L;
+        String username = "3101100021";
+        String password = "SIixzph1";
+        log.info("开始执行桃浦象屿人防设备数据同步定时任务,租户ID:{},工程ID:{}", tenantId, engineeringId);
+
+        try {
+            iotDataTransferService.synchronizeDeviceData(tenantId, engineeringId, username, password);
+        } catch (Exception e) {
+            log.error("定时任务执行设备数据同步失败:{}", e.getMessage(), e);
+        }
+    }
 }

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

@@ -2,6 +2,7 @@ package com.usky.cdi.service.util;
 
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.Random;
 
 /**
  * 固定水位生成器 - 为液位传感器(716)生成模拟数据
@@ -15,6 +16,13 @@ import java.util.concurrent.ConcurrentHashMap;
  * @email yuchuan.fu@chinausky.com
  * @date 2026/4/28
  */
+
+/**
+ * 固定水位值生成器:
+ * 1. 每台设备首次调用时基于设备ID生成一个随机水位值
+ * 2. 同一设备后续调用直接取缓存,保持一致
+ * 3. 不同设备之间数值随机分散
+ */
 public class FixedWaterLevelGenerator {
 
     private static final Map<String, Double> DEVICE_LEVEL_MAP = new ConcurrentHashMap<>();
@@ -23,21 +31,13 @@ public class FixedWaterLevelGenerator {
     private static final double MAX_VALUE = 0.05;
 
     public static double getSensorValue(String deviceId) {
-        return DEVICE_LEVEL_MAP.computeIfAbsent(deviceId, FixedWaterLevelGenerator::generateValue);
+        return DEVICE_LEVEL_MAP.computeIfAbsent(deviceId, FixedWaterLevelGenerator::computeFixedValue);
     }
 
-    private static double generateValue(String deviceId) {
-        // 稳定、均匀的哈希
-        int hash = deviceId.hashCode();
-        int positiveHash = hash & 0x7FFFFFFF;
-
-        // 映射到 0~99,共 100 个台阶
-        int step = positiveHash % 100;
-
-        // 均匀分布在 0.02 ~ 0.05
-        double value = MIN_VALUE + (step / 100.0) * (MAX_VALUE - MIN_VALUE);
-
-        // 保留 2 位小数
-        return Math.round(value * 100) / 100.0;
+    private static double computeFixedValue(String deviceId) {
+        long seed = deviceId.hashCode() & 0xFFFFFFFFL;
+        Random random = new Random(seed);
+        double value = MIN_VALUE + random.nextDouble() * (MAX_VALUE - MIN_VALUE);
+        return Math.round(value * 1000) / 1000.0;
     }
 }