From a435a1d1e06263eb1a219384e6b4f1e551c4f89b Mon Sep 17 00:00:00 2001
From: L <L@132>
Date: 星期四, 10 七月 2025 22:11:25 +0800
Subject: [PATCH] *

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  550 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 546 insertions(+), 4 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 e1cdcef..eda3cf8 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1561,7 +1561,15 @@
      */
     public synchronized void locToCrnStn1(CrnSlave slave, CrnProtocol crnProtocol) {
         List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep12(slave.getId());
+        Double pri = 0.0;
         for (WrkMast wrkMast : wrkMasts) {
+            if (wrkMast.getIoType() != 110){
+                if (wrkMast.getIoPri()>=pri){
+                    pri = wrkMast.getIoPri();
+                } else {
+                    continue;
+                }
+            }
             if (wrkMast == null) {
                 continue;
             }
@@ -1640,7 +1648,11 @@
                             log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
                         } else {
                             if (waitWrkMast.getWrkSts() == 11) {
-                                waitWrkMast.setIoPri(15D);
+                                if (waitWrkMast.getIoPri() + 100000D < 99999999) {
+                                    waitWrkMast.setIoPri(waitWrkMast.getIoPri()+100000D);
+                                } else {
+                                    waitWrkMast.setIoPri(99999999D);
+                                }
                                 waitWrkMast.setModiTime(new Date());
                                 if (wrkMastMapper.updateById(waitWrkMast) == 0) {
                                     log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
@@ -3188,6 +3200,7 @@
                     staProtocolnew.setWorkNo(wrkMast.getWrkNo());
                     staProtocolnew.setStaNo(144);
                     devpThread.setPakMk(staProtocolnew.getSiteId(), false);
+                    devpThread.setReportSign(staProtocolnew.getSiteId(), true);
                     boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocolnew));
                     if (!result) {
                         throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触==>椹卞姩鐮佸灈浣嶆墭鐩樺墠杩涘け璐ワ紒");
@@ -3542,8 +3555,32 @@
                             break;
                         }
                         WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1().longValue());
-                        if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=1 || wrkMastSta.getWrkSts()!=1){
+                        if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=1){
                             log.error("鏈煡鍒板皬杞︽墽琛屼换鍔℃垨鑰呮墽琛屼换鍔$姸鎬佷笉绗﹀悎锛�"+wrkMastSta);
+                            continue;
+                        }
+                        if (wrkMastSta.getWrkSts()!=1){
+                            if (wrkMastSta.getWrkType()==1 && wrkMastSta.getWrkSts()==2 && rgvProtocol.getLoaded1()==1){
+                                boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1());
+                                if (!rgvComplete){
+                                    log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo());
+                                    break;
+                                }
+                                rgvAvoidanceXYWrkMast(rgvProtocol.getRgvNo());
+                                continue;
+                            }
+                            if (wrkMastSta.getWrkType()==6){
+                                boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
+                                wrkMastSta.setWrkSts(3);
+                                wrkMastStaMapper.updateById(wrkMastSta);
+                                continue;
+                            }
+                            continue;
+                        }
+                        if (wrkMastSta.getWrkType()==5){
+                            boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1());
+                            wrkMastSta.setWrkSts(3);
+                            wrkMastStaMapper.updateById(wrkMastSta);
                             continue;
                         }
                        /* WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue());
@@ -3685,20 +3722,30 @@
                         && rgvProtocol.getStatusType1() == RgvStatusType.IDLE
                         && rgvProtocol.getStatusType2() == RgvStatusType.IDLE
                         && rgvProtocol.getModeType() == RgvModeType.AUTO
-                        && rgvProtocol.getLoaded1()==0
-                        && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0
+                        && (rgvProtocol.getLoaded1()==0 || (rgvProtocol.getLoaded1()==1 && rgvProtocol.getTaskNo1()!=0) )
+                        && (rgvProtocol.getTaskNo1()==0 || (rgvProtocol.getLoaded1()==1 && rgvProtocol.getTaskNo1()!=0) )
+                        && rgvProtocol.getTaskNo2()==0
                 ) {
                     switch (sign){
                         //鎵ц灏忚溅璐х墿鎼繍浠诲姟
                         case 1:
                             signWork = rgvRunWrkMastFullSta(rgvSlave);
+                            if (!signWork){
+                                signWork = rgvRunWrkMastFullStaPutOrTake(rgvSlave);
+                            }
                             break;
                         //鎵ц灏忚溅绌烘澘鎼繍浠诲姟
                         case 2://鏀�//鎷嗙洏
                             signWork = rgvRunWrkMastEmptyStaPut(rgvSlave);
+                            if (!signWork){
+                                signWork = rgvRunWrkMastFullStaPut(rgvSlave);
+                            }
                             break;
                         case 3://婊℃斁
                             signWork = rgvRunWrkMastEmptyStaPutFull(rgvSlave);
+                            if (!signWork){
+                                signWork = rgvRunWrkMastFullStaTake(rgvSlave);
+                            }
                             break;
                         case 4://鍙栧彔鐩�
                             signWork = rgvRunWrkMastEmptyStaTake(rgvSlave);
@@ -3716,12 +3763,21 @@
                         switch (signCount){
                             case 1://鎵ц灏忚溅璐х墿鎼繍浠诲姟
                                 signWork = rgvRunWrkMastFullSta(rgvSlave);
+                                if (!signWork){
+                                    signWork = rgvRunWrkMastFullStaPutOrTake(rgvSlave);
+                                }
                                 break;
                             case 2://鏀�//鎷嗙洏
                                 signWork = rgvRunWrkMastEmptyStaPut(rgvSlave);
+                                if (!signWork){
+                                    signWork = rgvRunWrkMastFullStaPut(rgvSlave);
+                                }
                                 break;
                             case 3://婊℃斁
                                 signWork = rgvRunWrkMastEmptyStaPutFull(rgvSlave);
+                                if (!signWork){
+                                    signWork = rgvRunWrkMastFullStaTake(rgvSlave);
+                                }
                                 break;
                             case 4://鍙栧彔鐩�
                                 signWork = rgvRunWrkMastEmptyStaTake(rgvSlave);
@@ -3869,6 +3925,170 @@
         return false;
     }
     /**
+     * 鎵ц灏忚溅鎼繍浠诲姟
+     */
+    public synchronized boolean rgvRunWrkMastFullStaPutOrTake(RgvSlave rgvSlave) {
+        try{
+            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+            if (rgvProtocol == null) {
+                return false;
+            }
+            BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
+            if (basRgv == null) {
+                log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
+                return false;
+            }
+
+            // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
+            if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+                    && rgvProtocol.getStatusType1() == RgvStatusType.IDLE
+                    && rgvProtocol.getStatusType2() == RgvStatusType.IDLE
+                    && rgvProtocol.getModeType() == RgvModeType.AUTO
+                    && rgvProtocol.getLoaded1()==0
+                    && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0
+            ) {
+                BasRgvMap basRgvMap = basRgvMapMapper.selectById(basRgv.getRgvNo());
+                if (basRgvMap == null) {
+                    log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo());
+                    return false;
+                }
+                List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());
+                basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
+                List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);
+                for (WrkMastSta wrkMastSta : wrkMastStaList){
+                    if (wrkMastSta.getType()!=1 || wrkMastSta.getWrkType()!=3){//1:婊$増   3锛氬彇鏀�
+                        continue;
+                    }
+                    BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd());
+                    if (!basDevp.getAutoing().equals("Y")){
+                        continue;
+                    }
+                    if (basDevp.getDevNo()>117 && basDevp.getDevNo()<124){
+                        if (basDevp.getEmptyMk().equals("Y")){
+                            continue;
+                        }
+                        if (basDevp.getLoading().equals("Y") && basDevp.getWrkNo()!=0){
+                            Date date = new Date();
+                            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, rgvSlave.getDevpPlcId());
+                            StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo());
+                            if (staProtocol == null) {
+                                log.info(date+"鍙栨斁浠诲姟涓嬪彂锛氭湭鏌ヨ鍒扮珯鐐逛俊鎭細"+wrkMastSta);
+                                continue;
+                            }
+                            if (!staProtocol.isAutoing()){
+                                continue;
+                            }
+                            if (staProtocol.isLoading() && staProtocol.getWorkNo() != 0){
+                                WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo());
+                                if (Cools.isEmpty(wrkMast) || wrkMast.getIoType()!=101 || Cools.isEmpty(wrkMast.getSheetNo()) || wrkMast.getSheetNo().equals("0")){
+                                    continue;
+                                }
+                                BasDevp basDevpS = basDevpService.selectById(wrkMastSta.getStaStart());
+                                if (!basDevpS.getAutoing().equals("Y") || !basDevpS.getLoading().equals("Y") || basDevpS.getWrkNo()!=wrkMastSta.getWrkNo().intValue()){
+                                    continue;
+                                }
+                                StaProtocol staProtocols = devpThread.getStation().get(basDevpS.getDevNo());
+                                if (staProtocols == null) {
+                                    log.info(date+"鍙栨斁浠诲姟涓嬪彂锛氭湭鏌ヨ鍒扮珯鐐逛俊鎭細"+wrkMastSta);
+                                    continue;
+                                }
+                                if (!staProtocols.isAutoing() || !staProtocols.isLoading() || staProtocols.getWorkNo() != wrkMastSta.getWrkNo().intValue()){
+                                    continue;
+                                }
+
+
+                                log.info(date+"鍙栬揣浠诲姟涓嬪彂锛氬皬杞﹀伐浣滄。锛�"+wrkMastSta);
+                                log.info(date+"鍙栬揣浠诲姟涓嬪彂锛氱洰鏍囩珯鐘舵�侊細"+basDevp);
+                                boolean sign = rgvTakeFull(basRgvMap.getRgvNo(), wrkMastSta);
+                                if (sign){
+                                    boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd());
+                                    if (signMap){
+                                        wrkMastSta.setWrkSts(2);
+                                        try{
+                                            wrkMastStaMapper.updateById(wrkMastSta);
+                                        }catch (Exception e){
+                                            log.error("鏇存柊灏忚溅浠诲姟澶辫触");
+                                        }
+                                        return true;
+                                    }else {
+                                        log.error("3978琛岋紝璐х墿鎼繍鍗曞彇浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo());
+                                    }
+                                }else {
+                                    log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo());
+                                }
+                                break;
+                            }
+                        }
+                    }
+                }
+            } else if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+                        && rgvProtocol.getStatusType1() == RgvStatusType.IDLE
+                        && rgvProtocol.getStatusType2() == RgvStatusType.IDLE
+                        && rgvProtocol.getModeType() == RgvModeType.AUTO
+                        && rgvProtocol.getLoaded1()==1
+                        && rgvProtocol.getTaskNo1()!=0 && rgvProtocol.getTaskNo2()==0
+            ) {// 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏈夌墿  鏈夊伐浣滃彿//rgv鍙敤
+                BasRgvMap basRgvMap = basRgvMapMapper.selectById(basRgv.getRgvNo());
+                if (basRgvMap == null) {
+                    log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo());
+                    return false;
+                }
+                basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
+                WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1().longValue());
+                if (Cools.isEmpty(wrkMastSta)){
+                    return false;
+                }
+                if (wrkMastSta.getType()!=1 || wrkMastSta.getWrkType()!=3){//1:婊$増   3锛氬彇鏀�
+                    return false;
+                }
+                BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd());
+                if (!basDevp.getAutoing().equals("Y")){
+                    return false;
+                }
+                if (!basDevp.getLoading().equals("Y") && basDevp.getWrkNo()==0){
+                    Date date = new Date();
+                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, rgvSlave.getDevpPlcId());
+                    StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo());
+                    if (staProtocol == null) {
+                        log.info(date+"鍙栨斁浠诲姟涓嬪彂锛氭湭鏌ヨ鍒扮珯鐐逛俊鎭細"+wrkMastSta);
+                        return false;
+                    }
+                    if (!staProtocol.isAutoing()){
+                        return false;
+                    }
+                    if (!staProtocol.isLoading() && staProtocol.getWorkNo() == 0){
+                        log.info(date+"鍙栬揣浠诲姟涓嬪彂锛氬皬杞﹀伐浣滄。锛�"+wrkMastSta);
+                        log.info(date+"鍙栬揣浠诲姟涓嬪彂锛氱洰鏍囩珯鐘舵�侊細"+basDevp);
+                        boolean sign = rgvPutFull(basRgvMap.getRgvNo(), wrkMastSta);
+                        if (sign){
+                            boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd());
+                            if (signMap){
+                                wrkMastSta.setWrkSts(1);
+                                try{
+                                    wrkMastStaMapper.updateById(wrkMastSta);
+                                }catch (Exception e){
+                                    log.error("鏇存柊灏忚溅浠诲姟澶辫触");
+                                }
+                                return true;
+                            }else {
+                                log.error("3978琛岋紝璐х墿鎼繍鍗曞彇浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo());
+                            }
+                        }else {
+                            log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo());
+                        }
+                        return true;
+                    }
+                }
+            }
+//            }
+        }catch (Exception e){
+            log.error("3978琛屾墽琛屽皬杞︽惉杩愪换鍔′笅鍙戝け璐�");
+            log.error("3978琛�"+e);
+        }
+        return false;
+    }
+    /**
      * 鎵ц灏忚溅鎼繍浠诲姟//鎷嗙洏
      */
     public synchronized boolean rgvRunWrkMastEmptyStaPut(RgvSlave rgvSlave) {//鎷嗙洏
@@ -3968,6 +4188,115 @@
                         break;
                     }
                 }
