From 6d99081f3f6e0363b0bd28053e545a8e4589b979 Mon Sep 17 00:00:00 2001
From: Junjie <DELL@qq.com>
Date: 星期五, 09 一月 2026 08:50:11 +0800
Subject: [PATCH] #

---
 src/main/webapp/components/MapCanvas.js                             |    2 
 src/main/java/com/zy/core/utils/StationOperateProcessUtils.java     |    5 -
 src/main/java/com/zy/core/network/real/ZyStationV3RealConnect.java  |  153 +++++++++++++++++++++++++++---
 src/main/resources/docs/地图操作说明书.pdf                                 |    0 
 src/main/java/com/zy/asrs/controller/BasMapController.java          |    1 
 src/main/resources/sql/20260109084743.nb3                           |    0 
 /dev/null                                                           |    0 
 src/main/java/com/zy/core/network/real/ZyStationRealConnect.java    |    4 
 src/main/java/com/zy/core/plugin/NormalProcess.java                 |   34 ++++--
 src/main/java/com/zy/asrs/controller/ConsoleController.java         |    2 
 src/main/java/com/zy/asrs/domain/vo/StationLatestDataVo.java        |    6 +
 src/main/java/com/zy/core/model/protocol/StationProtocol.java       |    3 
 src/main/java/com/zy/core/network/entity/ZyStationStatusEntity.java |    3 
 src/main/java/com/zy/asrs/utils/Utils.java                          |   25 +++-
 src/main/java/com/zy/core/thread/impl/ZyStationThread.java          |    3 
 src/main/java/com/zy/core/enums/WrkIoType.java                      |    2 
 src/main/java/com/zy/core/thread/impl/ZyStationV3Thread.java        |   27 +++-
 src/main/webapp/components/DevpCard.js                              |    4 
 src/main/java/com/zy/core/enums/RedisKeyType.java                   |    1 
 src/main/java/com/zy/core/model/StationObjModel.java                |    2 
 20 files changed, 224 insertions(+), 53 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/BasMapController.java b/src/main/java/com/zy/asrs/controller/BasMapController.java
index 7506271..4a2a97e 100644
--- a/src/main/java/com/zy/asrs/controller/BasMapController.java
+++ b/src/main/java/com/zy/asrs/controller/BasMapController.java
@@ -221,6 +221,7 @@
                             StationObjModel barcodeStationModel = new StationObjModel();
                             barcodeStationModel.setDeviceNo(deviceNo);
                             barcodeStationModel.setStationId(value.getInteger("stationId"));
