From d48f94b29304be6cabbeb6f9e9fe2b25bd7140f9 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期六, 09 九月 2023 09:14:11 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  173 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 168 insertions(+), 5 deletions(-)

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 731db7f..9259abd 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -69,6 +69,8 @@
     @Autowired
     private BasShuttleErrLogService basShuttleErrLogService;
     @Autowired
+    private BasLiftErrLogService basLiftErrLogService;
+    @Autowired
     private BasShuttleErrService basShuttleErrService;
     @Autowired
     private BasCrnErrorMapper basCrnErrorMapper;
@@ -721,6 +723,10 @@
             if (!shuttleProtocol.isIdle()) {
                 return false;
             }
+            //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻
+            if (shuttleProtocol.getToken() != 0) {
+                return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟
+            }
 
             //鍒ゆ柇灏忚溅鏄惁鍒拌揪杈撻�佺珯鐐瑰簱浣�
             if (!shuttleProtocol.getCurrentLocNo().equals(basDevp.getLocNo())) {
@@ -746,6 +752,7 @@
 
             wrkMast.setWrkSts(5L);//4.鎻愬崌鏈烘惉杩愬畬鎴� => 5.灏忚溅鎼繍涓�
             wrkMast.setModiTime(new Date());
+            shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰灏忚溅浠ょ墝
             if (wrkMastMapper.updateById(wrkMast) > 0) {
                 //涓嬪彂浠诲姟
                 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
@@ -793,6 +800,10 @@
             if (!shuttleProtocol.isIdle()) {
                 return false;
             }
+            //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻
+            if (shuttleProtocol.getToken() != 0) {
+                return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟
+            }
 
             //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐�
             BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getLiftNo());
@@ -824,6 +835,7 @@
 
             wrkMast.setWrkSts(22L);//21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓�
             wrkMast.setModiTime(new Date());
+            shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰灏忚溅浠ょ墝
             if (wrkMastMapper.updateById(wrkMast) > 0) {
                 //涓嬪彂浠诲姟
                 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
@@ -856,11 +868,17 @@
                     switch (wrkMast.getWrkSts().intValue()) {
                         case 5://5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚
                             wrkMast.setWrkSts(9L);
-                            //浠诲姟鍙锋竻闆�
-                            shuttleProtocol.setTaskNo(0);
+                            if (shuttleProtocol.getToken() == wrkMast.getWrkNo()) {
+                                //閲婃斁灏忚溅浠ょ墝
+                                shuttleProtocol.setToken(0);
+                            }
                             break;
                         case 22://22.灏忚溅鎼繍涓� ==> 23.灏忚溅鎼繍瀹屾垚
                             wrkMast.setWrkSts(23L);
+                            if (shuttleProtocol.getToken() == wrkMast.getWrkNo()) {
+                                //閲婃斁灏忚溅浠ょ墝
+                                shuttleProtocol.setToken(0);
+                            }
                             break;
                         case 102://102.灏忚溅鍒版彁鍗囨満涓� ==> 103.灏忚溅鍒版彁鍗囨満瀹屾垚
                             wrkMast.setWrkSts(103L);
@@ -870,6 +888,10 @@
                             break;
                         case 108://108.灏忚溅绉诲姩涓� ==> 109.灏忚溅绉诲姩瀹屾垚
                             wrkMast.setWrkSts(109L);
+                            if (shuttleProtocol.getToken() == wrkMast.getWrkNo()) {
+                                //閲婃斁灏忚溅浠ょ墝
+                                shuttleProtocol.setToken(0);
+                            }
                             break;
                         default:
                     }
@@ -961,6 +983,10 @@
             if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
                 return false;
             }
+            //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰�
+            if (liftProtocol.getToken() != 0) {
+                return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔�
+            }
             //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
             WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId());
             if (liftWrkMast != null) {
@@ -991,6 +1017,7 @@
             wrkMast.setWrkSts(3L);//2.璁惧涓婅蛋 ==> 3.鎻愬崌鏈烘惉杩愪腑
             wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙�
             wrkMast.setModiTime(now);
+            liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗�
             if (wrkMastMapper.updateById(wrkMast) > 0) {
                 //涓嬪彂浠诲姟
                 MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
@@ -1023,6 +1050,10 @@
             if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
                 return false;
             }
+            //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰�
+            if (liftProtocol.getToken() != 0) {
+                return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔�
+            }
             //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
             WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId());
             if (liftWrkMast != null) {
@@ -1053,6 +1084,7 @@
             wrkMast.setWrkSts(24L);//23.灏忚溅鎼繍瀹屾垚 ==> 24.鎻愬崌鏈烘惉杩愪腑
             wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙�
             wrkMast.setModiTime(now);
+            liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗�
             if (wrkMastMapper.updateById(wrkMast) > 0) {
                 //涓嬪彂浠诲姟
                 MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
@@ -1088,11 +1120,19 @@
                         case 3://3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴�
                             wrkMast.setWrkSts(4L);
                             wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
+                            if (liftProtocol.getToken() == wrkMast.getWrkNo()) {
+                                //閲婃斁鎻愬崌鏈轰护鐗�
+                                liftProtocol.setToken(0);
+                            }
                             break;
                         case 24://24.鎻愬崌鏈烘惉杩愪腑 ==> 25.鎻愬崌鏈烘惉杩愬畬鎴�
                             wrkMast.setWrkSts(25L);
                             if (wrkMast.getIoType() == 11) {//搴撲綅绉昏浆
                                 wrkMast.setWrkSts(4L);//4.鎻愬崌鏈烘惉杩愬畬鎴�
+                            }
+                            if (liftProtocol.getToken() == wrkMast.getWrkNo()) {
+                                //閲婃斁鎻愬崌鏈轰护鐗�
+                                liftProtocol.setToken(0);
                             }
                             break;
                         case 104://104.鎻愬崌鏈烘惉杩愪腑 ==> 105.鎻愬崌鏈烘惉杩愬畬鎴�
@@ -1415,6 +1455,7 @@
     public void recErr() {
         try {
             this.recShuttleErr();
+            this.recLiftErr();
         } catch (Exception e) {
             News.error("recErr fail", e);
         }
@@ -1446,7 +1487,7 @@
                         if (wrkMast == null) {
                             continue;
                         }
-                        BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getErrCode().get(0));
+                        BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getErrCode());
                         String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName();
                         BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
                                 null,    // 缂栧彿
@@ -1462,14 +1503,15 @@
                                 wrkMast.getSourceStaNo(),    // 婧愮珯
                                 wrkMast.getSourceLocNo(),    // 婧愬簱浣�
                                 wrkMast.getBarcode(),    // 鏉$爜
-                                shuttleProtocol.getErrCode().get(0),    // 寮傚父鐮�
+                                shuttleProtocol.getErrCode(),    // 寮傚父鐮�
                                 errName,    // 寮傚父
                                 1,    // 寮傚父鎯呭喌
                                 now,    // 娣诲姞鏃堕棿
                                 null,    // 娣诲姞浜哄憳
                                 now,    // 淇敼鏃堕棿
                                 null,    // 淇敼浜哄憳
-                                "浠诲姟涓紓甯�"    // 澶囨敞
+                                "浠诲姟涓紓甯�",    // 澶囨敞
+                                JSON.toJSONString(shuttleProtocol)    // 绯荤粺鐘舵�佹暟鎹�
                         );
                         if (!basShuttleErrLogService.insert(basShuttleErrLog)) {
                             News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName);
