From 4e005e4936039fca16bfd1679942daa416a21986 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 20 十一月 2025 14:27:47 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/thread/impl/ZyStationThread.java | 137 +++++++++++++++++++++++++++++++++++++++++----
1 files changed, 125 insertions(+), 12 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..68cbd91 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
@@ -1,13 +1,31 @@
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.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
import lombok.Data;
@@ -20,9 +38,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 +50,100 @@
}
@Override
+ @SuppressWarnings("InfiniteLoopStatement")
+ public void run() {
+ this.connect();
+ while (true) {
+ try {
+ int step = 1;
+ Task task = MessageQueue.poll(SlaveType.Devp, deviceConfig.getDeviceNo());
+ if (task != null) {
+ step = task.getStep();
+ }
+ switch (step) {
+ // 璇绘暟鎹�
+ case 1:
+ readStatus();
+ break;
+ 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 +152,24 @@
}
@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() {
- }
}
--
Gitblit v1.9.1