From 5b38cd8435ccd19887b0ab1ece82408366de532d Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期二, 23 十二月 2025 10:44:03 +0800
Subject: [PATCH] #移库事务回滚修改

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  276 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 253 insertions(+), 23 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 bcaa71b..893075b 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -68,7 +68,7 @@
     @Autowired
     private WrkDetlService wrkDetlService;
     @Autowired
-    private WaitPakinMapper waitPakinMapper;
+    private WaitPakinService waitPakinService;
     @Autowired
     private LocMastService locMastService;
     @Autowired
@@ -86,6 +86,8 @@
 
     @Value("${wms.url}")
     private String wmsUrl;
+    @Autowired
+    private WrkMastServiceImpl wrkMastService;
 
     /**
      * 缁勬墭
@@ -172,6 +174,7 @@
                             String errorMsg = errMsg;
                             MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
                         }
+                        log.error("杈撻�佺嚎寮傚父缁勬墭閫�鍥�={}",errMsg);
                         staProtocol.setWorkNo((short) 9999);
                         staProtocol.setStaNo((short)(inSta.getStaNo()-1));
                         devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -404,7 +407,7 @@
 //                staProtocol.setPakMk(true);
 //                // 鍏ュ嚭搴撴ā寮忓垽鏂�
 //                if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; }
-                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()){
+                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()&&staProtocol.getWorkNo()>=9990){
                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue());
 //                     WrkMast  wrkMast = wrkMastMapper.selectPickStep(barcode);
                     if(wrkMast == null){
@@ -770,7 +773,7 @@
             crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
             crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
             crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
-            crnCommand.setCommand((short) 1);
+            crnCommand.setCommand((short) 0);
             if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                 log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
             } else {
@@ -865,6 +868,26 @@
                         break;
                     }
 
+                    //鏈堿GV鎼繍鍏ュ簱鏃讹紝绂佹娲惧彂鍫嗗灈鏈哄嚭搴撲换鍔�
+                    String staNo = "";
+                    if(crnProtocol.getCrnNo()==1){
+                        staNo = "105";
+                    }else if(crnProtocol.getCrnNo()==2){
+                        staNo = "103";
+                    }else if(crnProtocol.getCrnNo()==3){
+                        staNo = "101";
+                    }
+                    WaitPakin sku = waitPakinService.selectOne(new EntityWrapper<WaitPakin>().eq("sku", staNo));
+                    if (!Cools.isEmpty(sku)) {
+                        return;
+                    }
+
+                    //鏈夋嫞鏂欏洖搴揂GV鎼繍浠诲姟鏃讹紝绂佹娲惧彂鍫嗗灈鏈哄嚭搴撲换鍔�
+                    List<WrkMast> wrkMasts1 = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("inv_wh", 0, 1, 2, 3).eq("sta_no", staNo));
+                    if (!Cools.isEmpty(wrkMasts1)) {
+                        return;
+                    }
+
                     // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
                     if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) {
                         String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo());
@@ -927,7 +950,7 @@
                     crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 鐩爣搴撲綅鎺�
                     crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 鐩爣搴撲綅鍒�
                     crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 鐩爣搴撲綅灞�
-                    crnCommand.setCommand((short) 1);
+                    crnCommand.setCommand((short) 0);
                     if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                         log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                     } else {
@@ -1435,6 +1458,7 @@
      * 鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
      */
     public synchronized void ledExecute() {
+
         for (LedSlave led : slaveProperties.getLed()) {
             // 鑾峰彇杈撻�佺嚎plc绾跨▼
             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
@@ -1453,7 +1477,10 @@
                 // 鑾峰彇宸ヤ綔妗f暟鎹�
                 WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
 //                if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; }
-                if (null == wrkMast) { continue; }
+                if (null == wrkMast) {
+                    continue;
+                }
+                log.info("寮�濮嬫墽琛�:鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�");
                 wrkMasts.add(wrkMast);
                 // 缁勮鍛戒护
                 LedCommand ledCommand = new LedCommand();
@@ -1483,17 +1510,40 @@
                         ledCommand.setTitle("绌烘澘鍑哄簱");
                         ledCommand.setEmptyMk(true);
                         break;
+                    case 53:
+                        ledCommand.setTitle("鎷f枡鍏ュ簱");
+                        break;
+                    case 57:
+                        ledCommand.setTitle("鐩樼偣鍏ュ簱");
+                        break;
+                    case 54:
+                        ledCommand.setTitle("骞舵澘鍏ュ簱");
+                        break;
                     default:
-                        log.error("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
+                        log.error("鐢佃鏈烘樉绀轰换鍔″叆鍑哄簱绫诲瀷閿欒锛侊紒锛乕宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
                         break;
                 }
                 ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
                 ledCommand.setLocNo(wrkMast.getLocNo());
                 ledCommand.setStaNo(wrkMast.getStaNo());
 //                ledCommand.setSourceStaNo(wrkMast.getSourceStaNo());
-                if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10 ) {
+                if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
                     List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
-                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(),wrkDetl.getSpecs(),wrkDetl.getModel())));
+                    try{
+                        if (wrkMast.getIoType()>100){
+                            for (WrkDetl wrkDetl : wrkDetls){
+                                LocDetl locDetl = locDetlService.selectMatnrSpecs(wrkDetl.getMatnr(), wrkDetl.getSpecs(), wrkMast.getSourceLocNo());
+                                wrkDetl.setWeight(locDetl.getAnfme());
+                            }
+                        }else {
+                            for (WrkDetl wrkDetl : wrkDetls){
+                                wrkDetl.setWeight(wrkDetl.getAnfme());
+                            }
+                        }
+                    }catch (Exception e){
+                        log.error("宸ヤ綔妗f鏄庣粏杈撳叆鐢佃鏈哄け璐�1锛氬紓甯镐俊鎭�==銆�"+e);
+                    }
+                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(),wrkDetl.getWeight(),wrkDetl.getSpecs(),wrkDetl.getSku())));
                 }
                 commands.add(ledCommand);
             }
