From 2aaf47ead1a69ccbaf6a0167ae161aafd3622114 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 27 十一月 2025 08:14:35 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/thread/impl/ZyStationThread.java | 151 ++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 140 insertions(+), 11 deletions(-)
diff --git a/src/main/java/com/zy/core/thread/impl/ZyStationThread.java b/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
index 4fe5127..d54012a 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
@@ -1,14 +1,30 @@
package com.zy.core.thread.impl;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.BasDevp;
+import com.zy.asrs.service.BasDevpService;
+import com.zy.core.network.DeviceConnectPool;
import com.zy.core.thread.StationThread;
+import com.alibaba.fastjson.JSON;
+import com.core.common.DateUtils;
+import com.core.common.SpringUtils;
import com.zy.asrs.entity.DeviceConfig;
+import com.zy.asrs.entity.DeviceDataLog;
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;
import com.zy.core.model.command.StationCommand;
+import com.zy.core.model.protocol.StationProtocol;
import com.zy.core.network.entity.ZyStationStatusEntity;
-import java.util.Collections;
-import java.util.List;
+
+import java.text.MessageFormat;
+import java.util.*;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@@ -20,9 +36,11 @@
@Slf4j
public class ZyStationThread implements Runnable, StationThread {
+ private List<StationProtocol> statusList = new ArrayList<>();
private DeviceConfig deviceConfig;
private RedisUtil redisUtil;
private ZyStationConnectDriver zyStationConnectDriver;
+ private long deviceDataLogTime = System.currentTimeMillis();
public ZyStationThread(DeviceConfig deviceConfig, RedisUtil redisUtil) {
this.deviceConfig = deviceConfig;
@@ -30,7 +48,110 @@
}
@Override
+ @SuppressWarnings("InfiniteLoopStatement")
+ public void run() {
+ this.connect();
+
+ //璁惧璇诲彇
+ Thread readThread = new Thread(() -> {
+ while (true) {
+ try {
+ readStatus();
+ Thread.sleep(200);
+ } catch (Exception e) {
+ log.error("StationThread Fail", e);
+ }
+ }
+ });
+ readThread.start();
+
+ while (true) {
+ try {
+ int step = 1;
+ Task task = MessageQueue.poll(SlaveType.Devp, deviceConfig.getDeviceNo());
+ if (task != null) {
+ step = task.getStep();
+ }
+ switch (step) {
+ case 2:
+ sendCommand((StationCommand) task.getData());
+ break;
+ default:
+ break;
+ }
+ Thread.sleep(200);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private void readStatus() {
+ if (zyStationConnectDriver == null) {
+ return;
+ }
+
+ if(statusList.isEmpty()) {
+ BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class);
+ if (basDevpService == null) {
+ return;
+ }
+
+ BasDevp basDevp = basDevpService
+ .selectOne(new EntityWrapper<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);
+ }
+ }
+
+ 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.setBarcode(statusEntity.getBarcode());
+ }
+ }
+ }
+
+ OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), deviceConfig.getDeviceNo()));
+
+ if (System.currentTimeMillis() - deviceDataLogTime > 1000 * 1) {
+ //淇濆瓨鏁版嵁璁板綍
+ 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(RedisKeyType.DEVICE_LOG_KEY.key + System.currentTimeMillis(), deviceDataLog, 60 * 60 * 24);
+ //鏇存柊閲囬泦鏃堕棿
+ deviceDataLogTime = System.currentTimeMillis();
+ }
+ }
+
+ @Override
public boolean connect() {
+ zyStationConnectDriver = new ZyStationConnectDriver(deviceConfig);
+ new Thread(zyStationConnectDriver).start();
+ DeviceConnectPool.put(SlaveType.Devp, deviceConfig.getDeviceNo(), zyStationConnectDriver);
return true;
}
@@ -39,24 +160,32 @@
}
@Override
- public List<ZyStationStatusEntity> getStatus() {
- if (zyStationConnectDriver == null) {
- return Collections.emptyList();
- }
- return zyStationConnectDriver.getStatus();
+ public List<StationProtocol> getStatus() {
+ return statusList;
}
@Override
- public StationCommand getMoveCommand() {
- return null;
+ public StationCommand getMoveCommand(Integer taskNo, Integer stationId, Integer targetStationId, Integer palletSize) {
+ StationCommand stationCommand = new StationCommand();
+ stationCommand.setTaskNo(taskNo);
+ stationCommand.setStationId(stationId);
+ stationCommand.setTargetStaNo(targetStationId);
+ stationCommand.setPalletSize(palletSize);
+ return stationCommand;
}
@Override
public CommandResponse sendCommand(StationCommand command) {
- return new CommandResponse(true);
+ CommandResponse commandResponse = zyStationConnectDriver.sendCommand(command);
+ return commandResponse;
}
@Override
- public void run() {
+ public Map<Integer, StationProtocol> getStatusMap() {
+ Map<Integer, StationProtocol> map = new HashMap<>();
+ for (StationProtocol stationProtocol : statusList) {
+ map.put(stationProtocol.getStationId(), stationProtocol);
+ }
+ return map;
}
}
--
Gitblit v1.9.1