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<StationProtocol> 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<BasDevp>().eq("devp_no", deviceConfig.getDeviceNo()));
|
if (basDevp == null) {
|
return;
|
}
|
|
List<ZyStationStatusEntity> 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<ZyStationStatusEntity> 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<StationProtocol> getStatusList() {
|
return statusList;
|
}
|
}
|