#
Junjie
2025-11-18 42fd6bd4095414f7a78a2bb5d2c692c04119da2c
#
10个文件已修改
134 ■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/DeviceDataLog.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/DeviceDataLogMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/DeviceDataLogService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/DeviceDataLogServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/utils/RedisUtil.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/enums/RedisKeyType.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/task/DeviceLogScheduler.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/impl/ZyStationThread.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/DeviceDataLogMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | 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>