From 2816415f539ef54839e331657edae7055c243ad8 Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期六, 17 一月 2026 19:27:45 +0800
Subject: [PATCH] agv缓存库位清空和标记功能

---
 src/main/java/com/zy/asrs/service/impl/LocCacheServiceImpl.java |  301 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 301 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/LocCacheServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocCacheServiceImpl.java
index 328e073..d4701c3 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocCacheServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocCacheServiceImpl.java
@@ -17,6 +17,7 @@
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -98,4 +99,304 @@
             return R.error("鍒濆鍖栧け璐�===>" + e.getMessage());
         }
     }
+
+    /**
+     * 閿佸畾/瑙i攣缂撳瓨搴撲綅锛堝鐢ˋGV鎼揣鍚庣殑搴撲綅鏈夎揣閫昏緫锛�
+     * 閿佸畾锛氭弧鎵樿缃负 "F"锛堝湪搴擄級锛岀┖鎵樿缃负 "D"锛堢┖妗�/绌烘爤鏉匡級
+     * 瑙i攣锛氱粺涓�璁剧疆涓� "O"锛堢┖搴撲綅锛�
+     * @param locNo 搴撲綅鍙�
+     * @param lock 鏄惁閿佸畾锛宼rue-閿佸畾锛宖alse-瑙i攣
+     * @param fullPlt 鏄惁婊℃墭锛宼rue-婊℃墭锛堣缃负F锛夛紝false-绌烘墭锛堣缃负D锛夛紝瑙i攣鏃跺拷鐣ユ鍙傛暟
+     * @param userId 鐢ㄦ埛ID
+     * @return 鎿嶄綔缁撴灉
+     */
+    @Override
+    public R lockOrUnlockLocCache(String locNo, Boolean lock, Boolean fullPlt, Long userId) {
+        try {
+            if (Cools.isEmpty(locNo)) {
+                return R.error("搴撲綅鍙蜂笉鑳戒负绌�");
+            }
+
+            // 鏍规嵁搴撲綅鍙锋煡璇㈠簱浣�
+            EntityWrapper<LocCache> wrapper = new EntityWrapper<>();
+            wrapper.eq("loc_no", locNo);
+            LocCache locCache = this.selectOne(wrapper);
+
+            if (Cools.isEmpty(locCache)) {
+                return R.error("搴撲綅涓嶅瓨鍦細" + locNo);
+            }
+
+            // 鏇存柊搴撲綅鐘舵��
+            String locSts;
+            if (lock) {
+                // 閿佸畾锛氭弧鎵樿缃负"F"锛堝湪搴擄級锛岀┖鎵樿缃负"D"锛堢┖妗�/绌烘爤鏉匡級
+                if (fullPlt == null) {
+                    return R.error("閿佸畾鎿嶄綔鏃讹紝婊℃墭鍙傛暟涓嶈兘涓虹┖");
+                }
+                locSts = fullPlt ? "F" : "D";
+                locCache.setFullPlt(fullPlt ? "Y" : "N");
+            } else {
+                // 瑙i攣锛氱粺涓�璁剧疆涓�"O"锛堢┖搴撲綅锛�
+                locSts = "O";
+                locCache.setFullPlt("N");
+            }
+            
+            locCache.setLocSts(locSts);
+            locCache.setModiUser(userId);
+            locCache.setModiTime(new Date());
+
+            boolean success = this.updateById(locCache);
+            if (success) {
+                String action = lock ? "閿佸畾" : "瑙i攣";
+                String detail = lock ? (fullPlt ? "婊℃墭" : "绌烘墭") : "";
+                log.info("{}搴撲綅鎴愬姛锛歿}锛屽簱浣嶇姸鎬侊細{}锛寋}锛屾搷浣滀汉锛歿}", action, locNo, locCache.getLocSts(), detail, userId);
+                return R.ok(action + "鎴愬姛");
+            } else {
+                return R.error("鎿嶄綔澶辫触");
+            }
+        } catch (Exception e) {
+            log.error("閿佸畾/瑙i攣搴撲綅澶辫触", e);
+            return R.error("鎿嶄綔澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    /**
+     * 閿佸畾/瑙i攣褰撳墠鎺掔殑鎵�鏈夊簱浣�
+     * @param locNo 搴撲綅鍙凤紙鐢ㄤ簬鑾峰彇鎺掑彿锛�
+     * @param lock 鏄惁閿佸畾锛宼rue-閿佸畾锛宖alse-瑙i攣
+     * @param userId 鐢ㄦ埛ID
+     * @return 鎿嶄綔缁撴灉
+     */
+    @Override
+    public R lockOrUnlockRowLocCache(String locNo, Boolean lock, Boolean fullPlt, Long userId) {
+        try {
+            if (Cools.isEmpty(locNo)) {
+                return R.error("搴撲綅鍙蜂笉鑳戒负绌�");
+            }
+
+            // 鏍规嵁搴撲綅鍙锋煡璇㈠簱浣嶏紝鑾峰彇鎺掑彿
+            EntityWrapper<LocCache> wrapper = new EntityWrapper<>();
+            wrapper.eq("loc_no", locNo);
+            LocCache locCache = this.selectOne(wrapper);
+
+            if (Cools.isEmpty(locCache)) {
+                return R.error("搴撲綅涓嶅瓨鍦細" + locNo);
+            }
+
+            Integer row = locCache.getRow1();
+            if (Cools.isEmpty(row)) {
+                return R.error("搴撲綅鎺掑彿涓虹┖锛�" + locNo);
+            }
+
+            // 鏌ヨ褰撳墠鎺掔殑1銆�2銆�3鍒楃殑鎵�鏈夊簱浣嶏紙瑙i攣鏁存帓鏃跺彧娓呯┖1銆�2銆�3鍒楋級
+            EntityWrapper<LocCache> rowWrapper = new EntityWrapper<>();
+            rowWrapper.eq("row1", row)
+                    .in("bay1", Arrays.asList(1, 2, 3)); // 鍙煡璇�1銆�2銆�3鍒�
+            // 濡傛灉搴撲綅鏈夊簱鍖篒D锛屼篃鍔犱笂搴撳尯鏉′欢
+            if (!Cools.isEmpty(locCache.getAreaId())) {
+                rowWrapper.eq("area_id", locCache.getAreaId());
+            }
+            List<LocCache> locCacheList = this.selectList(rowWrapper);
+
+            if (Cools.isEmpty(locCacheList)) {
+                return R.error("褰撳墠鎺掓病鏈夋壘鍒板簱浣�");
+            }
+
+            // 鎵归噺鏇存柊搴撲綅鐘舵��
+            Date now = new Date();
+            int successCount = 0;
+            String locSts;
+            if (lock) {
+                // 閿佸畾锛氭弧鎵樿缃负"F"锛堝湪搴擄級锛岀┖鎵樿缃负"D"锛堢┖妗�/绌烘爤鏉匡級
+                if (fullPlt == null) {
+                    return R.error("閿佸畾鎿嶄綔鏃讹紝婊℃墭鍙傛暟涓嶈兘涓虹┖");
+                }
+                locSts = fullPlt ? "F" : "D";
+            } else {
+                // 瑙i攣锛氱粺涓�璁剧疆涓�"O"锛堢┖搴撲綅锛�
+                locSts = "O";
+            }
+            
+            for (LocCache cache : locCacheList) {
+                cache.setLocSts(locSts);
+                if (lock) {
+                    cache.setFullPlt(fullPlt ? "Y" : "N");
+                } else {
+                    cache.setFullPlt("N");
+                }
+                cache.setModiUser(userId);
+                cache.setModiTime(now);
+                if (this.updateById(cache)) {
+                    successCount++;
+                }
+            }
+
+            String action = lock ? "閿佸畾" : "瑙i攣";
+            log.info("{}鎺抺}鎵�鏈夊簱浣嶆垚鍔燂紝鍏眥}涓簱浣嶏紝鎿嶄綔浜猴細{}", action, row, successCount, userId);
+            return R.ok(String.format("%s鎴愬姛锛屽叡澶勭悊 %d 涓簱浣�", action, successCount));
+        } catch (Exception e) {
+            log.error("閿佸畾/瑙i攣鎺掑簱浣嶅け璐�", e);
+            return R.error("鎿嶄綔澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    /**
+     * 閿佸畾/瑙i攣褰撳墠鍒楃殑鎵�鏈夊簱浣�
+     * @param locNo 搴撲綅鍙凤紙鐢ㄤ簬鑾峰彇鍒楀彿bay1锛�
+     * @param lock 鏄惁閿佸畾锛宼rue-閿佸畾锛宖alse-瑙i攣
+     * @param fullPlt 鏄惁婊℃墭锛宼rue-婊℃墭锛堣缃负F锛夛紝false-绌烘墭锛堣缃负D锛夛紝瑙i攣鏃跺拷鐣ユ鍙傛暟
+     * @param userId 鐢ㄦ埛ID
+     * @return 鎿嶄綔缁撴灉
+     */
+    @Override
+    public R lockOrUnlockBayLocCache(String locNo, Boolean lock, Boolean fullPlt, Long userId) {
+        try {
+            if (Cools.isEmpty(locNo)) {
+                return R.error("搴撲綅鍙蜂笉鑳戒负绌�");
+            }
+
+            // 鏍规嵁搴撲綅鍙锋煡璇㈠簱浣嶏紝鑾峰彇鍒楀彿
+            EntityWrapper<LocCache> wrapper = new EntityWrapper<>();
+            wrapper.eq("loc_no", locNo);
+            LocCache locCache = this.selectOne(wrapper);
+
+            if (Cools.isEmpty(locCache)) {
+                return R.error("搴撲綅涓嶅瓨鍦細" + locNo);
+            }
+
+            Integer bay = locCache.getBay1();
+            if (Cools.isEmpty(bay)) {
+                return R.error("搴撲綅鍒楀彿涓虹┖锛�" + locNo);
+            }
+
+            // 鏌ヨ褰撳墠鍒楃殑鎵�鏈夊簱浣�
+            EntityWrapper<LocCache> bayWrapper = new EntityWrapper<>();
+            bayWrapper.eq("bay1", bay);
+            // 濡傛灉搴撲綅鏈夊簱鍖篒D锛屼篃鍔犱笂搴撳尯鏉′欢
+            if (!Cools.isEmpty(locCache.getAreaId())) {
+                bayWrapper.eq("area_id", locCache.getAreaId());
+            }
+            List<LocCache> locCacheList = this.selectList(bayWrapper);
+
+            if (Cools.isEmpty(locCacheList)) {
+                return R.error("褰撳墠鍒楁病鏈夋壘鍒板簱浣�");
+            }
+
+            // 鎵归噺鏇存柊搴撲綅鐘舵��
+            Date now = new Date();
+            int successCount = 0;
+            String locSts;
+            if (lock) {
+                // 閿佸畾锛氭弧鎵樿缃负"F"锛堝湪搴擄級锛岀┖鎵樿缃负"D"锛堢┖妗�/绌烘爤鏉匡級
+                if (fullPlt == null) {
+                    return R.error("閿佸畾鎿嶄綔鏃讹紝婊℃墭鍙傛暟涓嶈兘涓虹┖");
+                }
+                locSts = fullPlt ? "F" : "D";
+            } else {
+                // 瑙i攣锛氱粺涓�璁剧疆涓�"O"锛堢┖搴撲綅锛�
+                locSts = "O";
+            }
+            
+            for (LocCache cache : locCacheList) {
+                cache.setLocSts(locSts);
+                if (lock) {
+                    cache.setFullPlt(fullPlt ? "Y" : "N");
+                } else {
+                    cache.setFullPlt("N");
+                }
+                cache.setModiUser(userId);
+                cache.setModiTime(now);
+                if (this.updateById(cache)) {
+                    successCount++;
+                }
+            }
+
+            String action = lock ? "閿佸畾" : "瑙i攣";
+            log.info("{}鍒梴}鎵�鏈夊簱浣嶆垚鍔燂紝鍏眥}涓簱浣嶏紝鎿嶄綔浜猴細{}", action, bay, successCount, userId);
+            return R.ok(String.format("%s鎴愬姛锛屽叡澶勭悊 %d 涓簱浣�", action, successCount));
+        } catch (Exception e) {
+            log.error("閿佸畾/瑙i攣鍒楀簱浣嶅け璐�", e);
+            return R.error("鎿嶄綔澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    /**
+     * 娓呯┖鏁存帓鐨勬墍鏈夊簱浣嶏紙鎵�鏈夊垪锛�
+     * @param locNo 搴撲綅鍙凤紙鐢ㄤ簬鑾峰彇鎺掑彿row1锛�
+     * @param lock 鏄惁閿佸畾锛宼rue-閿佸畾锛宖alse-瑙i攣锛堟竻绌猴級
+     * @param fullPlt 鏄惁婊℃墭锛宼rue-婊℃墭锛堣缃负F锛夛紝false-绌烘墭锛堣缃负D锛夛紝瑙i攣鏃跺拷鐣ユ鍙傛暟
+     * @param userId 鐢ㄦ埛ID
+     * @return 鎿嶄綔缁撴灉
+     */
+    @Override
+    public R clearAllColumnsInRow(String locNo, Boolean lock, Boolean fullPlt, Long userId) {
+        try {
+            if (Cools.isEmpty(locNo)) {
+                return R.error("搴撲綅鍙蜂笉鑳戒负绌�");
+            }
+
+            // 鏍规嵁搴撲綅鍙锋煡璇㈠簱浣嶏紝鑾峰彇鎺掑彿
+            EntityWrapper<LocCache> wrapper = new EntityWrapper<>();
+            wrapper.eq("loc_no", locNo);
+            LocCache locCache = this.selectOne(wrapper);
+
+            if (Cools.isEmpty(locCache)) {
+                return R.error("搴撲綅涓嶅瓨鍦細" + locNo);
+            }
+
+            Integer row = locCache.getRow1();
+            if (Cools.isEmpty(row)) {
+                return R.error("搴撲綅鎺掑彿涓虹┖锛�" + locNo);
+            }
+
+            // 鏌ヨ褰撳墠鎺掔殑鎵�鏈夊簱浣嶏紙鎵�鏈夊垪锛屼笉闄愬埗bay1锛�
+            EntityWrapper<LocCache> rowWrapper = new EntityWrapper<>();
+            rowWrapper.eq("row1", row);
+            // 濡傛灉搴撲綅鏈夊簱鍖篒D锛屼篃鍔犱笂搴撳尯鏉′欢
+            if (!Cools.isEmpty(locCache.getAreaId())) {
+                rowWrapper.eq("area_id", locCache.getAreaId());
+            }
+            List<LocCache> locCacheList = this.selectList(rowWrapper);
+
+            if (Cools.isEmpty(locCacheList)) {
+                return R.error("褰撳墠鎺掓病鏈夋壘鍒板簱浣�");
+            }
+
+            // 鎵归噺鏇存柊搴撲綅鐘舵��
+            Date now = new Date();
+            int successCount = 0;
+            String locSts;
+            if (lock) {
+                // 閿佸畾锛氭弧鎵樿缃负"F"锛堝湪搴擄級锛岀┖鎵樿缃负"D"锛堢┖妗�/绌烘爤鏉匡級
+                if (fullPlt == null) {
+                    return R.error("閿佸畾鎿嶄綔鏃讹紝婊℃墭鍙傛暟涓嶈兘涓虹┖");
+                }
+                locSts = fullPlt ? "F" : "D";
+            } else {
+                // 瑙i攣锛氱粺涓�璁剧疆涓�"O"锛堢┖搴撲綅锛�
+                locSts = "O";
+            }
+            
+            for (LocCache cache : locCacheList) {
+                cache.setLocSts(locSts);
+                if (lock) {
+                    cache.setFullPlt(fullPlt ? "Y" : "N");
+                } else {
+                    cache.setFullPlt("N");
+                }
+                cache.setModiUser(userId);
+                cache.setModiTime(now);
+                if (this.updateById(cache)) {
+                    successCount++;
+                }
+            }
+
+            String action = lock ? "閿佸畾" : "娓呯┖";
+            log.info("{}鎺抺}鎵�鏈夊簱浣嶏紙鎵�鏈夊垪锛夋垚鍔燂紝鍏眥}涓簱浣嶏紝鎿嶄綔浜猴細{}", action, row, successCount, userId);
+            return R.ok(String.format("%s鎴愬姛锛屽叡澶勭悊 %d 涓簱浣�", action, successCount));
+        } catch (Exception e) {
+            log.error("娓呯┖鏁存帓搴撲綅澶辫触", e);
+            return R.error("鎿嶄綔澶辫触锛�" + e.getMessage());
+        }
+    }
 }

--
Gitblit v1.9.1