From 7a3b50af32dce3c806a6e520043a714594f3acff Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 25 十月 2023 19:59:26 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/model/protocol/StaProtocol.java   |    2 
 src/main/java/com/zy/asrs/controller/SiteController.java    |    1 
 src/main/java/com/zy/asrs/utils/Utils.java                  |   54 ++++++++++++-
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |   18 ++++
 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java         |    2 
 src/main/resources/mapper/WrkMastMapper.xml                 |    9 ++
 src/main/webapp/views/pipeline.html                         |    4 
 src/main/java/com/zy/core/thread/NyShuttleThread.java       |    5 +
 src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java        |    3 
 src/main/java/com/zy/core/thread/SiemensDevpThread.java     |  128 ++++---------------------------
 10 files changed, 110 insertions(+), 116 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/SiteController.java b/src/main/java/com/zy/asrs/controller/SiteController.java
index a9e5cee..2961e44 100644
--- a/src/main/java/com/zy/asrs/controller/SiteController.java
+++ b/src/main/java/com/zy/asrs/controller/SiteController.java
@@ -104,6 +104,7 @@
             vo.setEmptyMk(staProtocol.isEmptyMk()?"Y":"N");     // 绌烘澘淇″彿
             vo.setStaNo(staProtocol.getStaNo());                // 鐩爣绔�
             vo.setLocType1(staProtocol.getLocType1()==null?"-":staProtocol.getLocType1().toString());                // 楂樹綆淇″彿
+            vo.setOutInModel(staProtocol.getOutInModel()==null?"-":staProtocol.getOutInModel().toString());                // 鍑哄叆搴撴ā寮�
         }
         return R.ok().add(list);
     }
diff --git a/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java b/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java
index 160f2c5..1ad425e 100644
--- a/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java
+++ b/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java
@@ -44,4 +44,7 @@
     //楂樹綆淇″彿
     private String locType1 = "-";
 
+    //鍑哄叆搴撴ā寮�
+    private String outInModel = "-";
+
 }
diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index 447ce52..55b70eb 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -76,4 +76,6 @@
     WrkMast selectShuttleWorking(@Param("shuttleNo") Integer shuttleNo);//鏄惁鏈夌┛姊溅浠诲姟(绉诲簱浠诲姟闄ゅ)
 
     WrkMast selectByBarcode(String barcode);
+
+    List<WrkMast> selectInWrkMastByLiftNo(Integer liftNo);//鎼滅储鎸囧畾鎻愬崌鏈虹殑鍏ュ簱浠诲姟
 }
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 cecad4c..e6dcfca 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -863,6 +863,12 @@
                 return false;//鍑哄簱绔欑偣涓嶅彲鍑�
             }
 
+            Integer liftNo = basDevp.getLiftNo();//鎼滅储鍑哄簱鎻愬崌鏈烘槸鍚﹀瓨鍦ㄥ叆搴撲换鍔★紝濡傚瓨鍦ㄧ姝㈠嚭搴�
+            List<WrkMast> liftWrkMasts = wrkMastMapper.selectInWrkMastByLiftNo(liftNo);
+            if (!liftWrkMasts.isEmpty()) {
+                return false;//瀛樺湪鍏ュ簱浠诲姟锛岀姝㈠嚭搴�
+            }
+
             //鑾峰彇婧愮珯
             LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(basDevp.getLiftNo(), Utils.getLev(wrkMast.getSourceLocNo()));
             if (liftStaProtocol == null) {
@@ -1109,6 +1115,18 @@
                 return false;//绔欑偣涓嶅彲鍏�
             }
 
