From 3764b4d54fc45a9fa1f6fa1ab9e83c04045349cb Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 31 三月 2026 17:05:25 +0800
Subject: [PATCH] #出入库模式

---
 src/test/java/com/zy/core/network/real/ZyStationV4RealConnectTest.java |   23 +++++++++++
 src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java     |   70 +++++++++++++++++++++++++++++++++++
 2 files changed, 93 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java b/src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java
index ea6e8c9..b88461a 100644
--- a/src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java
+++ b/src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java
@@ -69,6 +69,7 @@
 
     private List<ZyStationStatusEntity> statusList;
     private List<StationObjModel> barcodeOriginList;
+    private List<StationObjModel> inStationOriginList;
     private SiemensS7Net siemensNet;
     private DeviceConfig deviceConfig;
     private RedisUtil redisUtil;
@@ -126,6 +127,7 @@
                 statusList.sort(Comparator.comparing(ZyStationStatusEntity::getStationId));
             }
             barcodeOriginList = basDevp.getBarcodeStationList$();
+            inStationOriginList = sortStationObjModelsByStationId(basDevp.getInStationList$());
         }
 
         if (siemensNet == null) {
@@ -253,6 +255,20 @@
 
                 String alarmMsg = buildConveyorCommonAlarmMessage(status1, status2, status3, status4);
                 applyAlarmMessage(statusEntity, mergeAlarmMessages(statusEntity.getErrorMsg(), alarmMsg));
+            }
+        }
+
+        // 鍑哄叆搴撴ā寮�
+        OperateResultExOne<byte[]> result6 = siemensNet.Read("DB167.2", (short) (inStationOriginList.size() * 2));
+        if (result6.IsSuccess) {
+            clearInStationIoModes();
+            for (int i = 0; i < inStationOriginList.size(); i++) {
+                ZyStationStatusEntity inStationEntity = findStatusEntityByInStationIdx(i);
+                if (inStationEntity == null) {
+                    continue;
+                }
+                Integer ioMode = normalizeIoMode((int) siemensNet.getByteTransform().TransInt16(result6.Content, i * 2));
+                inStationEntity.setIoMode(ioMode);
             }
         }
 
@@ -394,6 +410,34 @@
         return null;
     }
 
+    private ZyStationStatusEntity findStatusEntityByInStationIdx(Integer idx) {
+        Integer stationId = findInStationIdByOrder(inStationOriginList, idx);
+
+        for (ZyStationStatusEntity zyStationStatusEntity : statusList) {
+            if(zyStationStatusEntity.getStationId().equals(stationId)) {
+                return zyStationStatusEntity;
+            }
+        }
+        return null;
+    }
+
+    private void clearInStationIoModes() {
+        if (inStationOriginList == null || statusList == null) {
+            return;
+        }
+        for (StationObjModel stationObjModel : inStationOriginList) {
+            if (stationObjModel == null || stationObjModel.getStationId() == null) {
+                continue;
+            }
+            for (ZyStationStatusEntity statusEntity : statusList) {
+                if (stationObjModel.getStationId().equals(statusEntity.getStationId())) {
+                    statusEntity.setIoMode(null);
+                    break;
+                }
+            }
+        }
+    }
+
     private int getTaskWriteIdx(int stationIdx, Integer taskWriteIdx) {
         int useIdx = -1;
         if (stationIdx < 0 || taskWriteIdx == null || taskWriteIdx <= 0) {
@@ -480,6 +524,32 @@
         return current + append;
     }
 
+    static Integer normalizeIoMode(Integer rawMode) {
+        if (rawMode == null) {
+            return null;
+        }
+        if (rawMode == 1 || rawMode == 2) {
+            return rawMode;
+        }
+        return null;
+    }
+
+    static Integer findInStationIdByOrder(List<StationObjModel> inStationOriginList, Integer orderIdx) {
+        if (inStationOriginList == null || orderIdx == null || orderIdx < 0 || orderIdx >= inStationOriginList.size()) {
+            return null;
+        }
+        StationObjModel stationObjModel = inStationOriginList.get(orderIdx);
+        return stationObjModel == null ? null : stationObjModel.getStationId();
+    }
+
+    static List<StationObjModel> sortStationObjModelsByStationId(List<StationObjModel> stationObjModels) {
+        if (stationObjModels == null) {
+            return Collections.emptyList();
+        }
+        stationObjModels.sort(Comparator.comparing(StationObjModel::getStationId, Comparator.nullsLast(Integer::compareTo)));
+        return stationObjModels;
+    }
+
     private static void appendConveyorCommonAlarmMessages(StringBuilder sb, boolean[] status, int startIdx) {
         if (status == null) {
             return;
diff --git a/src/test/java/com/zy/core/network/real/ZyStationV4RealConnectTest.java b/src/test/java/com/zy/core/network/real/ZyStationV4RealConnectTest.java
index 98b2126..f1bb5a1 100644
--- a/src/test/java/com/zy/core/network/real/ZyStationV4RealConnectTest.java
+++ b/src/test/java/com/zy/core/network/real/ZyStationV4RealConnectTest.java
@@ -1,6 +1,10 @@
 package com.zy.core.network.real;
 
+import com.zy.core.model.StationObjModel;
 import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.List;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -24,4 +28,23 @@
 
         assertEquals("鎵爜寮傚父;鎬ュ仠;璺緞鏌ヨ寮傚父;", merged);
     }
+
+    @Test
+    void sortStationObjModelsByStationIdShouldSortAscending() {
+        List<StationObjModel> sorted = ZyStationV4RealConnect.sortStationObjModelsByStationId(Arrays.asList(
+                station(107),
+                station(101),
+                station(104)
+        ));
+
+        assertEquals(101, sorted.get(0).getStationId());
+        assertEquals(104, sorted.get(1).getStationId());
+        assertEquals(107, sorted.get(2).getStationId());
+    }
+
+    private static StationObjModel station(Integer stationId) {
+        StationObjModel model = new StationObjModel();
+        model.setStationId(stationId);
+        return model;
+    }
 }

--
Gitblit v1.9.1