From 63f731641998edc06c1e0409ab1901260d36154b Mon Sep 17 00:00:00 2001
From: lsh <1>
Date: 星期四, 11 一月 2024 18:05:20 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/thread/RgvThread.java             |    4 
 src/main/java/com/zy/asrs/entity/WrkMastSta.java            |   26 ++
 src/main/java/com/zy/core/model/DevpSlave.java              |    1 
 src/main/java/com/zy/asrs/utils/RouteUtils.java             |   49 +++++
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  295 +++++++++++++++++++++++++++++---
 src/main/java/com/zy/asrs/entity/WrkMast.java               |    2 
 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java         |    3 
 src/main/resources/mapper/WrkMastMapper.xml                 |    8 
 src/main/java/com/zy/core/MainProcess.java                  |   14 +
 src/main/java/com/zy/core/thread/SiemensDevpThread.java     |   90 +++++++++
 src/main/resources/application.yml                          |   18 +
 11 files changed, 467 insertions(+), 43 deletions(-)

diff --git a/src/main/java/com/zy/asrs/entity/WrkMast.java b/src/main/java/com/zy/asrs/entity/WrkMast.java
index 69eb8d2..a053554 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMast.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -75,7 +75,7 @@
     private Integer rgvNo;
 
     /**
-     * 寰愬伐姹変簯鎷嗗灈鏍囪  0: 鏈媶  1: 宸叉媶  2:宸插鐞嗗彲涓嬩竴姝ワ紙杞巻鍙叉。锛�
+     * 寰愬伐姹変簯鎷嗗灈鏍囪  0: 鍒濆 1銆佹湭鎷嗗凡涓婃姤  2: 宸叉媶  3:宸插鐞嗗彲涓嬩竴姝ワ紙杞巻鍙叉。锛�
      */
     @ApiModelProperty(value= "")
     @TableField("sheet_no")
diff --git a/src/main/java/com/zy/asrs/entity/WrkMastSta.java b/src/main/java/com/zy/asrs/entity/WrkMastSta.java
index ee2bcee..930c3ba 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMastSta.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMastSta.java
@@ -121,6 +121,18 @@
 
     public WrkMastSta() {}
 
+    public WrkMastSta(Date now, Integer staStart) {
+        this.wrkNo = staStart.longValue()+9999;
+        this.wrkStart = staStart;
+        this.wrkEnd = staStart;
+        this.staStart = staStart;
+        this.staEnd = staStart;
+        this.createTime = now;
+        this.updateTime = now;
+        this.wrkSts = 0;
+        this.bignTime = now;
+    }
+
     public WrkMastSta(Long wrkNo, Integer wrkStart, Integer wrkEnd, Integer staStart, Integer staEnd, Date createTime, Date updateTime, Integer type, Integer wrkSts, Integer lineNumber, Integer wrkType, Date bignTime) {
         this.wrkNo = wrkNo;
         this.wrkStart = wrkStart;
@@ -136,6 +148,20 @@
         this.bignTime = bignTime;
     }
 
+    public Integer getStaEnd(Integer souSta) {
+        switch (souSta) {
+            case 100:
+            case 103:
+            case 106:
+            case 109:
+            case 112:
+            case 115:
+                return souSta + 1;
+            default:
+                return souSta;
+        }
+    }
+
 //    WrkMastSta wrkMastSta = new WrkMastSta(
 //            null,    // 宸ヤ綔鍙穂闈炵┖]
 //            null,    // 宸ヤ綔妗e紑濮嬩綅缃甗闈炵┖]
diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index b9b6e3f..8199059 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -42,6 +42,9 @@
 //    @Select("select top 1 from dbo.asr_wrk_mast where wrk_no=#{workNo}")
     WrkMast selectPakInStep3(@Param("workNo")Integer workNo);
 