+                            barcodeStationModel.setBarcodeIdx(value.getInteger("barcodeIdx"));
 
                             if (value.getInteger("backStation") != null) {
                                 StationObjModel backStation = new StationObjModel();
diff --git a/src/main/java/com/zy/asrs/controller/ConsoleController.java b/src/main/java/com/zy/asrs/controller/ConsoleController.java
index 320bf62..554305b 100644
--- a/src/main/java/com/zy/asrs/controller/ConsoleController.java
+++ b/src/main/java/com/zy/asrs/controller/ConsoleController.java
@@ -119,7 +119,9 @@
                 vo.setEnableIn(stationProtocol.isEnableIn());// 鍚姩鍏ュ簱
                 vo.setPalletHeight(stationProtocol.getPalletHeight()); // 鎵樼洏楂樺害
                 vo.setError(stationProtocol.getError()); // 閿欒鐮�
+                vo.setErrorMsg(stationProtocol.getErrorMsg()); // 鎶ヨ淇℃伅
                 vo.setBarcode(stationProtocol.getBarcode()); // 鏉$爜
+                vo.setWeight(stationProtocol.getWeight());//閲嶉噺
                 String stationStatus = StationStatusType.process(stationProtocol).toString().toLowerCase().replaceAll("_", "-");
                 if (stationProtocol.isAutoing() && stationProtocol.isLoading() && stationProtocol.getTaskNo() > 0 && !stationProtocol.isRunBlock()) {
                     String taskClass = getStationTaskClass(stationProtocol.getTaskNo(), inTaskRange, outTaskRange);
diff --git a/src/main/java/com/zy/asrs/domain/vo/StationLatestDataVo.java b/src/main/java/com/zy/asrs/domain/vo/StationLatestDataVo.java
index 59fc320..c41359e 100644
--- a/src/main/java/com/zy/asrs/domain/vo/StationLatestDataVo.java
+++ b/src/main/java/com/zy/asrs/domain/vo/StationLatestDataVo.java
@@ -44,9 +44,15 @@
     //鎶ヨ
     private Integer error;
 
+    //鎶ヨ淇℃伅
+    private String errorMsg;
+
     //鏉$爜
     private String barcode;
 
     private String stationStatus;
 
+    //閲嶉噺
+    private Double weight;
+
 }
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index f2c7d43..cb1ee8b 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -193,10 +193,20 @@
                     .eq("in_enable", "Y")
                     .eq("status", 1);
 
+            if (hasConfig) {
+                wrapper.in("crn_no", allowedCrnNos);
+            }
+
             if (currentCircleTaskCrnNo != null) {
                 currentCircleTaskCrnNo = currentCircleTaskCrnNo + 1;
-                BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", currentCircleTaskCrnNo));
-                List<WrkMast> currentCrnTask = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", currentCircleTaskCrnNo));
+                BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>()
+                        .eq("crn_no", currentCircleTaskCrnNo)
+                        .eq("in_enable", "Y")
+                        .eq("status", 1)
+                );
+                List<WrkMast> currentCrnTask = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+                        .eq("crn_no", currentCircleTaskCrnNo)
+                );
                 if (currentCrnTask.size() <= 1) {
                     if (basCrnp != null) {
                         List<List<Integer>> rowList = basCrnp.getControlRows$();
@@ -230,9 +240,6 @@
 
             List<BasCrnp> enabledCrnps = new ArrayList<>();
             for (BasCrnp basCrnp : baseList) {
-                if (hasConfig && !allowedCrnNos.contains(basCrnp.getCrnNo())) {
-                    continue;
-                }
                 CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, basCrnp.getCrnNo());
                 if (crnThread == null) {
                     continue;
@@ -311,6 +318,10 @@
                     .eq("in_enable", "Y")
                     .eq("status", 1);
 
+            if (hasConfig) {
+                wrapper.in("crn_no", allowedCrnNos);
+            }
+
             HashMap<Integer, Integer> map = new HashMap<>();
             List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<>());
             List<BasDualCrnp> basDualCrnps = basDualCrnpService.selectList(wrapper);
@@ -333,10 +344,6 @@
 
             List<BasDualCrnp> enabledCrnps = new ArrayList<>();
             for (BasDualCrnp basDualCrnp : baseList) {
-                if (hasConfig && !allowedCrnNos.contains(basDualCrnp.getCrnNo())) {
-                    continue;
-                }
-
                 DualCrnThread dualCrnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, basDualCrnp.getCrnNo());
                 if (dualCrnThread == null) {
                     continue;
diff --git a/src/main/java/com/zy/core/enums/RedisKeyType.java b/src/main/java/com/zy/core/enums/RedisKeyType.java
index 1154b8f..8d000ca 100644
--- a/src/main/java/com/zy/core/enums/RedisKeyType.java
+++ b/src/main/java/com/zy/core/enums/RedisKeyType.java
@@ -40,6 +40,7 @@
     CHECK_STATION_RUN_BLOCK_LIMIT_("check_station_run_block_limit_"),
     CHECK_SHALLOW_LOC_STATUS_LIMIT("check_shallow_loc_status_limit_"),
     GENERATE_ENABLE_IN_STATION_DATA_LIMIT("generate_enable_in_station_data_limit_"),
+    GENERATE_STATION_BACK_LIMIT("generate_station_back_limit_"),
 
     DUAL_CRN_PICK_WAIT_NEXT_TASK("dual_crn_pick_wait_next_task_"),
     DUAL_CRN_OUT_TASK_STATION_INFO("dual_crn_out_task_station_info_"),
diff --git a/src/main/java/com/zy/core/enums/WrkIoType.java b/src/main/java/com/zy/core/enums/WrkIoType.java
index ecde168..9307c60 100644
--- a/src/main/java/com/zy/core/enums/WrkIoType.java
+++ b/src/main/java/com/zy/core/enums/WrkIoType.java
@@ -8,6 +8,8 @@
     OUT(101, "鍑哄簱"),
     LOC_MOVE(201, "绉诲簱浠诲姟"),
     FAKE_TASK_NO(9999, "浠跨湡闅忔満宸ヤ綔鍙�"),
+    ENABLE_IN(9998, "鍚姩鍏ュ簱"),
+    STATION_BACK(9997, "绔欑偣鍥為��"),
     ;
 
     WrkIoType(int id, String desc) {
diff --git a/src/main/java/com/zy/core/model/StationObjModel.java b/src/main/java/com/zy/core/model/StationObjModel.java
index 4f047cb..08e1bc4 100644
--- a/src/main/java/com/zy/core/model/StationObjModel.java
+++ b/src/main/java/com/zy/core/model/StationObjModel.java
@@ -17,6 +17,8 @@
 
     private Integer stationLev;
 
+    private Integer barcodeIdx;
+
     private StationObjModel barcodeStation;
 
     private StationObjModel backStation;
diff --git a/src/main/java/com/zy/core/model/protocol/StationProtocol.java b/src/main/java/com/zy/core/model/protocol/StationProtocol.java
index 566f8d9..c2c9f52 100644
--- a/src/main/java/com/zy/core/model/protocol/StationProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/StationProtocol.java
@@ -49,6 +49,9 @@
     //鎶ヨ
     private Integer error;
 
+    //鎶ヨ淇℃伅
+    private String errorMsg;
+
     //鏉$爜
     private String barcode;
 
diff --git a/src/main/java/com/zy/core/network/entity/ZyStationStatusEntity.java b/src/main/java/com/zy/core/network/entity/ZyStationStatusEntity.java
index 48f9b3e..40bdbfa 100644
--- a/src/main/java/com/zy/core/network/entity/ZyStationStatusEntity.java
+++ b/src/main/java/com/zy/core/network/entity/ZyStationStatusEntity.java
@@ -41,6 +41,9 @@
     //鎶ヨ
     private Integer error;
 
+    //鎶ヨ淇℃伅
+    private String errorMsg;
+
     //鏉$爜
     private String barcode;
 
diff --git a/src/main/java/com/zy/core/network/real/ZyStationRealConnect.java b/src/main/java/com/zy/core/network/real/ZyStationRealConnect.java
index c73de43..97b1c6c 100644
--- a/src/main/java/com/zy/core/network/real/ZyStationRealConnect.java
+++ b/src/main/java/com/zy/core/network/real/ZyStationRealConnect.java
@@ -22,6 +22,7 @@
 import com.zy.core.network.api.ZyStationConnectApi;
 import com.zy.core.network.entity.ZyStationStatusEntity;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
 import java.text.MessageFormat;
@@ -87,6 +88,9 @@
             }
 
             statusList = JSONObject.parseArray(basDevp.getStationList(), ZyStationStatusEntity.class);
+            if (statusList != null) {
+                statusList.sort(Comparator.comparing(ZyStationStatusEntity::getStationId));
+            }
             barcodeStatusList = JSONObject.parseArray(basDevp.getBarcodeStationList(), ZyStationStatusEntity.class);
         }
 
diff --git a/src/main/java/com/zy/core/network/real/ZyStationV3RealConnect.java b/src/main/java/com/zy/core/network/real/ZyStationV3RealConnect.java
index 4bc50fc..543a2bd 100644
--- a/src/main/java/com/zy/core/network/real/ZyStationV3RealConnect.java
+++ b/src/main/java/com/zy/core/network/real/ZyStationV3RealConnect.java
@@ -17,6 +17,7 @@
 import com.zy.core.cache.OutputQueue;
 import com.zy.core.enums.StationCommandType;
 import com.zy.core.model.CommandResponse;
+import com.zy.core.model.StationObjModel;
 import com.zy.core.model.command.StationCommand;
 import com.zy.core.network.api.ZyStationConnectApi;
 import com.zy.core.network.entity.ZyStationStatusEntity;
@@ -35,7 +36,7 @@
 public class ZyStationV3RealConnect implements ZyStationConnectApi {
 
     private List<ZyStationStatusEntity> statusList;
-    private List<ZyStationStatusEntity> barcodeStatusList;
+    private List<StationObjModel> barcodeOriginList;
     private SiemensS7Net siemensNet;
     private DeviceConfig deviceConfig;
     private RedisUtil redisUtil;
@@ -94,10 +95,7 @@
             if (statusList != null) {
                 statusList.sort(Comparator.comparing(ZyStationStatusEntity::getStationId));
             }
-            barcodeStatusList = JSONObject.parseArray(basDevp.getBarcodeStationList(), ZyStationStatusEntity.class);
-            if (barcodeStatusList != null) {
-                barcodeStatusList.sort(Comparator.comparing(ZyStationStatusEntity::getStationId));
-            }
+            barcodeOriginList = basDevp.getBarcodeStationList$();
         }
 
         if (siemensNet == null) {
@@ -122,21 +120,94 @@
                 boolean[] status2 = siemensNet.getByteTransform().TransBool(result.Content, i * 8 + 7, 1);
                 statusEntity.setRunBlock(status2[1]);//閲嶆柊瑙勫垝璺嚎
                 statusEntity.setEnableIn(status2[3]);//鍚姩鍏ュ簱
+
+                Integer palletHeight = null;
+                if (status[7]) {
+                    palletHeight = 1;//浣�
+                }
+                if (status2[0]) {
+                    palletHeight = 2;//涓�
+                }
+                if (status[6]) {
+                    palletHeight = 3;//楂�
+                }
+                statusEntity.setPalletHeight(palletHeight);//楂樹綆淇″彿
+
+                statusEntity.setError(0);//榛樿鏃犳姤璀�
             }
         }
 
         // 鏉$爜鎵弿鍣�
-        OperateResultExOne<byte[]> result2 = siemensNet.Read("DB101.0", (short) (statusList.size() * 10));
+        OperateResultExOne<byte[]> result2 = siemensNet.Read("DB101.0", (short) (barcodeOriginList.size() * 16));
         if (result2.IsSuccess) {
-            for (int i = 0; i < barcodeStatusList.size(); i++) {
-                ZyStationStatusEntity barcodeEntity = barcodeStatusList.get(i);
-                ZyStationStatusEntity statusEntity = findStatusEntity(barcodeEntity.getStationId());
-                if (statusEntity == null) {
+            for (int i = 0; i < barcodeOriginList.size(); i++) {
+                ZyStationStatusEntity barcodeEntity = findStatusEntityByBarcodeIdx(i + 1);
+                if (barcodeEntity == null) {
                     continue;
                 }
-                String barcode = siemensNet.getByteTransform().TransString(result2.Content, i * 10 + 2, 8, "UTF-8");
+                String barcode = siemensNet.getByteTransform().TransString(result2.Content, i * 16 + 2, 14, "UTF-8");
                 barcode = barcode.trim();
                 barcodeEntity.setBarcode(barcode);
+            }
+        }
+
+        // 绉伴噸
+        OperateResultExOne<byte[]> result3 = siemensNet.Read("DB102.0", (short) (barcodeOriginList.size() * 4));
+        if (result3.IsSuccess) {
+            for (int i = 0; i < barcodeOriginList.size(); i++) {
+                ZyStationStatusEntity barcodeEntity = findStatusEntityByBarcodeIdx(i + 1);
+                if (barcodeEntity == null) {
+                    continue;
+                }
+                double weight = (double) siemensNet.getByteTransform().TransSingle(result3.Content, i * 4);
+                barcodeEntity.setWeight(weight);
+            }
+        }
+
+        // 鎶ヨ淇℃伅
+        OperateResultExOne<byte[]> result4 = siemensNet.Read("DB103.0", (short) (barcodeOriginList.size() * 2));
+        if (result4.IsSuccess) {
+            for (int i = 0; i < barcodeOriginList.size(); i++) {
+                ZyStationStatusEntity barcodeEntity = findStatusEntityByBarcodeIdx(i + 1);
+                if (barcodeEntity == null) {
+                    continue;
+                }
+
+                StringBuilder sb = new StringBuilder();
+                boolean[] status1 = siemensNet.getByteTransform().TransBool(result4.Content, i * 2, 1);
+                boolean[] status2 = siemensNet.getByteTransform().TransBool(result4.Content, i * 2 + 1, 1);
+
+                if(status1[0]){
+                    sb.append("宸﹁秴瀹芥姤璀�;");
+                }
+                if(status1[1]) {
+                    sb.append("鍙宠秴瀹芥姤璀�;");
+                }
+                if(status1[2]) {
+                    sb.append("鍓嶈秴闀挎姤璀�;");
+                }
+                if(status1[3]) {
+                    sb.append("鍚庤秴闀挎姤璀�;");
+                }
+                if(status1[4]) {
+                    sb.append("瓒呴珮鎶ヨ;");
+                }
+                if(status1[5]) {
+                    sb.append("鏈夎揣鎶ヨ锛岀┖鎵樺叆搴撴椂妫�娴嬫墭鐩樹笂鏈夋棤璐х墿;");
+                }
+                if(status1[6]) {
+                    sb.append("閲嶉噺寮傚父鎶ヨ;");
+                }
+                if(status1[7]) {
+                    sb.append("鎵爜寮傚父;");
+                }
+
+                if(sb.length() > 0) {
+                    barcodeEntity.setError(1);
+                }else {
+                    barcodeEntity.setError(0);
+                }
+                barcodeEntity.setErrorMsg(sb.toString());
             }
         }
 
@@ -199,6 +270,46 @@
                 log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傜珯鐐圭紪鍙�={}锛岀珯鐐规暟鎹�={}", command.getTaskNo(), JSON.toJSON(command));
                 commandResponse.setResult(false);
             }
+        } else if (command.getCommandType().equals(StationCommandType.WRITE_INFO)) {
+            int enableCommandIdx = -1;
+            while (true) {
+                enableCommandIdx = getEnableCommandIdx(command.getTaskNo());
+                if(enableCommandIdx == -1) {
+                    try {
+                        Thread.sleep(300);
+                    }catch (Exception e) {}
+                }else {
+                    break;
+                }
+                tryCount++;
+                if (tryCount > maxTryCount) {
+                    commandResponse.setMessage("鍛戒护涓嬪彂瓒呮椂锛屾棤娉曟壘鍒板彲鐢ㄤ笅鍙戝尯鍩�");
+                    return commandResponse;
+                }
+            }
+
+            short[] data = new short[21];
+            data[0] = command.getTargetStaNo().shortValue();
+            data[1] = command.getTargetStaNo().shortValue();
+
+            OperateResult writeTask = siemensNet.Write("DB23." + (enableCommandIdx * taskAddressLength), command.getTaskNo());
+            try {
+                Thread.sleep(50);
+            }catch (Exception e) {}
+
+            OperateResult writeData = siemensNet.Write("DB23." + (enableCommandIdx * taskAddressLength + 4), data);
+            try {
+                Thread.sleep(200);
+            }catch (Exception e) {}
+            OperateResult writeConfirm = siemensNet.Write("DB23." + (enableCommandIdx * taskAddressLength + 46), (short) 1);
+
+            if(writeTask.IsSuccess &&  writeData.IsSuccess &&  writeConfirm.IsSuccess) {
+                log.error("鍐欏叆杈撻�佺嚎鍛戒护鎴愬姛銆備换鍔″彿={}锛岀珯鐐规暟鎹�={}", command.getTaskNo(), JSON.toJSON(command));
+                commandResponse.setResult(true);
+            }else {
+                log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傜珯鐐圭紪鍙�={}锛岀珯鐐规暟鎹�={}", command.getTaskNo(), JSON.toJSON(command));
+                commandResponse.setResult(false);
+            }
         }
         return commandResponse;
     }
