| src/main/java/com/zy/asrs/entity/DeviceDataLog.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/mapper/DeviceDataLogMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/DeviceDataLogService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/impl/DeviceDataLogServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/common/utils/RedisUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/enums/RedisKeyType.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/task/DeviceLogScheduler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/thread/impl/ZyStationThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/DeviceDataLogMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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); } } 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); } src/main/java/com/zy/asrs/service/DeviceDataLogService.java
@@ -7,4 +7,5 @@ int clearLog();//清理超过24小时日志数据 boolean saveBatch(java.util.List<DeviceDataLog> list); } 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; } } 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); } /** * 普通缓存获取 * 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; 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])); } } } } 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()); } 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(); } 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>