+    WrkMast selectPakInStep4(@Param("staNo")Integer staNo,@Param("sheetNo")String sheetNo);
+    WrkMast selectPakInStep5(@Param("staNo")Integer staNo,@Param("sheetNo")String sheetNo);
+
     // 鎷f枡鍐嶅叆搴撴椂锛岀珯鐐规湁鐗╀笖闇�姹傛椂鏌ヨ
 //    @Select("select top 1 * from asr_wrk_mast where wrk_no=#{workNo} and wrk_sts=14 and (io_type=103 or io_type=107 or io_type=104)")
     WrkMast selectPickStep(@Param("barcode")String barcode);
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 7c55bb3..93dec60 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -409,6 +409,118 @@
     }
 
     /**
+     * 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱  鎷嗗灈浣嶇疆
+     */
+    public synchronized void stnToCrnStnPick2() {
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            // 閬嶅巻鎷f枡鍏ュ簱鍙�
+            for (DevpSlave.Sta pickSta : devp.getPickSta2()) {
+
+                // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭�
+                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo());
+                if (staProtocol == null) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
+
+                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isPakMk() && staProtocol.getWorkNo()==0 && !staProtocol.isOutEnable() && staProtocol.isInEnable()) {
+                    WrkMast wrkMast = wrkMastMapper.selectPakInStep4(staProtocol.getSiteId(),"3");
+
+                    if (wrkMast == null) {
+                        WrkMast wrkMast1 = wrkMastMapper.selectPakInStep5(staProtocol.getSiteId(),"3");
+                        if (Cools.isEmpty(wrkMast1) && staProtocol.isEmptyMk()){
+                            WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(staProtocol.getSiteId() + 9999L);
+                            if (Cools.isEmpty(wrkMastSta)){
+                                WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(),staProtocol.getSiteId());
+                                wrkMastSta1.setType(2);
+                                wrkMastSta1.setWrkType(1);
+                                wrkMastStaMapper.insert(wrkMastSta1);
+                            }
+                            continue;
+                        }
+//                        log.error("绔欑偣鍙�"+staProtocol.getSiteId()+"鏈煡璇㈠埌宸ヤ綔妗f锛�");
+                        // 鏃犳嫞鏂欐暟鎹�
+                        continue;
+                    }
+                    if (staProtocol.isEmptyMk()){
+                        log.error("绔欑偣鍙�"+staProtocol.getSiteId()+"绌烘澘淇″彿寮傚父锛�");
+                        continue;
+                    }
+                    if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107)
+                            || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
+                        continue;
+                    }
+
+                    // 鑾峰彇鐩爣绔�
+                    Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+                            .eq("type_no", wrkMast.getIoType() - 50)
+                            .eq("stn_no", pickSta.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
+                            .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
+                    StaDesc staDesc = staDescService.selectOne(wrapper);
+                    if (Cools.isEmpty(staDesc)) {
+                        log.error("鍏ュ簱璺緞涓嶅瓨鍦紒type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo());
+                        continue;
+                    }
+
+                    try {
+                        // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
+                        if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) {
+                            throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。澶辫触");
+                        }
+                        // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
+                        if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
+                            throw new CoolException("淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
+                        }
+
+                        Date now = new Date();
+                        // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
+                        Integer staNo = staDesc.getCrnStn();
+                        // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
+                        wrkMast.setIoTime(now);
+                        wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
+                        wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
+                        wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
+                        wrkMast.setStaNo(staNo); // 鐩爣绔�
+                        wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
+                        wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
+                        wrkMast.setModiTime(now);
+                        if (wrkMastMapper.updateById(wrkMast) == 0) {
+                            throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
+                        }
+                        // 鏇存柊鏄庣粏妗o_time (鍘嗗彶妗e叧鑱斾娇鐢級
+                        wrkDetlService.updateIoTime(wrkMast.getWrkNo(), now);
+                        // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
+                        LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+                        locMast.setLocSts("Q");
+                        locMast.setModiTime(new Date());
+                        if (!locMastService.updateById(locMast)) {
+                            throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                        continue;
+                    }
+
+                    // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
+                    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) {
+                        log.error("鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
+                    }
+
+                }
+
+            }
+
+        }
+    }
+
+    /**
      * 鍫嗗灈鏈虹珯鍑哄簱鍒板嚭搴撶珯
      */
     public synchronized void crnStnToOutStn() {
@@ -3706,10 +3818,10 @@
      */
     public synchronized void stackingCompletionDriveTray2() {
         try {
-            int[] staNos=new int[]{133,135};//(2涓叆搴撶珯鐐癸紝1妤�2涓嚭搴撶爜鍨涚珯,鏍规嵁鐜板満淇敼)
+            int[] staNos=new int[]{131,135};//(2涓叆搴撶珯鐐癸紝1妤�2涓嚭搴撶爜鍨涚珯,鏍规嵁鐜板満淇敼)
             for (int staNo : staNos){
                 BasDevp basDevp = basDevpService.selectById(staNo);
-                if (basDevp.getWrkNo()<9990){
+                if (basDevp.getWrkNo()!=0){
                     continue;
                 }
                 WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne202(staNo);
@@ -3738,11 +3850,16 @@
                 // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
                 if (staProtocol.isAutoing()
                         && staProtocol.isLoading()
-                        && staProtocol.getWorkNo() >= 9990
+                        && staProtocol.isInEnable()
+                        && staProtocol.getWorkNo() == 0
                 ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) {
 
+                    //浠诲姟瀹屾垚
+                    boolean result1 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(3, staProtocol));
+                    Thread.sleep(100);
+
                     staProtocol.setWorkNo(wrkMast.getWrkNo());
-                    staProtocol.setStaNo(wrkMast.getStaNo());
+                    staProtocol.setStaNo(144);
                     devpThread.setPakMk(staProtocol.getSiteId(), false);
                     boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol));
                     if (!result) {
@@ -3750,6 +3867,10 @@
                     }
                     wrkMast.setWrkSts(52L);
                     wrkMastMapper.updateById(wrkMast);
+                    Thread.sleep(100);
+
+                    //浠诲姟瀹屾垚
+                    boolean result2 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(4, staProtocol));
 
                 }
             }
