From 0dd9c5341345f296f0456d9e044ae489707e23da Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@63.com>
Date: 星期四, 10 三月 2022 09:20:28 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  105 +++++++++++++++++++++++++++-------
 src/main/java/com/zy/core/thread/MelsecCrnThread.java       |    3 
 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java         |    6 +
 src/main/resources/mapper/WrkMastMapper.xml                 |   12 ++-
 src/main/java/com/zy/core/MainProcess.java                  |    4 
 src/main/java/com/zy/core/model/protocol/CrnProtocol.java   |    5 +
 6 files changed, 103 insertions(+), 32 deletions(-)

diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index 604c778..b889886 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -27,11 +27,13 @@
 
     // 鍏ュ簱绗簩姝ワ紝褰撴墭鐩樼墿鏂欏湪鍫嗗灈鏈哄叆搴撶珯鏃舵椂鏌ヨ
 //    @Select("select top 1 * from dbo.asr_wrk_mast where wrk_sts=2 and crn_no=#{crnNo} and wrk_no=#{workNo} and (io_type=1 or io_type=10 or io_type=53 or io_type=54 or io_type=57) order by io_pri desc,io_time,wrk_no ASC")
-    WrkMast selectPakInStep2(@Param("crnNo")Integer crnNo, @Param("workNo")Integer workNo, @Param("staNo")Integer staNo);
+    WrkMast selectPakInStep23456(@Param("crnNo")Integer crnNo, @Param("workNo")Integer workNo, @Param("staNo")Integer staNo);
 
     // 鍏ュ簱绗笁姝ワ紝褰撳爢鍨涙満鎶婅揣鏀惧叆搴撲綅鏃�
 //    @Select("select top 1 from dbo.asr_wrk_mast where wrk_no=#{workNo}")
-    WrkMast selectPakInStep3(@Param("workNo")Integer workNo);
+    WrkMast selectPakInStep7(@Param("workNo")Integer workNo);
+
+    WrkMast selectPakInStep56(@Param("workNo")Integer workNo);
 
     // 鎷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)")
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 5d68581..599f011 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -519,7 +519,7 @@
     /**
      * 鍏ュ簱  ===>>  鍫嗗灈鏈虹珯鍒板簱浣�
      */
-    public void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol){
+    public boolean crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol){
         for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
             boolean flag = false;
             // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅
@@ -543,8 +543,8 @@
             if (!flag) {
                 continue;
             }
-            // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
-            WrkMast wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
+            // 鑾峰彇宸ヤ綔鐘舵�佷负 2,3,4,5,6 鐨勫叆搴撳伐浣滄。
+            WrkMast wrkMast = wrkMastMapper.selectPakInStep23456(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
             if(null == wrkMast) {
 //                log.error("鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getWorkNo());
                 continue;
@@ -560,10 +560,6 @@
                 continue;
             }
 
-            // 鍫嗗灈鏈烘帶鍒惰繃婊�
-            if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
-                continue;
-            }
             // todo锛氬皬杞﹁縼鍏ュ嚭
             // 鐩爣搴撲綅 ===>> 鏈�澶栧眰搴撲綅
             if (locMastService.isOutMost(wrkMast.getLocNo())) {
@@ -577,7 +573,7 @@
                     }
                     // 灏忚溅鎼蛋
                     if (wrkMast.getWrkSts() == 3L) {
-                        this.carMoveOut(wrkMast, steNo);
+                        this.carMoveOut(wrkMast, steNo, crnProtocol);
                     }
                 // 娌℃湁灏忚溅
                 } else {
@@ -597,35 +593,35 @@
                     if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                         log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
                     } else {
-
-                        // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 7.鍚婅溅鍏ュ簱涓�
+                        // 淇敼宸ヤ綔妗g姸鎬�  7.鍚婅溅鍏ュ簱涓�
                         Date now = new Date();
                         wrkMast.setWrkSts(7L);
                         wrkMast.setCrnStrTime(now);
                         wrkMast.setModiTime(now);
                         if (wrkMastMapper.updateById(wrkMast) == 0) {
-                            log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                            log.error("淇敼宸ヤ綔妗g姸鎬� {} => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkSts$(), wrkMast.getWrkNo());
                         }
+                        return true;
                     }
                 }
 
             // 鐩爣搴撲綅 ===>> 闈炴渶澶栧眰搴撲綅
             } else {
                 // 鍒ゆ柇灏忚溅鏄惁鍦ㄥ綋鍓嶇粍搴撲綅锛屽鏋滄槸鍒欏爢鍨涙満灏嗚揣鐗╂斁缃皬杞︿笂锛屽鏋滀笉鏄紝鍒欑洿鎺ュ爢鍨涙満鎼Щ灏忚溅鑷冲綋鍓嶇粍鐨勬渶澶栧眰搴撲綅
+                Integer steNo = this.hasCarOfIdle(wrkMast.getLocNo());
+
+
 
             }
 
