From 1e585dfd636f811952a0d2b0fc3e735325cd5243 Mon Sep 17 00:00:00 2001
From: LSH
Date: 星期二, 27 六月 2023 15:36:10 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/utils/RouteUtils.java             |   79 +++++++++++++++++++
 src/main/java/com/zy/core/model/RgvSlave.java               |    6 +
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |   89 ++++++++++++++++++++++
 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java         |   18 ++++
 src/main/resources/mapper/WrkMastMapper.xml                 |   11 ++
 src/main/java/com/zy/core/MainProcess.java                  |    2 
 6 files changed, 205 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index c860c1f..1517399 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -173,4 +173,22 @@
      * @return
      */
     List<WrkMast> selectRgvOutWorking(@Param("rgvNo")Integer rgvNo);
+
+    /*================================================RGV浠诲姟缁戝畾鐩稿叧 ==================================================*/
+
+    /**
+     * 鏌ユ壘鏄惁瀛樺湪RGV姝e湪鍑哄簱宸ヤ綔涓殑浠诲姟
+     * @param wrkNo
+     * @return
+     */
+    WrkMast selectRgvInSteWrkNo(@Param("wrkNo")Integer wrkNo);
+    /**
+     * 鏌ユ壘鏄惁瀛樺湪RGV姝e湪鍑哄簱宸ヤ綔涓殑浠诲姟
+     * @param wrkNo
+     * @return
+     */
+    WrkMast selectRgvOutSteWrkNo(@Param("wrkNo")Integer wrkNo);
+
+
+    /*================================================RGV浠诲姟缁戝畾鐩稿叧 ==================================================*/
 }
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 12aca3a..cd92354 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -513,6 +513,95 @@
     }
 
     /**
+     * 缁戝畾灏忚溅鏂规硶
+     */
+    public synchronized void rgvBindSte() {
+        for (RgvSlave rgv : slaveProperties.getRgv()) {
+            // 鑾峰彇RGV淇℃伅
+            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
+            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+            if (rgvProtocol == null) {
+                continue;
+            }
+            BasRgv basRgv = basRgvService.selectById(rgv.getId());
+            if (basRgv == null) {
+                log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgv.getId());
+                continue;
+            }
+
+            // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�, 骞朵笖鏃犱换鍔°�佹棤鐗╂椂鎵嶇户缁墽琛�
+            if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
+                    && rgvProtocol.getModeType() == RgvModeType.AUTO
+                    && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0
+                    && rgvProtocol.getLoaded1() == 0 && rgvProtocol.getLoaded2() == 0
+            ) {
+                // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
+                if (rgvProtocol.getLastIo().equals("I")) {
+                    if (basRgv.getInEnable().equals("Y")) {
+                        this.rgvBindSteIn(rgv, rgvProtocol); //  鍏ュ簱
+                        rgvProtocol.setLastIo("O");
+                    } else if (basRgv.getOutEnable().equals("Y")) {
+                        this.rgvBindSteOut(rgv, rgvProtocol); //  鍑哄簱
+                        rgvProtocol.setLastIo("I");
+                    }
+                }
+                // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
+                else if (rgvProtocol.getLastIo().equals("O")) {
+                    if (basRgv.getOutEnable().equals("Y")) {
+                        this.rgvBindSteOut(rgv, rgvProtocol); //  鍑哄簱
+                        rgvProtocol.setLastIo("I");
+                    } else if (basRgv.getInEnable().equals("Y")) {
+                        this.rgvBindSteIn(rgv, rgvProtocol); //  鍏ュ簱
+                        rgvProtocol.setLastIo("O");
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * 缁戝畾灏忚溅鍏ュ簱鏂规硶
+     */
+    public synchronized void rgvBindSteIn(RgvSlave slave, RgvProtocol rgvProtocol) {
+        for (RgvSlave.RgvStn rgvStn: slave.getRgvInSStn()){
+            Integer staNo = rgvStn.getStaNo();
+            BasDevp basDevp = basDevpService.selectById(rgvStn.getDevpPlcId());
+            if (Cools.isEmpty(basDevp) || basDevp.getWrkNo()==0){
+                continue;
+            }else {
+                WrkMast wrkMast = wrkMastMapper.selectRgvInSteWrkNo(basDevp.getWrkNo());
+                if (!Cools.isEmpty(wrkMast)){
+                    wrkMast.setRgvNo(wrkMast.getCrnNo()>3 ? 2 : 1);
+                    wrkMast.setAppeTime(new Date());
+                    if (wrkMastMapper.updateById(wrkMast)==0){
+                        log.error("缁戝畾灏忚溅鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * 缁戝畾灏忚溅鍑哄簱鏂规硶
+     */
+    public synchronized void rgvBindSteOut(RgvSlave slave, RgvProtocol rgvProtocol) {
+        for (RgvSlave.RgvStn rgvStn: slave.getRgvOutSStn()){
+            BasDevp basDevp = basDevpService.selectById(rgvStn.getDevpPlcId());
+            if (Cools.isEmpty(basDevp) || basDevp.getWrkNo()==0){
+                continue;
+            }else {
+                WrkMast wrkMast = wrkMastMapper.selectRgvOutSteWrkNo(basDevp.getWrkNo());
+                if (!Cools.isEmpty(wrkMast)){
+                    wrkMast.setRgvNo(rgvStn.getStaNo());
+                    wrkMast.setAppeTime(new Date());
+                    if (wrkMastMapper.updateById(wrkMast)==0){
+                        log.error("缁戝畾灏忚溅鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo());
+                    }
+                }
+            }
+        }
+    }
+    /**
      * 鍏ュ嚭搴�  ===>>  RGV鍏ュ嚭搴撲綔涓氫笅鍙�
      */
     public synchronized void rgvIoExecute() {
diff --git a/src/main/java/com/zy/asrs/utils/RouteUtils.java b/src/main/java/com/zy/asrs/utils/RouteUtils.java
new file mode 100644
index 0000000..22f35f5
--- /dev/null
+++ b/src/main/java/com/zy/asrs/utils/RouteUtils.java
@@ -0,0 +1,79 @@
+package com.zy.asrs.utils;
+
+import com.core.common.Arith;
+import com.core.common.Cools;
+import com.zy.core.properties.SlaveProperties;
+
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Created by vincent on 2020/8/27
+ */
+public class RouteUtils {
+
+//    姝e簭
+    public static final List<Integer> TRACK_POSITION_POSITIVE_SEQUENCE = new ArrayList<Integer>() {{
+        add(1);add(2);add(3);add(4);add(5);add(6);add(7);add(8);add(9);add(10);add(11);add(12);
+    }};
+//    鍙嶅簭
+    public static final List<Integer> TRACK_POSITION_REVERSE_SEQUENCE = new ArrayList<Integer>() {{
+        add(12);add(11);add(10);add(9);add(8);add(7);add(6);add(5);add(4);add(3);add(2);add(1);
+    }};
+
+    public static String zerofill(String msg, Integer count){
+        if (msg.length() == count){
+            return msg;
+        } else if (msg.length() > count){
+            return msg.substring(0, 16);
+        } else {
+            StringBuilder msgBuilder = new StringBuilder(msg);
+            for (int i = 0; i<count-msg.length(); i++){
+                msgBuilder.insert(0,"0");
+            }
+            return msgBuilder.toString();
+        }
+    }
+
+    // 鑾峰彇褰撳墠灏忚溅鏈璧扮殑璺嚎
+    public static List<Integer> getRoute(boolean sign,Integer drop){
+        List<Integer> result = new ArrayList<>();
+        List<Integer> groupRoute = new ArrayList<>();
+        if (sign){
+            groupRoute = TRACK_POSITION_POSITIVE_SEQUENCE;
+        }else {
+            groupRoute = TRACK_POSITION_REVERSE_SEQUENCE;
+        }
+        if (groupRoute.contains(drop)) {
+            sign = false;
+            for (Integer route : groupRoute) {
+                if (route == drop){
+                    sign=true;
+                }
+                if (sign){
+                    result.add(route);
+                }
+            }
+        }else {
+            return null;
+        }
+
+
+
+        return result;
+    }
+    // 澶栦晶鏂瑰悜鐨勮揣浣�  浼樺厛鍏ュ簱鏂瑰悜/浼樺厛鍑哄簱鏂瑰悜 ===>> 鍙嶄箣
+    public static List<String> getGroupOutsideLoc(String locNo,Integer crnNo){
+
+        List<String> result = new ArrayList<>();
+
+        return result;
+    }
+
+
+
+
+}
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index ad935a8..9b954fc 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -62,6 +62,8 @@
                     mainService.storeFinished();
 
                     ///////////////////////RGV璋冨害/////////////////////////////////////
+                    //缁戝畾灏忚溅鏂规硶
+                    mainService.rgvBindSte();
                     // 鍏ュ嚭搴�  ===>>  RGV鍏ュ嚭搴撲綔涓氫笅鍙�
                     mainService.rgvIoExecute();
                     // RGV鍏ュ簱  ===>> 鏍规嵁RGV瀹屾垚淇″彿,鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
diff --git a/src/main/java/com/zy/core/model/RgvSlave.java b/src/main/java/com/zy/core/model/RgvSlave.java
index 36ff666..5e6df0b 100644
--- a/src/main/java/com/zy/core/model/RgvSlave.java
+++ b/src/main/java/com/zy/core/model/RgvSlave.java
@@ -28,6 +28,12 @@
     // RGV鍑哄簱婧愮珯鐐�
     private List<RgvStn> rgvOutSStn = new ArrayList<>();
 
+    // RGV鍙犵洏
+    private List<RgvStn> rgvEmptyInSStn = new ArrayList<>();
+
+    // RGV绌烘澘鍏ュ簱
+    private List<RgvStn> rgvEmptyOutSStn = new ArrayList<>();
+
     // RGV鍑哄簱鐩爣绔欑偣
     private List<RgvStn> rgvDestStn = new ArrayList<>();
 
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 1db0665..fd55f58 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -238,5 +238,16 @@
         select * from dbo.asr_wrk_mast where 1=1 and wrk_sts in (16,17) and rgv_no=#{rgvNo} order by io_time,wrk_no
     </select>
     <!--                                       RGV璋冨害鍏ュ嚭搴撶浉鍏�                                      -->
+    <!-- ==============================================RGV浠诲姟缁戝畾鐩稿叧 ============================================== -->
+
+    <select id="selectRgvInSteWrkNo" resultMap="BaseResultMap">
+        select top 1 * from dbo.asr_wrk_mast where 1=1 and wrk_sts =12 and wrk_no=#{wrkNo} and rgv_no is null
+    </select>
+
+    <select id="selectRgvOutSteWrkNo" resultMap="BaseResultMap">
+        select top 1 * from dbo.asr_wrk_mast where 1=1 and wrk_sts =24 and wrk_no=#{wrkNo} and rgv_no is null
+    </select>
+
+    <!-- ==============================================RGV浠诲姟缁戝畾鐩稿叧 ============================================== -->
 
 </mapper>

--
Gitblit v1.9.1