From 7b8021d7ff94015d7034ead10fea5006d0032301 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期五, 24 四月 2026 09:13:51 +0800
Subject: [PATCH] WCS功能完善

---
 src/main/java/com/zy/service/impl/MainServiceImpl.java |  272 +++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 188 insertions(+), 84 deletions(-)

diff --git a/src/main/java/com/zy/service/impl/MainServiceImpl.java b/src/main/java/com/zy/service/impl/MainServiceImpl.java
index 518b50e..3a39e8d 100644
--- a/src/main/java/com/zy/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -22,11 +22,14 @@
 import com.zy.core.model.Task;
 import com.zy.core.model.command.CrnCommand;
 import com.zy.core.model.command.LedCommand;
+import com.zy.core.model.command.RgvCommand;
 import com.zy.core.model.protocol.CrnProtocol;
+import com.zy.core.model.protocol.RgvProtocol;
 import com.zy.core.model.protocol.StaProtocol;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.BarcodeThread;
 import com.zy.core.thread.LedThread;
+import com.zy.core.thread.RgvThread;
 import com.zy.core.thread.SiemensDevpThread;
 import com.zy.entity.*;
 import com.zy.mapper.*;
@@ -319,11 +322,12 @@
                         wrkMast.setIoTime(now);
                         wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
                         wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
-                        wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
+                        wrkMast.setSourceStaNo(pickSta.getStaNo()); // 婧愮珯
                         wrkMast.setStaNo(staNo); // 鐩爣绔�
                         wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
                         wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
                         wrkMast.setModiTime(now);
+                        wrkMast.setWhsType(0);
                         if (wrkMastMapper.updateById(wrkMast) == 0) {
                             throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
                         }
@@ -344,7 +348,7 @@
 
                     // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
                     staProtocol.setWorkNo(wrkMast.getWrkNo());
-                    staProtocol.setStaNo(staProtocol.getSiteId().shortValue());
+                    staProtocol.setStaNo(staDesc.getCrnStn().shortValue());
                     devpThread.setPakMk(staProtocol.getSiteId(), false);
                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                     log.error("杈撻�佺嚎涓嬪彂5锛�"+wrkMast.getWrkNo()+","+wrkMast.getStaNo());