@@ -3757,6 +3878,63 @@
 //            e.printStackTrace();
 //            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             log.error("鍏朵粬  ===>> 鐮佸灈瀹屾垚椹卞姩鎵樼洏杩涘叆涓嬩竴姝�"+e);
+        }
+    }
+
+    /**
+     * 鍏朵粬  ===>> 鐮佸灈瀹屾垚椹卞姩鎵樼洏杩涘叆涓嬩竴姝�
+     */
+    public synchronized void stackingCompletionDriveTrayOk2() {
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            // 閬嶅巻鎷f枡鍏ュ簱鍙�
+            for (DevpSlave.Sta pickSta : devp.getPickSta2()) {
+
+                // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭�
+                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo());
+                if (staProtocol == null) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
+
+                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isPakMk()  && staProtocol.getWorkNo()!=0 && staProtocol.isOutEnable()) {//
+                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo());
+
+                    if (wrkMast == null) {
+                        log.error("绔欑偣鍙�"+staProtocol.getSiteId()+"鏈煡璇㈠埌宸ヤ綔妗f锛�");
+                        // 鏃犳嫞鏂欐暟鎹�
+                        continue;
+                    }
+                    if (!wrkMast.getSheetNo().equals("2") || wrkMast.getIoType()<100 || wrkMast.getWrkSts()!=14){
+                        continue;
+                    }
+                    if (wrkMast.getIoType()==101){
+                        //浠诲姟瀹屾垚
+                        boolean result1 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(3, staProtocol));
+                        wrkMast.setSheetNo("3");
+                        wrkMastMapper.updateById(wrkMast);
+                    }else {
+                        if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107)
+                                || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
+                            continue;
+                        }
+                        //浠诲姟瀹屾垚
+                        boolean result1 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(3, staProtocol));
+                        wrkMast.setSheetNo("3");
+                        wrkMastMapper.updateById(wrkMast);
+
+                        try{
+                            Thread.sleep(100);
+                        }catch (Exception e){
+
+                        }
+
+                        boolean result2 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(4, staProtocol));
+
+                    }
+                }
+            }
         }
     }
     /**
@@ -3840,11 +4018,12 @@
                 // 鍙湁褰揜GV绛夊緟WCS纭銆佽嚜鍔�
                 if (rgvProtocol.getStatusType() == RgvStatusType.WORKING
                         && rgvProtocol.getModeType() == RgvModeType.AUTO
-                        && (rgvProtocol.getStatusType1()==RgvStatusType.WAITING || rgvProtocol.getStatusType2()==RgvStatusType.WAITING )
+                        && ((rgvProtocol.getStatusType1()==RgvStatusType.WAITING || rgvProtocol.getStatusType2()==RgvStatusType.WAITING ) ||
+                        (rgvProtocol.getStatusType1()==RgvStatusType.FETCHWAITING || rgvProtocol.getStatusType2()==RgvStatusType.FETCHWAITING ))
                 ) {
                     log.info("{}鍙峰皬杞︾瓑寰厀cs纭锛岀姸鎬亄}锛屽弬鏁皗}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol);
-                    if (rgvProtocol.getTaskNo1()!=0&&rgvProtocol.getStatusType1()==RgvStatusType.WAITING){
-                        if (rgvProtocol.getTaskNo1()==9999){
+                    if (rgvProtocol.getTaskNo1()!=0 && (rgvProtocol.getStatusType1()==RgvStatusType.WAITING || rgvProtocol.getStatusType1()==RgvStatusType.FETCHWAITING)){
+                        if (rgvProtocol.getTaskNo1()==29999){
                             boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
                             if (!rgvComplete){
                                 log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo());
@@ -3864,13 +4043,25 @@
                             log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo());
                             break;
                         }
+
+                        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+                        StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd());
+                        WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue());
+                        if (!Cools.isEmpty(wrkMast)){
+                            // 涓嬪彂绔欑偣淇℃伅
+                            staProtocol.setWorkNo(wrkMastSta.getWrkNo().intValue());
+                            staProtocol.setStaNo(wrkMast.getStaNo());
+                            if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))) {
+                                continue;
+                            }
+                        }
                         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 && rgvProtocol.getStatusType2()==RgvStatusType.WAITING){
-                        if (rgvProtocol.getTaskNo2()==9999){
+                    }else if (rgvProtocol.getTaskNo2()!=0 && (rgvProtocol.getStatusType2()==RgvStatusType.WAITING || rgvProtocol.getStatusType2()==RgvStatusType.FETCHWAITING)){
+                        if (rgvProtocol.getTaskNo2()==29999){
                             boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
                             if (!rgvComplete){
                                 log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo());
@@ -3889,6 +4080,17 @@
                         if (!rgvComplete){
                             log.error("灏忚溅澶嶄綅澶辫触锛屽皬杞﹀彿{}锛�",rgvProtocol.getRgvNo());
                             break;
+                        }
+                        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+                        StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd());
+                        WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue());
+                        if (!Cools.isEmpty(wrkMast)){
+                            // 涓嬪彂绔欑偣淇℃伅
+                            staProtocol.setWorkNo(wrkMastSta.getWrkNo().intValue());
+                            staProtocol.setStaNo(wrkMast.getStaNo());
+                            if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))) {
+                                continue;
+                            }
                         }
                         wrkMastSta.setWrkSts(3);
                         wrkMastStaMapper.updateById(wrkMastSta);
@@ -3925,6 +4127,7 @@
                 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 (basRgvMap == null) {
@@ -3984,6 +4187,7 @@
                 // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅浜屾湁鐗�//rgv鍙敤
                 if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
                         && rgvProtocol.getModeType() == RgvModeType.AUTO
+                        && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0
                         && (rgvProtocol.getLoaded2()==3  || rgvProtocol.getLoaded2()==1 )////0 鏃犵墿锛�1 涓�灞傛棤鐗╀簩灞傛湁鐗� 锛堝彧鑳芥媶鍙狅級 锛�2涓�灞傛湁鐗╀簩灞傛棤鐗� 锛�3  1銆�2灞傞兘鏈夌墿
                 ) {
                     BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
@@ -3999,7 +4203,7 @@
                             continue;
                         }
                         boolean sign = false;
-                        if (wrkMastSta.getStaStart()==0 && wrkMastSta.getStaEnd()!=0){//鏀�
+                        if ( wrkMastSta.getStaEnd()!=0){//鏀�
                             sign = rgvPutEmpty(rgvProtocol.getRgvNo(),wrkMastSta);//鎷嗙洏
                         }else {
                             continue;
@@ -4113,6 +4317,7 @@
                 // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅浜屾棤鐗�//rgv鍙敤
                 if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
                         && rgvProtocol.getModeType() == RgvModeType.AUTO
+                        && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0
                         &&  (rgvProtocol.getLoaded2()==0  || rgvProtocol.getLoaded2()==1 ) //鐜板満淇敼锛氬彔鐩樻満锛�////0 鏃犵墿锛�1 涓�灞傛棤鐗╀簩灞傛湁鐗╋紙鍙兘鎷嗗彔锛�   锛�2涓�灞傛湁鐗╀簩灞傛棤鐗� 锛堝彧鑳芥弧鏀撅級锛�3  1銆�2灞傞兘鏈夌墿
                 ) {
                     BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
@@ -4128,7 +4333,7 @@
                             continue;
                         }
                         boolean sign = false;
-                        if (wrkMastSta.getStaEnd()==0 && wrkMastSta.getStaStart()!=0){//鍙�
+                        if ( wrkMastSta.getStaStart()!=0){//鍙�
                             sign = rgvTakeEmpty(rgvProtocol.getRgvNo(),wrkMastSta);//鍙犵洏
                         }else {
                             continue;
@@ -4254,6 +4459,11 @@
                     if (rgvProtocol.getRgvPosI().equals(basRgvMap.getStartRoute())){
                         continue;
                     }
+                    if (rgvProtocol.getRgvNo()==1 && (rgvProtocol.getRgvPosI().equals(101) || rgvProtocol.getRgvPosI().equals(102) )){
+                        continue;
+                    } else if (rgvProtocol.getRgvNo()==2 && (rgvProtocol.getRgvPosI().equals(116) || rgvProtocol.getRgvPosI().equals(117) ) ){
+                        continue;
+                    }
                     rgvAvoidanceXY(rgvProtocol.getRgvNo());
                     rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute());
                 }
@@ -4303,26 +4513,51 @@
      * 灏忚溅XY绉诲姩  閬胯
      * */
     public synchronized boolean rgvAvoidanceXY(Integer rgvId){
-        try{
-            BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId);
-            //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-            RgvCommand rgvCommand = new RgvCommand();
-            rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
-            rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
-            rgvCommand.setTaskNo1((short)9999); // 宸ヤ綅1宸ヤ綔鍙�
-            rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 宸ヤ綅1浠诲姟妯″紡:  鍥炲師鐐�
-            rgvCommand.setDestinationStaNo1(basRgvMap.getLockStartRoute().shortValue());
-            rgvCommand.setCommand((short) 1);   //宸ヤ綅1浠诲姟纭
-            if (!MessageQueue.offer(SlaveType.Rgv, 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));
+        if (rgvId==1){
+            try{
+                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId);
+                //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+                RgvCommand rgvCommand = new RgvCommand();
+                rgvCommand.setRgvNo(rgvId); // RGV缂栧彿
+                rgvCommand.setAckFinish1((short) 0);  // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+                rgvCommand.setTaskNo1((short)29999); // 宸ヤ綅1宸ヤ綔鍙�
+                rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 宸ヤ綅1浠诲姟妯″紡:  鍥炲師鐐�
+                //basRgvMap.getLockStartRoute().shortValue()
+                rgvCommand.setSourceStaNo1( (short)101);
+                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鍐欎换鍔�   step=9锛屽洖鍘熺偣 9999浠诲姟鍙�
+                    log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand));
+                    return false;
+                } else {
+                    return true;
+                }
+            }catch (Exception e){
                 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)29999); // 宸ヤ綅2宸ヤ綔鍙�
+                rgvCommand.setTaskMode2(RgvTaskModeType.X_MOVE); // 宸ヤ綅2浠诲姟妯″紡:  鍥炲師鐐�
+                rgvCommand.setSourceStaNo2((short)117);
+                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;
+
+            }
         }
     }
 
@@ -4509,7 +4744,7 @@
     public synchronized boolean rgvComplete(Integer rgvId){
         try{
             //  鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-            if (!MessageQueue.offer(SlaveType.Crn, rgvId, new Task(3, new RgvCommand()))) {
+            if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(3, new RgvCommand()))) {
                 //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱   step=4锛屽伐浣�1鍐欎换鍔★紱     step=5锛屽伐浣�2鍐欎换鍔�
                 log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}",rgvId);
                 return false;
diff --git a/src/main/java/com/zy/asrs/utils/RouteUtils.java b/src/main/java/com/zy/asrs/utils/RouteUtils.java
index c8cbe52..636cb9d 100644
--- a/src/main/java/com/zy/asrs/utils/RouteUtils.java
+++ b/src/main/java/com/zy/asrs/utils/RouteUtils.java
@@ -280,7 +280,51 @@
     }
 
     public static short RgvPosStaOne(Short posId){
-        return 1;
+        switch (posId.intValue()){
+            case 1:
+            case 2:
+                return 102;
+            case 3:
+            case 4:
+                return 122;
+            case 5:
+            case 6:
+                return 105;
+            case 7:
+            case 8:
+                return 118;
+            case 9:
+            case 10:
+            case 11:
+                return 119;
+            case 12:
+            case 13:
+            case 14:
+                return 110;
+            case 15:
+                return 120;
+            case 16:
+            case 17:
+            case 18:
+                return 111;
+            case 19:
+                return 121;
+            case 20:
+            case 21:
+            case 22:
+                return 113;
+            case 23:
+            case 24:
+                return 123;
+            case 25:
+                return 114;
+            case 26:
+            case 27:
+            case 28:
+                return 116;
+            default:
+                return 0;
+        }
     }
 
     public static short RgvPosStaTwo(Short posId){
@@ -321,6 +365,9 @@
             case 24:
                 return 105;
             case 25:
+            case 26:
+            case 27:
+            case 28:
                 return 104;
             default:
                 return 0;
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 454769e..4903b11 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -56,6 +56,8 @@
 //                    mainService.generateStoreWrkFile0(); // WMS鍏ュ簱
                     // 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱
                     mainService.stnToCrnStnPick();
+                    // 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱鎷嗙洏鍖�
+                    mainService.stnToCrnStnPick2();
                     // 鍑哄簱  ===>>  鍫嗗灈鏈哄嚭搴撶珯鍒板嚭搴撶珯
                     mainService.crnStnToOutStn();
                     // 鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
@@ -86,9 +88,11 @@
                     //鎵ц灏忚溅绌烘澘鎼繍浠诲姟
                     mainService.rgvRunWrkMastEmptyStaPut();//鏀�
                     mainService.rgvRunWrkMastEmptyStaTake();//鍙�
-                    mainService.rgvRunWrkMastEmptyStaAvoidance();//閬胯
-
-
+                    i++;
+                    if (i > 3) {
+                        mainService.rgvRunWrkMastEmptyStaAvoidance();//閬胯
+                        i = 0;
+                    }
                     /////////////////////////////////////RGV璋冨害/////////////////////////////////////
 
                     // 寮傚父淇℃伅璁板綍
@@ -124,8 +128,10 @@
                     mainService.stackingCompletionDriveTray();
                     //鎷嗗灈瀹屾垚缁х画涓嬩竴姝�
                     mainService.stackingCompletionDriveTray2();
+                    //鎷嗗灈瀹屾垚鎵樼洏缁х画涓嬩竴姝�
+                    mainService.stackingCompletionDriveTrayOk2();
                     //璐存爣瀹屾垚缁х画涓嬩竴姝�
-                    mainService.stackingCompletionDriveTray3();
+//                    mainService.stackingCompletionDriveTray3();
 
 
                 } catch (Exception e) {
diff --git a/src/main/java/com/zy/core/model/DevpSlave.java b/src/main/java/com/zy/core/model/DevpSlave.java
index 9cd578c..217dfa9 100644
--- a/src/main/java/com/zy/core/model/DevpSlave.java
+++ b/src/main/java/com/zy/core/model/DevpSlave.java
@@ -26,6 +26,7 @@
     private List<Sta> outSta = new ArrayList<>();
 
     private List<Sta> pickSta = new ArrayList<>();
+    private List<Sta> pickSta2 = new ArrayList<>();
 
     private List<Sta> outRgvSta = new ArrayList<>();
 
diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index 7f04510..ff27b04 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -111,7 +111,7 @@
                         commandAvoidanceXY.setAckFinish1((short) 1);  // 浠诲姟瀹屾垚纭浣�
                         commandAvoidanceXY.setTaskMode1(RgvTaskModeType.X_MOVE); // 浠诲姟妯″紡
                         commandAvoidanceXY.setSourceStaNo1((short)0);     // 婧愮珯
-                        commandAvoidanceXY.setDestinationStaNo1(slave.getId()==1? (short) 101:(short)117);     // 鐩爣绔�
+                        commandAvoidanceXY.setDestinationStaNo1(slave.getId()==1? (short) 101:(short)116);     // 鐩爣绔�
                         commandAvoidanceXY.setTaskNo2((short) 0); // 宸ヤ綔鍙�
                         commandAvoidanceXY.setAckFinish2((short) 1);  // 浠诲姟瀹屾垚纭浣�
                         commandAvoidanceXY.setTaskMode2(RgvTaskModeType.X_MOVE); // 浠诲姟妯″紡
@@ -328,7 +328,7 @@
             return false;
         }
 
