From 420cb1d10f9dae64fb412976903ecbc29b03555b Mon Sep 17 00:00:00 2001
From: LSH
Date: 星期四, 28 十二月 2023 10:12:18 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  832 +++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 699 insertions(+), 133 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 e3dfe47..f81702f 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -8,11 +8,9 @@
 import com.core.common.DateUtils;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
-import com.zy.asrs.mapper.BasCrnErrorMapper;
-import com.zy.asrs.mapper.BasRgvErrMapper;
-import com.zy.asrs.mapper.WaitPakinMapper;
-import com.zy.asrs.mapper.WrkMastMapper;
+import com.zy.asrs.mapper.*;
 import com.zy.asrs.service.*;
+import com.zy.asrs.utils.RouteUtils;
 import com.zy.asrs.utils.Utils;
 import com.zy.asrs.utils.VersionUtils;
 import com.zy.common.model.LocTypeDto;
@@ -96,6 +94,10 @@
     private BasRgvPathService basRgvPathService;
     @Autowired
     private RedisUtil redisUtil;
+    @Autowired
+    private WrkMastStaMapper wrkMastStaMapper;
+    @Autowired
+    private BasRgvMapMapper basRgvMapMapper;
 
     @Value("${wms.url}")
     private String wmsUrl;
@@ -195,12 +197,12 @@
                             StartupDto dto = jsonObject.getObject("data", StartupDto.class);
 
                             barcodeThread.setBarcode("");
-                            staProtocol.setWorkNo(dto.getWorkNo().shortValue());
+                            staProtocol.setWorkNo(dto.getWorkNo());
 
                             if(Cools.isEmpty(dto.getRgvNo()) || dto.getRgvNo() <= 0) {
-                                staProtocol.setStaNo(dto.getStaNo().shortValue());
+                                staProtocol.setStaNo(dto.getStaNo());
                             } else {//濡傛灉瀛樺湪RGV缂栧彿锛岃鏄庨渶瑕丷GV鎺ラ┏锛屽厛涓嬪彂浠诲姟鍒癛GV婧愮珯
-                                staProtocol.setStaNo(dto.getRgvSstaNo().shortValue());
+                                staProtocol.setStaNo(dto.getRgvSstaNo());
                             }
 
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -261,8 +263,8 @@
                     // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
                     // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
-                    staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
-                    staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                    staProtocol.setWorkNo(wrkMast.getWrkNo());
+                    staProtocol.setStaNo(wrkMast.getStaNo());
                     devpThread.setPakMk(staProtocol.getSiteId(), false);
                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                     if (result) {
@@ -391,8 +393,8 @@
                     }
 
                     // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
-                    staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
-                    staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                    staProtocol.setWorkNo(wrkMast.getWrkNo());
+                    staProtocol.setStaNo(wrkMast.getStaNo());
                     devpThread.setPakMk(staProtocol.getSiteId(), false);
                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                     if (!result) {
@@ -446,8 +448,8 @@
                         // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
 
                         // 涓嬪彂绔欑偣淇℃伅
-                        staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
-                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                        staProtocol.setWorkNo(wrkMast.getWrkNo());
+                        staProtocol.setStaNo(wrkMast.getStaNo());
                         if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
                             continue;
                         }