@@ -413,7 +417,13 @@
                         if (wrkMastMapper.updateById(wrkMast) != 0) {
                             // 澶嶄綅鍫嗗灈鏈�
                             News.info("鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣�,浠诲姟鍙凤細{}",wrkMast.getWrkNo());
-                            crnThread.setResetFlag(true);
+                            // 鍫嗗灈鏈哄浣�
+                            if (!MessageQueue.offer(SlaveType.Crn, crnThread.getCrnProtocol().getCrnNo(), new Task(3, null))) {
+                                News.error(crnThread.getCrnProtocol().getCrnNo() + "鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣嶏紝涓嬪彂澶嶄綅鍛戒护澶辫触");
+                            } else {
+                                News.warnNoLog(""+mark+" - 2"+" - 鍑哄簱浠诲姟瀹屾垚涓嬪彂鍫嗗灈鏈哄浣嶆垚鍔� : 鍫嗗灈鏈哄彿={}",crnThread.getCrnProtocol().getCrnNo());
+                            }
+//                            crnThread.setResetFlag(true);
                         } else {
                             News.error(""+mark+" - 1"+" - 鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
                         }
@@ -451,7 +461,7 @@
 
             // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
             if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
-                    && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) {
+                    && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0 && crnProtocol.getAlarm() == 0) {
                 News.warnNoLog(""+mark+" - 0"+" - 寮�濮嬫墽琛屽爢鍨涙満鍏ュ嚭搴撲綔涓氫笅鍙�");
                 // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
                 if (crnProtocol.getLastIo().equals("I")) {
@@ -550,40 +560,42 @@
                 News.warnNoLog(""+mark+" - 1"+" - 8"+" - 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞� : 寮�濮嬫墽琛� 浠诲姟鍙�={}",wrkMast.getWrkNo());
                 String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getLocNo());
                 LocMast shallowLoc = locMastService.selectById(shallowLocNo);
-                // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
-                if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
-                    News.warnNoLog(""+mark+" - 1"+" - 9"+" - // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒搴撲綅鐘舵��={}",shallowLoc.getLocSts());
-                    WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
-                    if (null == waitWrkMast) {
-                        News.error(""+mark+" - 1"+" - 10"+" - {}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
-                    } else {
-                        waitWrkMast.setIoPri(15D);
-                        waitWrkMast.setModiTime(new Date());
-                        if (wrkMastMapper.updateById(waitWrkMast) == 0) {
-                            News.error(""+mark+" - 1"+" - 11"+" - 璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+                if(shallowLoc != null) {
+                    // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
+                    if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
+                        News.warnNoLog(""+mark+" - 1"+" - 9"+" - // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒搴撲綅鐘舵��={}",shallowLoc.getLocSts());
+                        WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+                        if (null == waitWrkMast) {
+                            News.error(""+mark+" - 1"+" - 10"+" - {}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
+                        } else {
+                            waitWrkMast.setIoPri(15D);
+                            waitWrkMast.setModiTime(new Date());
+                            if (wrkMastMapper.updateById(waitWrkMast) == 0) {
+                                News.error(""+mark+" - 1"+" - 11"+" - 璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+                            }
+                            continue;
+                        }
+
+                    } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
+                        News.warnNoLog(""+mark+" - 1"+" - 12"+" - // F銆丏  搴撲綅鐘舵��={}",shallowLoc.getLocSts());
+                        // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
+                        if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
+                            wrkMast.setUpdMk("Y");
+                            wrkMast.setIoPri(14D);
+                            wrkMastMapper.updateById(wrkMast);
+                            // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑
+                            moveLocForDeepLoc(slave, shallowLoc,mark);
+                            // 鐢熸垚宸ヤ綔妗c�佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�併�佷笅鍙戝爢鍨涙満鍛戒护锛堢珛椹墽琛�)
+//                        moveLocForDeepLocPakin(slave, shallowLoc, wrkMast);
                         }
                         continue;
-                    }
-
-                } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
-                    News.warnNoLog(""+mark+" - 1"+" - 12"+" - // F銆丏  搴撲綅鐘舵��={}",shallowLoc.getLocSts());
-                    // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
-                    if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
-                        wrkMast.setUpdMk("Y");
-                        wrkMast.setIoPri(14D);
-                        wrkMastMapper.updateById(wrkMast);
-                        // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑
-                        moveLocForDeepLoc(slave, shallowLoc,mark);
-                        // 鐢熸垚宸ヤ綔妗c�佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�併�佷笅鍙戝爢鍨涙満鍛戒护锛堢珛椹墽琛�)
-//                        moveLocForDeepLocPakin(slave, shallowLoc, wrkMast);
-                    }
-                    continue;
-                } else if (shallowLoc.getLocSts().equals("Q")) {
-                    News.warnNoLog(""+mark+" - 1"+" - 13"+" - // Q  搴撲綅鐘舵��={}",shallowLoc.getLocSts());
-                    WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
-                    if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
-                        News.infoNoLog(""+mark+" - 1"+" - 14"+" - // F銆丏  宸ヤ綔鐘舵��(鍒ゆ柇鏉′欢涓�==4)={}",waitWrkMast.getWrkSts());
-                        continue;
+                    } else if (shallowLoc.getLocSts().equals("Q")) {
+                        News.warnNoLog(""+mark+" - 1"+" - 13"+" - // Q  搴撲綅鐘舵��={}",shallowLoc.getLocSts());
+                        WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+                        if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
+                            News.infoNoLog(""+mark+" - 1"+" - 14"+" - // F銆丏  宸ヤ綔鐘舵��(鍒ゆ柇鏉′欢涓�==4)={}",waitWrkMast.getWrkSts());
+                            continue;
+                        }
                     }
                 }
             }