-        siemensNet.Write("DB100.20", command.getCommand());
+//        siemensNet.Write("DB100.20", command.getCommand());
 
         command.setRgvNo(slave.getId());
         short[] array = new short[5];
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index f446c91..92778f0 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -20,6 +20,7 @@
 import com.zy.core.model.DevpSlave;
 import com.zy.core.model.Task;
 import com.zy.core.model.protocol.StaProtocol;
+import io.swagger.models.auth.In;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 
@@ -124,6 +125,10 @@
                     // 鍐欐暟鎹� ID+鐩爣绔� 鐮佸灈瀹屾垚  缁欒緭閫佺嚎鍐欎换鍔″畬鎴�
                     case 3:
                         write3((StaProtocol)task.getData());
+                        break;
+                    // 鍐欐暟鎹� ID+鐩爣绔� 鐮佸灈瀹屾垚  缁欒緭閫佺嚎鍐欎换鍔″畬鎴愬浣�
+                    case 4:
+                        write4((StaProtocol)task.getData());
                         break;
                     default:
                         break;
@@ -338,14 +343,36 @@
         if (null == staProtocol) {
             return;
         }
-        ArrayList<Integer> staNos = getStaNo();
-        int index = staNos.indexOf(staProtocol.getSiteId());
+        Integer siteId = staProtocol.getSiteId();
+        Integer index =0;
+        switch (siteId){
+            case 118:
+                index=0;
+                break;
+            case 119:
+                index=1;
+                break;
+            case 120:
+                index=2;
+                break;
+            case 121:
+                index=3;
+                break;
+            case 131:
+                index=4;
+                break;
+            case 135:
+                index=5;
+                break;
+            default:
+                return;
+        }
 
         OperateResult write = null;
         //浠诲姟涓嬪彂娆℃暟
         int writeCount = 0;
         do {
-            write = siemensS7Net.Write("DB100." + index*6, (short)1);    // 宸ヤ綔鍙�
+            write = siemensS7Net.Write("DB100.600." + index, true);    // 浠诲姟瀹屾垚
             if(write.IsSuccess){
                 writeCount=6;
             }else {
@@ -363,7 +390,62 @@
             log.error("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
         } else {
             OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
-            log.info("杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂锛� {}",  slave.getId(), JSON.toJSON(staProtocol));
+            log.info("杈撻�佺嚎鍛戒护涓嬪彂鐮佸灈瀹屾垚  缁欒緭閫佺嚎鍐欎换鍔″畬鎴� [id:{}] >>>>> 鍛戒护涓嬪彂锛� {}",  slave.getId(), JSON.toJSON(staProtocol));
+        }
+    }
+
+    private void write4(StaProtocol staProtocol) throws InterruptedException {
+        if (null == staProtocol) {
+            return;
+        }
+        Integer siteId = staProtocol.getSiteId();
+        Integer index =0;
+        switch (siteId){
+            case 118:
+                index=0;
+                break;
+            case 119:
+                index=1;
+                break;
+            case 120:
+                index=2;
+                break;
+            case 121:
+                index=3;
+                break;
+            case 131:
+                index=4;
+                break;
+            case 135:
+                index=5;
+                break;
+            default:
+                return;
+        }
+
+        OperateResult write = null;
+        //浠诲姟涓嬪彂娆℃暟
+        int writeCount = 0;
+        do {
+            write = siemensS7Net.Write("DB100.600." + index, false);    // 浠诲姟瀹屾垚澶嶄綅
+            if(write.IsSuccess){
+                writeCount=6;
+            }else {
+                writeCount++;
+                log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+            }
+        }while (writeCount<5);
+
+        if (!write.IsSuccess) {
+            staProtocol = station.get(staProtocol.getSiteId());
+            if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
+                staProtocol.setPakMk(true);
+            }
+            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol)));
+            log.error("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
+        } else {
+            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
+            log.info("杈撻�佺嚎鍛戒护涓嬪彂鐮佸灈瀹屾垚  缁欒緭閫佸浣� [id:{}] >>>>> 鍛戒护涓嬪彂锛� {}",  slave.getId(), JSON.toJSON(staProtocol));
         }
     }
     // 鏇存柊鍏ュ嚭搴撴ā寮�
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 477b377..0ba0842 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -350,8 +350,24 @@
     outSta[0]:
       staNo: 11
     # 鎷f枡鍏ュ簱鍙�1