@@ -1534,6 +1576,91 @@
 //                        }
 //                    }
 //                }
+            }
+        }
+    }
+
+    /**
+     * 鎻愬崌鏈哄紓甯镐俊鎭褰�
+     */
+    private void recLiftErr() {
+        Date now = new Date();
+        for (LiftSlave liftSlave : slaveProperties.getLift()) {
+            // 鑾峰彇鎻愬崌鏈轰俊鎭�
+            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
+            if (liftThread == null) {
+                continue;
+            }
+            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+            if (liftProtocol == null) {
+                continue;
+            }
+
+            if (liftProtocol.getTaskNo() != 0) {
+                //鏈変换鍔�
+                BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(liftSlave.getId(), liftProtocol.getTaskNo().intValue());
+                // 鏈夊紓甯�
+                if (latest == null) {
+                    if (liftProtocol.getDeviceError() != null && liftProtocol.getDeviceError()) {
+                        WrkMast wrkMast = wrkMastMapper.selectById(liftProtocol.getTaskNo());
+                        if (wrkMast == null) {
+                            continue;
+                        }
+
+                        String errName = "";
+                        if (liftProtocol.getFrontOverrun()) {
+                            errName = "鍓嶈秴闄�";
+                        } else if (liftProtocol.getBackOverrun()) {
+                            errName = "鍚庤秴闄�";
+                        } else if (liftProtocol.getLeftOverrun()) {
+                            errName = "宸﹁秴闄�";
+                        } else if (liftProtocol.getRightOverrun()) {
+                            errName = "鍙宠秴闄�";
+                        } else if (liftProtocol.getOverHeight()) {
+                            errName = "瓒呴珮";
+                        } else if (liftProtocol.getOverWeight()) {
+                            errName = "瓒呴噸";
+                        }
+
+                        BasLiftErrLog basLiftErrLog = new BasLiftErrLog(
+                                null,    // 缂栧彿
+                                wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
+                                now,    // 鍙戠敓鏃堕棿
+                                null,    // 缁撴潫鏃堕棿
+                                wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
+                                wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
+                                liftSlave.getId(),    // 鎻愬崌鏈�
+                                null,    // plc
+                                wrkMast.getLocNo(),    // 鐩爣搴撲綅
+                                wrkMast.getStaNo(),    // 鐩爣绔�
+                                wrkMast.getSourceStaNo(),    // 婧愮珯
+                                wrkMast.getSourceLocNo(),    // 婧愬簱浣�
+                                wrkMast.getBarcode(),    // 鏉$爜
+                                null,    // 寮傚父鐮�
+                                errName,    // 寮傚父
+                                1,    // 寮傚父鎯呭喌
+                                now,    // 娣诲姞鏃堕棿
+                                null,    // 娣诲姞浜哄憳
+                                now,    // 淇敼鏃堕棿
+                                null,    // 淇敼浜哄憳
+                                "浠诲姟涓紓甯�",    // 澶囨敞
+                                JSON.toJSONString(liftProtocol)    // 绯荤粺鐘舵�佹暟鎹�
+                        );
+                        if (!basLiftErrLogService.insert(basLiftErrLog)) {
+                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", liftSlave.getId(), errName);
+                        }
+                    }
+                } else {
+                    // 寮傚父淇
+                    if (liftProtocol.getDeviceError() == null || !liftProtocol.getDeviceError()) {
+                        latest.setEndTime(now);
+                        latest.setUpdateTime(now);
+                        latest.setStatus(2);
+                        if (!basLiftErrLogService.updateById(latest)) {
+                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", liftSlave.getId(), latest.getId());
+                        }
+                    }
+                }
             }
         }
     }