@@ -603,7 +615,8 @@
             crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
             crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
             crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
-            crnCommand.setTraySize(locMast.getLocType1() == 2);
+            crnCommand.setCommand((short) 1);     // 浠诲姟纭
+//            crnCommand.setTraySize(locMast.getLocType1() == 2);
             if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                 News.error(""+mark+" - 1"+" - 16"+" - 鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
             } else {
@@ -688,46 +701,48 @@
                         News.warnNoLog(""+mark+" - 2"+" - 6"+" - 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞� : 寮�濮嬫墽琛� 浠诲姟鍙�={}",wrkMast.getWrkNo());
                         String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo());
                         LocMast shallowLoc = locMastService.selectById(shallowLocNo);
-                        // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
-                        if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
-                            News.warnNoLog(""+mark+" - 2"+" - 7"+" - // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒搴撲綅鐘舵��={}",shallowLoc.getLocSts());
-                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
-                            if (null == waitWrkMast) {
-                                News.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
-                            } else {
-                                if (waitWrkMast.getWrkSts() == 11) {
-                                    waitWrkMast.setIoPri(15D);
-                                    waitWrkMast.setModiTime(new Date());
-                                    if (wrkMastMapper.updateById(waitWrkMast) == 0) {
-                                        News.error(""+mark+" - 2"+" - 8"+" - 璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
-                                    }
-                                    continue;
+                        if (shallowLoc != null) {
+                            // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
+                            if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
+                                News.warnNoLog(""+mark+" - 2"+" - 7"+" - // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒搴撲綅鐘舵��={}",shallowLoc.getLocSts());
+                                WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
+                                if (null == waitWrkMast) {
+                                    News.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
                                 } else {
+                                    if (waitWrkMast.getWrkSts() == 11) {
+                                        waitWrkMast.setIoPri(15D);
+                                        waitWrkMast.setModiTime(new Date());
+                                        if (wrkMastMapper.updateById(waitWrkMast) == 0) {
+                                            News.error(""+mark+" - 2"+" - 8"+" - 璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
+                                        }
+                                        continue;
+                                    } else {
 
+                                    }
                                 }
-                            }
-                        } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
-                            News.warnNoLog(""+mark+" - 2"+" - 9"+" - // F銆丏  搴撲綅鐘舵��={}",shallowLoc.getLocSts());
+                            } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
+                                News.warnNoLog(""+mark+" - 2"+" - 9"+" - // F銆丏  搴撲綅鐘舵��={}",shallowLoc.getLocSts());
 //                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
-                            //2022-08-16 modify,涓嶆牴鎹畊pdmk鏍囪绉诲簱浠诲姟(瀹规槗琚彇娑堝鑷村牭濉�)锛屾煡璇㈠伐浣滄。鏄惁瀛樺湪浠诲姟
-                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
-                            // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
+                                //2022-08-16 modify,涓嶆牴鎹畊pdmk鏍囪绉诲簱浠诲姟(瀹规槗琚彇娑堝鑷村牭濉�)锛屾煡璇㈠伐浣滄。鏄惁瀛樺湪浠诲姟
+                                WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
+                                // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
 //                            if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())
 //                                || Cools.isEmpty(waitWrkMast)) {
-                            if (Cools.isEmpty(waitWrkMast)) {
-                                wrkMast.setUpdMk("Y");
-                                wrkMastMapper.updateById(wrkMast);
-                                // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑
-                                moveLocForDeepLoc(slave, shallowLoc,mark);
-                            }
-                            News.error("{}浠诲姟鍑哄簱澶辫触锛屾祬搴撲綅鍫靛锛佹祬搴撲綅鍙�:{}", wrkMast.getWrkNo(), shallowLocNo);
-                            break;
-                        } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")) {
-                            News.warnNoLog(""+mark+" - 2"+" - 10"+" - // Q銆丼  搴撲綅鐘舵��={}",shallowLoc.getLocSts());
-                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
-                            if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
-                                News.infoNoLog(""+mark+" - 2"+" - 11"+" - // F銆丏  宸ヤ綔鐘舵��(鍒ゆ柇鏉′欢涓�==4)={}",waitWrkMast.getWrkSts());
-                                continue;
+                                if (Cools.isEmpty(waitWrkMast)) {
+                                    wrkMast.setUpdMk("Y");
+                                    wrkMastMapper.updateById(wrkMast);
+                                    // 鐢熸垚宸ヤ綔妗�,灏嗘祬搴撲綅绉昏浆鍒版柊鐨勫簱浣嶄腑
+                                    moveLocForDeepLoc(slave, shallowLoc,mark);
+                                }
+                                News.error("{}浠诲姟鍑哄簱澶辫触锛屾祬搴撲綅鍫靛锛佹祬搴撲綅鍙�:{}", wrkMast.getWrkNo(), shallowLocNo);
+                                break;
+                            } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")) {
+                                News.warnNoLog(""+mark+" - 2"+" - 10"+" - // Q銆丼  搴撲綅鐘舵��={}",shallowLoc.getLocSts());
+                                WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo);
+                                if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) {
+                                    News.infoNoLog(""+mark+" - 2"+" - 11"+" - // F銆丏  宸ヤ綔鐘舵��(鍒ゆ柇鏉′欢涓�==4)={}",waitWrkMast.getWrkSts());
+                                    continue;
+                                }
                             }
                         }
                     }