@@ -231,10 +342,18 @@
         return new byte[0];
     }
 
-    private ZyStationStatusEntity findStatusEntity(Integer stationId) {
-        for (ZyStationStatusEntity statusEntity : statusList) {
-            if (statusEntity.getStationId().equals(stationId)) {
-                return statusEntity;
+    private ZyStationStatusEntity findStatusEntityByBarcodeIdx(Integer barcodeIdx) {
+        Integer stationId = null;
+        for (StationObjModel stationObjModel : barcodeOriginList) {
+            if (stationObjModel.getBarcodeIdx().equals(barcodeIdx)) {
+                stationId = stationObjModel.getStationId();
+                break;
+            }
+        }
+
+        for (ZyStationStatusEntity zyStationStatusEntity : statusList) {
+            if(zyStationStatusEntity.getStationId().equals(stationId)) {
+                return zyStationStatusEntity;
             }
         }
         return null;
@@ -243,9 +362,9 @@
     private int getEnableCommandIdx(int taskNo) {
         int useIdx = -1;
         for (int i = 0; i < taskAddressLimit; i++) {
-            OperateResultExOne<byte[]> resultTask = siemensNet.Read("DB23." + (i * taskAddressLength + 0), (short) 2);
+            OperateResultExOne<byte[]> resultTask = siemensNet.Read("DB23." + (i * taskAddressLength + 0), (short) 4);
             OperateResultExOne<byte[]> resultStatus = siemensNet.Read("DB23." + (i * taskAddressLength + 46), (short) 2);
-            if(resultTask.IsSuccess && resultStatus.IsSuccess) {
+            if(!resultTask.IsSuccess || !resultStatus.IsSuccess) {
                 continue;
             }
 
diff --git a/src/main/java/com/zy/core/plugin/NormalProcess.java b/src/main/java/com/zy/core/plugin/NormalProcess.java
index 3792035..b58d1dd 100644
--- a/src/main/java/com/zy/core/plugin/NormalProcess.java
+++ b/src/main/java/com/zy/core/plugin/NormalProcess.java
@@ -56,10 +56,10 @@
 
     @Override
     public void run() {
-        //璇锋眰鐢熸垚鍏ュ簱浠诲姟
-        generateStoreWrkFile();
         //妫�娴嬪叆搴撶珯鏄惁鏈変换鍔$敓鎴愶紝骞跺惎鍔ㄥ叆搴�
         checkInStationHasTask();
+        //璇锋眰鐢熸垚鍏ュ簱浠诲姟
+        generateStoreWrkFile();
 
         //鎵ц鍫嗗灈鏈轰换鍔�
         crnOperateUtils.crnIoExecute();
@@ -71,6 +71,9 @@
         stationOperateProcessUtils.stationOutExecute();
         //妫�娴嬭緭閫佺珯鐐瑰嚭搴撲换鍔℃墽琛屽畬鎴�
         stationOperateProcessUtils.stationOutExecuteFinish();
+
+        //妫�娴嬭緭閫佺珯鐐规槸鍚﹁繍琛屽牭濉�
+        stationOperateProcessUtils.checkStationRunBlock();
     }
 
     /**
@@ -102,8 +105,23 @@
                 //婊¤冻鑷姩銆佹湁鐗┿�佹湁宸ヤ綔鍙凤紝鐢熸垚鍏ュ簱鏁版嵁
                 if (stationProtocol.isAutoing()
                         && stationProtocol.isLoading()
+                        && stationProtocol.isInEnable()
                         && stationProtocol.getTaskNo() > 0
                 ) {
+                    if (stationProtocol.getError() > 0) {
+                        Object backLock = redisUtil.get(RedisKeyType.GENERATE_STATION_BACK_LIMIT.key + stationId);
+                        if (backLock != null) {
+                            continue;
+                        }
+
+                        //鎶ヨ鍥為��
+                        StationCommand command = stationThread.getCommand(StationCommandType.MOVE, commonService.getWorkNo(WrkIoType.STATION_BACK.id), stationId, entity.getBackStation().getStationId(), 0);
+                        MessageQueue.offer(SlaveType.Devp, basDevp.getDevpNo(), new Task(2, command));
+                        redisUtil.set(RedisKeyType.GENERATE_STATION_BACK_LIMIT.key + stationId, "lock", 15);
+                        News.info("{}绔欑偣鎶ヨ鍥為��鎴愬姛锛屾暟鎹寘:{}", stationId, JSON.toJSONString(command));
+                        continue;
+                    }
+
                     if (Cools.isEmpty(stationProtocol.getBarcode())) {
                         continue;
                     }
@@ -135,13 +153,6 @@
                         taskParam.setTaskPri(dto.getTaskPri());
                         taskParam.setBarcode(stationProtocol.getBarcode());
                         WrkMast wrkMast = commonService.createInTask(taskParam);
-
-                        StationCommand command = stationThread.getCommand(StationCommandType.WRITE_INFO, wrkMast.getWrkNo(), stationId, stationId, 0);
-                        if(command == null){
-                            News.taskInfo(wrkMast.getWrkNo(), "鑾峰彇杈撻�佺嚎鍛戒护澶辫触");
-                            continue;
-                        }
-                        MessageQueue.offer(SlaveType.Devp, basDevp.getDevpNo(), new Task(2, command));
                     }
                 }
             }
@@ -182,9 +193,10 @@
                         && stationProtocol.getTaskNo() == 0
                         && stationProtocol.isEnableIn()
                 ) {
-                    StationCommand command = stationThread.getCommand(StationCommandType.MOVE, commonService.getWorkNo(WrkIoType.FAKE_TASK_NO.id), stationId, entity.getBarcodeStation().getStationId(), 0);
+                    StationCommand command = stationThread.getCommand(StationCommandType.MOVE, commonService.getWorkNo(WrkIoType.ENABLE_IN.id), stationId, entity.getBarcodeStation().getStationId(), 0);
                     MessageQueue.offer(SlaveType.Devp, basDevp.getDevpNo(), new Task(2, command));
-                    redisUtil.set(RedisKeyType.GENERATE_ENABLE_IN_STATION_DATA_LIMIT.key + stationId, "lock", 10);
+                    redisUtil.set(RedisKeyType.GENERATE_ENABLE_IN_STATION_DATA_LIMIT.key + stationId, "lock", 15);
+                    News.info("{}绔欑偣鍚姩鍏ュ簱鎴愬姛锛屾暟鎹寘:{}", stationId, JSON.toJSONString(command));
                 }
             }
         }
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 be32eb0..62ea5a9 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
@@ -136,8 +136,11 @@
                     stationProtocol.setFullPlt(statusEntity.isFullPlt());
                     stationProtocol.setPalletHeight(statusEntity.getPalletHeight());
                     stationProtocol.setError(statusEntity.getError());
+                    stationProtocol.setErrorMsg(statusEntity.getErrorMsg());
                     stationProtocol.setBarcode(statusEntity.getBarcode());
                     stationProtocol.setRunBlock(statusEntity.isRunBlock());
+                    stationProtocol.setEnableIn(statusEntity.isEnableIn());
+                    stationProtocol.setWeight(statusEntity.getWeight());
                 }
             }
         }
diff --git a/src/main/java/com/zy/core/thread/impl/ZyStationV3Thread.java b/src/main/java/com/zy/core/thread/impl/ZyStationV3Thread.java
index bb7fbd8..1bf599d 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyStationV3Thread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyStationV3Thread.java
@@ -140,9 +140,11 @@
                     stationProtocol.setFullPlt(statusEntity.isFullPlt());
                     stationProtocol.setPalletHeight(statusEntity.getPalletHeight());
                     stationProtocol.setError(statusEntity.getError());
+                    stationProtocol.setErrorMsg(statusEntity.getErrorMsg());
                     stationProtocol.setBarcode(statusEntity.getBarcode());
                     stationProtocol.setRunBlock(statusEntity.isRunBlock());
                     stationProtocol.setEnableIn(statusEntity.isEnableIn());
+                    stationProtocol.setWeight(statusEntity.getWeight());
                 }
             }
         }
@@ -294,7 +296,7 @@
             List<Integer> segmentEndIndices = new ArrayList<>();
             int idx = 0;
             while (idx < total) {
-                int end = Math.min(idx + 20, total) - 1;
+                int end = Math.min(idx + 3, total) - 1;
                 segmentTargets.add(path.get(end));
                 segmentEndIndices.add(end);
                 idx = end + 1;
@@ -314,22 +316,29 @@
             segCmd.setNavigatePath(new ArrayList<>(path.subList(0, currentEndIdx + 1)));
             sendCommand(segCmd);
 
-            boolean finished = false;
-            while (!finished) {
+            long runTime = System.currentTimeMillis();
+            while (true) {
                 try {
-                    Integer currentStationId = findCurrentStationByTask(original.getTaskNo());
-                    if (currentStationId == null) {
+                    StationProtocol currentStation = findCurrentStationByTask(original.getTaskNo());
+                    if (currentStation == null) {
+                        if(System.currentTimeMillis() - runTime > 1000 * 60){
+                            break;
+                        }
                         Thread.sleep(500);
                         continue;
                     }
-                    int currentIndex = path.indexOf(currentStationId);
+
+                    runTime = System.currentTimeMillis();
+                    if (currentStation.isRunBlock()) {
+                        break;
+                    }
+                    int currentIndex = path.indexOf(currentStation.getStationId());
                     if (currentIndex < 0) {
                         Thread.sleep(500);
                         continue;
                     }
                     int remaining = total - currentIndex - 1;
                     if (remaining <= 0) {
-                        finished = true;
                         break;
                     }
                     int currentSegEndIndex = path.indexOf(segmentTargets.get(segCursor));
@@ -361,7 +370,7 @@
         }
     }
 
-    private Integer findCurrentStationByTask(Integer taskNo) {
+    private StationProtocol findCurrentStationByTask(Integer taskNo) {
         try {
             com.zy.asrs.service.DeviceConfigService deviceConfigService = SpringUtils.getBean(com.zy.asrs.service.DeviceConfigService.class);
             if (deviceConfigService == null) {
@@ -380,7 +389,7 @@
                 }
                 for (StationProtocol sp : m.values()) {
                     if (sp.getTaskNo() != null && sp.getTaskNo().equals(taskNo) && sp.isLoading()) {
-                        return sp.getStationId();
+                        return sp;
                     }
                 }
             }
diff --git a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
index 4a4b2d2..239fd2d 100644
--- a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
@@ -90,11 +90,6 @@
                         continue;
                     }
 
-                    if (!wrkMast.getWrkNo().equals(stationProtocol.getTaskNo())) {
-                        News.taskInfo(stationProtocol.getStationId(), "杈撻�佺珯鐐瑰伐浣滃彿:{}涓庢潯鐮佹悳绱㈠埌鐨勪换鍔″伐浣滃彿:{}涓嶄竴鑷�", stationProtocol.getTaskNo(), wrkMast.getWrkNo());
-                        continue;
-                    }
-
                     String locNo = wrkMast.getLocNo();
                     FindCrnNoResult findCrnNoResult = commonService.findCrnNoByLocNo(locNo);
                     if (findCrnNoResult == null) {
diff --git "a/src/main/resources/docs/\345\234\260\345\233\276\346\223\215\344\275\234\350\257\264\346\230\216\344\271\246.pdf" "b/src/main/resources/docs/\345\234\260\345\233\276\346\223\215\344\275\234\350\257\264\346\230\216\344\271\246.pdf"
new file mode 100644
index 0000000..a6b20f4
--- /dev/null
+++ "b/src/main/resources/docs/\345\234\260\345\233\276\346\223\215\344\275\234\350\257\264\346\230\216\344\271\246.pdf"
Binary files differ
diff --git a/src/main/resources/sql/20251219153026.nb3 b/src/main/resources/sql/20251219153026.nb3
deleted file mode 100644
index 2ef4037..0000000
--- a/src/main/resources/sql/20251219153026.nb3
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/sql/20260109084743.nb3 b/src/main/resources/sql/20260109084743.nb3
new file mode 100644
index 0000000..8d8cdd9
--- /dev/null
+++ b/src/main/resources/sql/20260109084743.nb3
Binary files differ
diff --git a/src/main/webapp/components/DevpCard.js b/src/main/webapp/components/DevpCard.js
index 97b3367..9a4fa5c 100644
--- a/src/main/webapp/components/DevpCard.js
+++ b/src/main/webapp/components/DevpCard.js
@@ -43,10 +43,12 @@
                 <el-descriptions-item label="鍚姩鍏ュ簱">{{ item.enableIn ? 'Y' : 'N' }}</el-descriptions-item>
                 <el-descriptions-item label="鎵樼洏楂樺害">{{ item.palletHeight }}</el-descriptions-item>
                 <el-descriptions-item label="鏉$爜">{{ item.barcode }}</el-descriptions-item>
+                <el-descriptions-item label="閲嶉噺">{{ item.weight }}</el-descriptions-item>
                 <el-descriptions-item label="鏁呴殰浠g爜">{{ item.error }}</el-descriptions-item>
+                <el-descriptions-item label="鏁呴殰淇℃伅">{{ item.errorMsg }}</el-descriptions-item>
                 <el-descriptions-item label="鎵╁睍鏁版嵁">{{ item.extend }}</el-descriptions-item>
             </el-descriptions>
-            </el-collapse-item>
+            </el-collapse-item>                                                   
           </el-collapse>
         </div>
         <div style="display:flex; justify-content:flex-end; margin-top:8px;">
diff --git a/src/main/webapp/components/MapCanvas.js b/src/main/webapp/components/MapCanvas.js
index dc76015..be746ba 100644
--- a/src/main/webapp/components/MapCanvas.js
+++ b/src/main/webapp/components/MapCanvas.js
@@ -539,7 +539,7 @@
         }
         if (status === "site-auto") {
           this.updateColor(sta, 0x78ff81);
-        } else if (status === "site-auto-run" || status === "site-auto-run-id") {
+        } else if (status === "site-auto-run" || status === "site-auto-id" || status === "site-auto-run-id") {
           this.updateColor(sta, 0xfa51f6);
         } else if (status === "site-unauto") {
           this.updateColor(sta, 0xb8b8b8);

--
Gitblit v1.9.1