@@ -1984,6 +2111,11 @@
                 return false;
             }
 
+            //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻
+            if (shuttleProtocol.getToken() != 0) {
+                return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟
+            }
+
             if (Utils.getLev(wrkMast.getLocNo()) == shuttleProtocol.getPoint().getZ()) {
                 //鐩爣搴撲綅鍜屽皬杞﹀簱浣嶅浜庡悓涓�妤煎眰锛岄渶瑕侀�氳繃鎻愬崌鏈鸿皟搴�
                 return true;//鐩存帴杩涘叆108.灏忚溅绉诲姩涓�
@@ -2062,6 +2194,7 @@
             wrkMast.setWrkSts(102L);//灏忚溅绉诲姩鍒版彁鍗囨満涓�  101.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 102.灏忚溅鍒版彁鍗囨満涓�
             wrkMast.setLiftNo(basLift.getLiftNo());//鎻愬崌鏈哄彿(閿佸畾鎻愬崌鏈洪槻姝㈣鍏朵粬浠诲姟鎶㈠崰)
             wrkMast.setModiTime(now);
+            shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗�
             if (wrkMastMapper.updateById(wrkMast) > 0) {
                 //涓嬪彂浠诲姟
                 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
@@ -2092,6 +2225,10 @@
             }
             if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
                 return false;
+            }
+            //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰�
+            if (liftProtocol.getToken() != 0) {
+                return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔�
             }
 
             //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
@@ -2133,6 +2270,7 @@
             wrkMast.setWrkSts(104L);//鎻愬崌鏈烘惉杩愪腑  103.灏忚溅鍒版彁鍗囨満瀹屾垚 ==> 104.鎻愬崌鏈烘惉杩愪腑
             wrkMast.setLiftNo(liftThread.getSlave().getId());//閿佸畾鎻愬崌鏈洪槻姝㈣鍗犵敤
             wrkMast.setModiTime(now);
+            liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗�
             if (wrkMastMapper.updateById(wrkMast) > 0) {
                 //涓嬪彂浠诲姟
                 MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
@@ -2166,6 +2304,11 @@
                 return false;
             }
 
+            //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠浠诲姟
+            if (liftProtocol.getToken() != wrkMast.getWrkNo()) {
+                return false;
+            }
+
             //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
             NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
             if (shuttleThread == null) {
@@ -2178,6 +2321,11 @@
 
             //灏忚溅澶勪簬绌洪棽鐘舵��
             if (!shuttleProtocol.isIdleNoCharge()) {
+                return false;
+            }
+
+            //鍒ゆ柇灏忚溅浠ょ墝鏄惁涓哄綋鍓嶄换鍔�
+            if (shuttleProtocol.getToken() != wrkMast.getWrkNo()) {
                 return false;
             }
 
@@ -2233,6 +2381,15 @@
         //灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑  107.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 108.灏忚溅绉诲姩涓�
         if (wrkMast.getWrkSts() == 107) {
 
+            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
+            if (liftThread == null) {
+                return false;
+            }
+            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+            if (liftProtocol == null) {
+                return false;
+            }
+
             //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
             NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
             if (shuttleThread == null) {
@@ -2245,6 +2402,11 @@
 
             //灏忚溅澶勪簬绌洪棽鐘舵��
             if (!shuttleProtocol.isIdleNoCharge()) {
+                return false;
+            }
+
+            //鍒ゆ柇灏忚溅浠ょ墝鏄惁涓哄綋鍓嶄换鍔�
+            if (shuttleProtocol.getToken() != wrkMast.getWrkNo()) {
                 return false;
             }
 
@@ -2283,6 +2445,7 @@
             wrkMast.setWrkSts(108L);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑  107.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 108.灏忚溅绉诲姩涓�
             wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
             wrkMast.setModiTime(now);
+            liftProtocol.setToken(0);//閲婃斁鎻愬崌鏈轰护鐗�
             if (wrkMastMapper.updateById(wrkMast) > 0) {
                 //涓嬪彂浠诲姟
                 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));

--
Gitblit v1.9.1