@@ -754,7 +769,8 @@
                     crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 鐩爣搴撲綅鎺�
                     crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 鐩爣搴撲綅鍒�
                     crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 鐩爣搴撲綅灞�
-                    crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //搴撲綅绫诲瀷
+                    crnCommand.setCommand((short)1);     // 浠诲姟纭
+//                    crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //搴撲綅绫诲瀷
                     if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                         News.error(""+mark+" - 2"+" - 13"+" - 鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                     } else {
@@ -828,7 +844,7 @@
         CrnCommand crnCommand = new CrnCommand();
         crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
         crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
-        crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+//        crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
         crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
         crnCommand.setSourcePosX(sourceSta.getRow1().shortValue());     // 婧愬簱浣嶆帓
         crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 婧愬簱浣嶅垪
@@ -836,7 +852,8 @@
         crnCommand.setDestinationPosX(sta.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
         crnCommand.setDestinationPosY(sta.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
         crnCommand.setDestinationPosZ(sta.getLev1().shortValue());     // 鐩爣搴撲綅灞�
-        crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //搴撲綅绫诲瀷
+        crnCommand.setCommand((short)1);     // 浠诲姟纭
+//        crnCommand.setTraySize(sourceSta.getLocType1() == 2);     //搴撲綅绫诲瀷
         if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
             News.error(""+mark+" - 3"+" - 4"+" - 鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
         } else {
@@ -866,11 +883,12 @@
                 continue;
             }
             //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
-            if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
+            if (crnProtocol.getMode().intValue() == CrnModeType.AUTO.id && crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                 News.warnNoLog(""+mark+" - 0"+" - 寮�濮嬫墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔");
                 if (crnProtocol.getTaskNo() == 9999) {
-                    // 鍫嗗灈鏈哄浣�
-                    crnThread.setResetFlag(true);
+                    if (!MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(3, null))) {
+                        News.error(crn.getId() + "鍫嗗灈鏈哄洖鍘熺偣浠诲姟锛屼笅鍙戝浣嶅懡浠ゅけ璐�");
+                    }
                 } else {
                     // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
                     WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
@@ -890,8 +908,11 @@
                     // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
                     if (wrkMastMapper.updateById(wrkMast) > 0) {
                         // 鍫嗗灈鏈哄浣�
-                        News.warnNoLog(""+mark+" - 2"+" - 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 : 鍫嗗灈鏈哄彿={}",crnThread.getCrnProtocol().getCrnNo());
-                        crnThread.setResetFlag(true);
+                        if (!MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(3, null))) {
+                            News.error(crn.getId() + "鍏ュ簱瀹屾垚锛屼笅鍙戝浣嶅懡浠ゅけ璐�");
+                        } else {
+                            News.warnNoLog(""+mark+" - 2"+" - 鍏ュ簱瀹屾垚澶嶄綅鍫嗗灈鏈� : 鍫嗗灈鏈哄彿={}",crnThread.getCrnProtocol().getCrnNo());
+                        }
                     }
                 }
 
@@ -1073,7 +1094,7 @@
 
                             // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
                             staProtocol.setWorkNo(dto.getWorkNo());
-                            staProtocol.setStaNo(staProtocol.getSiteId().shortValue());
+                            staProtocol.setStaNo(dto.getStaNo().shortValue());
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
                             boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                             log.error("杈撻�佺嚎涓嬪彂6锛�"+dto.getWorkNo()+","+staProtocol.getSiteId());
@@ -1585,7 +1606,10 @@
      * 鍫嗗灈鏈哄洖鍘熺偣
      */
     public synchronized void originGo() throws InterruptedException {
-
+        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "crnAutoHome").eq("status", 1));
+        if (config == null || Cools.isEmpty(config.getValue()) || !config.getValue().equals("Y")) {
+            return;
+        }
         for (CrnSlave crn : slaveProperties.getCrn()) {
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
@@ -1625,13 +1649,15 @@
                 CrnCommand crnCommand = new CrnCommand();
                 crnCommand.setCrnNo(crn.getId()); // 鍫嗗灈鏈虹紪鍙�
                 crnCommand.setTaskNo((short) 9999); // 宸ヤ綔鍙�
+                crnCommand.setAckFinish((short)0);
                 crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡:  鍥炲師鐐�
-                crnCommand.setSourcePosX((short) (crn.getId() == 1 ? 3 : 6));     // 婧愬簱浣嶆帓
-                crnCommand.setSourcePosY((short) 1);     // 婧愬簱浣嶅垪
-                crnCommand.setSourcePosZ((short) 1);     // 婧愬簱浣嶅眰
+                crnCommand.setSourcePosX((short) 0);     // 婧愬簱浣嶆帓
+                crnCommand.setSourcePosY((short) 0);     // 婧愬簱浣嶅垪
+                crnCommand.setSourcePosZ((short) 0);     // 婧愬簱浣嶅眰
                 crnCommand.setDestinationPosX((short) 0);     // 鐩爣搴撲綅鎺�
                 crnCommand.setDestinationPosY((short) 0);     // 鐩爣搴撲綅鍒�
                 crnCommand.setDestinationPosZ((short) 0);     // 鐩爣搴撲綅灞�
+                crnCommand.setCommand((short)1);
                 if (!MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, crnCommand))) {
                     News.error("鍥炲師鐐逛换鍔′笅鍙戝け璐�", crn.getId(), JSON.toJSON(crnCommand));
                 } else {
@@ -1644,4 +1670,82 @@
         }
     }
 