@@ -1504,24 +1554,33 @@
             if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
                 continue;
             }
+//             鍛戒护涓嬪彂 -------------------------------------------------------------------------------
+//            if (!commands.isEmpty()) {
+//                if (led.getId() < 7) {
+//                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) {
+//                        News.error(""+mark+" - 2"+" - {}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+//                        continue;
+//                    } else {
+//                        ledThread.setLedMk(false);
+//                    }
+//                } else {
+//                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
+//                        News.error(""+mark+" - 3"+" - {}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+//                        continue;
+//                    } else {
+//                        ledThread.setLedMk(false);
+//                    }
+//                }
+//
+//            }
             // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
             if (!commands.isEmpty()) {
-                if (led.getId()>4){
-                    if (!MessageQueue.offer(SlaveType.Led, led.getId()-4, new Task(3, commands))) {
-                        log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-                        continue;
-                    } else {
-                        ledThread.setLedMk(false);
-                    }
+                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) {
+                    log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+                    continue;
                 }else {
-                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) {
-                        log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-                        continue;
-                    } else {
-                        ledThread.setLedMk(false);
-                    }
+                    ledThread.setLedMk(false);
                 }
-
             }
 
             try {
@@ -1530,6 +1589,7 @@
                     wrkMast.setOveMk("Y");
                     wrkMast.setModiTime(new Date());
                     if (wrkMastMapper.updateById(wrkMast) == 0) {
+                        log.error("鐢佃鏈烘爣璁板仛鍒板伐浣滄。涓� - 鏇存柊宸ヤ綔妗eけ璐�");
                         throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
                     }
                 }
@@ -1543,6 +1603,7 @@
             }
 
         }