+//            }
+        }catch (Exception e){
+            log.error("3933琛屾墽琛屽皬杞︽斁绌烘澘浠诲姟涓嬪彂澶辫触");
+            log.error("3933琛�"+e);
+        }
+        return false;
+    }
+    /**
+     * 鎵ц灏忚溅鎼繍浠诲姟//鎷嗙洏
+     */
+    public synchronized boolean rgvRunWrkMastFullStaPut(RgvSlave rgvSlave) {//鎷嗙洏
+        try{
+//            for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
+            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+            if (rgvProtocol == null) {
+                return false;
+            }
+            BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
+            if (basRgv == null) {
+                log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
+                return false;
+            }
+
+            // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅浜屾湁鐗�//rgv鍙敤//鎷嗙洏
+            if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+                    && rgvProtocol.getStatusType1() == RgvStatusType.IDLE
+                    && rgvProtocol.getStatusType2() == RgvStatusType.IDLE
+                    && rgvProtocol.getModeType() == RgvModeType.AUTO
+                    && rgvProtocol.getLoaded1()==1
+                    && rgvProtocol.getTaskNo1()!=0 && rgvProtocol.getTaskNo2()==0
+            ) {
+                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                if (basRgvMap == null) {
+                    log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo());
+                    return false;
+                }
+                basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
+                List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());//鑾峰彇娲诲姩鑼冨洿
+                List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);//鏌ヨ鍙墽琛屼换鍔�
+                for (WrkMastSta wrkMastSta : wrkMastStaList){
+                    if (wrkMastSta.getType()!=1 || wrkMastSta.getWrkType()!=6){// 1:婊℃澘  || 宸ヤ綔绫诲瀷  1:鍙栵紙鍙犵洏锛�  2锛氭媶鐩�  5锛氭弧鍙�  6锛氭弧鏀�
+                        continue;
+                    }
+                    boolean sign = false;
+                    if ( wrkMastSta.getStaEnd()!=0){//鏀�
+                        BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd());
+                        if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y") || basDevp.getWrkNo()!=0){
+                            continue;
+                        }
+                        if (basDevp.getDevNo()>117 && basDevp.getDevNo()<124){
+                            if (basDevp.getLoadingSuper().equals("Y")){
+                                continue;
+                            }
+                        }
+                        if (basDevp.getDevNo()>=118 && basDevp.getDevNo()<=123){
+                            if (!basDevp.getEmptyMk().equals("Y")){
+                                continue;
+                            }
+                        }
+                        Date date = new Date();
+
+                        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, rgvSlave.getDevpPlcId());
+                        StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo());
+                        if (staProtocol == null) {
+                            log.info(date+"鎷嗙洏浠诲姟涓嬪彂锛氭湭鏌ヨ鍒扮珯鐐逛俊鎭細"+wrkMastSta);
+                            continue;
+                        }
+                        if (!staProtocol.isAutoing() || staProtocol.isLoading() || staProtocol.getWorkNo() != 0){
+                            continue;
+                        }
+                        if (basDevp.getDevNo()>117 && basDevp.getDevNo()<124){
+                            if (staProtocol.isLoadingSuper()){
+                                continue;
+                            }
+                        }
+                        if (basDevp.getDevNo()>=118 && basDevp.getDevNo()<=123){
+                            if (!staProtocol.isEmptyMk()){
+                                continue;
+                            }
+                        }
+
+                        log.info(date+"鎷嗙洏浠诲姟涓嬪彂锛氬皬杞﹀伐浣滄。锛�"+wrkMastSta);
+                        log.info(date+"鎷嗙洏浠诲姟涓嬪彂锛氱洰鏍囩珯鐘舵�侊細"+basDevp);
+//                        sign = rgvPutEmpty(rgvProtocol.getRgvNo(),wrkMastSta);//鎷嗙洏
+                        sign = rgvPutFull(basRgvMap.getRgvNo(), wrkMastSta);
+
+                    }else {
+                        continue;
+                    }
+                    if (sign){
+                        boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd());
+                        if (signMap){
+                            wrkMastSta.setWrkSts(2);
+                            try{
+                                wrkMastStaMapper.updateById(wrkMastSta);
+                            }catch (Exception e){
+                                log.error("鏇存柊灏忚溅浠诲姟澶辫触");
+                            }
+                            return true;
+                        }else {
+                            log.error("3857琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo());
+                        }
+                    }else {
+                        log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo());
+                    }
+                    break;
+                }
+            }
 //            }
         }catch (Exception e){
             log.error("3933琛屾墽琛屽皬杞︽斁绌烘澘浠诲姟涓嬪彂澶辫触");
@@ -4171,6 +4500,92 @@
                         break;
                     }
                 }
