From 5a2bd164d3a831e39bf0defaddf181a97de36993 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期日, 05 四月 2026 23:28:42 +0800
Subject: [PATCH] #缓存数据清理

---
 src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java        |   34 +++++++++++++++++
 src/main/java/com/zy/asrs/controller/StationController.java         |   23 +++++++++++
 src/main/java/com/zy/core/thread/StationThread.java                 |    4 ++
 src/main/webapp/components/DevpCard.js                              |   13 +++++-
 src/main/java/com/zy/asrs/domain/param/StationCommandMoveParam.java |    3 +
 5 files changed, 75 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/StationController.java b/src/main/java/com/zy/asrs/controller/StationController.java
index 9f2dff7..cecae35 100644
--- a/src/main/java/com/zy/asrs/controller/StationController.java
+++ b/src/main/java/com/zy/asrs/controller/StationController.java
@@ -166,6 +166,29 @@
         return R.ok("娓呯悊璺緞鎴愬姛");
     }
 
+    @PostMapping("/command/clearPathBySlot")
+    public R commandClearPathBySlot(@RequestBody StationCommandMoveParam param) {
+        if (param == null || Cools.isEmpty(param.getStationId()) || param.getSlotIdx() == null) {
+            return R.error("缂哄皯鍙傛暟");
+        }
+
+        StationObjModel finalStation = findStation(param.getStationId());
+        if (finalStation == null) {
+            return R.error("绔欑偣涓嶅瓨鍦�");
+        }
+
+        StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, finalStation.getDeviceNo());
+        if (stationThread == null) {
+            return R.error("绾跨▼涓嶅瓨鍦�");
+        }
+
+        boolean cleared = stationThread.clearPathByStationSlot(param.getStationId(), param.getSlotIdx());
+        if (!cleared) {
+            return R.error("鏈尮閰嶅埌鍙竻鐞嗘Ы浣嶆垨娓呯悊澶辫触");
+        }
+        return R.ok("娓呯悊璺緞鎴愬姛");
+    }
+
     private StationObjModel findStation(Integer stationId) {
         if (Cools.isEmpty(stationId)) {
             return null;
diff --git a/src/main/java/com/zy/asrs/domain/param/StationCommandMoveParam.java b/src/main/java/com/zy/asrs/domain/param/StationCommandMoveParam.java
index 6a9844e..1d1ac2d 100644
--- a/src/main/java/com/zy/asrs/domain/param/StationCommandMoveParam.java
+++ b/src/main/java/com/zy/asrs/domain/param/StationCommandMoveParam.java
@@ -14,4 +14,7 @@
     // 浠诲姟缂栧彿
     private Integer taskNo;
 
+    // 缂撳瓨鍖烘Ы浣嶇紪鍙�
+    private Integer slotIdx;
+
 }
diff --git a/src/main/java/com/zy/core/thread/StationThread.java b/src/main/java/com/zy/core/thread/StationThread.java
index 3586470..9193988 100644
--- a/src/main/java/com/zy/core/thread/StationThread.java
+++ b/src/main/java/com/zy/core/thread/StationThread.java
@@ -46,6 +46,10 @@
 
     boolean clearPath(Integer taskNo);
 
+    default boolean clearPathByStationSlot(Integer stationId, Integer slotIdx) {
+        return false;
+    }
+
     CommandResponse sendCommand(StationCommand command);
 
     CommandResponse sendOriginCommand(String address, short[] data);
diff --git a/src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java b/src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java
index 23dadc4..04f30fe 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyStationV5Thread.java
@@ -306,6 +306,40 @@
     }
 
     @Override
