From ffe256867f19115a442d96abadd270d2c17835a9 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期五, 08 十二月 2023 08:19:52 +0800
Subject: [PATCH] #出库强制预留小车给入库任务

---
 src/main/java/com/zy/asrs/service/WrkMastService.java          |    3 +
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java    |   19 +++++++++
 src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java    |   39 +++++++++++++++++++
 src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java |    5 ++
 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java            |    2 +
 src/main/resources/mapper/WrkMastMapper.xml                    |    9 ++++
 src/main/java/com/zy/core/thread/SiemensDevpThread.java        |   40 ++++++++++++++++++++
 7 files changed, 116 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index 55b70eb..ae8d873 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -61,6 +61,8 @@
 
     List<WrkMast> selectShuttleWrkByLev(String lev);
 
+    List<WrkMast> selectShuttleOutWrkByLev(String lev);
+
     WrkMast selectLiftWrkMast(Integer liftNo);
 
     List<WrkMast> selectInOutWrkMast();//鏌ヨ鍑哄叆搴撳伐浣滄。
diff --git a/src/main/java/com/zy/asrs/service/WrkMastService.java b/src/main/java/com/zy/asrs/service/WrkMastService.java
index ac64813..ebcb626 100644
--- a/src/main/java/com/zy/asrs/service/WrkMastService.java
+++ b/src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -20,4 +20,7 @@
     //鏌ヨ鎸囧畾妤煎眰宸插垎閰嶈溅杈嗙殑浠诲姟
     List<WrkMast> selectShuttleWrkByLev(Integer lev);
 
+    //鏌ヨ鎸囧畾妤煎眰宸插垎閰嶈溅杈嗙殑鍑哄簱浠诲姟
+    List<WrkMast> selectShuttleOutWrkByLev(Integer lev);
+
 }
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 770c903..631a492 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1277,6 +1277,25 @@
             }
 
             if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
+                //寮哄埗棰勭暀涓�鍙板皬杞︾粰鍏ュ簱浠诲姟
+                int lev = Utils.getLev(wrkMast.getSourceLocNo());
+                //鑾峰彇褰撳墠妤煎眰鏈夊嚑鍙扮┖闂插彲鐢ㄥ皬杞�
+                int shuttleCount = shuttleDispatchUtils.getShuttleCountByLev(lev);
+                if (shuttleCount >= 2) {//鍙湁鍙敤灏忚溅鏁伴噺澶т簬2锛屾墠杩涜鍏ュ簱浠诲姟棰勭暀灏忚溅
+                    int shuttleWrkInObligateCount = 1;//棰勭暀灏忚溅鏁伴噺
+                    Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "shuttleWrkInObligateCount").eq("status", 1));
+                    if (config != null) {
+                        shuttleWrkInObligateCount = Integer.parseInt(config.getValue());
+                    }
+                    //鍙敤鍑哄簱灏忚溅鏁伴噺(缁欏叆搴撲换鍔¢鐣欎竴鍙拌溅)
+                    int useShuttleCount = shuttleCount - shuttleWrkInObligateCount;
+                    //鏌ヨ妤煎眰宸插垎閰嶈溅杈嗙殑鍑哄簱浠诲姟鏁伴噺
+                    List<WrkMast> wrkMasts = wrkMastService.selectShuttleOutWrkByLev(lev);
+                    if (wrkMasts.size() >= useShuttleCount) {
+                        News.info("{}浠诲姟锛屽綋鍓嶆ゼ灞傚彲鐢ㄥ皬杞}鍙帮紝鍑哄簱浠诲姟宸插垎閰峽}鍙帮紝绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), useShuttleCount, wrkMasts.size());
+                        return false;
+                    }
+                }
                 boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
                 News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触");
                 return false;
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
index 466894c..04b26fd 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -37,4 +37,9 @@
     public List<WrkMast> selectShuttleWrkByLev(Integer lev) {
         return this.baseMapper.selectShuttleWrkByLev("%" + lev);
     }
+
+    @Override
+    public List<WrkMast> selectShuttleOutWrkByLev(Integer lev) {
+        return this.baseMapper.selectShuttleOutWrkByLev("%" + lev);
+    }
 }
