From 1b4fbdb92537036aed4d648967ef7e7ab8842aec Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期四, 13 十一月 2025 16:37:11 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java | 148 +++++++++++++++++++++++++++++++++++++++----------
1 files changed, 118 insertions(+), 30 deletions(-)
diff --git a/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java b/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java
index 4354c7e..2425a7f 100644
--- a/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java
+++ b/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java
@@ -1,12 +1,17 @@
package com.zy.core.network.fake;
import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.core.common.SpringUtils;
import com.zy.asrs.entity.DeviceConfig;
+import com.zy.common.model.NavigateNode;
+import com.zy.common.utils.NavigateUtils;
import com.zy.core.model.CommandResponse;
import com.zy.core.model.command.StationCommand;
import com.zy.core.network.api.ZyStationConnectApi;
import com.zy.core.network.entity.ZyStationStatusEntity;
-import java.util.Collections;
+
+import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
@@ -17,17 +22,14 @@
*/
public class ZyStationFakeConnect implements ZyStationConnectApi {
- private ZyStationStatusEntity status;
+ private List<ZyStationStatusEntity> statusList = new ArrayList<>();
private final DeviceConfig deviceConfig;
- private final ExecutorService executor = Executors.newSingleThreadExecutor();
+ // 鍏佽骞惰鎵ц澶氫釜鍛戒护浠诲姟锛堝浐瀹氱嚎绋嬫睜锛夈�傚闇�鏇撮珮骞跺彂鍙皟鏁村ぇ灏忋��
+ private final ExecutorService executor = Executors
+ .newFixedThreadPool(Math.max(2, Runtime.getRuntime().availableProcessors()));
public ZyStationFakeConnect(DeviceConfig deviceConfig) {
this.deviceConfig = deviceConfig;
- this.status = JSON.parseObject(deviceConfig.getFakeInitStatus(), ZyStationStatusEntity.class);
- if (this.status == null) {
- this.status = new ZyStationStatusEntity();
- this.status.setStationId(deviceConfig.getDeviceNo());
- }
}
@Override
@@ -37,43 +39,129 @@
@Override
public boolean disconnect() {
+ executor.shutdownNow();
return true;
}
@Override
public List<ZyStationStatusEntity> getStatus() {
- return Collections.singletonList(status);
+ if (this.statusList.isEmpty()) {
+ this.statusList = JSON.parseArray(deviceConfig.getFakeInitStatus(), ZyStationStatusEntity.class);
+
+ for (ZyStationStatusEntity status : this.statusList) {
+ status.setAutoing(true);// 妯℃嫙鑷姩杩愯
+ status.setLoading(false);// 妯℃嫙鏈夌墿
+ status.setInEnable(true);// 妯℃嫙鍙叆
+ status.setOutEnable(true);// 妯℃嫙鍙嚭
+ status.setEmptyMk(false);// 妯℃嫙绌烘澘淇″彿
+ status.setFullPlt(false);// 妯℃嫙婊℃墭鐩�
+ status.setPalletHeight(0);// 妯℃嫙鎵樼洏楂樺害涓�0
+ status.setError(0);// 妯℃嫙鏃犳姤璀�
+ status.setBarcode("");// 妯℃嫙鏃犳潯鐮�
+ }
+ }
+
+ return this.statusList;
}
@Override
public CommandResponse sendCommand(StationCommand command) {
- CommandResponse response = new CommandResponse(false);
- executor.submit(() -> handleCommand(command));
- response.setResult(true);
- return response;
+ executor.submit(() -> {
+ try {
+ handleCommand(command);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ });
+ return new CommandResponse(true, "鍛戒护宸插彈鐞嗭紙寮傛鎵ц锛�");
}
private void handleCommand(StationCommand command) {
- // 绠�鍗曠殑妯℃嫙锛氳缃伐浣滃彿鍜岀洰鏍囩珯锛屽苟妯℃嫙鏈夌墿/鍙叆/鍙嚭鐘舵�佸垏鎹�
- this.status.setTaskNo(command.getTaskNo());
- this.status.setTargetStaNo(command.getTargetStaNo());
+ NavigateUtils navigateUtils = SpringUtils.getBean(NavigateUtils.class);
+ if (navigateUtils == null) {
+ return;
+ }
- // 妯℃嫙鍒扮珯杩囩▼
- this.status.setAutoing(true);
- this.status.setLoading(true);
- sleep(1000);
+ Integer taskNo = command.getTaskNo();
+ Integer stationId = command.getStationId();
+ Integer targetStationId = command.getTargetStaNo();
- // 妯℃嫙鏀句笅鎵樼洏
- this.status.setInEnable(true);
- this.status.setOutEnable(false);
- sleep(1000);
+ List<NavigateNode> navigateNodes = null;
- // 瀹屾垚浠诲姟锛屽浣嶇姸鎬�
- this.status.setLoading(false);
- this.status.setAutoing(false);
- this.status.setTaskNo(0);
- this.status.setInEnable(false);
- this.status.setOutEnable(true);
+ try {
+ navigateNodes = navigateUtils.calcByStationId(stationId, targetStationId);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ if (navigateNodes == null) {
+ return;
+ }
+
+ Integer lastStationId = null;
+ for (int i = 0; i < navigateNodes.size(); i++) {
+ NavigateNode navigateNode = navigateNodes.get(i);
+ JSONObject valueObject = JSON.parseObject(navigateNode.getNodeValue());
+ Integer currentStationId = valueObject.getInteger("stationId");
+ ZyStationStatusEntity status = statusList.stream()
+ .filter(item -> item.getStationId().equals(currentStationId)).findFirst().orElse(null);
+ if (status == null) {
+ continue;
+ }
+
+ try {
+ while (true) {
+ ZyStationStatusEntity nextStatus = statusList.stream()
+ .filter(item -> item.getStationId().equals(currentStationId)).findFirst().orElse(null);
+ if (nextStatus == null) {
+ continue;
+ }
+
+ if (nextStatus.getTaskNo() == 0) {
+ break;
+ }
+
+ sleep(100);
+ }
+ } catch (Exception e) {
+ continue;
+ }
+
+ synchronized (status) {
+ status.setTaskNo(taskNo);
+ status.setTargetStaNo(targetStationId);
+ status.setLoading(true);
+ }
+
+ if (lastStationId != null) {
+ Integer finalLastStationId = lastStationId;
+ ZyStationStatusEntity lastStatus = statusList.stream()
+ .filter(item -> item.getStationId().equals(finalLastStationId)).findFirst().orElse(null);
+ if (lastStatus != null) {
+ synchronized (lastStatus) {
+ lastStatus.setTaskNo(0);
+ lastStatus.setTargetStaNo(0);
+ lastStatus.setLoading(false);
+ }
+ }
+ }
+ lastStationId = currentStationId;
+ sleep(1000);
+ }
+
+ sleep(10000);
+ if (lastStationId != null) {
+ Integer finalLastStationId = lastStationId;
+ ZyStationStatusEntity lastStatus = statusList.stream()
+ .filter(item -> item.getStationId().equals(finalLastStationId)).findFirst().orElse(null);
+ if (lastStatus != null) {
+ synchronized (lastStatus) {
+ lastStatus.setTaskNo(0);
+ lastStatus.setTargetStaNo(0);
+ lastStatus.setLoading(false);
+ }
+ }
+ }
}
private void sleep(long ms) {
--
Gitblit v1.9.1