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