+    pickSta2[0]:
+      staNo: 118
+      barcode: ${wcs-slave.barcode[0].id}
+    # 鎷f枡鍏ュ簱鍙�1
+    pickSta2[1]:
+      staNo: 119
+      barcode: ${wcs-slave.barcode[0].id}
+    # 鎷f枡鍏ュ簱鍙�1
+    pickSta2[2]:
+      staNo: 120
+      barcode: ${wcs-slave.barcode[0].id}
+    # 鎷f枡鍏ュ簱鍙�1
+    pickSta2[3]:
+      staNo: 121
+      barcode: ${wcs-slave.barcode[0].id}
+    # 鎷f枡鍏ュ簱鍙�1
     pickSta[0]:
-      staNo: 11
+      staNo: 122
       barcode: ${wcs-slave.barcode[0].id}
     # Rgv鍑哄簱鍙�1
     outRgvSta[0]:
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index b0937e5..21db737 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -106,6 +106,14 @@
         select top 1 * from dbo.asr_wrk_mast where wrk_no=#{workNo}
     </select>
 
+    <select id="selectPakInStep4" resultMap="BaseResultMap">
+        select top 1 * from dbo.asr_wrk_mast where sta_no=#{staNo} and wrk_sts = 14 and io_type>100 and sheet_no=#{sheetNo}
+    </select>
+
+    <select id="selectPakInStep5" resultMap="BaseResultMap">
+        select top 1 * from dbo.asr_wrk_mast where sta_no=#{staNo} and wrk_sts = 14 and io_type>100 and sheet_no!=#{sheetNo}
+    </select>
+
     <select id="selectPickStep" resultMap="BaseResultMap">
         select top 1 * from asr_wrk_mast where barcode=#{barcode} and wrk_sts=14 and (io_type=103 or io_type=107 or io_type=104)
     </select>

--
Gitblit v1.9.1