package com.zy.core.thread.impl.v5; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.SpringUtils; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.entity.DeviceConfig; import com.zy.asrs.entity.DeviceDataLog; import com.zy.asrs.service.BasDevpService; import com.zy.asrs.utils.Utils; import com.zy.common.utils.RedisUtil; import com.zy.core.cache.OutputQueue; import com.zy.core.enums.SlaveType; import com.zy.core.model.protocol.StationProtocol; import com.zy.core.network.ZyStationConnectDriver; import com.zy.core.network.entity.ZyStationStatusEntity; import com.zy.core.thread.support.RecentStationArrivalTracker; import com.zy.core.utils.DeviceLogRedisKeyBuilder; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; public class StationV5StatusReader { private final DeviceConfig deviceConfig; private final RedisUtil redisUtil; private final RecentStationArrivalTracker recentArrivalTracker; private final List statusList = new ArrayList<>(); private boolean initialized = false; private long deviceDataLogTime = System.currentTimeMillis(); public StationV5StatusReader(DeviceConfig deviceConfig, RedisUtil redisUtil, RecentStationArrivalTracker recentArrivalTracker) { this.deviceConfig = deviceConfig; this.redisUtil = redisUtil; this.recentArrivalTracker = recentArrivalTracker; } public void readStatus(ZyStationConnectDriver zyStationConnectDriver) { if (zyStationConnectDriver == null) { return; } if (statusList.isEmpty()) { BasDevpService basDevpService = null; try { basDevpService = SpringUtils.getBean(BasDevpService.class); } catch (Exception ignore) { } if (basDevpService == null) { return; } BasDevp basDevp = basDevpService .getOne(new QueryWrapper().eq("devp_no", deviceConfig.getDeviceNo())); if (basDevp == null) { return; } List list = JSONObject.parseArray(basDevp.getStationList(), ZyStationStatusEntity.class); for (ZyStationStatusEntity entity : list) { StationProtocol stationProtocol = new StationProtocol(); stationProtocol.setStationId(entity.getStationId()); statusList.add(stationProtocol); } initialized = true; } int deviceLogCollectTime = initialized ? Utils.getDeviceLogCollectTime() : 200; List zyStationStatusEntities = zyStationConnectDriver.getStatus(); for (ZyStationStatusEntity statusEntity : zyStationStatusEntities) { for (StationProtocol stationProtocol : statusList) { if (stationProtocol.getStationId().equals(statusEntity.getStationId())) { stationProtocol.setTaskNo(statusEntity.getTaskNo()); stationProtocol.setTargetStaNo(statusEntity.getTargetStaNo()); stationProtocol.setAutoing(statusEntity.isAutoing()); stationProtocol.setLoading(statusEntity.isLoading()); stationProtocol.setInEnable(statusEntity.isInEnable()); stationProtocol.setOutEnable(statusEntity.isOutEnable()); stationProtocol.setEmptyMk(statusEntity.isEmptyMk()); stationProtocol.setFullPlt(statusEntity.isFullPlt()); stationProtocol.setPalletHeight(statusEntity.getPalletHeight()); stationProtocol.setError(statusEntity.getError()); stationProtocol.setErrorMsg(statusEntity.getErrorMsg()); stationProtocol.setBarcode(statusEntity.getBarcode()); stationProtocol.setRunBlock(statusEntity.isRunBlock()); stationProtocol.setEnableIn(statusEntity.isEnableIn()); stationProtocol.setWeight(statusEntity.getWeight()); stationProtocol.setTaskWriteIdx(statusEntity.getTaskWriteIdx()); stationProtocol.setTaskBufferItems(statusEntity.getTaskBufferItems()); recentArrivalTracker.observe(statusEntity.getStationId(), statusEntity.getTaskNo(), statusEntity.isLoading()); } if (!Cools.isEmpty(stationProtocol.getSystemWarning())) { if (stationProtocol.isAutoing() && !stationProtocol.isLoading()) { stationProtocol.setSystemWarning(""); } } } } OutputQueue.DEVP.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), deviceConfig.getDeviceNo())); if (System.currentTimeMillis() - deviceDataLogTime > deviceLogCollectTime) { 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()); redisUtil.set(DeviceLogRedisKeyBuilder.build(deviceDataLog), deviceDataLog, 60 * 60 * 24); deviceDataLogTime = System.currentTimeMillis(); } } public List getStatusList() { return statusList; } }