From 469d8ceb95ed82f09fd4c1bddbbe672689bc8d82 Mon Sep 17 00:00:00 2001
From: zhangc <zc@123>
Date: 星期三, 09 四月 2025 19:52:22 +0800
Subject: [PATCH] 1

---
 src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java |  209 +++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 191 insertions(+), 18 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
index 48d963c..812886a 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -168,8 +168,8 @@
                             locDto.getCsocode(),
                             locDto.getIsoseq(),
                             locDto.getProcessSts());
-                    OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
-                    AgvLocDetl locDetl = agvLocDetlService.selectItem(wrkMast.getSourceLocNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
+                    //OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
+                    // AgvLocDetl locDetl = agvLocDetlService.selectItem(wrkMast.getSourceLocNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getCsocode(), locDto.getIsoseq());
                     // 娴佹按 -- 鏂板璁㈠崟鏄庣粏
 //                    FlowLog flowLog = new FlowLog();
 //                    flowLog.setFid(String.valueOf(flowId));
@@ -227,7 +227,9 @@
             updateAgvLocMast(agvLocMastService.selectById(sourceLocNo), locSts);
             //鏇存柊鐩爣绔欑偣鐘舵��
             //locSts = ioType == 101 ? "S" : "Q";
-            updateAgvBasDevp(agvBasDevpService.selectById(targetLocNo), "S");
+            AgvBasDevp agvBasDevp = agvBasDevpService.selectById(targetLocNo);
+            agvBasDevp.setBarcode("");
+            updateAgvBasDevp(agvBasDevp, "S");
 
         });
     }
@@ -742,7 +744,7 @@
 //                }
 //            }
             // 棰勭暀20涓簱浣�
-            agvLocMast = agvCommonService.getLocByLocRule20(3, 1, code,false);
+            agvLocMast = agvCommonService.getLocByLocRule20(3, 1, code, false);
 
 
             String devNo = agvBasDevp.getDevNo();