@@ -473,50 +475,54 @@
      * 鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
      */
     public synchronized void crnIoExecute() {
-        for (CrnSlave crn : slaveProperties.getCrn()) {
-            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
-            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
-            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
-            if (crnProtocol == null) {
-                continue;
-            }
-            BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
-            if (basCrnp == null) {
-                log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
-                continue;
-            }
+        try{
+            for (CrnSlave crn : slaveProperties.getCrn()) {
+                // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                if (crnProtocol == null) {
+                    continue;
+                }
+                BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
+                if (basCrnp == null) {
+                    log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
+                    continue;
+                }
 
-            // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
-            if (crnProtocol.getStatusType() == CrnStatusType.IDLE
-                    && crnProtocol.getTaskNo() == 0
-                    && crnProtocol.getModeType() == CrnModeType.AUTO
-                    && crnProtocol.getLoaded() == 0
-                    && crnProtocol.getForkPos() == 0) {
-                // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
-                if (crnProtocol.getLastIo().equals("I")) {
-                    if (basCrnp.getInEnable().equals("Y")) {
-                        this.crnStnToLoc1(crn, crnProtocol); //  鍏ュ簱
-                        crnProtocol.setLastIo("O");
-                    } else if (basCrnp.getOutEnable().equals("Y")) {
-                        this.locToCrnStn1(crn, crnProtocol); //  鍑哄簱
-                        crnProtocol.setLastIo("I");
+                // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
+                if (crnProtocol.getStatusType() == CrnStatusType.IDLE
+                        && crnProtocol.getTaskNo() == 0
+                        && crnProtocol.getModeType() == CrnModeType.AUTO
+                        && crnProtocol.getLoaded() == 0
+                        && crnProtocol.getForkPos() == 0) {
+                    // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
+                    if (crnProtocol.getLastIo().equals("I")) {
+                        if (basCrnp.getInEnable().equals("Y")) {
+                            this.crnStnToLoc1(crn, crnProtocol); //  鍏ュ簱
+                            crnProtocol.setLastIo("O");
+                        } else if (basCrnp.getOutEnable().equals("Y")) {
+                            this.locToCrnStn1(crn, crnProtocol); //  鍑哄簱
+                            crnProtocol.setLastIo("I");
+                        }
+                    }
+                    // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
+                    else if (crnProtocol.getLastIo().equals("O")) {
+                        if (basCrnp.getOutEnable().equals("Y")) {
+                            this.locToCrnStn1(crn, crnProtocol); //  鍑哄簱
+                            crnProtocol.setLastIo("I");
+                        } else if (basCrnp.getInEnable().equals("Y")) {
+                            this.crnStnToLoc1(crn, crnProtocol); //  鍏ュ簱
+                            crnProtocol.setLastIo("O");
+                        }
                     }
                 }
-                // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
-                else if (crnProtocol.getLastIo().equals("O")) {
-                    if (basCrnp.getOutEnable().equals("Y")) {
-                        this.locToCrnStn1(crn, crnProtocol); //  鍑哄簱
-                        crnProtocol.setLastIo("I");
-                    } else if (basCrnp.getInEnable().equals("Y")) {
-                        this.crnStnToLoc1(crn, crnProtocol); //  鍏ュ簱
-                        crnProtocol.setLastIo("O");
-                    }
-                }
-            }
-            // 搴撲綅绉昏浆
-            this.locToLoc(crn, crnProtocol);
+                // 搴撲綅绉昏浆
+                this.locToLoc(crn, crnProtocol);
 //            this.crnRebackHp(crnProtocol, crnThread);
 
+            }
+        }catch (Exception e){
+            log.error("鍫嗗灈鏈哄嚭鍏ュ簱涓嬪彂鎶ラ敊"+e);
         }
     }
 
@@ -524,60 +530,65 @@
      * 鎼滅储RGV杞︺�傞�氳繃鐩爣绔欐悳绱㈠摢鍙拌溅鍙敤
      */
     public synchronized Integer searchRgvNo(Integer staNo) {
-        BasDevp basDevp = basDevpService.selectById(staNo);
-        if (basDevp == null) {
-            return null;//鐩爣绔欎笉瀛樺湪
-        }
-        //璺緞鍊�
-        int path = basDevp.getLocType3().intValue();
-
-        ArrayList<RgvThread> list = new ArrayList<>();
-        for (RgvSlave rgv : slaveProperties.getRgv()) {
-            // 鑾峰彇RGV淇℃伅
-            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
-            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
-            if (rgvProtocol == null) {
-
-                continue;
+        try{
+            BasDevp basDevp = basDevpService.selectById(staNo);
+            if (basDevp == null) {
+                return null;//鐩爣绔欎笉瀛樺湪
             }
-            BasRgv basRgv = basRgvService.selectById(rgv.getId());
-            if (basRgv == null) {
-                log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgv.getId());
-                continue;
-            }
+            //璺緞鍊�
+            int path = basDevp.getLocType3().intValue();
 
-            list.add(rgvThread);
-        }
+            ArrayList<RgvThread> list = new ArrayList<>();
+            for (RgvSlave rgv : slaveProperties.getRgv()) {
+                // 鑾峰彇RGV淇℃伅
+                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
+                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+                if (rgvProtocol == null) {
 
-        if (list.size() > 1) {
-            //瓒呰繃涓ゅ彴杞︼紝鎸夌収閰嶇疆鐨勮鍒欒繘琛屽垎閰�
-            for (RgvThread rgvThread : list) {
-                //鑾峰彇杞﹁締閰嶇疆鐨勮矾寰勮鍒�
-                BasRgvPath basRgvPath = basRgvPathService.selectByRgvNo(rgvThread.getSlave().getId());
-                if (basRgvPath == null) {
                     continue;
                 }
-                //鐩爣绔欐槸鍚﹀寘鍚綋鍓嶈矾寰勪腑
+                BasRgv basRgv = basRgvService.selectById(rgv.getId());
+                if (basRgv == null) {
+                    log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgv.getId());
+                    continue;
+                }
+
+                list.add(rgvThread);
+            }
+
+            if (list.size() > 1) {
+                //瓒呰繃涓ゅ彴杞︼紝鎸夌収閰嶇疆鐨勮鍒欒繘琛屽垎閰�
+                for (RgvThread rgvThread : list) {
+                    //鑾峰彇杞﹁締閰嶇疆鐨勮矾寰勮鍒�
+                    BasRgvPath basRgvPath = basRgvPathService.selectByRgvNo(rgvThread.getSlave().getId());
+                    if (basRgvPath == null) {
+                        continue;
+                    }
+                    //鐩爣绔欐槸鍚﹀寘鍚綋鍓嶈矾寰勪腑
+                    List<Integer> rgvPath = JSON.parseArray(basRgvPath.getPath(), Integer.class);
+                    if (rgvPath.contains(path)) {
+                        //褰撳墠璺緞涓寘鍚洰鏍囩珯锛屽垯閫夊畾杩欏彴杞�
+                        return rgvThread.getSlave().getId();
+                    }
+                }
+            }else {
+                //灏忎簬鎴栫瓑浜�1鍙拌溅锛屽垎閰嶅叏璺緞
+                BasRgvPath basRgvPath = basRgvPathService.selectByRgvNo(0);//鑾峰彇榛樿璺緞
+                if (basRgvPath == null) {
+                    return null;
+                }
                 List<Integer> rgvPath = JSON.parseArray(basRgvPath.getPath(), Integer.class);
                 if (rgvPath.contains(path)) {
                     //褰撳墠璺緞涓寘鍚洰鏍囩珯锛屽垯閫夊畾杩欏彴杞�
-                    return rgvThread.getSlave().getId();
+                    return list.get(0).getSlave().getId();
                 }
             }
-        }else {
-            //灏忎簬鎴栫瓑浜�1鍙拌溅锛屽垎閰嶅叏璺緞
-            BasRgvPath basRgvPath = basRgvPathService.selectByRgvNo(0);//鑾峰彇榛樿璺緞
-            if (basRgvPath == null) {
-                return null;
-            }
-            List<Integer> rgvPath = JSON.parseArray(basRgvPath.getPath(), Integer.class);
-            if (rgvPath.contains(path)) {
-                //褰撳墠璺緞涓寘鍚洰鏍囩珯锛屽垯閫夊畾杩欏彴杞�
-                return list.get(0).getSlave().getId();
-            }
-        }
 
-        return null;
+            return null;
+        }catch (Exception e){
+            log.error("鎼滅储RGV杞︺�傞�氳繃鐩爣绔欐悳绱㈠摢鍙拌溅鍙敤"+e);
+            return null;
+        }
     }
 
 //    /**
@@ -701,25 +712,29 @@
      * 缁戝畾灏忚溅鏂规硶
      */
     public synchronized void rgvBindSte2() {
-        for (RgvSlave rgv : slaveProperties.getRgv()) {
-            List<WrkMast> wrkMasts = wrkMastMapper.selectWaitBindRGVRgvNo(rgv.getId());
-            if (!Cools.isEmpty(wrkMasts) && wrkMasts.size()!=0){
-                continue;
-            }
-            List<WrkMast> wrkMasts2 = wrkMastMapper.selectWaitBindRgvNo2(rgv.getId());
-            for (WrkMast wrkMast : wrkMasts2) {
-                if (wrkMastMapper.selectWaitBindRgvNoOneWrkNo(wrkMast.getWrkNo())!=null){
+        try{
+            for (RgvSlave rgv : slaveProperties.getRgv()) {
+                List<WrkMast> wrkMasts = wrkMastMapper.selectWaitBindRGVRgvNo(rgv.getId());
+                if (!Cools.isEmpty(wrkMasts) && wrkMasts.size()!=0){
                     continue;
                 }
-                //鐩爣绔�
-                BasDevp basDevp = basDevpService.selectById(wrkMast.getRgvDstaNo());
-                if (Cools.isEmpty(basDevp) || !basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("N") || basDevp.getWrkNo()!=0){
-                    continue;
+                List<WrkMast> wrkMasts2 = wrkMastMapper.selectWaitBindRgvNo2(rgv.getId());
+                for (WrkMast wrkMast : wrkMasts2) {
+                    if (wrkMastMapper.selectWaitBindRgvNoOneWrkNo(wrkMast.getWrkNo())!=null){
+                        continue;
+                    }
+                    //鐩爣绔�
+                    BasDevp basDevp = basDevpService.selectById(wrkMast.getRgvDstaNo());
+                    if (Cools.isEmpty(basDevp) || !basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("N") || basDevp.getWrkNo()!=0){
+                        continue;
+                    }
+                    wrkMastMapper.insertRgvMast(wrkMast.getWrkNo());
+                    wrkMastMapper.updateRgvMast(wrkMast.getWrkNo());
+                    break;
                 }
-                wrkMastMapper.insertRgvMast(wrkMast.getWrkNo());
-                wrkMastMapper.updateRgvMast(wrkMast.getWrkNo());
-                break;
             }
+        }catch (Exception e){
+            log.error("灏忚溅鎼繍浠诲姟寮傚父锛歿}", e.getMessage());
         }
     }
 
@@ -2344,8 +2359,8 @@
                                 && rgvProtocol.statusType1 == RgvStatusType.WAITING) {
                             // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
                             // 涓嬪彂绔欑偣淇℃伅
-                            staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
-                            staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                            staProtocol.setWorkNo(wrkMast.getWrkNo());
+                            staProtocol.setStaNo(wrkMast.getStaNo());
                             if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) {
                                 continue;
                             }
@@ -2365,8 +2380,8 @@
                                 && rgvProtocol.statusType2 == RgvStatusType.WAITING) {
                             // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
                             // 涓嬪彂绔欑偣淇℃伅
-                            staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
-                            staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                            staProtocol.setWorkNo(wrkMast.getWrkNo());
+                            staProtocol.setStaNo(wrkMast.getStaNo());
                             if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) {
                                 continue;
                             }
@@ -2420,8 +2435,8 @@
                                 && rgvProtocol.statusType1 == RgvStatusType.WAITING) {
                             // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
                             // 涓嬪彂绔欑偣淇℃伅
-                            staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
-                            staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                            staProtocol.setWorkNo(wrkMast.getWrkNo());
+                            staProtocol.setStaNo(wrkMast.getStaNo());
                             if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) {
                                 continue;
                             }
@@ -2441,8 +2456,8 @@
                                 && rgvProtocol.statusType2 == RgvStatusType.WAITING) {
                             // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
                             // 涓嬪彂绔欑偣淇℃伅
-                            staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
-                            staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                            staProtocol.setWorkNo(wrkMast.getWrkNo());
+                            staProtocol.setStaNo(wrkMast.getStaNo());
                             if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) {
                                 continue;
                             }
@@ -2865,8 +2880,8 @@
                             StartupDto dto = jsonObject.getObject("data", StartupDto.class);
 
                             // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
-                            staProtocol.setWorkNo(dto.getWorkNo().shortValue());
-                            staProtocol.setStaNo(dto.getStaNo().shortValue());
+                            staProtocol.setWorkNo(dto.getWorkNo());
+                            staProtocol.setStaNo(dto.getStaNo());
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
                             boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                             if (!result) {
@@ -3670,9 +3685,8 @@
                         && staProtocol.getWorkNo() == 9992
                 ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) {
 
-                    staProtocol.setWorkNo((short)9999);
-                    staNo = staNo + 1;
-                    staProtocol.setStaNo((short)staNo);
+                    staProtocol.setWorkNo(9999);
+                    staProtocol.setStaNo(staNo + 1);
                     devpThread.setPakMk(staProtocol.getSiteId(), false);
                     boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol));
                     if (!result) {
@@ -3682,8 +3696,9 @@
                 }
             }
         }catch (Exception e){
-            e.printStackTrace();
-            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//            e.printStackTrace();
+//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            log.error("鍏朵粬  ===>> 鐮佸灈瀹屾垚椹卞姩鎵樼洏杩涘叆涓嬩竴姝ワ紙鍏ュ簱鍓嶆壂鐮侊級"+e);
         }
     }
     /**
@@ -3726,8 +3741,8 @@
                         && staProtocol.getWorkNo() >= 9990
                 ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) {
 
-                    staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
-                    staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                    staProtocol.setWorkNo(wrkMast.getWrkNo());
+                    staProtocol.setStaNo(wrkMast.getStaNo());
                     devpThread.setPakMk(staProtocol.getSiteId(), false);
                     boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol));
                     if (!result) {
@@ -3739,8 +3754,9 @@
                 }
             }
         }catch (Exception e){
-            e.printStackTrace();
-            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//            e.printStackTrace();
+//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            log.error("鍏朵粬  ===>> 鐮佸灈瀹屾垚椹卞姩鎵樼洏杩涘叆涓嬩竴姝�"+e);
         }
     }
     /**
@@ -3785,8 +3801,8 @@
                         && staProtocol.isLoading()
                 ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) {
 
-                    staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
-                    staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                    staProtocol.setWorkNo(wrkMast.getWrkNo());
+                    staProtocol.setStaNo(wrkMast.getStaNo());
                     devpThread.setPakMk(staProtocol.getSiteId(), false);
                     boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol));
                     if (!result) {
@@ -3798,8 +3814,558 @@
                 }
             }
         }catch (Exception e){
-            e.printStackTrace();
-            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//            e.printStackTrace();
+//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            log.error("鍏朵粬  ===>> 璐存爣瀹屾垚椹卞姩鎵樼洏杩涘叆涓嬩竴姝�"+e);
         }
     }
+
+    /**
+     *  瀹屾垚灏忚溅浠诲姟
+     */
+    public synchronized void rgvCompleteWrkMastSta() {
+        try{
+            for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
+                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+                if (rgvProtocol == null) {
+                    continue;
+                }
+                BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
+                if (basRgv == null) {
+                    log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
+                    continue;
+                }
+
+                // 鍙湁褰揜GV绛夊緟WCS纭銆佽嚜鍔�
+                if (rgvProtocol.getStatusType() == RgvStatusType.WAITING
+                        && rgvProtocol.getModeType() == RgvModeType.AUTO
+                ) {
+                    log.info("{}鍙峰皬杞︾瓑寰厀cs纭锛岀姸鎬亄}锛屽弬鏁皗}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol);
+                    if (rgvProtocol.getTaskNo1()!=0){
+                        if (rgvProtocol.getTaskNo1()==9999){
+                            boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
+                            if (!rgvComplete){
+                                log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo());
+                            }
+                            BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                            basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
+                            rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
+                            break;
+                        }
+                        WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1().intValue());
+                        if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=1 || wrkMastSta.getWrkSts()!=1){
+                            log.error("鏈煡鍒板皬杞︽墽琛屼换鍔℃垨鑰呮墽琛屼换鍔$姸鎬佷笉绗﹀悎锛�"+wrkMastSta);
+                            continue;
+                        }
+                        boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
+                        if (!rgvComplete){
+                            log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo());
+                            break;
+                        }
+                        wrkMastSta.setWrkSts(3);
+                        wrkMastStaMapper.updateById(wrkMastSta);
+                        BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                        basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
+                        rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
+                    }else if (rgvProtocol.getTaskNo2()!=0){
+                        if (rgvProtocol.getTaskNo2()==9999){
+                            boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
+                            if (!rgvComplete){
+                                log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo());
+                            }
+                            BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                            basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
+                            rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
+                            break;
+                        }
+                        WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo2().intValue());
+                        if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=2){
+                            log.error("鏈煡鍒板皬杞︽墽琛屼换鍔℃垨鑰呮墽琛屼换鍔$姸鎬佷笉绗﹀悎锛�"+wrkMastSta);
+                            continue;
+                        }
+                        boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
+                        if (!rgvComplete){
+                            log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo());
+                            break;
+                        }
+                        wrkMastSta.setWrkSts(3);
+                        wrkMastStaMapper.updateById(wrkMastSta);
+                        BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                        basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
+                        rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
+                    }else {
+                        log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{},绛夊緟wcs纭浣嗘槸娌℃湁宸ヤ綔鍙凤紒",rgvProtocol.getRgvNo());
+                    }
+                }
+            }
+        }catch (Exception e){
+            log.error("灏忚溅澶嶄綅绾跨▼鎶ラ敊锛�"+e);
+        }
+    }
+    /**
+     * 鎵ц灏忚溅鎼繍浠诲姟
+     */
+    public synchronized void rgvRunWrkMastFullSta() {
+        try{
+            for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
+                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+                if (rgvProtocol == null) {
+                    continue;
+                }
+                BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
+                if (basRgv == null) {
+                    log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
+                    continue;
+                }
+
+                // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
+                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+                        && rgvProtocol.getModeType() == RgvModeType.AUTO
+                        && rgvProtocol.getLoaded1()==0
+                ) {
+                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                    if (basRgvMap == null) {
+                        log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo());
+                        continue;
+                    }
+                    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;
+                        }
+                        boolean sign = rgvTakeFullAll(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;
+                            }else {
+                                log.error("3864琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo());
+                            }
+                        }else {
+                            log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo());
+                        }
+                        break;
+                    }
+                }
+            }
+        }catch (Exception e){
+            log.error("3875琛屾墽琛屽皬杞︽惉杩愪换鍔′笅鍙戝け璐�");
+            log.error("3875琛�"+e);
+        }
+    }
+    /**
+     * 鎵ц灏忚溅鎼繍浠诲姟
+     */
+    public synchronized void rgvRunWrkMastEmptyStaPut() {//鏀�
+        try{
+            for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
+                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+                if (rgvProtocol == null) {
+                    continue;
+                }
+                BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
+                if (basRgv == null) {
+                    log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
+                    continue;
+                }
+
+                // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅浜屾湁鐗�//rgv鍙敤
+                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+                        && rgvProtocol.getModeType() == RgvModeType.AUTO
+                        && rgvProtocol.getLoaded2()==1  //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴
+                ) {
+                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                    if (basRgvMap == null) {
+                        log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo());
+                        continue;
+                    }
+                    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()!=2 || (wrkMastSta.getWrkType()!=2 && wrkMastSta.getWrkType()!=4)){// 2:绌烘澘  2:鏀� 4锛氭媶鐩�
+                            continue;
+                        }
+                        boolean sign = false;
+                        if (wrkMastSta.getStaStart()==0 && wrkMastSta.getStaEnd()!=0){//鏀�
+                            sign = rgvPutEmpty(rgvProtocol.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;
+                            }else {
+                                log.error("3857琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo());
+                            }
+                        }else {
+                            log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo());
+                        }
+                        break;
+                    }
+                }
+            }
+        }catch (Exception e){
+            log.error("3933琛屾墽琛屽皬杞︽斁绌烘澘浠诲姟涓嬪彂澶辫触");
+            log.error("3933琛�"+e);
+        }
+    }
+
+    public synchronized void rgvRunWrkMastEmptyStaTake() {//鍙�
+        try{
+            for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
+                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+                if (rgvProtocol == null) {
+                    continue;
+                }
+                BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
+                if (basRgv == null) {
+                    log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
+                    continue;
+                }
+
+                // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅浜屾棤鐗�//rgv鍙敤
+                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+                        && rgvProtocol.getModeType() == RgvModeType.AUTO
+                        && rgvProtocol.getLoaded2()==0  //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴
+                ) {
+                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                    if (basRgvMap == null) {
+                        log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo());
+                        continue;
+                    }
+                    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()!=2 || wrkMastSta.getWrkType()!=1){// 2:绌烘澘  1:鍙�
+                            continue;
+                        }
+                        boolean sign = false;
+                        if (wrkMastSta.getStaEnd()==0 && wrkMastSta.getStaStart()!=0){//鍙�
+                            sign = rgvTakeEmpty(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;
+                            }else {
+                                log.error("3879琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo());
+                            }
+                        }else {
+                            log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo());
+                        }
+                        break;
+                    }
+                }
+            }
+        }catch (Exception e){
+            log.error("3989琛屾墽琛屽皬杞﹀彇绌烘澘浠诲姟涓嬪彂澶辫触");
+            log.error("3989琛�"+e);
+        }
+    }
+
+    /*
+    * 鏈変换鍔′絾鏈墽琛�  姝ゆ椂闇�瑕佽皟鏁村皬杞︿綅缃�
+    * */
+    public synchronized void rgvRunWrkMastEmptyStaAvoidance() {
+        try{
+            Integer integer = wrkMastStaMapper.selectAllWrkStsCount(null,0);//鏌ヨ鐘舵�佷负0鐨勪换鍔�
+            if (integer==0){
+                return;
+            }
+            for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
+                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+                if (rgvProtocol == null) {
+                    continue;
+                }
+                BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
+                if (basRgv == null) {
+                    log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
+                    continue;
+                }
+
+                // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
+                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+                        && rgvProtocol.getModeType() == RgvModeType.AUTO
+                        && rgvProtocol.getLoaded1()==0  //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴
+                        && rgvProtocol.getTaskNo1()==0
+                        && rgvProtocol.getTaskNo2()==0
+                ) {
+                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                    if (rgvProtocol.getRgvPosI().equals(basRgvMap.getStartRoute())){
+                        continue;
+                    }
+                    rgvAvoidanceXY(rgvProtocol.getRgvNo());
+                    rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
+                }
+            }
+        }catch (Exception e){
+            log.error("4109琛屾墽琛屽皬杞﹀垵濮嬪寲浠诲姟涓嬪彂澶辫触");
+            log.error("4109琛�"+e);
+        }
+    }
+
+    /*
+     * 鍒锋柊鍦板浘鏁版嵁
+     * */
+    public synchronized void refreshRgvMap() {
+        try{
+            for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
+                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+                if (rgvProtocol == null) {
+                    continue;
+                }
+                BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
+                if (basRgv == null) {
+                    log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId());
+                    continue;
+                }
+
+                // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
+                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+                        && rgvProtocol.getModeType() == RgvModeType.AUTO
+                        && rgvProtocol.getLoaded1()==0  //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴
+                        && (rgvProtocol.getTaskNo1()==0 || rgvProtocol.getTaskNo1()==9999)
+                        && (rgvProtocol.getTaskNo2()==0 || rgvProtocol.getTaskNo2()==9999)
+                ) {
+                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
+                    basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
+                    rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
+                }
+            }
+        }catch (Exception e){
+            log.error("4109琛屾墽琛屽皬杞﹀垵濮嬪寲浠诲姟涓嬪彂澶辫触");
+            log.error("4109琛�"+e);
+        }
+    }
+
+    /*
+     * 灏忚溅XY绉诲姩  閬胯
+     * */
+    public synchronized boolean rgvAvoidanceXY(Integer rgvId){
+        try{
+            //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+            RgvCommand rgvCommand = new RgvCommand();
+            rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
+            rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+            rgvCommand.setTaskNo1((short)9999); // 宸ヤ綅1宸ヤ綔鍙�
+            rgvCommand.setTaskMode1(RgvTaskModeType.GO_ORIGIN); // 宸ヤ綅1浠诲姟妯″紡:  鍥炲師鐐�
+            rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
+            if (!MessageQueue.offer(SlaveType.Crn, rgvId, new Task(9, 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;
+
+        }
+    }
+
+
+    /*
+    * 灏忚溅鍙栬揣鑷冲伐浣嶄换鍔�
+    * */
+    public synchronized boolean rgvTakeFullAll(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_PUT); // 宸ヤ綅1浠诲姟妯″紡:  鍙栨斁璐�
+            rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue());   //宸ヤ綅1璧风偣
+            rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue());   //宸ヤ綅1鐩爣绔欑偣
+            rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
+            if (!MessageQueue.offer(SlaveType.Crn, 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 rgvTakeFull(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.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
+            if (!MessageQueue.offer(SlaveType.Crn, 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 rgvPutFull(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.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue());   //宸ヤ綅1鐩爣绔欑偣
+            rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
+            if (!MessageQueue.offer(SlaveType.Crn, 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 rgvTakeEmpty(Integer rgvId,WrkMastSta wrkMastSta){
+        try{
+            //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+            RgvCommand rgvCommand = new RgvCommand();
+            rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
+            rgvCommand.setAckFinish2((short) 0);  // 宸ヤ綅2浠诲姟瀹屾垚纭浣�
+            rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙�
+            rgvCommand.setTaskMode2(RgvTaskModeType.FETCH); // 宸ヤ綅2浠诲姟妯″紡:  鍙栬揣
+            rgvCommand.setSourceStaNo2(wrkMastSta.getStaStart().shortValue());   //宸ヤ綅2璧风偣
+            rgvCommand.setCommand((short) 2);   //宸ヤ綅2浠诲姟纭
+            if (!MessageQueue.offer(SlaveType.Crn, rgvId, new Task(5, 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 rgvPutEmpty(Integer rgvId,WrkMastSta wrkMastSta){
+        try{
+            //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+            RgvCommand rgvCommand = new RgvCommand();
+            rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
+            rgvCommand.setAckFinish2((short) 0);  // 宸ヤ綅2浠诲姟瀹屾垚纭浣�
+            rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙�
+            rgvCommand.setTaskMode2(RgvTaskModeType.PUT); // 宸ヤ綅2浠诲姟妯″紡:  鏀捐揣
+            rgvCommand.setDestinationStaNo2(wrkMastSta.getStaEnd().shortValue());   //宸ヤ綅2鐩爣绔欑偣
+            rgvCommand.setCommand((short) 2);   //宸ヤ綅2浠诲姟纭
+            if (!MessageQueue.offer(SlaveType.Crn, rgvId, new Task(5, 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 rgvComplete(Integer rgvId){
+        try{
+            //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+            if (!MessageQueue.offer(SlaveType.Crn, rgvId, new Task(3, new 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){
+
+//        List<Integer> integers = RouteUtils.RouteMapCurrentFar(basRgvMapCurrent.getNowRoute(),staStart,staEnd, basRgvMapCurrent.getLockStartRoute());
+        //鏇存柊褰撳墠灏忚溅閿�
+        try{
+            Integer farCurrentStaNo = RouteUtils.RouteIndexFarMas(basRgvMapCurrent.getNowRoute(), staStart, staEnd, basRgvMapCurrent.getLockStartRoute());//鑾峰彇鏈�杩滅珯鐐�
+            Integer fallMerge = RouteUtils.RouteIndexFarMas(basRgvMapCurrent.getRgvNo(), farCurrentStaNo); //鑾峰彇鍚堝苟骞叉秹椤�
+            basRgvMapCurrent.setLockEndRoute(fallMerge);
+            basRgvMapMapper.updateById(basRgvMapCurrent);
+
+            //鏇存柊鍙︿竴鍙板皬杞﹀湴鍥�
+            Integer rgvNoOther = basRgvMapCurrent.getRgvNoOther();
+            BasRgvMap basRgvMapOther = basRgvMapMapper.selectById(rgvNoOther);
+            List<Integer> integers = RouteUtils.RouteMapCurrentFar(fallMerge, basRgvMapCurrent.getLockStartRoute());
+            Integer lockEndRoute = RouteUtils.RouteMapOtherFarStnNo(integers, basRgvMapCurrent.getLockStartRoute());//鍙︿竴鍙板皬杞﹀彲娲诲姩鏈�杩滀綅缃�
+            basRgvMapOther.setStartRoute(lockEndRoute);
+            basRgvMapMapper.updateById(basRgvMapOther);
+            return true;
+        }catch (Exception e){
+            log.error("灏忚溅鍦板浘鏇存柊鍑洪敊锛�");
+            return false;
+        }
+    }
+
 }

--
Gitblit v1.9.1