+        log.info(" - 鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣ㄦ墽琛屽畬鎴�");
     }
 
     /**
@@ -1743,7 +1804,7 @@
                 wrkMast.setCrnNo(crn.getId());
                 wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 婧愬簱浣�
                 wrkMast.setLocNo(loc.getLocNo()); // 鐩爣搴撲綅
-                wrkMast.setFullPlt(shallowLoc.getFullPlt()); // 婊℃澘
+                wrkMast.setFullPlt(shallowLoc.getLocSts().equals("F") ? "Y" : "N"); // 婊℃澘锛歒
                 wrkMast.setPicking("N"); // 鎷f枡
                 wrkMast.setExitMk("N"); // 閫�鍑�
                 wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 绌烘澘
@@ -2065,5 +2126,174 @@
         }
     }
 
+    /**
+     * agv瀹屾垚鍏ュ簱浠诲姟锛岀粰杈撻�佺嚎涓嬪彂鍏ュ簱浠诲姟
+     * agv鐘舵��
+     * be_batch
+     * 0锛氭棤闇�璋冪敤AGV
+     * 1锛氱瓑寰呰皟鐢ˋGV
+     * 2锛欰GV浠诲姟涓嬪彂鎴愬姛
+     * 3锛欰GV浠诲姟瀹屾垚
+     * 4锛氱粰杈撻�佺嚎涓嬪彂鍏ュ簱鎸囦护瀹屾垚
+     */
+    public synchronized void overAGVTaskIn() {
+        int[] inStaNos= {101,103,105};
+        for (int inStaNo : inStaNos) {
+            // 鑾峰彇鍏ュ簱绔欎俊鎭�
+            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+            StaProtocol staProtocol = devpThread.getStation().get(inStaNo);
+            if (staProtocol == null) {
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+
+            // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+            if (staProtocol.isAutoing() && staProtocol.isLoading()
+                    && !staProtocol.isEmptyMk() && staProtocol.getWorkNo() == 0){// && !Cools.isEmpty(barcode)) {
+                //鑾峰彇AGV鎼繍瀹屾垚鐨勫叆搴撻�氱煡妗�
+                WaitPakin waitPakin = waitPakinService.selectOne(new EntityWrapper<WaitPakin>()
+                        .eq("sku", staProtocol.getSiteId()+"")
+                        .eq("be_batch", 3));
+                if(Cools.isEmpty(waitPakin)){
+                    continue;
+                }
+                short staNo = 0;
+                if(staProtocol.getSiteId()==101){
+                    staNo=102;
+                }else if(staProtocol.getSiteId()==103){
+                    staNo=104;
+                }else if(staProtocol.getSiteId()==105){
+                    staNo=106;
+                }
+                staProtocol.setWorkNo((short) 9991);
+                staProtocol.setStaNo(staNo);
+                devpThread.setPakMk(staProtocol.getSiteId(), false);
+                boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
+                if (!result) {
+                    throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                }else {
+                    waitPakin.setBeBatch(4);//4锛氱粰杈撻�佺嚎涓嬪彂鍏ュ簱鎸囦护瀹屾垚
+                    waitPakin.setModiTime(new  Date());
+                    waitPakinService.update(waitPakin,new EntityWrapper<WaitPakin>().eq("supp_code",waitPakin.getSuppCode()));
+                }
+
+            }
+        }
+
+    }
+
+    /**
+     * agv鍑哄簱鎼锛屾竻闄ょ珯鐐瑰伐浣滃彿
+     * wrk_sts
+     * 30.绛夊緟缁橝GV涓嬪彂鍑哄簱浠诲姟
+     * 31.AGV鍑哄簱浠诲姟涓嬪彂鎴愬姛
+     * 32.AGV宸叉惉绂�
+     * 33.绛夊緟涓嬫灦
+     */
+    public synchronized void outStaNo() {
+        int[] inStaNos= {101,103,105};
+        for (int inStaNo : inStaNos) {
+            // 鑾峰彇鍏ュ簱绔欎俊鎭�
+            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+            StaProtocol staProtocol = devpThread.getStation().get(inStaNo);
+            if (staProtocol == null) {
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+
+            // 鍒ゆ柇鏄惁婊¤冻agv鎼繍鍑哄簱浠诲姟锛屾惉绂荤姸鎬�
+            if (staProtocol.isAutoing() && !staProtocol.isLoading()
+                    && !staProtocol.isEmptyMk() && staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9990){// && !Cools.isEmpty(barcode)) {
+                //鑾峰彇AGV鎼鐨勪换鍔�
+                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+                        .eq("wrk_no", staProtocol.getWorkNo())
+                        .eq("wrk_sts",32L));
+                if(Cools.isEmpty(wrkMast)){
+                    continue;
+                }
+
+                staProtocol.setWorkNo((short) 0);
+                staProtocol.setStaNo((short)0);
+                devpThread.setPakMk(staProtocol.getSiteId(), false);
+                boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
+                if (!result) {
+                    throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                }else {
+                    wrkMast.setWrkSts(33L);
+                    wrkMast.setModiTime(new Date());
+                    wrkMastService.updateById(wrkMast);
+                }
+
+            }
+        }
+
+    }
+
+    /**
+     * agv瀹屾垚鍏ュ簱浠诲姟锛岀粰杈撻�佺嚎涓嬪彂鍏ュ簱浠诲姟
+     * agv鐘舵��
+     * be_batch
+     * 0锛氭棤闇�璋冪敤AGV
+     * 1锛氱瓑寰呰皟鐢ˋGV
+     * 2锛欰GV浠诲姟涓嬪彂鎴愬姛
+     * 3锛欰GV浠诲姟瀹屾垚
+     * 4锛氱粰杈撻�佺嚎涓嬪彂鍏ュ簱鎸囦护瀹屾垚
+     */
+    public synchronized void overAGVTaskInReturn() {
+        int[] inStaNos= {101,103,105};
+        for (int inStaNo : inStaNos) {
+            // 鑾峰彇鍏ュ簱绔欎俊鎭�
+            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+            StaProtocol staProtocol = devpThread.getStation().get(inStaNo);
+            if (staProtocol == null) {
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+
+            // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+            if (staProtocol.isAutoing() && staProtocol.isLoading()
+                    && !staProtocol.isEmptyMk() && staProtocol.getWorkNo() == 0){// && !Cools.isEmpty(barcode)) {
+                //鑾峰彇AGV鎼繍瀹屾垚鐨勫叆搴撻�氱煡妗�
+                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+                        .eq("sta_no", staProtocol.getSiteId())
+                        .eq("inv_wh", "1"));
+                if(Cools.isEmpty(wrkMast)){
+                    continue;
+                }
+                short staNo = 0;
+                if(staProtocol.getSiteId()==101){
+                    staNo=102;
+                }else if(staProtocol.getSiteId()==103){
+                    staNo=104;
+                }else if(staProtocol.getSiteId()==105){
+                    staNo=106;
+                }
+                staProtocol.setWorkNo((short) 9991);
+                staProtocol.setStaNo(staNo);
+                devpThread.setPakMk(staProtocol.getSiteId(), false);
+                boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
+                if (!result) {
+                    throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                }else {
+                    /**
+                     * inv_wh
+                     * 鎷f枡鍥炲簱杈撻�佺嚎鍑哄彂
+                     * 0绛夊緟agv鏀捐揣瀹屾垚
+                     * 1绛夊緟杈撻�佺嚎鍏ュ簱
+                     * 2杈撻�佺嚎鍏ュ簱浠诲姟涓嬪彂鎴愬姛
+                     */
+                    wrkMast.setInvWh("2");//2杈撻�佺嚎鍏ュ簱浠诲姟涓嬪彂鎴愬姛
+                    wrkMast.setModiTime(new  Date());
+                    wrkMastService.updateById(wrkMast);
+                }
+
+            }
+        }
+
+    }
+
 
 }

--
Gitblit v1.9.1