+//            }
+        }catch (Exception e){
+            log.error("3989琛屾墽琛屽皬杞﹀彇绌烘澘浠诲姟涓嬪彂澶辫触");
+            log.error("3989琛�"+e);
+        }
+        return false;
+    }
+
+    public synchronized boolean rgvRunWrkMastFullStaTake(RgvSlave rgvSlave) {//鍙犵洏
+        try{
+//            for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
+            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+            if (rgvProtocol == null) {
+                return false;
+            }
+            BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
+            if (basRgv == null) {
+                log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
+                return false;
+            }
+
+            // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅浜屾棤鐗�//rgv鍙敤
+            if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+                    && rgvProtocol.getStatusType1() == RgvStatusType.IDLE
+                    && rgvProtocol.getStatusType2() == RgvStatusType.IDLE
+                    && rgvProtocol.getModeType() == RgvModeType.AUTO
+                    && rgvProtocol.getLoaded1() == 0
+                    && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0
+            ) {
+                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                if (basRgvMap == null) {
+                    log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo());
+                    return false;
+                }
+                List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());
+                basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
+                List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);
+                for (WrkMastSta wrkMastSta : wrkMastStaList){
+                    if (wrkMastSta.getType()!=1 || wrkMastSta.getWrkType()!=5){// 1:婊℃澘  || 宸ヤ綔绫诲瀷  1:鍙栵紙鍙犵洏锛�  2锛氭媶鐩�  5锛氭弧鍙�  6锛氭弧鏀�
+                        continue;
+                    }
+                    boolean sign = false;
+                    if ( wrkMastSta.getStaStart()!=0){//鍙�
+                        BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaStart());
+                        if (!basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("Y")){
+                            continue;
+                        }
+                        Date date = new Date();
+
+                        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, rgvSlave.getDevpPlcId());
+                        StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo());
+                        if (staProtocol == null) {
+                            log.info(date+"鍙犵洏浠诲姟涓嬪彂锛氭湭鏌ヨ鍒扮珯鐐逛俊鎭細"+wrkMastSta);
+                            continue;
+                        }
+                        if (!staProtocol.isAutoing() || !staProtocol.isLoading()){
+                            continue;
+                        }
+
+                        log.info(date+"鍙犵洏浠诲姟涓嬪彂锛氬皬杞﹀伐浣滄。锛�"+wrkMastSta);
+                        log.info(date+"鍙犵洏浠诲姟涓嬪彂锛氱洰鏍囩珯鐘舵�侊細"+basDevp);
+//                        sign = rgvTakeEmpty(rgvProtocol.getRgvNo(),wrkMastSta);//鍙犵洏
+                        sign = rgvTakeFull(rgvProtocol.getRgvNo(),wrkMastSta);//鍙犵洏
+                    }else {
+                        continue;
+                    }
+                    if (sign){
+                        boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), basRgvMap.getStartRoute());
+                        if (signMap){
+                            wrkMastSta.setWrkSts(1);
+                            try{
+                                wrkMastStaMapper.updateById(wrkMastSta);
+                            }catch (Exception e){
+                                log.error("鏇存柊灏忚溅浠诲姟澶辫触");
+                            }
+                            return true;
+                        }else {
+                            log.error("3879琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo());
+                        }
+                    }else {
+                        log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo());
+                    }
+                    break;
+                }
+            }
 //            }
         }catch (Exception e){
             log.error("3989琛屾墽琛屽皬杞﹀彇绌烘澘浠诲姟涓嬪彂澶辫触");
@@ -4480,6 +4895,57 @@
         }
     }
 