@@ -750,14 +752,169 @@
             String ctnNo = null;
             // 鎵撴爣璁帮紝鑻ュ簱浣嶄笉澶燂紝鍏ュ簱鍒板埆鐨勬ゼ灞傦紝閭d箞闇�瑕佽法灞傜Щ搴�
             if (!Cools.isEmpty(code)) {
-                if (agvLocMast.getLev1() == 1 && !code.equals(AsrsConstants.SANCHANG)) {
-                    ctnNo = "1";
-                } else if (agvLocMast.getLev1() == 2 && !code.equals(AsrsConstants.ERCHANG)) {
+                if (agvLocMast.getLev1() == 1 && code.equals(AsrsConstants.ERCHANG)) {
+                    ctnNo = "2";
+                } else if (agvLocMast.getLev1() == 2 && code.equals(AsrsConstants.SANCHANG)) {
                     ctnNo = "1";
                 }
             }
             //鐢熸垚宸ヤ綔妗�
             AgvWrkMast wrkMast = createWrkMastV2(1, 201L, devNo, locNo, containerCode, now, userId, containerType, agvLocMast.getPltType(), ctnNo);
+            //鐢熸垚宸ヤ綔妗f槑缁�
+            long flowId = snowflakeIdWorker.nextId();
+            agvWaitPakinList.forEach(wp -> {
+                createWrkDetlReWrite(wp.getMatnr(), wrkMast.getWrkNo(), wp.getOrderNo(), wp.getBatch(), wp.getAnfme(), wp.getSuppCode(), now, userId, wp.getThreeCode(), wp.getDeadTime(), wp.getProcessSts());
+            });
+            //淇敼鍏ュ簱閫氱煡妗g姸鎬�
+            agvWaitPakinService.updateIoStatus(containerCode, "Y");
+            //鏇存柊婧愮珯鐐圭姸鎬�
+            updateAgvBasDevp(agvBasDevp, "R", containerType);
+        } else {
+            //鏌ヨ宸ヤ綔妗�
+            AgvWrkMast agvWrkMast1 = agvWrkMastService.selectByContainerCode(containerCode);
+            if (!Cools.isEmpty(agvWrkMast1)) {
+                throw new CoolException("褰撳墠璐ф灦宸叉湁鍏ュ簱浠诲姟锛屾棤娉曡繘琛屽叆搴�");
+            }
+            agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), true, true);
+            // 鐢熸垚宸ヤ綔妗� 10.绌烘澘鍏ュ簱
+            createWrkMast(10, 201L, agvBasDevp.getDevNo(), agvLocMast.getLocNo(), containerCode, now, userId, containerType, agvLocMast.getPltType());
+            //鏇存柊婧愮珯鐐圭姸鎬�
+            updateAgvBasDevp(agvBasDevp, "R", containerType, containerCode);
+        }
+
+        //鏇存柊鐩爣搴撲綅鐘舵�佸拰淇℃伅
+        updateAgvLocMast(agvLocMast, "S");
+        return agvLocMast.getLocNo();
+    }
+
+    /*
+  鍏ュ簱
+   */
+    @Transactional
+    public String emptyPlateInV3(String station, String containerCode, Short containerType, Long userId, boolean emptyAutoIn) {
+
+        Date now = new Date();
+
+        Short locType = 0;
+
+        AgvBasDevp agvBasDevp = agvBasDevpService.selectById(station);
+        if (Cools.isEmpty(agvBasDevp)) {
+            throw new CoolException("鏆傛棤" + station + "绔欑偣");
+        }
+        int br = 0;
+        if (containerType == 21 && agvBasDevp.getFloor() == 2) {
+            containerType = 20;
+        }
+        switch (containerType) {
+            case 10:
+                br = 1;
+                break;
+            case 20:
+                br = 2;
+                break;
+            case 21:
+                br = 4;
+                break;
+            case 30:
+                br = 3;
+                break;
+            case 31:
+                br = 6;
+                break;
+            case 40:
+                br = 5;
+                break;
+        }
+        if (br == 4 && agvBasDevp.getLocType1() == 2) {
+            br = 2;
+        }
+        if (agvBasDevp.getLocType1() != br) {
+            throw new CoolException("绔欑偣绫诲瀷鍜岃揣鏋剁被鍨嬩笉绗︼紒");
+        }
+        AtomicReference<String> factory = new AtomicReference<>();
+        if (containerType == 40) {
+            locType = 5;
+        } else if (containerType == 21 && agvBasDevp.getFloor() == 3) {
+            locType = 4;
+        } else if (containerType == 20 && agvBasDevp.getFloor() == 3) {
+            locType = 2;
+        } else if (containerType == 30) {
+            locType = 3;
+        } else if (containerType == 31) {
+            locType = 6;
+        } else {
+            locType = agvBasDevp.getLocType1();
+        }
+
+        if (!Cools.eq(agvBasDevp.getBarcode(), containerCode) && !agvBasDevp.getLocSts().equals("O") && !emptyAutoIn) {
+            throw new CoolException("褰撳墠宸ヤ綔浣嶇姸鎬佷负" + agvBasDevp.getLocSts() + ",鏃犳硶杩涜鍏ュ簱");
+        }
+
+        //鏌ヨ宸ヤ綔妗�
+        AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(containerCode);
+        if (!Cools.isEmpty(agvWrkMast) && !emptyAutoIn) {
+            throw new CoolException("褰撳墠璐ф灦宸叉湁鍏ュ簱浠诲姟锛屾棤娉曡繘琛屽叆搴�");
+        }
+
+        //妫�绱㈠簱浣嶏紝閫夋嫨鍚堥�傜殑搴撲綅
+        AgvLocMast agvLocMast = new AgvLocMast();
+
+        //鏌ヨ搴撳瓨
+        AgvLocMast locMast = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("barcode", containerCode));
+        if (!Cools.isEmpty(locMast)) {
+            throw new CoolException("褰撳墠璐ф灦宸插湪搴撳瓨涓紝鏃犳硶杩涜鍏ュ簱");
+        }
+
+        //鏌ヨ鍏ュ簱閫氱煡妗�
+        List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectByContainerCode(containerCode);
+        if (!Cools.isEmpty(agvWaitPakinList)) {
+            AtomicBoolean isCurrLev = new AtomicBoolean(false);
+            agvWaitPakinList.forEach(agvWaitPakin -> {
+                factory.set(OrderUtils.getFactory(agvWaitPakin.getThreeCode()));
+                if (!Cools.isEmpty(agvWaitPakin.getProcessSts())) {
+                    if (agvWaitPakin.getProcessSts() == 1) {
+                        isCurrLev.set(true);
+                    }
+                }
+            });
+
+
+            Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "elevatorTasks"));
+            if (Cools.isEmpty(config)) {
+                if (isCurrLev.get()) {
+                    agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
+                } else {
+                    agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false);
+                }
+            } else {
+                if (station.endsWith("F4") && locType == 3) {
+                    agvLocMast = agvCommonService.getLocNoOnXiSuer(locType, 1);
+                } else if (locType == 6) {
+                    agvLocMast = agvCommonService.getLocNoOnXiSuer20(locType, 1);
+                } else {
+                    List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().like("loc_no", "02F1").like("source_loc_no", "F1"));
+                    if (Integer.parseInt(config.getValue()) <= agvWrkMasts.size()) {
+                        agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
+                    } else {
+                        if (isCurrLev.get()) {
+                            agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
+                        } else {
+                            agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false);
+                        }
+                        //agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor(),false,false);
+                    }
+                }
+            }
+            if (agvLocMast == null) {
+                throw new CoolException("娌℃湁璇ョ被鍨嬬殑绌哄簱浣嶄簡");
+            }
+
+            String devNo = agvBasDevp.getDevNo();
+            String locNo = agvLocMast.getLocNo();
+
+
+            //鐢熸垚宸ヤ綔妗�
+            AgvWrkMast wrkMast = createWrkMast(1, 201L, devNo, locNo, containerCode, now, userId, containerType, agvLocMast.getPltType());
             //鐢熸垚宸ヤ綔妗f槑缁�
             long flowId = snowflakeIdWorker.nextId();
             agvWaitPakinList.forEach(wp -> {
@@ -804,18 +961,23 @@
         if (!Cools.isEmpty(agvWrkMast)) {
             throw new CoolException("鏈夎揣鏋跺湪寰�绔欑偣鎼繍" + agvBasDevp.getDevNo() + ",鏃犳硶杩涜绌烘澘鍑哄簱");
         }
+        AgvLocMast agvLocMast = null;
+        if (station.startsWith("XI") && station.endsWith("F4") && containerType == 30) {
+            agvLocMast = agvLocMastService.select30EmptyZpallet();
+        } else {
+            //瀵绘壘鐩稿簲绫诲瀷鐨勭┖璐ф灦
+            Integer floor = agvBasDevp.getFloor();
+            if (floor == 4) {
+                floor = 1;
+            }
+            agvLocMast = agvLocMastService.selectEmptyZpallet(containerType, floor);
+            if (containerType == 0) {
+                //绌烘澘鑷姩鍑哄簱锛屾牴鎹珯鐐圭被鍨嬮�夋嫨
+                agvLocMastService.selectEmptyZpalletByLocType1(agvBasDevp.getLocType1());
 
-        //瀵绘壘鐩稿簲绫诲瀷鐨勭┖璐ф灦
-        Integer floor = agvBasDevp.getFloor();
-        if (floor == 4) {
-            floor = 1;
+            }
         }
-        AgvLocMast agvLocMast = agvLocMastService.selectEmptyZpallet(containerType, floor);
-        if (containerType == 0) {
-            //绌烘澘鑷姩鍑哄簱锛屾牴鎹珯鐐圭被鍨嬮�夋嫨
-            agvLocMastService.selectEmptyZpalletByLocType1(agvBasDevp.getLocType1());
 
-        }
 
         if (Cools.isEmpty(agvLocMast)) {
             throw new CoolException("鏆傛棤褰撳墠鍑哄簱绔欑偣绫诲瀷鐨勭┖璐ф灦锛�");
@@ -846,7 +1008,7 @@
         List<AgvLocDetl> locDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", param.getLocNo()));
 
         List<LocDetlAdjustParam.LocDetlAdjust> list = param.getList();
-
+        String barcode = null;
         // 淇敼鏁伴噺
         Iterator<AgvLocDetl> iterator = locDetls.iterator();
         while (iterator.hasNext()) {
@@ -933,6 +1095,7 @@
             locDetl.setThreeCode(adjust.getThreeCode());
             locDetl.setDeadTime(adjust.getDeadTime());
             locDetl.setSuppCode(adjust.getSuppCode());
+            barcode = adjust.getSuppCode();
             if (!agvLocDetlService.insert(locDetl)) {
                 throw new CoolException("娣诲姞" + locDetl.getLocNo() + "搴撲綅锛�" + locDetl.getMatnr() + "鍟嗗搧锛�" + locDetl.getBatch() + "搴忓垪鐮佸簱瀛樻槑缁嗗け璐�");
             }
@@ -965,6 +1128,7 @@
         if (locMast.getLocSts().equals("D") || locMast.getLocSts().equals("O")) {
             if (count > 0) {
                 locMast.setLocSts("F");
+                locMast.setBarcode(barcode);
             }
         }
         locMast.setModiUser(userId);
@@ -1190,6 +1354,9 @@
                 if (wrkMast.getIoType() == 112) {
                     throw new CoolException("褰撳墠浣滀笟涓嶈兘鍙栨秷锛�");
                 }
+                if (wrkMast.getIoType() == 108 && wrkMast.getWrkSts() >= 204) {
+                    throw new CoolException("婧愬簱浣嶅凡缁忛噴鏀撅紝褰撳墠浣滀笟涓嶈兘鍙栨秷锛�");
+                }
                 // 婧愬簱浣�
                 String locNo = wrkMast.getSourceLocNo();
                 // 鐩爣搴撲綅
@@ -1252,6 +1419,9 @@
 
                 // 鍥炴祦鍗曞彇娑�
             } else if (wrkMast.getIoType() == 114) {
+                if (wrkMast.getWrkSts() >= 204) {
+                    throw new CoolException("婧愬簱浣嶅凡缁忛噴鏀撅紝褰撳墠浣滀笟涓嶈兘鍙栨秷锛�");
+                }
                 //婧愬簱浣�
                 String locNo = wrkMast.getSourceLocNo();
                 // 鐩爣搴撲綅
@@ -1423,7 +1593,10 @@
         }
         OrderDetl orderDetl = orderDetlService.selectItem(orderNo, mat.getMatnr(), batch, csocode);
         if (orderDetl == null) {
-            throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�");
+            orderDetl = orderDetlService.selectItem(orderNo, mat.getMatnr(), null, csocode);
+            if (orderDetl == null) {
+                throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�");
+            }
         }
         AgvWrkDetl wrkDetl = new AgvWrkDetl();
         wrkDetl.sync(mat);

--
Gitblit v1.9.1