From d29d31dd75443280da87714b1c9480487dd35603 Mon Sep 17 00:00:00 2001
From: Junjie <DELL@qq.com>
Date: 星期四, 25 十二月 2025 10:18:10 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  365 ++++++++++++++++++++++++++++++---------------------
 1 files changed, 214 insertions(+), 151 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 720fa24..884f484 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -411,6 +411,11 @@
                         }
 
                         if (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57) {
+                            if (wrkMast.getWrkSts() != 2) {
+                                News.error("" + mark + " - 3" + " - 鎷i�夌洏鐐瑰洖搴撳伐浣滄。鐘舵�佸紓甯革紒锛侊紒 [plc缂栧彿锛歿}]", devp.getId());
+                                continue;
+                            }
+
                             LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
                             // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
                             staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
@@ -466,10 +471,27 @@
                                     .doPost();
                             JSONObject jsonObject = JSON.parseObject(response);
                             if (jsonObject.getInteger("code").equals(200)) {
-                                LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+                                WrkMast newWrkMast = wrkMastMapper.selectPakInStepBarcode(wrkMast.getBarcode());
+                                if (newWrkMast == null) {
+                                    // 鏃犳嫞鏂欐暟鎹�
+                                    News.error("" + mark + " - 3" + " - 鎷i�夌洏鐐瑰洖搴撹幏鍙栧伐浣滄。澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
+                                    continue;
+                                }
+
+                                if(newWrkMast.getWrkSts() != 53 && newWrkMast.getWrkSts() != 57) {
+                                    News.error("" + mark + " - 3" + " - 鎷i�夌洏鐐瑰洖搴撳伐浣滄。绫诲瀷寮傚父锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
+                                    continue;
+                                }
+
+                                if (wrkMast.getWrkSts() != 2) {
+                                    News.error("" + mark + " - 3" + " - 鎷i�夌洏鐐瑰洖搴撳伐浣滄。鐘舵�佸紓甯革紒锛侊紒 [plc缂栧彿锛歿}]", devp.getId());
+                                    continue;
+                                }
+
+                                LocMast locMast = locMastService.selectById(newWrkMast.getLocNo());
                                 // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
-                                staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
-                                staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                                staProtocol.setWorkNo(newWrkMast.getWrkNo().shortValue());
+                                staProtocol.setStaNo(newWrkMast.getStaNo().shortValue());
                                 staProtocol.setPalletSize(locMast.getLocType2());
                                 devpThread.setPakMk(staProtocol.getSiteId(), false);
                                 boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
@@ -2442,167 +2464,208 @@
     }
 
     /**
-     * 鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堢珛鍗虫墽琛岀増)
+     * 鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆
      * tip锛氬悓姝�
      */
     private synchronized boolean moveLocForDeepLoc(CrnSlave crn, CrnProtocol crnProtocol, LocMast shallowLoc, Integer mark) {
+        Object lock = redisUtil.get(RedisConstantType.TRANSFER_LOCK + shallowLoc.getLocNo());
+        if (lock != null) {
+            return false;
+        }
+
+        redisUtil.set(RedisConstantType.TRANSFER_LOCK + shallowLoc.getLocNo(), "lock", 15);
         try {
-            News.warnNoLog("" + mark + "moveLocForDeepLoc" + " - 0" + " - 寮�濮嬫墽琛�:鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堢珛鍗虫墽琛岀増)");
-            List<Integer> rows = locMastService.queryDistinctRow(crn.getId());
-            LocMast loc = null;
-            for (Integer row : rows) {
-                if (Utils.isDeepLoc(slaveProperties, row)) {
-                    loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
-                    if (loc != null) {
-                        if (crn.getId() == 1) {
-                            if (Utils.getLaneByLocNo(loc.getLocNo()) != crnProtocol.getCrnLane()) {
-                                continue;
-                            }
-                        }
-
-                        if (Utils.isDeepLoc(slaveProperties, loc.getLocNo())) {
-                            String shallowLocNo = Utils.getShallowLoc(slaveProperties, loc.getLocNo());
-                            LocMast shallowLoc1 = locMastService.selectById(shallowLocNo);
-                            if (!shallowLoc1.getLocSts().equals("O")) {
-                                loc = null;
-                            }
-                        }
-                    }
-                    if (null != loc) {
-                        break;
-                    }
-                }
-            }
-            if (null == loc) {
-                for (Integer row : rows) {
-                    if (Utils.isShallowLoc(slaveProperties, row)) {
-                        loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
-
-                        if (null != loc) {//瀵瑰簲娣卞簱浣嶉潪鍦ㄥ簱鐘舵��,涓嶈兘绉诲簱
-                            if (crn.getId() == 1) {
-                                if (Utils.getLaneByLocNo(loc.getLocNo()) != crnProtocol.getCrnLane()) {
-                                    continue;
-                                }
-                            }
-
-                            String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo());
-                            LocMast deepLoc1 = locMastService.selectById(deepLoc);
-                            if (!deepLoc1.getLocSts().equals("F") && !deepLoc1.getLocSts().equals("D")) {
-                                loc = null;
-                            }
-                        }
-
-                        if (null != loc) {
-                            break;
-                        }
-                    }
-                }
+            int lane = 0;
+            if (crnProtocol.getCrnNo() == 1) {
+                lane = crnProtocol.getCrnLane();
             }
 
-            if (null == loc) {
-                News.error("" + mark + "moveLocForDeepLoc" + " - 1" + " - 鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
-                return false;
-//                throw new CoolException("鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+            HashMap<String, Object> requestParam = new HashMap<>();
+            requestParam.put("locNo", shallowLoc.getLocNo());
+            requestParam.put("lane", lane);
+
+            String response = new HttpHandler.Builder()
+                    .setUri(wmsUrl)
+                    .setPath("/rpc/transfer/loc/v1")
+                    .setJson(JSON.toJSONString(requestParam))
+                    .build()
+                    .doPost();
+            JSONObject jsonObject = JSON.parseObject(response);
+            if (jsonObject.getInteger("code").equals(200)) {
+                News.error("" + mark + " - 5" + " - 璇锋眰绉诲簱鎺ュ彛鎴愬姛锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/transfer/loc/v1", JSON.toJSONString(requestParam), response);
+                return true;
             } else {
-                String deepLoc2 = Utils.getDeepLoc2(slaveProperties, loc.getLocNo());
-                if (deepLoc2 != null) {
-                    LocMast locnew = locMastService.selectById(deepLoc2);
-                    if (locnew != null && locnew.getLocSts().equals("O")) {
-                        loc = locnew;
-                    }
-                }
-
-
-                try {
-                    // 鑾峰彇宸ヤ綔鍙�
-                    int workNo = commonService.getWorkNo(0);
-                    // 淇濆瓨宸ヤ綔妗�
-                    WrkMast wrkMast = new WrkMast();
-                    wrkMast.setWrkNo(workNo);
-                    wrkMast.setIoTime(new Date());
-                    wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
-                    wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇
-                    wrkMast.setIoPri(13D);
-                    wrkMast.setCrnNo(crn.getId());
-                    wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 婧愬簱浣�
-                    wrkMast.setLocNo(loc.getLocNo()); // 鐩爣搴撲綅
-//                    wrkMast.setFullPlt(shallowLoc.getFullPlt()); // 婊℃澘
-                    wrkMast.setFullPlt(shallowLoc.getLocSts().equals("D") ? "N" : "Y"); // 婊℃澘
-                    wrkMast.setPicking("N"); // 鎷f枡
-                    wrkMast.setExitMk("N"); // 閫�鍑�
-                    wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 绌烘澘
-                    wrkMast.setBarcode(shallowLoc.getBarcode()); // 鎵樼洏鐮�
-                    wrkMast.setLinkMis("N");
-                    wrkMast.setAppeTime(new Date());
-                    wrkMast.setModiTime(new Date());
-                    int res = wrkMastMapper.insert(wrkMast);
-                    if (res == 0) {
-                        News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 2" + " - 淇濆瓨宸ヤ綔妗eけ璐�");
-//                        throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
-                        return true;
-                    }
-                    // 宸ヤ綔妗f槑缁嗕繚瀛�
-                    if (shallowLoc.getLocSts().equals("F")) {
-                        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", shallowLoc.getLocNo()));
-
-                        for (LocDetl locDetl : locDetls) {
-                            WrkDetl wrkDetl = new WrkDetl();
-                            wrkDetl.sync(locDetl);
-                            wrkDetl.setWrkNo(workNo);
-                            wrkDetl.setIoTime(new Date());
-                            wrkDetl.setAnfme(locDetl.getAnfme());
-//                            VersionUtils.setWrkDetl(wrkDetl, locDetl); // 鐗堟湰鎺у埗
-                            wrkDetl.setAppeTime(new Date());
-                            wrkDetl.setModiTime(new Date());
-                            if (!wrkDetlService.insert(wrkDetl)) {
-                                News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 3" + " - 淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
-//                                throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
-                                return true;
-                            }
-                        }
-                    }
-                    // 淇敼婧愬簱浣嶇姸鎬�
-                    if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) {
-                        shallowLoc.setLocSts("R"); // R.鍑哄簱棰勭害
-                        shallowLoc.setModiTime(new Date());
-                        if (!locMastService.updateById(shallowLoc)) {
-                            News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 4" + " - 鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
-//                            throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
-                            return true;
-                        }
-                    } else {
-                        News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 5" + " - 婧愬簱浣嶅嚭搴撳け璐�");
-//                        throw new CoolException("婧愬簱浣嶅嚭搴撳け璐�");
-                        return true;
-                    }
-                    // 淇敼鐩爣搴撲綅鐘舵��
-                    if (loc.getLocSts().equals("O")) {
-                        loc.setLocSts("S"); // S.鍏ュ簱棰勭害
-                        loc.setModiTime(new Date());
-                        if (!locMastService.updateById(loc)) {
-                            News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 6" + " - 鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
-//                            throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
-                            return true;
-                        }
-                    } else {
-                        News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 7" + " - 绉昏浆澶辫触");
-//                        throw new CoolException("绉昏浆澶辫触");
-                        return true;
-                    }
-                } catch (Exception e) {
-                    News.error("" + mark + "moveLocForDeepLoc" + " - 8" + " - 鍙屾繁搴撲綅闃诲锛屽娴呭簱浣嶈繘琛岀Щ杞け璐�", e);
-                }
+                News.error("" + mark + " - 5" + " - 璇锋眰绉诲簱鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/transfer/loc/v1", JSON.toJSONString(requestParam), response);
             }
-
 
         } catch (Exception e) {
-            News.error("" + mark + "moveLocForDeepLoc" + " - 8" + " - 鍙屾繁搴撲綅闃诲锛屽娴呭簱浣嶈繘琛岀Щ杞け璐�", e);
-//            e.printStackTrace();
-//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            e.printStackTrace();
         }
-        return true;
+        return false;
     }
 
+//    /**
+//     * 鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堢珛鍗虫墽琛岀増)
+//     * tip锛氬悓姝�
+//     */
+//    private synchronized boolean moveLocForDeepLoc(CrnSlave crn, CrnProtocol crnProtocol, LocMast shallowLoc, Integer mark) {
+//        try {
+//            News.warnNoLog("" + mark + "moveLocForDeepLoc" + " - 0" + " - 寮�濮嬫墽琛�:鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堢珛鍗虫墽琛岀増)");
+//            List<Integer> rows = locMastService.queryDistinctRow(crn.getId());
+//            LocMast loc = null;
+//            for (Integer row : rows) {
+//                if (Utils.isDeepLoc(slaveProperties, row)) {
+//                    loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
+//                    if (loc != null) {
+//                        if (crn.getId() == 1) {
+//                            if (Utils.getLaneByLocNo(loc.getLocNo()) != crnProtocol.getCrnLane()) {
+//                                continue;
+//                            }
+//                        }
+//
+//                        if (Utils.isDeepLoc(slaveProperties, loc.getLocNo())) {
+//                            String shallowLocNo = Utils.getShallowLoc(slaveProperties, loc.getLocNo());
+//                            LocMast shallowLoc1 = locMastService.selectById(shallowLocNo);
+//                            if (!shallowLoc1.getLocSts().equals("O")) {
+//                                loc = null;
+//                            }
+//                        }
+//                    }
+//                    if (null != loc) {
+//                        break;
+//                    }
+//                }
+//            }
+//            if (null == loc) {
+//                for (Integer row : rows) {
+//                    if (Utils.isShallowLoc(slaveProperties, row)) {
+//                        loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1());
+//
+//                        if (null != loc) {//瀵瑰簲娣卞簱浣嶉潪鍦ㄥ簱鐘舵��,涓嶈兘绉诲簱
+//                            if (crn.getId() == 1) {
+//                                if (Utils.getLaneByLocNo(loc.getLocNo()) != crnProtocol.getCrnLane()) {
+//                                    continue;
+//                                }
+//                            }
+//
+//                            String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo());
+//                            LocMast deepLoc1 = locMastService.selectById(deepLoc);
+//                            if (!deepLoc1.getLocSts().equals("F") && !deepLoc1.getLocSts().equals("D")) {
+//                                loc = null;
+//                            }
+//                        }
+//
+//                        if (null != loc) {
+//                            break;
+//                        }
+//                    }
+//                }
+//            }
+//
+//            if (null == loc) {
+//                News.error("" + mark + "moveLocForDeepLoc" + " - 1" + " - 鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+//                return false;
+////                throw new CoolException("鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+//            } else {
+//                String deepLoc2 = Utils.getDeepLoc2(slaveProperties, loc.getLocNo());
+//                if (deepLoc2 != null) {
+//                    LocMast locnew = locMastService.selectById(deepLoc2);
+//                    if (locnew != null && locnew.getLocSts().equals("O")) {
+//                        loc = locnew;
+//                    }
+//                }
+//
+//
+//                try {
+//                    // 鑾峰彇宸ヤ綔鍙�
+//                    int workNo = commonService.getWorkNo(0);
+//                    // 淇濆瓨宸ヤ綔妗�
+//                    WrkMast wrkMast = new WrkMast();
+//                    wrkMast.setWrkNo(workNo);
+//                    wrkMast.setIoTime(new Date());
+//                    wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+//                    wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇
+//                    wrkMast.setIoPri(13D);
+//                    wrkMast.setCrnNo(crn.getId());
+//                    wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 婧愬簱浣�
+//                    wrkMast.setLocNo(loc.getLocNo()); // 鐩爣搴撲綅
+////                    wrkMast.setFullPlt(shallowLoc.getFullPlt()); // 婊℃澘
+//                    wrkMast.setFullPlt(shallowLoc.getLocSts().equals("D") ? "N" : "Y"); // 婊℃澘
+//                    wrkMast.setPicking("N"); // 鎷f枡
+//                    wrkMast.setExitMk("N"); // 閫�鍑�
+//                    wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 绌烘澘
+//                    wrkMast.setBarcode(shallowLoc.getBarcode()); // 鎵樼洏鐮�
+//                    wrkMast.setLinkMis("N");
+//                    wrkMast.setAppeTime(new Date());
+//                    wrkMast.setModiTime(new Date());
+//                    int res = wrkMastMapper.insert(wrkMast);
+//                    if (res == 0) {
+//                        News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 2" + " - 淇濆瓨宸ヤ綔妗eけ璐�");
+////                        throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+//                        return true;
+//                    }
+//                    // 宸ヤ綔妗f槑缁嗕繚瀛�
+//                    if (shallowLoc.getLocSts().equals("F")) {
+//                        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", shallowLoc.getLocNo()));
+//
+//                        for (LocDetl locDetl : locDetls) {
+//                            WrkDetl wrkDetl = new WrkDetl();
+//                            wrkDetl.sync(locDetl);
+//                            wrkDetl.setWrkNo(workNo);
+//                            wrkDetl.setIoTime(new Date());
+//                            wrkDetl.setAnfme(locDetl.getAnfme());
+////                            VersionUtils.setWrkDetl(wrkDetl, locDetl); // 鐗堟湰鎺у埗
+//                            wrkDetl.setAppeTime(new Date());
+//                            wrkDetl.setModiTime(new Date());
+//                            if (!wrkDetlService.insert(wrkDetl)) {
+//                                News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 3" + " - 淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+////                                throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+//                                return true;
+//                            }
+//                        }
+//                    }
+//                    // 淇敼婧愬簱浣嶇姸鎬�
+//                    if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) {
+//                        shallowLoc.setLocSts("R"); // R.鍑哄簱棰勭害
+//                        shallowLoc.setModiTime(new Date());
+//                        if (!locMastService.updateById(shallowLoc)) {
+//                            News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 4" + " - 鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
+////                            throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
+//                            return true;
+//                        }
+//                    } else {
+//                        News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 5" + " - 婧愬簱浣嶅嚭搴撳け璐�");
+////                        throw new CoolException("婧愬簱浣嶅嚭搴撳け璐�");
+//                        return true;
+//                    }
+//                    // 淇敼鐩爣搴撲綅鐘舵��
+//                    if (loc.getLocSts().equals("O")) {
+//                        loc.setLocSts("S"); // S.鍏ュ簱棰勭害
+//                        loc.setModiTime(new Date());
+//                        if (!locMastService.updateById(loc)) {
+//                            News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 6" + " - 鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+////                            throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+//                            return true;
+//                        }
+//                    } else {
+//                        News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 7" + " - 绉昏浆澶辫触");
+////                        throw new CoolException("绉昏浆澶辫触");
+//                        return true;
+//                    }
+//                } catch (Exception e) {
+//                    News.error("" + mark + "moveLocForDeepLoc" + " - 8" + " - 鍙屾繁搴撲綅闃诲锛屽娴呭簱浣嶈繘琛岀Щ杞け璐�", e);
+//                }
+//            }
+//
+//
+//        } catch (Exception e) {
+//            News.error("" + mark + "moveLocForDeepLoc" + " - 8" + " - 鍙屾繁搴撲綅闃诲锛屽娴呭簱浣嶈繘琛岀Щ杞け璐�", e);
+////            e.printStackTrace();
+////            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//        }
+//        return true;
+//    }
+
     /**
      * 鍫嗗灈鏈烘紨绀�  ===>> 搴撲綅绉昏浆
      */

--
Gitblit v1.9.1