+    /*
+     * 灏忚溅XY绉诲姩  閬胯
+     * */
+    public synchronized boolean rgvAvoidanceXYWrkMast(Integer rgvId){
+        if (rgvId==2){
+            try{
+                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId);
+                //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+                RgvCommand rgvCommand = new RgvCommand();
+                rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
+                rgvCommand.setAckFinish2((short) 0);  // 宸ヤ綅2浠诲姟瀹屾垚纭浣�
+                rgvCommand.setTaskNo2((short)32222); // 宸ヤ綅2宸ヤ綔鍙�
+                rgvCommand.setTaskMode2(RgvTaskModeType.X_MOVE); // 宸ヤ綅2浠诲姟妯″紡:  鍥炲師鐐�
+                rgvCommand.setSourceStaNo2((short)121);
+                rgvCommand.setCommand((short) 2);   //宸ヤ綅2浠诲姟纭
+                if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) {
+                    //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�   step=9锛屽洖鍘熺偣 9999浠诲姟鍙�
+                    log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+                    return false;
+                } else {
+                    return true;
+                }
+            }catch (Exception e){
+                return false;
+
+            }
+        }else {
+            try{
+                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId);
+                //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+                RgvCommand rgvCommand = new RgvCommand();
+                rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
+                rgvCommand.setAckFinish2((short) 0);  // 宸ヤ綅2浠诲姟瀹屾垚纭浣�
+                rgvCommand.setTaskNo2((short)32222); // 宸ヤ綅2宸ヤ綔鍙�
+                rgvCommand.setTaskMode2(RgvTaskModeType.X_MOVE); // 宸ヤ綅2浠诲姟妯″紡:  鍥炲師鐐�
+                rgvCommand.setSourceStaNo2((short)118);
+                rgvCommand.setCommand((short) 2);   //宸ヤ綅2浠诲姟纭
+                if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) {
+                    //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�   step=9锛屽洖鍘熺偣 9999浠诲姟鍙�
+                    log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+                    return false;
+                } else {
+                    return true;
+                }
+            }catch (Exception e){
+                return false;
+
+            }
+        }
+    }
+
 
     /*
     * 灏忚溅鍙栬揣鑷冲伐浣嶄换鍔�
@@ -4492,6 +4958,60 @@
             rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
             rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
             rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅1浠诲姟妯″紡:  鍙栨斁璐�
+            rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue());   //宸ヤ綅1璧风偣
+            rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue());   //宸ヤ綅1鐩爣绔欑偣
+            rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
+            if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) {
+                //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�
+                log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+                return false;
+            } else {
+                return true;
+            }
+        }catch (Exception e){
+            return false;
+        }
+    }
+
+
+    /*
+     * 灏忚溅鍙栬揣鑷冲伐浣嶄换鍔�
+     * */
+    public synchronized boolean rgvTakeFullPut(Integer rgvId,WrkMastSta wrkMastSta){
+        try{
+            //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+            RgvCommand rgvCommand = new RgvCommand();
+            rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
+            rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+            rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
+            rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 宸ヤ綅1浠诲姟妯″紡:  鍗曞彇
+            rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue());   //宸ヤ綅1璧风偣
+            rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue());   //宸ヤ綅1鐩爣绔欑偣
+            rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
+            if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) {
+                //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�
+                log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+                return false;
+            } else {
+                return true;
+            }
+        }catch (Exception e){
+            return false;
+        }
+    }
+
+
+    /*
+     * 灏忚溅鏀捐揣鑷冲伐浣嶄换鍔�
+     * */
+    public synchronized boolean rgvTakeFullTake(Integer rgvId,WrkMastSta wrkMastSta){
+        try{
+            //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+            RgvCommand rgvCommand = new RgvCommand();
+            rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
+            rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+            rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙�
+            rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 宸ヤ綅1浠诲姟妯″紡:  鍗曟斁
             rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue());   //宸ヤ綅1璧风偣
             rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue());   //宸ヤ綅1鐩爣绔欑偣
             rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
@@ -4678,6 +5198,28 @@
     }
 
     /*
+     * 灏忚溅澶嶄綅
+     * */
+    public synchronized boolean rgvComplete(Integer rgvId,Short taskNo1){
+        try{
+            RgvCommand rgvCommand = new RgvCommand();
+            rgvCommand.setTaskNo1(taskNo1);
+            //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+            if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(8, rgvCommand))) {
+                //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�
+                log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}",rgvId);
+                return false;
+            } else {
+                log.info("RGV鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}",rgvId);
+                return true;
+            }
+        }catch (Exception e){
+            log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}銆傚紓甯革細"+e,rgvId);
+            return false;
+        }
+    }
+
+    /*
      * 灏忚溅鍦板浘鏇存柊  鏇存柊閿�
      * */
     public synchronized boolean rgvMapUpdate(BasRgvMap basRgvMapCurrent,Integer staStart,Integer staEnd){

--
Gitblit v1.9.1