+    public static final HashMap<Integer,Integer> wrkStaNoToRgvStaMap = new HashMap<>();
+    static {
+        wrkStaNoToRgvStaMap.put(1101,1114);
+        wrkStaNoToRgvStaMap.put(1201,1203);
+        wrkStaNoToRgvStaMap.put(1206,1203);
+        wrkStaNoToRgvStaMap.put(1301,1303);
+        wrkStaNoToRgvStaMap.put(1306,1303);
+        wrkStaNoToRgvStaMap.put(1408,1413);
+    }
+
+    public static final HashMap<Integer,Integer> wrkSourceStaNoToRgvStaMap = new HashMap<>();
+    static {
+        wrkSourceStaNoToRgvStaMap.put(1112,1114);
+        wrkSourceStaNoToRgvStaMap.put(1109,1114);
+        wrkSourceStaNoToRgvStaMap.put(1209,1213);
+        wrkSourceStaNoToRgvStaMap.put(1309,1313);
+        wrkSourceStaNoToRgvStaMap.put(1402,1403);
+        wrkSourceStaNoToRgvStaMap.put(1407,1403);
+    }
+
+    public synchronized void rgvCarry() {
+        for(int i = 1; i <= 4; i ++) {
+            List<Integer> rgvCarrySiteList;
+            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, i);
+            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+            if (rgvProtocol == null) {
+                continue;
+            }
+            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, i);
+
+            if(rgvProtocol.modeType == RgvModeType.AUTO && rgvProtocol.statusType == RgvStatusType.IDLE && rgvProtocol.loaded1 == 0
+            && rgvProtocol.alarm == 0 && rgvProtocol.getTaskNo1() == 0) {
+                switch (i) {
+                    case 1: rgvCarrySiteList = Arrays.asList(1114,1118,1120); break;
+                    case 2: rgvCarrySiteList = Arrays.asList(1213,1216,1218,1220); break;
+                    case 3: rgvCarrySiteList = Arrays.asList(1313,1316,1318,1320); break;
+                    case 4: rgvCarrySiteList = Arrays.asList(1403,1418,1420); break;
+                    default:
+                        return;
+                }
+                List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<BasDevp>().ne("wrk_no", 0).in("dev_no", rgvCarrySiteList));
+                if(!basDevps.isEmpty()) {
+                    List<Integer> wrkNos = basDevps.stream().map(BasDevp::getWrkNo).distinct().collect(Collectors.toList());
+                    List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_no", wrkNos)
+                            .last("ORDER BY CASE WHEN crn_end_time IS NULL THEN 0 ELSE 1 END,crn_end_time ASC"));
+                    Optional<WrkMast> first = wrkMastList.stream().filter(wrkMast -> wrkMast.getWhsType() == 1).findFirst();
+                    if(first.isPresent()) {
+                        log.warn("鏈変换鍔″鍦▄}鍙峰皬杞︽惉杩愪腑锛屼换鍔″彿{}",i,first.get().getWrkNo());
+                        continue;
+                    }
+                    for(WrkMast wrkMast:wrkMastList) {
+                        // 鍒ゆ柇鐩爣绔欑偣鏄惁鍙敤
+                        StaProtocol staProtocol = devpThread.getStation().get(wrkStaNoToRgvStaMap.get(wrkMast.getStaNo()) == null ?
+                                wrkMast.getStaNo() : wrkStaNoToRgvStaMap.get(wrkMast.getStaNo()));
+                        if (staProtocol != null && staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.getWorkNo() == 0) {
+
+                            RgvCommand rgvCommand = new RgvCommand();
+                            rgvCommand.setRgvNo(rgvProtocol.getRgvNo());
+//                            rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+                            rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue());
+                            rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅1浠诲姟妯″紡:  鍙栨斁璐�
+                            Integer sourcesStaNo = wrkSourceStaNoToRgvStaMap.get(wrkMast.getSourceStaNo());
+                            rgvCommand.setSourceStaNo1(sourcesStaNo == null ? wrkMast.getSourceStaNo().shortValue() : sourcesStaNo.shortValue());   //宸ヤ綅1璧风偣
+                            rgvCommand.setDestinationStaNo1(wrkMast.getStaNo().shortValue());   //宸ヤ綅1鐩爣绔欑偣
+                            rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
+                            if (!MessageQueue.offer(SlaveType.Rgv, rgvProtocol.getRgvNo(), new Task(2, rgvCommand))) {
+                                log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand));
+                                break;
+                            }
+                            wrkMast.setWhsType(1);
+                            wrkMastService.updateById(wrkMast);
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+    }
 }

--
Gitblit v1.9.1