diff --git a/src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java b/src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java
index 92b3b45..c978bc0 100644
--- a/src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java
+++ b/src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java
@@ -467,4 +467,43 @@
         return true;//鏃犲厖鐢典换鍔℃斁琛� || 鍘诲厖鐢垫々涓斁琛�
     }
 
+    /**
+     * 鑾峰彇妤煎眰鍙敤绌洪棽灏忚溅鏁伴噺
+     */
+    public int getShuttleCountByLev(int lev) {
+        int count = 0;
+        for (ShuttleSlave slave : slaveProperties.getShuttle()) {
+            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, slave.getId());
+            if (shuttleThread == null) {
+                continue;
+            }
+
+            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+            if (shuttleProtocol == null || shuttleProtocol.getShuttleNo() == null) {
+                continue;
+            }
+
+            if (checkChargeWrk(slave.getId())) {
+                continue;//瀛樺湪鍏呯數浠诲姟锛岃繃婊ゅ皬杞�
+            }
+
+            if (!shuttleProtocol.isIdle()) {
+                continue;//灏忚溅蹇欑涓�
+            }
+
+            if (shuttleProtocol.getSuspendState() == 1) {
+                //灏忚溅澶勪簬绠″埗涓�
+                continue;
+            }
+
+            if (shuttleProtocol.getPoint().getZ() == lev) {
+                //鍚屼竴妤煎眰绌洪棽鍙敤灏忚溅
+                count++;
+                continue;
+            }
+        }
+        return count;
+    }
+
 }
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 0ade878..fbfb90f 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -58,6 +58,26 @@
         add(309);add(312);
     }};
 
+    public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
+        add(302);add(304);
+        add(305);add(306);
+        add(307);add(308);
+        add(310);add(311);
+        add(312);add(313);
+        add(314);add(315);
+        add(316);add(318);
+        add(319);add(320);
+        add(321);add(322);
+        add(323);add(324);
+        add(326);add(327);
+        add(328);add(329);
+        add(330);add(332);
+        add(334);add(335);
+        add(336);add(337);
+        add(338);add(342);
+        add(343);add(344);
+    }};
+
     //楂樹綆淇″彿绔欑偣
     public static final ArrayList<Integer> locType1StaNos = new ArrayList<Integer>() {{
         add(100);add(103);
@@ -250,6 +270,26 @@
             }
         }
 
+        Thread.sleep(100);
+        for (Integer staNo : staNos2) {
+            OperateResultExOne<byte[]> result5 = siemensS7Net.Read("DB" + staNo + ".0", (short) 48);
+            if (result5.IsSuccess) {
+                StaProtocol staProtocol = station.get(staNo);
+                if (null == staProtocol) {
+                    staProtocol = new StaProtocol();
+                    staProtocol.setSiteId(staNo);
+                    station.put(staNo, staProtocol);
+                }
+
+                boolean[] status1 = siemensS7Net.getByteTransform().TransBool(result5.Content, 8, 1);
+                boolean[] status2 = siemensS7Net.getByteTransform().TransBool(result5.Content, 21, 1);
+                staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, 34));     // 宸ヤ綔鍙�
+                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, 40));   // 鐩爣绔�
+                staProtocol.setAutoing(status1[0]);  // 鑷姩
+                staProtocol.setLoading(status2[2]);  // 鏈夌墿
+            }
+        }
+
         if (result.IsSuccess && result1.IsSuccess) {
             OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
 
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 761b714..8bb543e 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -161,7 +161,14 @@
     <select id="selectShuttleWrkByLev" resultMap="BaseResultMap">
         select * from dbo.asr_wrk_mast
         where shuttle_no is not null
-        and ((wrk_sts not in (14,15)  and loc_no like #{lev}) or (wrk_sts not in (34,35) and source_loc_no like #{lev}))
+        and ((wrk_sts not in (9,10)  and loc_no like #{lev}) or (wrk_sts not in (29,30) and source_loc_no like #{lev}))
+        order by io_pri desc,wrk_sts desc
+    </select>
+
+    <select id="selectShuttleOutWrkByLev" resultMap="BaseResultMap">
+        select * from dbo.asr_wrk_mast
+        where shuttle_no is not null
+        and (wrk_sts not in (29,30) and source_loc_no like #{lev})
         order by io_pri desc,wrk_sts desc
     </select>
 

--
Gitblit v1.9.1