-
-//            this.carMoveIn(wrkMast);
-
-
             // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
             if (wrkMastMapper.selectWorking(slave.getId()) != null) {
-                return;
+                continue;
             }
 
 
         }
+        return false;
     }
 
     /**
@@ -725,15 +721,41 @@
     /**
      * 鍏ュ簱  ===>>  鍫嗗灈鏈烘惉鍑哄皬杞�
      */
-    public void carMoveOut(WrkMast wrkMast, Integer steNo) {
+    public void carMoveOut(WrkMast wrkMast, Integer steNo, CrnProtocol crnProtocol) {
         // 鑾峰彇绌挎杞︿俊鎭�
         SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
         SteProtocol steProtocol = steThread.getSteProtocol();
         if (steProtocol == null) { return; }
+        // 绌挎杞︾┖闂�
         if (steProtocol.getStatusType().equals(SteStatusType.IDLE)) {
+            // 鍫嗗灈鏈虹┖闂�
+            if (crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() == 0) {
+                // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 --------------------------------------------------------------------------
+                CrnCommand crnCommand = new CrnCommand();
+                crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+                crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+                crnCommand.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡:  搴撲綅绉昏浆
+                crnCommand.setSourcePosX(steProtocol.getRow());     // 婧愬簱浣嶆帓
+                crnCommand.setSourcePosY(steProtocol.getBay());     // 婧愬簱浣嶅垪
+                crnCommand.setSourcePosZ(steProtocol.getLev());     // 婧愬簱浣嶅眰
+                crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 鐩爣搴撲綅鎺�
+                crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 鐩爣搴撲綅鍒�
+                crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 鐩爣搴撲綅灞�
+                if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
+                    log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+                } else {
 
-
-
+                    // 淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉 => 5.杩佸嚭灏忚溅
+                    Date now = new Date();
+                    wrkMast.setWrkSts(5L);
+                    wrkMast.setCrnStrTime(now);
+                    wrkMast.setModiTime(now);
+                    if (wrkMastMapper.updateById(wrkMast) == 0) {
+                        log.error("淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉 => 5.杩佸嚭灏忚溅 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+                    }
+                }
+            }
         }
     }
 
@@ -915,6 +937,43 @@
     }
 
     /**
+     * 鍫嗗灈鏈洪拡瀵逛簬灏忚溅杩佺Щ宸ヤ綔鐨勫畬鎴�
+     */
+    @Async
+    public void carMoveFinished() {
+        for (CrnSlave crn : slaveProperties.getCrn()) {
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+            if (crnProtocol == null) { continue; }
+            //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
+            if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
+                // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
+                WrkMast wrkMast = wrkMastMapper.selectPakInStep56(crnProtocol.getTaskNo().intValue());
+                if (wrkMast == null) {
+                    log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
+                    continue;
+                }
+                // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
+                if ((wrkMast.getWrkSts() == 5 || wrkMast.getWrkSts() == 6) || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)){
+                    wrkMast.setWrkSts(9L);
+                } else  {
+                    continue;
+                }
+                Date now = new Date();
+                wrkMast.setCrnEndTime(now);
+                wrkMast.setModiTime(now);
+                // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
+                if (wrkMastMapper.updateById(wrkMast) > 0) {
+                    // 鍫嗗灈鏈哄浣�
+                    crnThread.setResetFlag(true);
+                }
+
+            }
+        }
+    }
+
+    /**
      * 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
      */
     @Async
@@ -927,14 +986,14 @@
             //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
             if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                 // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
-                WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
+                WrkMast wrkMast = wrkMastMapper.selectPakInStep7(crnProtocol.getTaskNo().intValue());
                 if (wrkMast == null) {
                     log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
                     continue;
                 }
-                // 鍏ュ簱 + 搴撲綅杞Щ  ==> 4.鍏ュ簱瀹屾垚
-                if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)){
-                    wrkMast.setWrkSts(4L);
+                // 鍏ュ簱 + 搴撲綅杞Щ  ==> 9.鍏ュ簱瀹屾垚
+                if (wrkMast.getWrkSts() == 7 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)){
+                    wrkMast.setWrkSts(9L);
                 } else  {
                     continue;
                 }
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 0f4eae7..8046709 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -51,8 +51,8 @@
                     mainService.crnStnToOutStn();
                     // 鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
                     mainService.crnIoExecute();
