From 42fd6bd4095414f7a78a2bb5d2c692c04119da2c Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 18 十一月 2025 08:52:18 +0800
Subject: [PATCH] #

---
 src/main/resources/mapper/DeviceDataLogMapper.xml                    |    8 ++
 src/main/java/com/zy/asrs/mapper/DeviceDataLogMapper.java            |    4 +
 src/main/java/com/zy/asrs/service/impl/DeviceDataLogServiceImpl.java |    8 ++
 src/main/java/com/zy/common/utils/RedisUtil.java                     |   20 ++++++
 src/main/java/com/zy/asrs/entity/DeviceDataLog.java                  |    7 --
 src/main/java/com/zy/asrs/service/DeviceDataLogService.java          |    1 
 src/main/java/com/zy/core/thread/impl/ZyStationThread.java           |    7 -
 src/main/java/com/zy/core/task/DeviceLogScheduler.java               |   69 ++++++++---------------
 src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java        |    8 +-
 src/main/java/com/zy/core/enums/RedisKeyType.java                    |    2 
 10 files changed, 72 insertions(+), 62 deletions(-)

diff --git a/src/main/java/com/zy/asrs/entity/DeviceDataLog.java b/src/main/java/com/zy/asrs/entity/DeviceDataLog.java
index d6e0d2c..e49268d 100644
--- a/src/main/java/com/zy/asrs/entity/DeviceDataLog.java
+++ b/src/main/java/com/zy/asrs/entity/DeviceDataLog.java
@@ -75,12 +75,5 @@
 //            null    // 閲囬泦鏃堕棿
 //    );
 
-    public String getCreateTime$(){
-        if (Cools.isEmpty(this.createTime)){
-            return "";
-        }
-        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
-    }
-
 
 }
diff --git a/src/main/java/com/zy/asrs/mapper/DeviceDataLogMapper.java b/src/main/java/com/zy/asrs/mapper/DeviceDataLogMapper.java
index 4b6000a..0c007b6 100644
--- a/src/main/java/com/zy/asrs/mapper/DeviceDataLogMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/DeviceDataLogMapper.java
@@ -4,7 +4,9 @@
 import com.baomidou.mybatisplus.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
+import java.util.List;
 
 @Mapper
 @Repository
@@ -13,4 +15,6 @@
     @Delete("delete from wcs_device_data_log where create_time < FROM_UNIXTIME(UNIX_TIMESTAMP() - (24 * 60 * 60))")
     int clearLog();
 
+    int insertBatch(@Param("list") List<DeviceDataLog> list);
+
 }
diff --git a/src/main/java/com/zy/asrs/service/DeviceDataLogService.java b/src/main/java/com/zy/asrs/service/DeviceDataLogService.java
index d45758f..7275436 100644
--- a/src/main/java/com/zy/asrs/service/DeviceDataLogService.java
+++ b/src/main/java/com/zy/asrs/service/DeviceDataLogService.java
@@ -7,4 +7,5 @@
 
     int clearLog();//娓呯悊瓒呰繃24灏忔椂鏃ュ織鏁版嵁
 
+    boolean saveBatch(java.util.List<DeviceDataLog> list);
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/DeviceDataLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/DeviceDataLogServiceImpl.java
index 5823a95..cf4a92f 100644
--- a/src/main/java/com/zy/asrs/service/impl/DeviceDataLogServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/DeviceDataLogServiceImpl.java
@@ -13,4 +13,12 @@
     public int clearLog() {
         return this.baseMapper.clearLog();
     }
+
+    @Override
+    public boolean saveBatch(java.util.List<DeviceDataLog> list) {
+        if (list == null || list.isEmpty()) {
+            return true;
+        }
+        return this.baseMapper.insertBatch(list) > 0;
+    }
 }
diff --git a/src/main/java/com/zy/common/utils/RedisUtil.java b/src/main/java/com/zy/common/utils/RedisUtil.java
index 80b4f9a..76ad76d 100644
--- a/src/main/java/com/zy/common/utils/RedisUtil.java
+++ b/src/main/java/com/zy/common/utils/RedisUtil.java
@@ -100,6 +100,26 @@
         return keys;
     }
 
