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.ShuttleProtocolStatusType; import com.zy.core.enums.SlaveType; import com.zy.core.model.protocol.ShuttleProtocol; import com.zy.core.thread.ShuttleThread; 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.List; @Slf4j @Component public class ShuttleDeviceLogScheduler { @Autowired private DeviceConfigService deviceConfigService; @Autowired private DeviceDataLogService deviceDataLogService; @Scheduled(cron = "0/3 * * * * ? ") public void execute() { List shuttleList = deviceConfigService.selectList(new EntityWrapper() .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() > 1000 * 5) { 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()); } } } } }