From 5ae3b6c3d604f16c2ecc5057d720d5d79c8c091b Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期日, 23 十一月 2025 14:21:33 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  399 +++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 288 insertions(+), 111 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 5789190..0a2b19e 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -111,6 +111,8 @@
     private BasArmMastService basArmMastService;
     @Autowired
     private ApiLogService apiLogService;
+    @Autowired
+    private BasDevpOptService basDevpOptService;
 
     @Value("${wms.url}")
     private String wmsUrl;
@@ -121,7 +123,7 @@
     private Integer inventoryNumber;
 
     public Integer wrkNo = 10001;
-    public static final List<Integer> LEFT_POSITION = Arrays.asList(1018,2018);
+    public static final List<Integer> LEFT_POSITION = Arrays.asList(1004,1014,1018,1028,1035,2006,2012,2018,2024,2030);
     /**
      * 缁勬墭
      * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
@@ -201,6 +203,7 @@
                         MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg));
                     }
                     staProtocol.setWorkNo(wrkNo);
+                    staProtocol.setErrCode(errMsg);
                     News.info("寮傚父鍒ゆ柇{}鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", inSta.getStaNo(), errMsg,wrkNo);
                     wrkNo++;
                     staProtocol.setStaNo(inSta.getBackSta().shortValue());
@@ -229,6 +232,7 @@
                             MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg));
                         }
                         staProtocol.setWorkNo(wrkNo);
+                        staProtocol.setErrCode(errMsg);
                         News.info("鏉$爜鍒ゆ柇{}鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", inSta.getStaNo(), errMsg,wrkNo);
                         wrkNo++;
                         staProtocol.setStaNo(inSta.getBackSta().shortValue());
@@ -299,7 +303,6 @@
                     }
                     try {
                         LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
-
                         SearchLocParam param = new SearchLocParam();
                         param.setBarcode(barcode);
                         param.setIoType(1);
@@ -334,6 +337,10 @@
                             staProtocol.setWorkNo(wrkNo);
                             staProtocol.setStaNo(inSta.getBackSta().shortValue());
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            switch (jsonObject.getInteger("code")){
+                                case 700: staProtocol.setErrCode("鏈粍鎵�");break;
+                                case 500: staProtocol.setErrCode("宸ヤ綔妗�/搴撳瓨鏉$爜鏁版嵁宸插瓨鍦�");break;
+                            }
                             MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                             News.info("浠诲姟涓嬪彂鍒ゆ柇{}鍏ュ簱鍥為��锛歿}锛岄敊璇紪鍙穥},浠诲姟鍙凤細{}", inSta.getStaNo(), errMsg,jsonObject.getInteger("code"),wrkNo);
                             wrkNo++;
@@ -496,7 +503,6 @@
                         staProtocol.setStaNo((short) (pickSta.getStaNo().shortValue()));
                         devpThread.setPakMk(staProtocol.getSiteId(), false);
                         MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-                        log.error("杈撻�佺嚎涓嬪彂4锛�"+9996+","+(pickSta.getStaNo().shortValue()-(short)1));
                         //LED
                         LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed());
                         // led 寮傚父鏄剧ず
@@ -1095,13 +1101,16 @@
             }
             int x=1;
             switch (crnProtocol.getCrnNo()){
-                case 1: x =1; break;
-                case 2: x =3; break;
-                case 3: x =5; break;
-                case 4: x =7; break;
-                case 5: x =9; break;
+                case 1: x =2; break;
+                case 2: x =6; break;
+                case 3: x =11; break;
+                case 4: x =14; break;
+                case 5: x =18; break;
             }
 
+            if(crnProtocol.getCrnNo() != 5){
+                return;
+            }
             // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�3,12
             if (wrkMastMapper.selectWorking(crnProtocol.getCrnNo()) != null) {
                 return;
@@ -1124,7 +1133,7 @@
             crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
             crnCommand.setTaskMode(CrnTaskModeType.X_MOVE); // 浠诲姟妯″紡:  鍥炲師鐐�
             crnCommand.setSourcePosX((short) x);     // 婧愬簱浣嶆帓
-            crnCommand.setSourcePosY((short) 1);     // 婧愬簱浣嶅垪
+            crnCommand.setSourcePosY((short) 52);     // 婧愬簱浣嶅垪
             crnCommand.setSourcePosZ((short) 1);     // 婧愬簱浣嶅眰
             crnCommand.setDestinationPosX((short) 0);     // 鐩爣搴撲綅鎺�
             crnCommand.setDestinationPosY((short) 0);     // 鐩爣搴撲綅鍒�
@@ -1375,6 +1384,13 @@
                     staProtocol2 = staProtocol2.clone();
                 }
                 SiemensDevpThread devpThread2 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2);
+                StaProtocol staProtocol4004 = devpThread2.getStation().get(4004);
+                if (staProtocol4004 == null) {
+                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 鍫嗗灈鏈哄嚭搴撶珯淇℃伅(staProtocol!=null缁х画鎵ц,鍚﹀垯寰幆缁堟)锛歴taProtocol=" + staProtocol4004);
+                    break;
+                } else {
+                    staProtocol4004 = staProtocol4004.clone();
+                }
                 StaProtocol staProtocol3 = devpThread2.getStation().get(2016);
                 if (staProtocol3 == null) {
                     News.infoNoLog("" + mark + " - 2" + " - 3" + " - 鍫嗗灈鏈哄嚭搴撶珯淇℃伅(staProtocol!=null缁х画鎵ц,鍚﹀垯寰幆缁堟)锛歴taProtocol=" + staProtocol2);
@@ -1398,6 +1414,9 @@
                     if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                         break;
 //                        return;
+                    }
+                    if(staProtocol4004.isLoading()){
+                        continue;
                     }
                     // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔�
                     CrnCommand crnCommand = new CrnCommand();
@@ -1437,6 +1456,9 @@
                         break;
 //                        return;
                     }
+                    if(staProtocol4004.isLoading()){
+                        continue;
+                    }
                     // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔�
                     CrnCommand crnCommand = new CrnCommand();
                     crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
@@ -1466,6 +1488,8 @@
                 }
             }
             if (slave.getId() == 3 && wrkMast9996 != null) {
+                SiemensDevpThread devpThread1 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+
                 SiemensDevpThread devpThread2 = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2);
                 StaProtocol staProtocol4001 = devpThread2.getStation().get(4001);
                 if (staProtocol4001 == null) {
@@ -1473,6 +1497,20 @@
                     break;
                 } else {
                     staProtocol4001 = staProtocol4001.clone();
+                }
+                StaProtocol staProtocol2013 = devpThread2.getStation().get(2013);
+                if (staProtocol2013 == null) {
+                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 鍫嗗灈鏈哄嚭搴撶珯淇℃伅(staProtocol!=null缁х画鎵ц,鍚﹀垯寰幆缁堟)锛歴taProtocol=" + staProtocol2013);
+                    break;
+                } else {
+                    staProtocol2013 = staProtocol2013.clone();
+                }
+                StaProtocol staProtocol1019 = devpThread1.getStation().get(1019);
+                if (staProtocol1019 == null) {
+                    News.infoNoLog("" + mark + " - 2" + " - 3" + " - 鍫嗗灈鏈哄嚭搴撶珯淇℃伅(staProtocol!=null缁х画鎵ц,鍚﹀垯寰幆缁堟)锛歴taProtocol=" + staProtocol1019);
+                    break;
+                } else {
+                    staProtocol1019 = staProtocol1019.clone();
                 }
                 BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
                 if (staDetl == null) {
@@ -1490,6 +1528,12 @@
                     if (wrkMastMapper.selectWorking(slave.getId()) != null) {
                         break;
 //                        return;
+                    }
+                    if(staProtocol1019.isLoading() && wrkMast9996.getStaNo() < 2000){
+                        continue;
+                    }
+                    if(staProtocol2013.isLoading() && wrkMast9996.getStaNo() > 2000){
+                        continue;
                     }
                     // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔�
                     CrnCommand crnCommand = new CrnCommand();
@@ -1900,31 +1944,33 @@
                     News.warnNoLog("" + mark + " - 2" + " - 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 : 鍫嗗灈鏈哄彿={}", crnThread.getCrnProtocol().getCrnNo());
                     crnThread.setResetFlag(true);
                 }
-            } else if (crnProtocol.getTaskNo() == 9996) {//鐩樼偣鍏ュ簱琛旀帴
-                //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
-                if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
-                    News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔锛屼换鍔″彿:" + crnProtocol.getTaskNo());
-
-                    // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
-                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
-                    // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
-                    if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
-                        wrkMast.setWrkSts(4L);
-                    } else {
-                        continue;
-                    }
-                    Date now = new Date();
-                    wrkMast.setCrnEndTime(now);
-                    wrkMast.setModiTime(now);
-                    // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
-                    if (wrkMastMapper.updateById(wrkMast) > 0) {
-                        // 鍫嗗灈鏈哄浣�
-                        log.error(wrkMast.getWrkNo() + "浠诲姟淇敼鐘舵��4鎴愬姛锛屽浣嶅爢鍨涙満={}", crnThread.getCrnProtocol().getCrnNo());
-                        News.warnNoLog("" + mark + " - 2" + " - 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 : 鍫嗗灈鏈哄彿={}", crnThread.getCrnProtocol().getCrnNo());
-                        crnThread.setResetFlag(true);
-                    }
-                }
-            }else{
+            }
+//            else if (crnProtocol.getTaskNo() == 9996) {//鐩樼偣鍏ュ簱琛旀帴
+//                //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
+//                if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
+//                    News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔锛屼换鍔″彿:" + crnProtocol.getTaskNo());
+//
+//                    // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
+//                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
+//                    // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
+//                    if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
+//                        wrkMast.setWrkSts(4L);
+//                    } else {
+//                        continue;
+//                    }
+//                    Date now = new Date();
+//                    wrkMast.setCrnEndTime(now);
+//                    wrkMast.setModiTime(now);
+//                    // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
+//                    if (wrkMastMapper.updateById(wrkMast) > 0) {
+//                        // 鍫嗗灈鏈哄浣�
+//                        log.error(wrkMast.getWrkNo() + "浠诲姟淇敼鐘舵��4鎴愬姛锛屽浣嶅爢鍨涙満={}", crnThread.getCrnProtocol().getCrnNo());
+//                        News.warnNoLog("" + mark + " - 2" + " - 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 : 鍫嗗灈鏈哄彿={}", crnThread.getCrnProtocol().getCrnNo());
+//                        crnThread.setResetFlag(true);
+//                    }
+//                }
+//            }
+            else{
                 //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
                 if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                     News.warnNoLog("" + mark + " - 0" + " - 寮�濮嬫墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔锛屼换鍔″彿:" + crnProtocol.getTaskNo());
@@ -1990,7 +2036,7 @@
                             BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
                             String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
                             BasErrLog basErrLog = new BasErrLog(
-                                    null,    // 缂栧彿
+                                    crnProtocol.getUuid(),    // 缂栧彿
                                     wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
                                     now,    // 鍙戠敓鏃堕棿
                                     null,    // 缁撴潫鏃堕棿
@@ -2038,7 +2084,7 @@
                             BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
                             String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName();
                             BasErrLog basErrLog = new BasErrLog(
-                                    null,    // 缂栧彿
+                                    crnProtocol.getUuid(),    // 缂栧彿
                                     null,    // 宸ヤ綔鍙�
                                     now,    // 鍙戠敓鏃堕棿
                                     null,    // 缁撴潫鏃堕棿
@@ -2218,7 +2264,13 @@
                 }
                 // 鑾峰彇宸ヤ綔妗f暟鎹�
                 WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
-                if (null == wrkMast) { continue; }
+                if (null == wrkMast) {
+                    if(staProtocol.getWorkNo() > 9999){ //寮傚父閫�鍑�
+                        String err = basDevpOptService.getErr(staProtocol.getWorkNo());
+                        MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, err));
+                    }
+                    continue;
+                }
                 wrkMasts.add(wrkMast);
                 // 缁勮鍛戒护
                 LedCommand ledCommand = new LedCommand();
@@ -2231,6 +2283,12 @@
                         break;
                     case 10:
                         ledCommand.setTitle("绌烘澘鍏ュ簱");
+                        break;
+                    case 12:
+                        ledCommand.setTitle("鐗╂枡琛旀帴");
+                        break;
+                    case 57:
+                        ledCommand.setTitle("鐩樼偣鍐嶅叆搴�");
                         break;
                     case 101:
                         ledCommand.setTitle("鍏ㄦ澘鍑哄簱");
@@ -2255,6 +2313,20 @@
                 ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
                 ledCommand.setStaNo(wrkMast.getStaNo());
                 ledCommand.setBarcode(wrkMast.getBarcode());
+                if(wrkMast.getIoType() == 12){
+                    List<WrkDetl> wrkDetls = wrkDetlService.findByBarcode(wrkMast.getBarcode());
+                    wrkDetls.forEach(wrkDetl -> {
+                        Double total = 0.0;
+                        EntityWrapper<LocDetl> wrapper = new EntityWrapper<>();
+                        LocDetl locDetl = locDetlService.selectOne(wrapper.eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr()));
+                        if (Cools.isEmpty(locDetl)) {
+                            total = wrkDetl.getAnfme();
+                        } else {
+                            total = locDetl.getAnfme();
+                        }
+                        ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total));
+                    });
+                }
                 if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
                     List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
 
@@ -2268,13 +2340,13 @@
                             total = locDetl.getAnfme();
                         }
                         if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
-                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total));
                         }
                         if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
-                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total));
                         }
                         if (wrkMast.getIoType() == 107) {
-                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
+                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total));
                         }
                     });
                 }
@@ -2326,6 +2398,8 @@
             // 鍛戒护闆嗗悎
             boolean reset = true;
             for (Integer staNo : led.getStaArr()) {
+//                System.out.println("staArr = " + staNo);
+
                 // 鑾峰彇鍙夎溅绔欑偣
                 StaProtocol staProtocol = devpThread.getStation().get(staNo);
                 if (staProtocol == null) { continue; }
@@ -2344,6 +2418,9 @@
                 if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
                     News.error("{}鍙稬ED鏄剧ず榛樿鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
                 }
+//                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) {
+//                    News.error("{}鍙稬ED鏄剧ず榛樿鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
+//                }
             }
         }
     }
@@ -2947,52 +3024,18 @@
                     log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�2", rgvSlave.getRgvNo());
                     continue;
                 }
-
-                // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤
-                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE &&
-                    rgvProtocol.getModeType() == RgvModeType.AUTO
-                    && !rgvProtocol.isLoaded1ing()  //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴
-                    && rgvProtocol.getTaskNo1()==0
-                        && !rgvProtocol.isLoaded2ing()
-                        && rgvProtocol.getTaskNo2()==0
-                        &&rgvThread.isPakMk()
-                ) {
-                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
-
-                    Integer rgvNoOther = basRgvMap.getRgvNoOther((int) rgvProtocol.getRgvNo());
-                    RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNoOther);
-                    RgvProtocol rgvProtocolOther = rgvThreadOther.getRgvProtocol();
-                    if (rgvProtocolOther == null) {
-                        continue;
-                    }else {
-                        rgvProtocolOther = rgvProtocolOther.clone();
-                    }
-                    if (rgvProtocolOther.getStatusType() == RgvStatusType.IDLE
-                        && rgvProtocolOther.getModeType() == RgvModeType.AUTO
-                        && !rgvProtocolOther.isLoaded1ing()
-                        && rgvProtocolOther.getTaskNo1()==0
-                        && !rgvProtocolOther.isLoaded2ing()
-                        && rgvProtocolOther.getTaskNo2()==0
-                        &&rgvThreadOther.isPakMk()
-                    ){
-                        //瀵瑰伐浣滄。杩涜鍒ゆ柇
-                        basRgvMap.setNowRoute(rgvProtocol.getRgvPosI());
-                        if (rgvProtocol.getTaskNo1() >0 && rgvProtocol.getTaskNo1()<=9000){
-                            WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1().intValue());
-                            rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2366");
-                        }else if (rgvProtocol.getTaskNo1() == 0){
-                            rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute(),"2366");
-                        }
-
-                    }
-
-
-
+                Integer site = rgvProtocol.getRgvNo() == 1 ? rgvProtocol.getRgvPosI1() : rgvProtocol.getRgvPosI2();
+                if (site == 0) {
+                    continue;
                 }
+                rgvSlave.setNowRoute(site); // 鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
+                if (!basRgvMapService.updateById(rgvSlave)) {
+                    log.error("灏忚溅鏇存柊鍦板浘澶辫触");
+                }
+
             }
         }catch (Exception e){
-            log.error("4109琛屾墽琛屽皬杞﹀垵濮嬪寲浠诲姟涓嬪彂澶辫触");
-            log.error("4109琛�"+e);
+            log.error("灏忚溅鏇存柊鍦板浘澶辫触");
         }
     }
 
@@ -3269,6 +3312,9 @@
             // 鑾峰彇RGV淇℃伅
             RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
             RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+            if (rgvProtocol == null) {
+                continue;
+            }
             if (rgvProtocol.getStatusType1() != RgvStatusType.IDLE && rgvProtocol.getModeType() != RgvModeType.AUTO) {
                 continue;
             }
@@ -3322,7 +3368,8 @@
                         continue;
                     }
                     BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
-                    basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
+                    basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
+                    basRgvMapService.updateById(basRgvMap);
                     Integer workNo = 0;
                     if(rgvProtocol.getTaskNo2() > 9999|| rgvProtocol.getTaskNo1() > 9999){
                         workNo = rgvProtocol.getTaskNo1() !=0 ? rgvProtocol.getTaskNo1() : rgvProtocol.getTaskNo2();
@@ -3377,7 +3424,7 @@
                         continue;
                     }
 
-                    if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) {
+                    if (staProtocol.isAutoing()  && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) {
                         flag = true;
                     }
                     if (!flag) {
@@ -3388,7 +3435,8 @@
                         continue;
                     }
                     BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
-                    basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
+                    basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
+                    basRgvMapService.updateById(basRgvMap);
                     Integer workNo = 0;
                     if(basRgv.getPakToCrn().equals("1")){
                         workNo = rgvProtocol.getTaskNo1() !=0 ? rgvProtocol.getTaskNo1():rgvProtocol.getTaskNo2();  //姝e父鎯呭喌鍑哄簱鏀捐揣浼樺厛宸ヤ綅1鏀�
@@ -3483,12 +3531,13 @@
                 basRgv.setPakAll("1");
                 basRgvService.updateById(basRgv);
                 rgvThread.setPakMk(true);
+
             }
-            List<WrkMastSta> wrkMastStaPakingNum = wrkMastStaService.selectPakingWrkNum(basRgv.getRgvNo());
-            if(wrkMastStaPakingNum.size() <1){
-                basRgv.setPakAll("1"); //闃叉鏃犲叾浠栦换鍔℃椂锛岃繛缁彇璐ф棤娉曟仮澶�
-                basRgvService.updateById(basRgv);
-            }
+//            List<WrkMastSta> wrkMastStaPakingNum = wrkMastStaService.selectPakingWrkNum(basRgv.getRgvNo());
+//            if(wrkMastStaPakingNum.size() <1){
+//                basRgv.setPakAll("1"); //闃叉鏃犲叾浠栦换鍔℃椂锛岃繛缁彇璐ф棤娉曟仮澶�
+//                basRgvService.updateById(basRgv);
+//            }
 
         }
     }
@@ -3502,6 +3551,7 @@
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
             RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+
             if (rgvProtocol == null) {
                 continue;
             }
@@ -3514,6 +3564,9 @@
             if(rgvProtocol.getStatusType1() == RgvStatusType.WORKING){
                 rgvThread.setPaking(true);
             }
+            if(rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 && rgvProtocol.getStatusType1() == RgvStatusType.IDLE){
+                rgvThread.setPaking(true);
+            }
             if(rgvProtocol.isLoaded1ing() && rgvProtocol.isLoaded2ing()){
                 basRgv.setPakAll("1");
                 basRgvService.updateById(basRgv);
@@ -3522,7 +3575,7 @@
             // 鍙湁褰揜GV绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
             if (rgvProtocol.getStatusType1() == RgvStatusType.IDLE &&
                     rgvProtocol.getModeType() == RgvModeType.AUTO && rgvThread.isPakMk()
-                    && basRgv.getPakToCrn().equals("1") && rgvThread.isPaking()) {
+                     && rgvThread.isPaking()) {
                 News.warnNoLog(""+mark+" - 0"+" - 寮�濮嬫墽琛孯GV鍏ュ嚭搴撲綔涓氫笅鍙�");
                 // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
 //                rgvRunWrkMastInTest();
@@ -3639,7 +3692,7 @@
                 case 1: route = RouteUtils.getRouteOne();break;
                 case 2: route = RouteUtils.getRouteTwo();break;
             }
-            basRgvMap.setNowRoute(rgvProtocol.getRgvPosI2()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
+            basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
             basRgvMapService.updateById(basRgvMap);
             WrkMastSta wrkMastSta = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol.getWorkNo()));//鏍规嵁绔欑偣宸ヤ綔鍙峰拰灏忚溅宸ヤ綔鑼冨洿妫�绱换鍔℃。
             if( null == wrkMastSta ) {
@@ -3669,7 +3722,7 @@
 
                 if(wrkMastSta3 != null ){
                     List<WrkMastSta> wrkMastStaPaking = wrkMastStaService.selectPakingWrk(wrkMastSta3.getStaStart());
-                    if(wrkMastStaPaking.size() < 1 ){//宸叉湁鏍囪涓嶅啀鏍囪
+                    if(wrkMastStaPaking.size() < 1 && !wrkMastSta3.getWrkNo().equals(wrkMastSta.getWrkNo())){//宸叉湁鏍囪涓嶅啀鏍囪
                         wrkMastSta3.setMk(1);
                         basRgv.setPakAll("0");
                         basRgvService.updateById(basRgv);
@@ -3765,16 +3818,16 @@
                 case 1: route = RouteUtils.getRouteOne();break;
                 case 2: route = RouteUtils.getRouteTwo();break;
             }
-            basRgvMap.setNowRoute(rgvProtocol.getRgvPosI2()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
+            basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
             basRgvMapService.updateById(basRgvMap);
             WrkMastSta wrkMastSta = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol.getWorkNo()));//鏍规嵁绔欑偣宸ヤ綔鍙峰拰灏忚溅宸ヤ綔鑼冨洿妫�绱换鍔℃。
-            if( null == wrkMastSta ) {
-                News.infoNoLog("" + mark + " - 1" + " - 4" + " - 鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts0, 宸ヤ綔鍙�={}", staProtocol.getWorkNo());
-                continue;
-            }
             WrkMastSta wrkMastSta1 = wrkMastStaMapper.selectByWrkNo( rgvProtocol.getTaskNo1());
             if(basRgv.getPakToCrn().equals("0")){
                 wrkMastSta = wrkMastStaMapper.selectNoInterfereCrn(route, route, Long.valueOf(staProtocol.getWorkNo()));//澶勭悊鎺ラ┏浠诲姟鏃讹紝杩炵画鍙彇鎺ラ┏浠诲姟
+            }
+            if( null == wrkMastSta ) {
+                News.infoNoLog("" + mark + " - 1" + " - 4" + " - 鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts0, 宸ヤ綔鍙�={}", staProtocol.getWorkNo());
+                continue;
             }
             boolean result = false;
             if(wrkMastSta1!= null && rgvProtocol.getRgvNo() == 1){ //璺濈璁$畻   2妤煎崟鍏ュ簱鍙d笉闇�瑕佽绠�
@@ -3786,11 +3839,28 @@
 
                 continue;
             }
+            if(wrkMastSta != null &&LEFT_POSITION.contains(wrkMastSta.getStaEnd())){
+                StaProtocol staProtocolSta = devpThread.getStation().get(wrkMastSta.getStaEnd());
+                if (staProtocolSta == null) {
+                    News.infoNoLog("" + mark + " - 1" + " - 1" + " - Rgv鍏ュ簱绔欎俊鎭�(staProtocol!=null缁х画鎵ц)锛歴taProtocol=" + staProtocol);
+                    continue;
+                } else {
+                    staProtocolSta = staProtocolSta.clone();
+                }
+                if(staProtocolSta.isLoading()){
+                    continue;
+                }
+            }
             wrkMastSta.setWorkSta(wrkMastSta1 !=null ? 2 : 1);//鑻�1鍙峰伐浣嶆湁浠诲姟缁�2鍙峰伐浣�
             wrkMastSta.setRgvNo((int) rgvProtocol.getRgvNo());
             boolean sign = false;
+
             sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); //鍛戒护涓嬪彂
             if (sign){
+                if(wrkMastSta.getMk() == 1){//鑻ュ凡鎵ц
+                    basRgv.setPakAll("1");
+                    basRgvService.updateById(basRgv);
+                }
                 if(LEFT_POSITION.contains(wrkMastSta.getStaEnd())){
                     basRgv.setPakToCrn("0");
                     basRgvService.updateById(basRgv);
@@ -3800,8 +3870,7 @@
                         }
                     }
                 }
-
-                if(wrkMastSta3 != null ){
+                if(wrkMastSta3 != null &&  !wrkMastSta3.getWrkNo().equals(wrkMastSta.getWrkNo())){
                     List<WrkMastSta> wrkMastStaPaking = wrkMastStaService.selectPakingWrk(wrkMastSta3.getStaStart());
                     if(wrkMastStaPaking.size() < 1){
                         wrkMastSta3.setMk(1);
@@ -3809,7 +3878,7 @@
                         basRgvService.updateById(basRgv);
                         try{
                             wrkMastStaMapper.updateById(wrkMastSta3);
-                            log.error("閿佸畾鐩搁殧绔欑偣浠诲姟");
+                            log.error("閿佸畾鐩搁殧绔欑偣浠诲姟:"+ wrkMastSta3.getWrkNo());
                         }catch (Exception e){
                             log.error("閿佸畾鐩搁殧绔欑偣浠诲姟澶辫触");
                         }
@@ -3819,7 +3888,6 @@
                 basRgvService.updateById(basRgv);
 
                 rgvThread.setPaking(false);
-//                rgvThread.setPakIn(false);//鍏ュ簱涓嶅厑璁�
                 try{
                     wrkMastSta.setWrkSts(1);
                     wrkMastStaMapper.updateById(wrkMastSta);
@@ -3900,7 +3968,7 @@
                 case 1: route = RouteUtils.getRouteOne();break;
                 case 2: route = RouteUtils.getRouteTwo();break;
             }
-            basRgvMap.setNowRoute(rgvProtocol.getRgvPosI2()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
+            basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙�
             basRgvMapService.updateById(basRgvMap);
             WrkMastSta wrkMastSta = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol.getWorkNo()));//鏍规嵁绔欑偣宸ヤ綔鍙峰拰灏忚溅宸ヤ綔鑼冨洿妫�绱换鍔℃。
             if( null == wrkMastSta ) {
@@ -4311,7 +4379,7 @@
                             //arm浠诲姟瀹屾垚鑷姩缁勬墭
                             ReturnT<String> result = new PostMesDataUtils().postMesData("arm浠诲姟瀹屾垚鑷姩缁勬墭",wmsUrl, wmsComb, combParam);
                             if (result.getCode()==200){
-                                basArmMastService.updateArmMastStatus(basArm.getArmNo(),basArm.getSortingLineSou(),3,4);
+                                basArmMastService.updateArmMastStatus(basArm.getArmNo(),basArm.getSortingLineSou(),3,5);
                             } else {
                                 armTaskAssignmentCallApiLogSave(staProtocol, "鑷姩缁勬墭澶辫触", staProtocol.getSiteId()+"鐮佸灈浣嶇疆锛�===銆嬭嚜鍔ㄧ粍鎵樺け璐ワ紝绛夊緟閲嶈瘯", false);
 //                                log.error("鏈烘鑷傛姄鍙栦换鍔″畬鎴愶細"+JSON.toJSON(basArmMastList)+"===銆嬭嚜鍔ㄧ粍鎵樺け璐ワ紝绛夊緟閲嶈瘯");
@@ -4480,7 +4548,7 @@
                                 new EntityWrapper<BasArmMast>()
                                         .eq("arm_no", basArm.getArmNo())
                                         .eq("sorting_line", basArm.getSortingLineSou())
-                                        .eq("sku", basArmMast.getSku())
+                                        .eq("matnr", basArmMast.getMatnr())
                                         .eq("order_no", basArmMast.getOrderNo())
                                         .eq("binding_tags", basArmMast.getBindingTags())
                         );
@@ -4505,7 +4573,7 @@
                                                     .eq("status", 2)
                                                     .eq("binding_tags", basArmMast.getBindingTags())
                                     );
-                                    Double anfmeSignOne = basArmMastService.selectBasArmMastSignValue(basArmMastOne.getOrderNo(), basArmMastOne.getSku(),basArmMastOne.getBindingTags());
+                                    Double anfmeSignOne = basArmMastService.selectBasArmMastSignValue(basArmMastOne.getOrderNo(), basArmMastOne.getMatnr(),basArmMastOne.getBindingTags());
 
                                     if (anfmeSignOne>1D){
                                         armTaskAssignmentCallApiLogSave(staProtocol, "鏉$爜鏁版嵁宸插瓨鍦紒锛侊紒", staProtocol.getSiteId()+"鐮佸灈浣嶇疆锛屾潯鐮佹暟鎹鍦ㄨ嚜鍔ㄧ粍鎵�===>>" + barcode, false);
@@ -4514,12 +4582,12 @@
 
                                 }
                             }
-                            OrderDetlValueResultUtil orderDetlValueResultUtil = basArmMastService.selectOrderDetlValue(basArmMast.getOrderNo(), basArmMast.getSku());
+                            OrderDetlValueResultUtil orderDetlValueResultUtil = basArmMastService.selectOrderDetlValue(basArmMast.getOrderNo(), basArmMast.getMatnr());
 
                             if (Cools.isEmpty(orderDetlValueResultUtil)){
                                 continue;
                             }
-                            Double anfmeSign = basArmMastService.selectBasArmMastSignValue(basArmMast.getOrderNo(), basArmMast.getSku(),basArmMast.getBindingTags());
+                            Double anfmeSign = basArmMastService.selectBasArmMastSignValue(basArmMast.getOrderNo(), basArmMast.getMatnr(),basArmMast.getBindingTags());
                             orderDetlValueResultUtil.setAnfme(anfmeSign);
                             //璁㈠崟涓嬪彂
                             try{
@@ -4707,10 +4775,12 @@
                     // 鍒ゆ柇閲嶅宸ヤ綔妗�
                     List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("source_sta_no", outStaAgv.getStaNo()));
                     if (!basAgvMastList.isEmpty()) {
-                        News.info("{}鍙风珯鐐瑰瓨鍦ㄤ换鍔℃墽琛屼腑锛岃绛夊緟浠诲姟鎵ц瀹屾瘯锛歿}", outStaAgv.getStaNo(), barcode);
+//                        News.info("{}鍙风珯鐐瑰瓨鍦ㄤ换鍔℃墽琛屼腑锛岃绛夊緟浠诲姟鎵ц瀹屾瘯锛歿}", outStaAgv.getStaNo(), barcode);
                         continue;
                     }
-
+                    if(barcode.equals("0")){
+                        continue;
+                    }
                     List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>().eq("barcode", barcode));
                     if (!locMastList.isEmpty()) {
                         News.info("{}鍙风珯鐐规潯鐮佷俊鎭噸澶嶏細{}", outStaAgv.getStaNo(), barcode);
@@ -4752,6 +4822,111 @@
                     } catch (Exception e) {
                         News.error(JSON.toJSONString(e.getMessage()));
                     }
+                }
+            }
+        }
+    }
+
+    /*
+     * agv浠诲姟鐢熸垚  Empty
+     * */
+    public synchronized void agvTaskCreateR() {
+        // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            // 閬嶅巻鍑哄簱鍙�
+            for (DevpSlave.Sta inStaAgv : devp.getInStaAgv())  {
+                // 鑾峰彇鍏ュ簱绔欎俊鎭�
+                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                StaProtocol staProtocol = devpThread.getStation().get(inStaAgv.getStaNo());
+                if (staProtocol == null) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
+
+                // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+                if (staProtocol.isLoading()){
+                    continue;
+                }
+
+                if (staProtocol.isAutoing()) {
+
+                    // 鍒ゆ柇閲嶅宸ヤ綔妗�
+                    List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("sta_no", inStaAgv.getStaNo()));
+                    if (!basAgvMastList.isEmpty()) {
+                        News.info("{}鍙风珯鐐瑰瓨鍦ㄤ换鍔℃墽琛屼腑锛岀瓑寰呬换鍔℃墽琛屽畬姣�!!!", inStaAgv.getStaNo());
+                        continue;
+                    }
+                    // 浠诲姟鐢熸垚鍖� --------------------------------------------------------------------------
+
+                    BasAgvMast basAgvMast = new BasAgvMast();
+                    try {
+                        List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>()
+                                .eq("loc_sts", "R")
+                                .ge("row1", 23)
+                                .le("row1", 32)
+                                .orderBy("io_time",true)
+                        );
+
+                        for (LocMast locMast : locMastList){
+                            basAgvMast.setTaskNo(inStaAgv.getStaNo());
+                            basAgvMast.setSourceLocNo(locMast.getLocNo());
+                            basAgvMast.setStaNo(inStaAgv.getStaNo());
+                            basAgvMast.setDevpId(devp.getId());
+                            basAgvMast.setIoType(0);//AGV搴撲綅==銆嬭緭閫佺嚎绔欑偣  0
+                            basAgvMastService.insert(basAgvMast);
+                            break;
+                        }
+
+                    } catch (Exception e) {
+                        News.error(JSON.toJSONString(e.getMessage()));
+                    }
+                }
+            }
+        }
+    }
+
+    /*
+     * agv浠诲姟鐢熸垚 寮傚父閫佸埌鍏ュ簱鍙�
+     * */
+    public synchronized void agvTaskCreateException() {
+        // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            Integer outStaAgv = 1041;
+            // 鑾峰彇鍏ュ簱绔欎俊鎭�
+            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+            StaProtocol staProtocol = devpThread.getStation().get(outStaAgv);
+            if (staProtocol == null) {
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
+            // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+            if (!staProtocol.isLoading()){
+                continue;
+            }
+
+            if (staProtocol.isAutoing() && staProtocol.getWorkNo() > 10000) {
+
+                // 鍒ゆ柇閲嶅宸ヤ綔妗�
+                List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("sta_no", 1037));
+                if (!basAgvMastList.isEmpty()) {
+                    News.info("{}鍙风珯鐐瑰瓨鍦ㄤ换鍔℃墽琛屼腑锛岀瓑寰呬换鍔℃墽琛屽畬姣�!!!", outStaAgv);
+                    continue;
+                }
+                // 浠诲姟鐢熸垚鍖� --------------------------------------------------------------------------
+
+                BasAgvMast basAgvMast = new BasAgvMast();
+                try {
+                    basAgvMast.setTaskNo(staProtocol.getWorkNo());
+                    basAgvMast.setSourceStaNo(1041);
+                    basAgvMast.setStaNo(1037);
+                    basAgvMast.setDevpId(devp.getId());
+                    basAgvMast.setIoType(3);//杈撻��==銆嬭緭閫佺嚎绔欑偣 3
+                    basAgvMastService.insert(basAgvMast);
+                    break;
+                } catch (Exception e) {
+                    News.error(JSON.toJSONString(e.getMessage()));
                 }
             }
         }
@@ -4800,6 +4975,8 @@
         }
     }
 
+
+
     /*
      * agv浠诲姟涓嬪彂:AGV搴撲綅==銆婣GV搴撲綅
      * */

--
Gitblit v1.9.1