+    public Set<String> scanKeys(String key, int limit) {
+        return (Set<String>) redisTemplate.execute((org.springframework.data.redis.core.RedisCallback<Set<String>>) connection -> {
+            org.springframework.data.redis.core.ScanOptions options = org.springframework.data.redis.core.ScanOptions.scanOptions().match(key + "*").count(limit).build();
+            org.springframework.data.redis.core.Cursor<byte[]> cursor = connection.scan(options);
+            java.util.LinkedHashSet<String> result = new java.util.LinkedHashSet<>();
+            while (cursor.hasNext()) {
+                result.add(new String(cursor.next()));
+                if (result.size() >= limit) {
+                    break;
+                }
+            }
+            try { cursor.close(); } catch (Exception e) {}
+            return result;
+        });
+    }
+
+    public java.util.List<Object> multiGet(java.util.Collection<String> keys) {
+        return redisTemplate.opsForValue().multiGet(keys);
+    }
+
     /**
      * 鏅�氱紦瀛樿幏鍙�
      *
diff --git a/src/main/java/com/zy/core/enums/RedisKeyType.java b/src/main/java/com/zy/core/enums/RedisKeyType.java
index b62c040..1418e84 100644
--- a/src/main/java/com/zy/core/enums/RedisKeyType.java
+++ b/src/main/java/com/zy/core/enums/RedisKeyType.java
@@ -18,6 +18,8 @@
     SYSTEM_CONFIG_MAP("system_config_map"),
 
     LOC_MAP_BASE("loc_map_base"),
+
+    DEVICE_LOG_KEY("device_log_key_"),
     ;
 
     public String key;
diff --git a/src/main/java/com/zy/core/task/DeviceLogScheduler.java b/src/main/java/com/zy/core/task/DeviceLogScheduler.java
index da31515..fccce85 100644
--- a/src/main/java/com/zy/core/task/DeviceLogScheduler.java
+++ b/src/main/java/com/zy/core/task/DeviceLogScheduler.java
@@ -1,68 +1,47 @@
 package com.zy.core.task;
 
-import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.zy.asrs.entity.DeviceConfig;
+
 import com.zy.asrs.entity.DeviceDataLog;
-import com.zy.asrs.service.DeviceConfigService;
 import com.zy.asrs.service.DeviceDataLogService;
-import com.zy.core.cache.SlaveConnection;
-import com.zy.core.enums.SlaveType;
+import com.zy.common.utils.RedisUtil;
+import com.zy.core.enums.RedisKeyType;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
-import java.util.Date;
+import java.util.Set;
 import java.util.List;
+import java.util.ArrayList;
 
 @Slf4j
 @Component
 public class DeviceLogScheduler {
 
     @Autowired
-    private DeviceConfigService deviceConfigService;
-    @Autowired
     private DeviceDataLogService deviceDataLogService;
+    @Autowired
+    private RedisUtil redisUtil;
 
     @Scheduled(cron = "0/3 * * * * ? ")
     public void execute() {
-//        List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
-//                .eq("device_type", String.valueOf(SlaveType.Shuttle)));
-//        for (DeviceConfig deviceConfig : shuttleList) {
-//            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, deviceConfig.getDeviceNo());
-//            if(shuttleThread == null){
-//                continue;
-//            }
-//
-//            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
-//            if (shuttleProtocol == null) {
-//                continue;
-//            }
-//
-//            if (System.currentTimeMillis() - shuttleProtocol.getDeviceDataLog() > 500) {
-//                if (shuttleThread.getOriginDeviceData() != null) {
-//                    //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰�
-//
-//                    //绂荤嚎涓嶅仛鏃ュ織瀛樺偍
-//                    if (shuttleProtocol.getProtocolStatusType().equals(ShuttleProtocolStatusType.OFFLINE)) {
-//                        continue;
-//                    }
-//
-//                    //淇濆瓨鏁版嵁璁板綍
-//                    DeviceDataLog deviceDataLog = new DeviceDataLog();
-//                    deviceDataLog.setOriginData(JSON.toJSONString(shuttleThread.getOriginDeviceData()));
-//                    deviceDataLog.setWcsData(JSON.toJSONString(shuttleProtocol));
-//                    deviceDataLog.setType(String.valueOf(SlaveType.Shuttle));
-//                    deviceDataLog.setDeviceNo(deviceConfig.getDeviceNo());
-//                    deviceDataLog.setCreateTime(new Date());
-//                    deviceDataLogService.insert(deviceDataLog);
-//
-//                    //鏇存柊閲囬泦鏃堕棿
-//                    shuttleThread.updateDeviceDataLogTime(System.currentTimeMillis());
-//                }
-//            }
-//        }
+        int maxCount = 100;
+        Set<String> keys = redisUtil.scanKeys(RedisKeyType.DEVICE_LOG_KEY.key, maxCount);
+        if (keys == null || keys.isEmpty()) {
+            return;
+        }
+        List<Object> values = redisUtil.multiGet(keys);
+        List<DeviceDataLog> list = new ArrayList<>();
+        for (Object object : values) {
+            if (object instanceof DeviceDataLog) {
+                list.add((DeviceDataLog) object);
+            }
+        }
+        if (!list.isEmpty()) {
+            if (deviceDataLogService.saveBatch(list)) {
+                redisUtil.del(keys.toArray(new String[0]));
+            }
+        }
     }
 
 }
diff --git a/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java b/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java
index 68e0423..e0d46c5 100644
--- a/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java
@@ -10,13 +10,13 @@
 import com.zy.asrs.entity.DeviceConfig;
 import com.zy.asrs.entity.DeviceDataLog;
 import com.zy.asrs.service.BasCrnpService;
-import com.zy.asrs.service.DeviceDataLogService;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.utils.RedisUtil;
 import com.zy.core.News;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.OutputQueue;
 import com.zy.core.enums.CrnTaskModeType;
+import com.zy.core.enums.RedisKeyType;
 import com.zy.core.enums.SlaveType;
 import com.zy.core.model.CommandResponse;
 import com.zy.core.model.Task;
@@ -173,18 +173,16 @@
             crnProtocol.setLastCommandTime(System.currentTimeMillis());
         }
 
-        if (System.currentTimeMillis() - crnProtocol.getDeviceDataLog() > 1000 * 1) {
-            //閲囬泦鏃堕棿瓒呰繃1s锛屼繚瀛樹竴娆℃暟鎹褰�
+        if (System.currentTimeMillis() - crnProtocol.getDeviceDataLog() > 200) {
             //淇濆瓨鏁版嵁璁板綍
-            DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class);
             DeviceDataLog deviceDataLog = new DeviceDataLog();
             deviceDataLog.setOriginData(JSON.toJSONString(crnStatus));
             deviceDataLog.setWcsData(JSON.toJSONString(crnProtocol));
             deviceDataLog.setType(String.valueOf(SlaveType.Crn));
             deviceDataLog.setDeviceNo(crnProtocol.getCrnNo());
             deviceDataLog.setCreateTime(new Date());
-            deviceDataLogService.insert(deviceDataLog);
 
+            redisUtil.set(RedisKeyType.DEVICE_LOG_KEY.key + System.currentTimeMillis(), deviceDataLog, 60 * 60 * 24);
             //鏇存柊閲囬泦鏃堕棿
             crnProtocol.setDeviceDataLog(System.currentTimeMillis());
         }
diff --git a/src/main/java/com/zy/core/thread/impl/ZyStationThread.java b/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
index fb56ee4..5c0d73c 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
@@ -13,11 +13,11 @@
 import com.core.common.SpringUtils;
 import com.zy.asrs.entity.DeviceConfig;
 import com.zy.asrs.entity.DeviceDataLog;
-import com.zy.asrs.service.DeviceDataLogService;
 import com.zy.common.utils.RedisUtil;
 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.model.CommandResponse;
 import com.zy.core.model.Task;
@@ -27,7 +27,6 @@
 
 import java.text.MessageFormat;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
@@ -128,17 +127,15 @@
         OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), deviceConfig.getDeviceNo()));
 
         if (System.currentTimeMillis() - deviceDataLogTime > 1000 * 1) {
-            //閲囬泦鏃堕棿瓒呰繃1s锛屼繚瀛樹竴娆℃暟鎹褰�
             //淇濆瓨鏁版嵁璁板綍
-            DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class);
             DeviceDataLog deviceDataLog = new DeviceDataLog();
             deviceDataLog.setOriginData(JSON.toJSONString(zyStationStatusEntities));
             deviceDataLog.setWcsData(JSON.toJSONString(statusList));
             deviceDataLog.setType(String.valueOf(SlaveType.Devp));
             deviceDataLog.setDeviceNo(deviceConfig.getDeviceNo());
             deviceDataLog.setCreateTime(new Date());
-            deviceDataLogService.insert(deviceDataLog);
 
+            redisUtil.set(RedisKeyType.DEVICE_LOG_KEY.key + System.currentTimeMillis(), deviceDataLog, 60 * 60 * 24);
             //鏇存柊閲囬泦鏃堕棿
             deviceDataLogTime = System.currentTimeMillis();
         }
diff --git a/src/main/resources/mapper/DeviceDataLogMapper.xml b/src/main/resources/mapper/DeviceDataLogMapper.xml
index 7de7f65..4ea8a0c 100644
--- a/src/main/resources/mapper/DeviceDataLogMapper.xml
+++ b/src/main/resources/mapper/DeviceDataLogMapper.xml
@@ -13,4 +13,12 @@
 
     </resultMap>
 
+    <insert id="insertBatch">
+        INSERT INTO wcs_device_data_log (type, device_no, origin_data, wcs_data, create_time)
+        VALUES
+        <foreach collection="list" item="item" separator=",">
+            (#{item.type}, #{item.deviceNo}, #{item.originData}, #{item.wcsData}, #{item.createTime})
+        </foreach>
+    </insert>
+
 </mapper>

--
Gitblit v1.9.1