From c05fc7d74a7f706686b2fc6735ebd98459996903 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 27 三月 2023 14:47:29 +0800
Subject: [PATCH] 四向穿梭车主线程完成操作

---
 src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java  |   27 +++++++++
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java    |   33 +++++++++++
 src/main/java/com/zy/core/thread/ShuttleThread.java            |   11 ++-
 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java            |    2 
 src/main/resources/mapper/WrkMastMapper.xml                    |   15 +++--
 src/main/java/com/zy/core/MainProcess.java                     |    2 
 src/main/java/com/zy/core/enums/ShuttleProtocolStatusType.java |   45 +++++++++++++++
 7 files changed, 124 insertions(+), 11 deletions(-)

diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index 791fe3d..b68910b 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -96,5 +96,5 @@
 
     WrkMast selectAllC();
 
-    List<WrkMast> selectWorkWaiting(Integer workNo);
+    WrkMast selectByWorkNo(Integer workNo);
 }
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 a8fa25d..f0846ce 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -651,6 +651,39 @@
     }
 
     /**
+     * 鍥涘悜绌挎杞︿换鍔″畬鎴�
+     */
+    public synchronized void shuttleFinished() {
+        for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
+            //鑾峰彇鍥涘悜绌挎杞︿俊鎭�
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
+            ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+            if (shuttleProtocol == null) {
+                continue;
+            }
+
+            //鍥涘悜绌挎杞︾姸鎬佷负绛夊緟纭
+            if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id && shuttleProtocol.getTaskNo() != 0) {
+                //灏嗕换鍔℃。鏍囪涓哄畬鎴�
+                WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo().intValue());
+                if (wrkMast != null) {
+                    wrkMast.setWrkSts(8L);
+                    if (wrkMastMapper.updateById(wrkMast) > 0) {
+                        //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
+                        shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
+                        //浠诲姟鍙锋竻闆�
+                        shuttleProtocol.setTaskNo((short) 0);
+                        News.error("鍥涘悜绌挎杞﹀浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵��,澶嶄綅銆傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo());
+                    } else {
+                        News.error("鍥涘悜绌挎杞﹀浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵��,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傚洓鍚戠┛姊溅鍙�={}锛屽伐浣滃彿={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo());
+                    }
+                }
+
+            }
+        }
+    }
+
+    /**
      * 鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
      */
     public synchronized void crnIoExecute(){
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 6e02faa..a2f1a1d 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -59,6 +59,8 @@
                     mainService.crnIoExecute();
                     // 鍏ュ嚭搴�  ===>>  鍥涘悜绌挎杞﹀叆鍑哄簱浣滀笟涓嬪彂
                     mainService.shuttleIoExecute();
+                    //鍥涘悜绌挎杞︿换鍔″畬鎴�
+                    mainService.shuttleFinished();
                     // 鍏ュ簱  ===>> 鎵ц鍫嗗灈鏈哄宸ヤ綔妗g殑瀹屾垚鎿嶄綔
                     mainService.storeFinished();
                     // 鍏ュ簱 ===>> 鎵ц绌挎杞﹀宸ヤ綔妗g殑瀹屾垚鎿嶄綔
diff --git a/src/main/java/com/zy/core/enums/ShuttleProtocolStatusType.java b/src/main/java/com/zy/core/enums/ShuttleProtocolStatusType.java
new file mode 100644
index 0000000..c8e374f
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/ShuttleProtocolStatusType.java
@@ -0,0 +1,45 @@
+package com.zy.core.enums;
+
+/**
+ * 鍥涘悜绌挎杞﹀唴閮ㄧ姸鎬佹灇涓�
+ */
+public enum ShuttleProtocolStatusType {
+
+    IDLE(1, "绌洪棽"),
+    WORKING(2, "浣滀笟涓�"),
+    WAITING(3, "绛夊緟纭"),
+    ;
+
+    public Integer id;
+    public String desc;
+
+    ShuttleProtocolStatusType(Integer id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+    public static ShuttleProtocolStatusType get(Integer id) {
+        if (null == id) {
+            return null;
+        }
+        for (ShuttleProtocolStatusType type : ShuttleProtocolStatusType.values()) {
+            if (type.id.equals(id.intValue())) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static ShuttleProtocolStatusType get(ShuttleProtocolStatusType type) {
+        if (null == type) {
+            return null;
+        }
+        for (ShuttleProtocolStatusType type2 : ShuttleProtocolStatusType.values()) {
+            if (type2 == type) {
+                return type2;
+            }
+        }
+        return null;
+    }
+
+}
diff --git a/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java b/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
index 7205ca1..0a29623 100644
--- a/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
@@ -1,5 +1,6 @@
 package com.zy.core.model.protocol;
 
+import com.zy.core.enums.ShuttleProtocolStatusType;
 import com.zy.core.enums.ShuttleStatusType;
 import com.zy.core.model.command.ShuttleAssignCommand;
 import lombok.Data;
@@ -26,6 +27,16 @@
      * 浠诲姟鎸囦护
      */
     private ShuttleAssignCommand assignCommand;
+
+    /**
+     * 褰撳墠灏忚溅鐘舵�侊紙鍐呴儴鑷垜缁存姢锛�
+     */
+    private Integer protocolStatus;
+
+    /**
+     * 褰撳墠灏忚溅鐘舵�佹灇涓�
+     */
+    private ShuttleProtocolStatusType protocolStatusType;
 
     /**
      * 婧愬簱浣�
@@ -226,4 +237,20 @@
         return (short) (this.batteryPower * 0.1);
     }
 
+    /**
+     * 璁剧疆灏忚溅鐘舵��
+     */
+    public void setProtocolStatus(Integer status) {
+        this.protocolStatus = status;
+        this.protocolStatusType = ShuttleProtocolStatusType.get(status);
+    }
+
+    /**
+     * 璁剧疆灏忚溅鐘舵��
+     */
+    public void setProtocolStatus(ShuttleProtocolStatusType status) {
+        this.protocolStatus = status.id;
+        this.protocolStatusType = status;
+    }
+
 }
diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java
index ffc4717..13db8e1 100644
--- a/src/main/java/com/zy/core/thread/ShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/ShuttleThread.java
@@ -20,10 +20,7 @@
 import com.zy.core.ThreadHandler;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.OutputQueue;
-import com.zy.core.enums.ShuttleRunDirection;
-import com.zy.core.enums.ShuttleStatusType;
-import com.zy.core.enums.ShuttleTaskModeType;
-import com.zy.core.enums.SlaveType;
+import com.zy.core.enums.*;
 import com.zy.core.model.ShuttleSlave;
 import com.zy.core.model.Task;
 import com.zy.core.model.command.ShuttleAssignCommand;
@@ -121,6 +118,7 @@
                 if (null == shuttleProtocol) {
                     shuttleProtocol = new ShuttleProtocol();
                     shuttleProtocol.setShuttleNo(slave.getId().shortValue());
+                    shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
                 }
 
                 //----------璇诲彇鍥涘悜绌挎杞︾姸鎬�-----------
@@ -415,6 +413,11 @@
                 }
                 //鍒犻櫎redis
                 redisUtil.del("wrk_no_" + map.get("wrk_no").toString());
+
+                //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting
+                shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING);
+
+                News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屽畬鎴愮瓑寰呯‘璁や腑锛岀┛姊溅鍙�={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
             }
 
         }
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 2d90877..e8b66c9 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -235,11 +235,14 @@
         </foreach>
     </select>
     
-    <select id="selectWorkWaiting" resultMap="BaseResultMap">
-        select *
-        from dbo.asr_wrk_mast
-        where 1=1
-        wrk_no=#{workNo} and wrk_sts in (4,7)
-    </select>
+<!--    <select id="selectWorkWaiting" resultMap="BaseResultMap">-->
+<!--        select *-->
+<!--        from dbo.asr_wrk_mast-->
+<!--        where 1=1-->
+<!--        wrk_no=#{workNo} and wrk_sts in (4,7)-->
+<!--    </select>-->
 
+    <select id="selectByWorkNo" resultMap="BaseResultMap">
+        select top 1 * from dbo.asr_wrk_mast where wrk_no=#{workNo}
+    </select>
 </mapper>

--
Gitblit v1.9.1