-                    // 鍏ュ嚭搴撳寮� ===>> 鍫嗗灈鏈哄懡浠や笅鍙戝悗锛屽紓姝ヤ慨鏀瑰伐浣滄。鐘舵��
-//                    mainService.crnIoWrkMast();
+                    // 鍫嗗灈鏈洪拡瀵逛簬灏忚溅杩佺Щ宸ヤ綔鐨勫畬鎴�
+                    mainService.carMoveFinished();
                     // 鍏ュ簱  ===>> 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
                     mainService.storeFinished();
                     // 鍫嗗灈鏈哄紓甯镐俊鎭褰�
diff --git a/src/main/java/com/zy/core/model/protocol/CrnProtocol.java b/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
index 147eef5..e1dcbd9 100644
--- a/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
@@ -14,6 +14,11 @@
 public class CrnProtocol {
 
     /**
+     * 鍫嗗灈鏈哄彿
+     */
+    private Integer crnNo;
+
+    /**
      * 1 = 鎵嬪姩妯″紡
      * 2 = 鑷姩妯″紡
      * 3 = 鐢佃剳妯″紡
diff --git a/src/main/java/com/zy/core/thread/MelsecCrnThread.java b/src/main/java/com/zy/core/thread/MelsecCrnThread.java
index 9c8ca3b..240532f 100644
--- a/src/main/java/com/zy/core/thread/MelsecCrnThread.java
+++ b/src/main/java/com/zy/core/thread/MelsecCrnThread.java
@@ -24,7 +24,6 @@
 import com.zy.core.model.protocol.CrnProtocol;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 
 import java.text.MessageFormat;
 import java.util.Date;
@@ -110,6 +109,7 @@
         if (null == crnProtocol) {
             crnProtocol = new CrnProtocol();
         }
+        crnProtocol.setCrnNo(slave.getId());
         crnProtocol.setMode((short) -1);
 //        crnProtocol.setTaskNo((short)0);
         crnProtocol.setStatus((short)-1);
@@ -162,6 +162,7 @@
                 if (null == crnProtocol) {
                     crnProtocol = new CrnProtocol();
                 }
+                crnProtocol.setCrnNo(slave.getId());
                 crnProtocol.setMode(melsecMcNet.getByteTransform().TransInt16(result.Content, 0));
                 crnProtocol.setTaskNo(melsecMcNet.getByteTransform().TransInt16(result.Content, 2));
                 crnProtocol.setStatus(melsecMcNet.getByteTransform().TransInt16(result.Content, 4));
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index ee26d24..1a88e92 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -87,12 +87,16 @@
         select top 1 * from asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=1 and (io_type=1 or io_type=10) order by io_pri desc,io_time,wrk_no ASC
     </select>
 
-    <select id="selectPakInStep2" resultMap="BaseResultMap">
-        select top 1 * from dbo.asr_wrk_mast where wrk_sts=2 and crn_no=#{crnNo} and wrk_no=#{workNo} and sta_no=#{staNo} and (io_type=1 or io_type=10 or io_type=53 or io_type=54 or io_type=57) order by io_pri desc,io_time,wrk_no ASC
+    <select id="selectPakInStep23456" resultMap="BaseResultMap">
+        select top 1 * from dbo.asr_wrk_mast where wrk_sts in (2,3,4,5,6) and crn_no=#{crnNo} and wrk_no=#{workNo} and sta_no=#{staNo} and (io_type=1 or io_type=10 or io_type=53 or io_type=54 or io_type=57) order by io_pri desc,io_time,wrk_no ASC
     </select>
 
-    <select id="selectPakInStep3" resultMap="BaseResultMap">
-        select top 1 * from dbo.asr_wrk_mast where wrk_no=#{workNo}
+    <select id="selectPakInStep56" resultMap="BaseResultMap">
+        select top 1 * from dbo.asr_wrk_mast where wrk_no=#{workNo} and wrk_sts in (5,6)
+    </select>
+
+    <select id="selectPakInStep7" resultMap="BaseResultMap">
+        select top 1 * from dbo.asr_wrk_mast where wrk_no=#{workNo} and wrk_sts = 7
     </select>
 
     <select id="selectPickStep" resultMap="BaseResultMap">

--
Gitblit v1.9.1