+    public boolean clearPathByStationSlot(Integer stationId, Integer slotIdx) {
+        if (stationId == null || slotIdx == null || zyStationConnectDriver == null) {
+            return false;
+        }
+        List<StationProtocol> status = getStatus();
+        if (status == null || status.isEmpty()) {
+            return false;
+        }
+
+        for (StationProtocol stationProtocol : status) {
+            if (stationProtocol == null || !Objects.equals(stationId, stationProtocol.getStationId())) {
+                continue;
+            }
+            if (!zyStationConnectDriver.clearTaskBufferSlot(stationId, slotIdx)) {
+                log.warn("杈撻�佺珯缂撳瓨鍖烘畫鐣欒矾寰勬寜绔欑偣妲戒綅娓呯悊澶辫触銆俿tationId={}, slotIdx={}", stationId, slotIdx);
+                return false;
+            }
+            List<StationTaskBufferItem> taskBufferItems = stationProtocol.getTaskBufferItems();
+            if (taskBufferItems != null) {
+                for (StationTaskBufferItem item : taskBufferItems) {
+                    if (item != null && Objects.equals(slotIdx, item.getSlotIdx())) {
+                        item.setTaskNo(0);
+                        item.setTargetStaNo(0);
+                        break;
+                    }
+                }
+            }
+            log.warn("杈撻�佺珯缂撳瓨鍖烘畫鐣欒矾寰勬寜绔欑偣妲戒綅娓呯悊鎴愬姛銆俿tationId={}, slotIdx={}", stationId, slotIdx);
+            return true;
+        }
+        return false;
+    }
+
+    @Override
     public CommandResponse sendCommand(StationCommand command) {
         CommandResponse commandResponse = null;
         try {
diff --git a/src/main/webapp/components/DevpCard.js b/src/main/webapp/components/DevpCard.js
index d9eb322..94deb26 100644
--- a/src/main/webapp/components/DevpCard.js
+++ b/src/main/webapp/components/DevpCard.js
@@ -27,13 +27,18 @@
             <span class="mc-field-label">宸ヤ綔鍙�</span>
             <input class="mc-input" v-model="controlParam.taskNo" placeholder="杈撳叆宸ヤ綔鍙�" />
           </label>
+          <label class="mc-field">
+            <span class="mc-field-label">slotIdx</span>
+            <input class="mc-input" v-model="controlParam.slotIdx" placeholder="杈撳叆缂撳瓨绱㈠紩" />
+          </label>
           <label class="mc-field mc-span-2">
             <span class="mc-field-label">鐩爣绔�</span>
             <input class="mc-input" v-model="controlParam.targetStationId" placeholder="杈撳叆鐩爣绔欏彿" />
           </label>
           <div class="mc-action-row">
             <button type="button" class="mc-btn" @click="controlCommand">涓嬪彂</button>
-            <button type="button" class="mc-btn mc-btn-soft" @click="clearPathCommand">娓呰矾寰�</button>
+            <button type="button" class="mc-btn mc-btn-soft" @click="clearPathByTaskNoCommand">宸ヤ綔鍙锋竻璺緞</button>
+            <button type="button" class="mc-btn mc-btn-soft" @click="clearPathBySlotCommand">绔欑偣娓呰矾寰�</button>
             <button type="button" class="mc-btn mc-btn-soft" @click="resetCommand">澶嶄綅</button>
             <button type="button" class="mc-btn mc-btn-ghost" @click="openStationTracePage">杩愯杞ㄨ抗</button>
             <button v-if="showFakeTraceEntry" type="button" class="mc-btn mc-btn-ghost" @click="openFakeTracePage">浠跨湡杞ㄨ抗</button>
@@ -115,6 +120,7 @@
       controlParam: {
         stationId: "",
         taskNo: "",
+        slotIdx: "",
         targetStationId: ""
       },
       barcodePreviewCache: {},
@@ -495,9 +501,12 @@
     controlCommand: function () {
       this.postControl("/station/command/move", this.controlParam);
     },
-    clearPathCommand: function () {
+    clearPathByTaskNoCommand: function () {
       this.postControl("/station/command/clearPath", this.controlParam);
     },
+    clearPathBySlotCommand: function () {
+      this.postControl("/station/command/clearPathBySlot", this.controlParam);
+    },
     resetCommand: function () {
       this.postControl("/station/command/reset", this.controlParam);
     }

--
Gitblit v1.9.1