From 6246673dd42d9faeab27c1372e3eff6aa58d3f0c Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期日, 18 一月 2026 15:23:29 +0800
Subject: [PATCH] 倾斜度

---
 src/main/java/com/zy/asrs/service/impl/LocCacheServiceImpl.java |  328 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 323 insertions(+), 5 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 7b43fde..d4701c3 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocCacheServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocCacheServiceImpl.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.core.common.Cools;
 import com.core.common.R;
+import com.core.common.SnowflakeIdWorker;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.BasAreas;
 import com.zy.asrs.entity.LocCache;
@@ -16,6 +17,7 @@
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -26,6 +28,9 @@
 
     @Autowired
     private BasAreasService basAreasService;
+    
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
 
     /**
      * @author Ryan
@@ -45,15 +50,16 @@
                 for (int b = param.getStartBay(); b <= param.getEndBay(); b++) {
                     for (int l = param.getStartLev(); l <= param.getEndLev(); l++) {
                         // 鑾峰彇搴撲綅鍙�
-                        String locNo = String.format("CA") + String.format("%02d", r) + String.format("%03d", b) + String.format("%02d", l);
+                        String locNo = areas.getAreaNo() + String.format("%02d", r) + String.format("%03d", b) + String.format("%02d", l);
                         Date now = new Date();
                         LocCache locMast = new LocCache();
+                        // 鎵嬪姩鐢熸垚ID
+                        locMast.setId(snowflakeIdWorker.nextId());
                         locMast.setLocNo(locNo);
                         locMast.setLocSts("O");
                         locMast.setRow1(r); // 鎺�
                         locMast.setBay1(b); // 鍒�
                         locMast.setLev1(l); // 灞�
-                        locMast.setId(null);
                         locMast.setLocType1(!Cools.isEmpty(param.getLocType1()) ? param.getLocType1() : 1);
                         locMast.setLocType2(param.getLocType2());
                         locMast.setLocType3(param.getLocType3());
@@ -73,12 +79,324 @@
                 }
             }
 
-            if (!this.insertBatch(list)) {
-                throw new CoolException("娣诲姞澶辫触锛侊紒");
+            // SQL Server 鎵归噺鎻掑叆鑾峰彇鐢熸垚閿彲鑳藉け璐ワ紝鏀圭敤寰幆鍗曟潯鎻掑叆纭繚鎵�鏈夎褰曢兘鑳芥垚鍔熸彃鍏�
+            int successCount = 0;
+            for (LocCache locCache : list) {
+                if (this.insert(locCache)) {
+                    successCount++;
+                } else {
+                    log.error("鎻掑叆搴撲綅澶辫触: {}", locCache.getLocNo());
+                }
             }
-            return R.ok("鍒濆鍖栨垚鍔�");
+            
+            if (successCount != list.size()) {
+                throw new CoolException(String.format("娣诲姞澶辫触锛佹垚鍔熸彃鍏� %d 鏉★紝搴旀彃鍏� %d 鏉�", successCount, list.size()));
+            }
+            
+            return R.ok("鍒濆鍖栨垚鍔燂紝鍏辨彃鍏� " + successCount + " 鏉¤褰�");
         } catch (Exception e) {
+            log.error("鍒濆鍖栧簱浣嶅け璐�", e);
             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