From 1a3f0ed6b7f6d4112069a3c8679e7192365d5eef Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 31 三月 2026 12:38:44 +0800
Subject: [PATCH] #电视机退回时入库站点也显示信息

---
 src/main/java/com/zy/core/plugin/store/StoreInTaskPolicy.java     |   37 ++++++++++++
 src/test/java/com/zy/core/plugin/store/StoreInTaskPolicyTest.java |  104 ++++++++++++++++++++++++++++++++++
 2 files changed, 140 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/zy/core/plugin/store/StoreInTaskPolicy.java b/src/main/java/com/zy/core/plugin/store/StoreInTaskPolicy.java
index 7549ec5..75f8356 100644
--- a/src/main/java/com/zy/core/plugin/store/StoreInTaskPolicy.java
+++ b/src/main/java/com/zy/core/plugin/store/StoreInTaskPolicy.java
@@ -7,6 +7,7 @@
 import com.zy.common.model.StartupDto;
 import com.zy.core.enums.RedisKeyType;
 import com.zy.core.model.StationObjModel;
+import com.zy.core.model.protocol.StationProtocol;
 
 import java.util.List;
 
@@ -71,7 +72,9 @@
     }
 
     default void onApplyFailed(StoreInTaskContext context, AsyncInTaskResult result) {
-        context.getStationProtocol().setSystemWarning("璇锋眰鍏ュ簱澶辫触锛學MS杩斿洖=" + buildFailureMessage(result));
+        String warning = "璇锋眰鍏ュ簱澶辫触锛學MS杩斿洖=" + buildFailureMessage(result);
+        context.getStationProtocol().setSystemWarning(warning);
+        syncWarningToBackStation(context, warning);
     }
 
     default String buildFailureMessage(AsyncInTaskResult result) {
@@ -81,4 +84,36 @@
         return result.getMessage();
     }
 
+    default void syncWarningToBackStation(StoreInTaskContext context, String warning) {
+        if (context == null || context.getStationObjModel() == null || context.getStationThread() == null) {
+            return;
+        }
+        StationObjModel backStation = context.getStationObjModel().getBackStation();
+        if (backStation == null || backStation.getStationId() == null) {
+            return;
+        }
+        if (backStation.getStationId().equals(context.getStationProtocol().getStationId())) {
+            return;
+        }
+
+        List<StationProtocol> stations = context.getStationThread().getStatus();
+        if (stations != null) {
+            for (StationProtocol station : stations) {
+                if (station != null && backStation.getStationId().equals(station.getStationId())) {
+                    station.setSystemWarning(warning);
+                    return;
+                }
+            }
+        }
+
+        java.util.Map<Integer, StationProtocol> stationMap = context.getStationThread().getStatusMap();
+        if (stationMap == null) {
+            return;
+        }
+        StationProtocol backStationProtocol = stationMap.get(backStation.getStationId());
+        if (backStationProtocol != null) {
+            backStationProtocol.setSystemWarning(warning);
+        }
+    }
+
 }
diff --git a/src/test/java/com/zy/core/plugin/store/StoreInTaskPolicyTest.java b/src/test/java/com/zy/core/plugin/store/StoreInTaskPolicyTest.java
new file mode 100644
index 0000000..49ef36f
--- /dev/null
+++ b/src/test/java/com/zy/core/plugin/store/StoreInTaskPolicyTest.java
@@ -0,0 +1,104 @@
+package com.zy.core.plugin.store;
+
+import com.zy.asrs.entity.BasDevp;
+import com.zy.core.model.CommandResponse;
+import com.zy.core.model.StationObjModel;
+import com.zy.core.model.command.StationCommand;
+import com.zy.core.model.protocol.StationProtocol;
+import com.zy.core.thread.StationThread;
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class StoreInTaskPolicyTest {
+
+    private final StoreInTaskPolicy policy = context -> true;
+
+    @Test
+    void onApplyFailed_propagatesWarningToBackStation() {
+        StationProtocol barcodeStation = new StationProtocol();
+        barcodeStation.setStationId(102);
+        StationProtocol backStation = new StationProtocol();
+        backStation.setStationId(101);
+        StationThread stationThread = new FixedStationThread(Map.of(
+                102, barcodeStation,
+                101, backStation
+        ));
+
+        StationObjModel backStationModel = new StationObjModel();
+        backStationModel.setStationId(101);
+        StationObjModel barcodeStationModel = new StationObjModel();
+        barcodeStationModel.setStationId(102);
+        barcodeStationModel.setBackStation(backStationModel);
+
+        StoreInTaskContext context = new StoreInTaskContext(new BasDevp(), stationThread, barcodeStationModel, barcodeStation);
+        AsyncInTaskResult result = new AsyncInTaskResult();
+        result.setMessage("WMS寮傚父");
+
+        policy.onApplyFailed(context, result);
+
+        assertEquals("璇锋眰鍏ュ簱澶辫触锛學MS杩斿洖=WMS寮傚父", barcodeStation.getSystemWarning());
+        assertEquals("璇锋眰鍏ュ簱澶辫触锛學MS杩斿洖=WMS寮傚父", backStation.getSystemWarning());
+    }
+
+    private static class FixedStationThread implements StationThread {
+
+        private final Map<Integer, StationProtocol> statusMap;
+
+        private FixedStationThread(Map<Integer, StationProtocol> statusMap) {
+            this.statusMap = statusMap;
+        }
+
+        @Override
+        public List<StationProtocol> getStatus() {
+            return List.copyOf(statusMap.values());
+        }
+
+        @Override
+        public Map<Integer, StationProtocol> getStatusMap() {
+            return statusMap;
+        }
+
+        @Override
+        public StationCommand getCommand(com.zy.core.enums.StationCommandType commandType, Integer taskNo,
+                                         Integer stationId, Integer targetStationId, Integer palletSize) {
+            return null;
+        }
+
+        @Override
+        public boolean clearPath(Integer taskNo) {
+            return false;
+        }
+
+        @Override
+        public CommandResponse sendCommand(StationCommand command) {
+            return null;
+        }
+
+        @Override
+        public CommandResponse sendOriginCommand(String address, short[] data) {
+            return null;
+        }
+
+        @Override
+        public byte[] readOriginCommand(String address, int length) {
+            return new byte[0];
+        }
+
+        @Override
+        public void run() {
+        }
+
+        @Override
+        public boolean connect() {
+            return true;
+        }
+
+        @Override
+        public void close() {
+        }
+    }
+}

--
Gitblit v1.9.1