From 16bb4a6e5bf59c308ff351c5060875629f93291c Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期五, 20 十月 2023 15:20:49 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  172 +++++++++++++++++++++++++++------------------------------
 1 files changed, 81 insertions(+), 91 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 db387a9..c54ab87 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -25,6 +25,8 @@
 import com.zy.core.model.protocol.*;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.*;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -102,6 +104,10 @@
     private RedisUtil redisUtil;
     @Autowired
     private WrkMastLocMapper wrkMastLocMapper;
+    @Autowired
+    private BasLiftOptService basLiftOptService;
+    @Autowired
+    private ConfigService configService;
 
 
     /**
@@ -522,6 +528,7 @@
                             wrkMast.setStaNo(liftStaProtocol.getStaNo());//鐩爣绔�
                             wrkMast.setLocNo(sourceLocNo); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
                             wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌�
+                            wrkMast.setLiftNo(null);// 鎻愬崌鏈烘竻绌�
                             wrkMast.setModiTime(new Date());
                             if (wrkMastMapper.updateById(wrkMast) == 0) {
                                 throw new CoolException(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
@@ -844,6 +851,10 @@
             BasDevp basDevp = basDevpService.selectById(wrkMast.getStaNo());
             if (basDevp == null) {
                 return false;//鍑哄簱绔欑偣涓嶅瓨鍦�
+            }
+
+            if (!basDevp.getAutoing().equals("Y")) {
+                return false;//涓嶆槸鑷姩鐘舵��
             }
 
             if (!basDevp.getOutEnable().equals("Y")) {
@@ -1291,8 +1302,14 @@
                     && liftProtocol.getTaskNo() != 0
                     && !liftProtocol.getBusy()
             ) {
+                BasLiftOpt basLiftOpt = basLiftOptService.selectByDeviceWrk(liftProtocol.getTaskNo().toString());
+                int taskNo = liftProtocol.getTaskNo().intValue();
+                if (basLiftOpt != null) {
+                    taskNo = basLiftOpt.getWrkNo();
+                }
+
                 //灏嗕换鍔℃。鏍囪涓哄畬鎴�
-                WrkMast wrkMast = wrkMastMapper.selectByWorkNo324104(liftProtocol.getTaskNo().intValue());
+                WrkMast wrkMast = wrkMastMapper.selectByWorkNo324104(taskNo);
                 if (wrkMast != null) {
                     switch (wrkMast.getWrkSts().intValue()) {
                         case 3://3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴�
@@ -1307,15 +1324,16 @@
                             wrkMast.setWrkSts(25L);
                             if (wrkMast.getIoType() == 11) {//搴撲綅绉昏浆
                                 wrkMast.setWrkSts(4L);//4.鎻愬崌鏈烘惉杩愬畬鎴�
+                            }else {
+                                if (wrkMast.getMk() == null || !wrkMast.getMk().equals("Y")) {
+                                    //涓嶉渶瑕佺敤鍒版満姊拌噦锛岀洿鎺ヨ浆29.鍑哄簱瀹屾垚
+                                    wrkMast.setWrkSts(29L);
+                                }
                             }
+
                             if (liftProtocol.getToken().equals(wrkMast.getWrkNo())) {
                                 //閲婃斁鎻愬崌鏈轰护鐗�
                                 liftProtocol.setToken(0);
-                            }
-
-                            if (wrkMast.getMk() == null || !wrkMast.getMk().equals("Y")) {
-                                //涓嶉渶瑕佺敤鍒版満姊拌噦锛岀洿鎺ヨ浆29.鍑哄簱瀹屾垚
-                                wrkMast.setWrkSts(29L);
                             }
 
                             break;
@@ -1484,7 +1502,7 @@
             }
 
             //鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満杈撻�佺珯鐐�
-            LiftStaProtocol liftSta = shuttleDispatchUtils.getRecentLiftSta(shuttleThread.getSlave().getId());
+            LiftStaProtocol liftSta = shuttleDispatchUtils.getRecentLiftSta(shuttleThread.getSlave().getId(), Utils.getLev(wrkMast.getLocNo()));
             if (liftSta == null) {
                 return false;//娌℃湁鍙敤涓旂┖闂茬殑杈撻�佺珯鐐�
             }
@@ -1530,14 +1548,47 @@
     private boolean locToLocExecuteStep3(WrkMast wrkMast) {
         Date now = new Date();
         if (wrkMast.getWrkSts() == 23) {//23.灏忚溅鎼繍瀹屾垚
+            //婧愮珯
+            Integer sourceStaNo = wrkMast.getSourceStaNo();
+            //鐩爣绔�
+            Integer staNo = wrkMast.getStaNo();
+            if (sourceStaNo == null || staNo == null) {
+                return false;//婧愮珯鎴栫洰鏍囩珯涓虹┖
+            }
+
+            int liftNo = staNo / 100;//鑾峰彇鎻愬崌鏈哄彿
+
             //鑾峰彇鎻愬崌鏈虹嚎绋�
-            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
+            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftNo);
             if (liftThread == null) {
                 return false;
             }
             LiftProtocol liftProtocol = liftThread.getLiftProtocol();
             if (liftProtocol == null) {
                 return false;
+            }
+
+            //鑾峰彇婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐�
+            LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(liftNo, Utils.getLev(wrkMast.getSourceLocNo()));
+            if (liftStaProtocol == null) {
+                return false;//鎵句笉鍒扮珯鐐�
+            }
+
+            if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && liftStaProtocol.getHasTray())) {
+                return false;//绔欑偣蹇呴』鑷姩銆佺┖闂层�佹湁鎵樼洏
+            }
+            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            if (shuttleThread == null) {
+                return false;
+            }
+            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+            if (shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) {
+                //灏忚溅杩樺湪杈撻�佺珯鐐�
+                //璋冨害灏忚溅閬胯
+                boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getShuttleNo(), shuttleThread);
+                if (!result) {
+                    return false;
+                }
             }
 
             if (!liftProtocol.isIdle()) {
@@ -1548,14 +1599,6 @@
             WrkMast wrkMast1 = wrkMastMapper.selectLiftWrkMast(liftProtocol.getLiftNo().intValue());
             if (wrkMast1 != null && wrkMast1.getWrkNo().intValue() != wrkMast.getWrkNo().intValue()) {
                 return false;
-            }
-
-            //婧愮珯
-            Integer sourceStaNo = wrkMast.getSourceStaNo();
-            //鐩爣绔�
-            Integer staNo = wrkMast.getStaNo();
-            if (sourceStaNo == null || staNo == null) {
-                return false;//婧愮珯鎴栫洰鏍囩珯涓虹┖
             }
 
             //鑾峰彇鎻愬崌鏈哄懡浠�
@@ -1592,13 +1635,17 @@
     private boolean locToLocExecuteStep4(WrkMast wrkMast) {
         if (wrkMast.getWrkSts() == 4) {//4.鎻愬崌鏈烘惉杩愬畬鎴�
             //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐�
-            BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getLocNo()), wrkMast.getLiftNo());
-            if (targetBasDevp == null) {
-                return false;//缂哄皯绔欑偣淇℃伅
+            LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(wrkMast.getLiftNo(), Utils.getLev(wrkMast.getLocNo()));
+            if (liftStaProtocol == null) {
+                return false;//鎵句笉鍒扮珯鐐�
+            }
+
+            if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && liftStaProtocol.getHasTray())) {
+                return false;//绔欑偣蹇呴』鑷姩銆佺┖闂层�佹湁鎵樼洏
             }
 
             if (wrkMast.getShuttleNo() == null) {
-                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), targetBasDevp.getLocNo());//璋冨害灏忚溅鍒扮洰鏍囪緭閫佺珯鐐硅繘琛屽彇璐�
+                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo());//璋冨害灏忚溅鍒扮洰鏍囪緭閫佺珯鐐硅繘琛屽彇璐�
                 return false;
             }
 
@@ -1616,14 +1663,14 @@
             }
 
             //鍒ゆ柇灏忚溅鏄惁鍒拌揪鐩爣杈撻�佺珯鐐�
-            if (!shuttleProtocol.getCurrentLocNo().equals(targetBasDevp.getLocNo())) {
+            if (!shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) {
                 //灏忚溅涓嶅湪鐩爣杈撻�佺珯鐐�
-                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), targetBasDevp.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒扮洰鏍囪緭閫佺珯鐐硅繘琛屽彇璐�
+                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒扮洰鏍囪緭閫佺珯鐐硅繘琛屽彇璐�
                 return false;
             }
 
             //灏忚溅宸叉姷杈剧洰鏍囪緭閫佺珯鐐癸紝灏嗚揣鐗╂惉杩愬埌鐩爣搴撲綅
-            NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), targetBasDevp.getLocNo(), wrkMast.getLocNo());
+            NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), liftStaProtocol.getLocNo(), wrkMast.getLocNo());
             if (result == null) {//璺緞璁$畻澶辫触
                 return false;
             }
@@ -2001,8 +2048,6 @@
                         continue;//娌℃湁绌洪棽绔欑偣
                     }
 
-                    targetSta = (short) 317;
-
                     if (wrkMast.getStaNo() != 303 && wrkMast.getStaNo() != 317) {
                         //鍚慉GV鍙戣捣缁勬墭璇锋眰
                         try {
@@ -2179,7 +2224,7 @@
                     continue;
                 }
 
-                if (wrkMast.getWrkSts() != 25) {//25.鎻愬崌鏈烘惉杩愬畬鎴�
+                if (wrkMast.getWrkSts() != 29) {//29.鍑哄簱瀹屾垚
                     continue;
                 }
 
@@ -2189,6 +2234,7 @@
                     //瑕嗙洊宸ヤ綔妗g洰鏍囩珯
                     wrkMast.setStaNo(sourceStaNo);
                     wrkMast.setSourceStaNo(staNo);
+                    wrkMast.setMk("N");
                     if (wrkMastMapper.updateById(wrkMast) > 0) {
                         //鍚�300绔欏啓鍏ョ洰鏍囩珯
                         staProtocol = staProtocol.clone();
@@ -2500,7 +2546,16 @@
                 }
             } else if (wrkCharge.getWrkSts() == 52) {
                 //妫�娴嬪皬杞︽槸鍚︽弧鐢�
+
+                //鑾峰彇婊$數闃堝��
                 int maxPower = 95;
+                EntityWrapper<Config> wrapper = new EntityWrapper<>();
+                wrapper.eq("code", "chargeMaxValue");
+                Config config = configService.selectOne(wrapper);
+                if (config != null) {
+                    maxPower = Integer.parseInt(config.getValue());
+                }
+
                 if (shuttleProtocol.getPowerPercent() < maxPower) {
                     continue;
                 }
@@ -2582,8 +2637,6 @@
             if (!stepMoveLoc) {
                 continue;
             }
-
-//            this.shuttleMoveExecuteStepClearWrkMast(wrkMast);//娓呯悊111.灏忚溅绉诲姩瀹屾垚
 
         }
     }
@@ -3146,69 +3199,6 @@
                 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
             }
         }
-        return true;
-    }
-
-    /**
-     * 灏忚溅杩佺Щ-娓呯悊111.灏忚溅绉诲姩瀹屾垚
-     */
-    private boolean shuttleMoveExecuteStepClearWrkMast(WrkMast wrkMast) {
-        if (wrkMast.getWrkSts() == 111) {
-            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-            if (shuttleThread == null) {
-                return false;
-            }
-            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-            if (shuttleProtocol == null) {
-                return false;
-            }
-
-            //灏忚溅澶勪簬绌洪棽鐘舵��
-            if (!shuttleProtocol.isIdleNoCharge(wrkMast.getWrkNo())) {
-                return false;
-            }
-
-            Object o = redisUtil.get("shuttle_wrk_no_" + shuttleProtocol.getTaskNo());
-            if (o != null) {
-                ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class);
-                ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand();
-                int size = assignCommand.getCommands().size();
-                NyShuttleHttpCommand command = assignCommand.getCommands().get(size - 1);//鑾峰彇鏈�鍚庝竴娈靛懡浠�
-                if (!command.getComplete()) {
-                    return false;//鏈�鍚庝竴娈靛懡浠よ繕鏈畬鎴愶紝涓嶅仛鎿嶄綔
-                }
-                NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(shuttleProtocol.getCurrentLocNo()));
-                navigateMapData.writeNavigateNodeToRedisMap(assignCommand.getNodes(), false);//瑙i攣璺緞
-
-                //鍒犻櫎redis
-                redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo());
-            }
-
-            // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-            if (wrkMastLocMapper.save(wrkMast.getWrkNo()) <= 0) {
-                log.info("淇濆瓨宸ヤ綔鍘嗗彶妗workNo={0}]澶辫触", wrkMast.getWrkNo());
-            }
-            // 鍒犻櫎宸ヤ綔涓绘。
-            if (!wrkMastService.deleteById(wrkMast)) {
-                log.info("鍒犻櫎宸ヤ綔涓绘。[workNo={0}]澶辫触", wrkMast.getWrkNo());
-            }
-
-            //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
-            shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
-            //婧愬簱浣嶆竻闆�
-            shuttleProtocol.setSourceLocNo(null);
-            //鐩爣搴撲綅娓呴浂
-            shuttleProtocol.setLocNo(null);
-            //浠诲姟鎸囦护娓呴浂
-            shuttleProtocol.setAssignCommand(null);
-            //宸ヤ綔鍙锋竻闆�
-            shuttleProtocol.setTaskNo(0);
-            //娓呴櫎浠ょ墝
-            shuttleProtocol.setToken(0);
-            News.info("鍥涘悜绌挎杞﹀凡纭涓旂Щ鍔ㄤ换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
-        }
-
         return true;
     }
 

--
Gitblit v1.9.1