+            //鍒ゆ柇鎻愬崌鏈烘暣涓笁妤兼槸鍚﹂兘澶勪簬鍏ュ簱妯″紡
+            Integer outInModel1 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 1);
+            Integer outInModel2 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 5);
+            Integer outInModel3 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 8);
+            if (outInModel1 == null || outInModel2 == null || outInModel3 == null) {
+                return false;//涓嶅瓨鍦ㄥ嚭鍏ュ簱妯″紡
+            }
+
+            if (outInModel1 == 2 || outInModel2 == 2 && outInModel3 == 2) {
+                return false;//鍙鏈変竴涓浜庡嚭搴撴ā寮忥紝绂佹鍏ュ簱
+            }
+
             LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, sourceBasDevp.getLiftNo());
             if (liftThread == null) {
                 return false;
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index 1966c36..afd653a 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -20,6 +20,7 @@
 import com.zy.common.utils.NavigatePositionConvert;
 import com.zy.common.utils.NavigateUtils;
 import com.zy.common.utils.ShuttleDispatchUtils;
+import com.zy.core.DevpThread;
 import com.zy.core.Slave;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.SlaveConnection;
@@ -32,15 +33,13 @@
 import com.zy.core.model.command.ShuttleCommand;
 import com.zy.core.model.protocol.NyShuttleProtocol;
 import com.zy.core.model.protocol.ShuttleProtocol;
+import com.zy.core.model.protocol.StaProtocol;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.NyShuttleThread;
 import com.zy.core.thread.ShuttleThread;
 
 import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
 
 /**
  * Created by vincent on 2020/8/27
@@ -547,4 +546,51 @@
         return null;
     }
 
+    //閫氳繃鎻愬崌鏈哄彿鍜屾ゼ灞傝幏鍙栧嚭鍏ュ簱妯″紡
+    public static Integer getOutInModelByLift(Integer liftNo, Integer lev) {
+        ArrayList<Integer> lev1 = new ArrayList<Integer>() {{
+            add(100);add(103);
+            add(105);
+        }};
+        ArrayList<Integer> lev2 = new ArrayList<Integer>() {{
+            add(200);add(203);
+            add(205);
+        }};
+        ArrayList<Integer> lev3 = new ArrayList<Integer>() {{
+            add(341);add(346);
+        }};
+
+        Integer staNo = null;
+        if (lev <= 4) {
+            staNo = lev1.get(liftNo - 1);
+        } else if (lev >= 5 && lev <= 7) {
+            staNo = lev2.get(liftNo - 1);
+        } else if ((lev >=8 && lev <= 10) && liftNo != 1) {
+            staNo = lev3.get(liftNo - 2);
+        }
+
+        if (staNo != null) {
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+            StaProtocol staProtocol = devpThread.getStation().get(staNo);
+            if (staProtocol == null) {
+                return null;
+            }
+
+            if (staNo == 100 || staNo == 200) {//1鍙锋彁鍗囨満100绔欏拰200绔欓粯璁ゅ叏鏄嚭搴撴ā寮�
+                return 2;//鍑哄簱妯″紡
+            }
+
+            if (staNo == 341) {
+                return 1;//341绔欓粯璁ゅ彧鑳藉叆搴撴ā寮�
+            }
+
+            if (staProtocol.getOutInModel() == null) {
+                return null;//娌℃湁鍑哄叆搴撲俊鍙�
+            }
+
+            return staProtocol.getOutInModel().intValue();
+        }
+        return null;
+    }
+
 }
diff --git a/src/main/java/com/zy/core/model/protocol/StaProtocol.java b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
index 8ba2510..774d3b7 100644
--- a/src/main/java/com/zy/core/model/protocol/StaProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -78,7 +78,7 @@
     // 鎵爜澶辫触
     private boolean barcodeErr;
 
-    //鍑哄叆搴撴ā寮�
+    //鍑哄叆搴撴ā寮�1銆佸叆搴擄紝2銆佸嚭搴�
     private Short outInModel;
 
     //杈撻�佺嚎鑱斿姩杞姩鏂瑰悜锛�0锛氬仠姝㈣浆鍔紝1锛氭鍚戣浆鍔紝2锛氬弽鍚戣浆鍔�
diff --git a/src/main/java/com/zy/core/thread/NyShuttleThread.java b/src/main/java/com/zy/core/thread/NyShuttleThread.java
index 083a995..255604a 100644
--- a/src/main/java/com/zy/core/thread/NyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/NyShuttleThread.java
@@ -413,6 +413,11 @@
 //                        nodes.addAll(command.getNodes());
 //                    }
                     if (nodes != null) {
+                        NavigateNode targetNode = assignCommand.getNodes().get(assignCommand.getNodes().size() - 1);//鏈�缁堣妭鐐�
+                        NavigateNode node = nodes.get(nodes.size() - 1);
+                        if (!(targetNode.getX() == node.getX() && targetNode.getY() == node.getY())) {
+                            nodes.remove(nodes.size() - 1);//鍓旈櫎灏捐妭鐐�
+                        }
                         boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(shuttleProtocol.getCurrentLocNo()), nodes, false);//瑙i攣璺緞
                         if (!result) {
                             return false;//瑙i攣澶辫触
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 14b7d60..3d874c8 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -67,6 +67,14 @@
         add(346);
     }};
 
+    //鍑哄叆搴撴ā寮�
+    public static final ArrayList<Integer> outInModelStaNos = new ArrayList<Integer>() {{
+        add(100);add(103);
+        add(105);add(200);
+        add(203);add(205);
+        add(341);add(346);
+    }};
+
     public boolean charge0;
     public boolean charge1;
 
@@ -93,11 +101,6 @@
                     // 鍐欐暟鎹� ID+鐩爣绔�
                     case 2:
                         write((StaProtocol) task.getData());
-                        read();
-                        break;
-                    // 鍑哄叆搴撴ā寮�
-                    case 3:
-                        write3((StaProtocol) task.getData());
                         read();
                         break;
                     default:
@@ -203,6 +206,17 @@
             }
         }
 
+        //璇诲嚭鍏ュ簱妯″紡
+        Thread.sleep(100);
+        OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB1002.0", (short) (outInModelStaNos.size()*2));
+        if (result4.IsSuccess) {
+            for (int i = 0; i < outInModelStaNos.size(); i++) {
+                Integer siteId = outInModelStaNos.get(i); // 绔欑偣缂栧彿
+                StaProtocol staProtocol = station.get(siteId);
+                staProtocol.setOutInModel(siemensS7Net.getByteTransform().TransInt16(result4.Content, i * 2));//璇诲彇鍑哄叆搴撴ā寮�
+            }
+        }
+
         if (result.IsSuccess && result1.IsSuccess) {
             OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
 
@@ -226,110 +240,6 @@
             OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣鍙栬緭閫佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
 //            News.error("璇诲彇杈撻�佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
         }
-    }
-
-    /**
-     * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏�
-     */
-    private void write3(StaProtocol staProtocol) throws InterruptedException {
-        if (Cools.isEmpty(staProtocol)) {
-            return;
-        }
-        OperateResult writeResult = null;
-        //浠诲姟涓嬪彂娆℃暟
-        int writeCount = 0;
-        //浠诲姟涓嬪彂鎴愬姛鏍囪瘑
-        boolean writeFlag = false;
-
-        Short outAndIn = staProtocol.getOutInModel();
-        Integer siteId = staProtocol.getSiteId();
-        Short run = 0;//鍋滄杞姩
-        String address = "";
-        if (staProtocol.getRotationDire() != null) {
-            run = staProtocol.getRotationDire().shortValue();//杞姩鏂瑰悜
-        }
-        switch (siteId) {
-            case 102:
-                address = "DB100.300";
-                break;
-            case 105:
-                address = "DB100.302";
-                break;
-            case 106:
-                address = "DB100.304";
-                break;
-            case 107:
-                address = "DB100.306";
-                break;
-            case 108:
-                address = "DB100.308";
-                break;
-        }
-
-        while(writeCount < 5){
-            writeResult = siemensS7Net.Write(address, run);
-            if (writeResult == null) {
-                log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
-                continue;
-            }
-
-            if(writeResult.IsSuccess){
-                Thread.sleep(200);
-                OperateResultExOne<byte[]> readResult = siemensS7Net.Read(address, (short) 2);
-                if(readResult.IsSuccess){
-                    short run2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0);
-                    if(run.equals(run2)){
-                        //浠诲姟鍛戒护鍐欏叆鎴愬姛
-                        writeFlag = true;
-                        if (staProtocol.getStaNo() != null && staProtocol.getWorkNo() != null) {
-                            write(staProtocol);//鍐欏叆宸ヤ綔鍙峰拰鐩爣绔�
-                        }
-                        log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
-                        break;
-                    } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓
-                        writeCount++;
-                        OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
-                                slave.getId(), JSON.toJSON(staProtocol),writeCount));
-                        log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
-                    }
-                } else {
-                    writeCount++;
-                    OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
-                            slave.getId(), JSON.toJSON(staProtocol), writeCount));
-                    log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
-                }
-            } else {
-                writeCount++;
-                OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
-                        slave.getId(), JSON.toJSON(staProtocol),writeCount));
-                log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
-            }
-            Thread.sleep(200);
-        }
-
-        //鍐欏懡浠ゅ皾璇曚簡5娆¤繕鏄け璐ヤ簡
-        if(!writeFlag){
-            staProtocol = station.get(staProtocol.getSiteId());
-            if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
-                staProtocol.setPakMk(true);
-            }
-            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol)));
-            log.error("鍐欏叆杈撻�佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
-
-            //閲嶆柊娣诲姞鏁版嵁鍒颁换鍔¢槦鍒�
-            boolean result = MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(3, staProtocol));
-            read();//璇诲彇1娆¤澶囩姸鎬�
-            return;
-        } 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));
-
-            staProtocol = station.get(siteId);
-            if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
-                staProtocol.setPakMk(true);
-            }
-        }
-
     }
 
     /**
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index ab88e90..c2cf3a5 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -225,4 +225,13 @@
         and barcode = #{barcode}
         order by io_pri desc,io_time,wrk_no asc
     </select>
+
+    <select id="selectInWrkMastByLiftNo" resultMap="BaseResultMap">
+        select * from dbo.asr_wrk_mast
+        where 1=1
+        and lift_no = #{liftNo}
+        and io_type &lt;= 100
+        and wrk_sts in (1,2,3,4,5)
+        order by io_pri desc,io_time,wrk_no asc
+    </select>
 </mapper>
diff --git a/src/main/webapp/views/pipeline.html b/src/main/webapp/views/pipeline.html
index c549366..009b117 100644
--- a/src/main/webapp/views/pipeline.html
+++ b/src/main/webapp/views/pipeline.html
@@ -99,7 +99,7 @@
                         <th>鏈夌墿</th>
                         <th>鍙叆</th>
                         <th>鍙嚭</th>
-                        <th>鍏ュ簱鏍囪</th>
+                        <th>鍑哄叆搴撴ā寮�</th>
                         <th>绌烘澘淇″彿</th>
                         <th>鐩爣绔�</th>
                         <th>鎻愬崌鏈哄埌浣嶄俊鍙�</th>
@@ -286,7 +286,7 @@
                         setVal(tr.children("td").eq(3), table[i-1].loading);
                         setVal(tr.children("td").eq(4), table[i-1].inEnable);
                         setVal(tr.children("td").eq(5), table[i-1].outEnable);
-                        setVal(tr.children("td").eq(6), table[i-1].pakMk);
+                        setVal(tr.children("td").eq(6), table[i-1].outInModel);
                         setVal(tr.children("td").eq(7), table[i-1].emptyMk);
                         setVal(tr.children("td").eq(8), table[i-1].staNo);
                         setVal(tr.children("td").eq(9), table[i-1].liftArrival);

--
Gitblit v1.9.1