From 2e84db729d434524c7b35939c76c4d7020126167 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期二, 01 八月 2023 13:09:44 +0800 Subject: [PATCH] 调度方法可通过穿梭车号进行指定车辆调度 --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 678 +++++++++++++++++-------------------------------------- 1 files changed, 211 insertions(+), 467 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 d645c25..cae761a 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -28,6 +28,7 @@ import com.zy.core.model.protocol.*; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.*; +import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -959,235 +960,76 @@ */ public synchronized void shuttleOutExecute() { for (WrkMast wrkMast : wrkMastMapper.selectBy2125()) { - //鎻愬彇涓�鏉″緟鍑哄簱浠诲姟 - if (wrkMast != null) { - String outStaLocNo = null;//鍑哄簱绔欑偣搴撲綅鍙� - //鑾峰彇鍑哄簱绔欑偣 - for (DevpSlave devpSlave : slaveProperties.getDevp()) { - for (DevpSlave.StaRack staOutRack : devpSlave.getRackOutStn()) { - if (staOutRack.getStaNo().equals(wrkMast.getStaNo())) { - //鍑哄簱绔欑偣鍜屽伐浣滄。鍑哄簱绔欑偣涓�鑷� - outStaLocNo = CommonUtils.getLocNoFromRBL(staOutRack.getRow(), staOutRack.getBay(), staOutRack.getLev()); - } - } - - } - - if (wrkMast.getWrkSts() == 21 - || wrkMast.getWrkSts() == 25 - || wrkMast.getWrkSts() == 31) { - ShuttleThread shuttleThread = null; - HashMap<String, Object> searchIdleShuttle = null; - - LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); - LiftProtocol liftProtocol = liftThread.getLiftProtocol(); - - if (wrkMast.getWrkSts() == 21) { - if (wrkMast.getShuttleNo() == null) { - //瀵绘壘鏈�杩戜笖绌洪棽鐨勫洓鍚戠┛姊溅 - searchIdleShuttle = this.searchIdleShuttle(wrkMast); - shuttleThread = (ShuttleThread) searchIdleShuttle.get("result"); - if (shuttleThread == null) { - continue; - } - wrkMast.setShuttleNo(shuttleThread.getSlave().getId());//缁欏伐浣滄。鍒嗛厤鍥涘悜绌挎杞﹀彿 - wrkMastMapper.updateById(wrkMast); - }else { - //鐩存帴浣跨敤浠诲姟淇濆瓨涓殑灏忚溅 - shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); - } - }else if(wrkMast.getWrkSts() == 25) {//鐘舵��25锛岄渶瑕佸悜灏忚溅涓嬪彂鍛戒护浠庢彁鍗囨満绉诲姩鍑哄幓锛岄渶瑕佸垽鏂彁鍗囨満鐘舵槸鍚︾┖闂层�佹彁鍗囨満鏄惁鍒拌揪鐩爣妤煎眰銆佺洰鏍囨ゼ灞傜珯鐐规槸鍚﹀瓨鍦ㄣ�佺洰鏍囨ゼ灞傜珯鐐规槸鍚︾粰鍑烘彁鍗囨満鍒颁綅淇″彿 - - //鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂� - if (!liftProtocol.isIdleNoTask()) { - try { - Thread.sleep(1000);//浼戠湢1s - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - continue;//鎻愬崌鏈哄繖 - } - //鍒ゆ柇鎻愬崌鏈轰换鍔″彿鍜屽綋鍓嶅伐浣滄。浠诲姟鍙锋槸鍚︿竴鑷� - if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkMast.getWrkNo()) { - continue; - } - - //鍒ゆ柇鎻愬崌鏈烘ゼ灞傛槸鍚﹀埌浣嶏紝鍒ゆ柇绔欑偣鏄惁缁欏嚭鎻愬崌鏈哄埌浣嶄俊鍙� - String locNo = wrkMast.getSourceLocNo(); - int lev = Utils.getLev(locNo);//鐩爣浜岀淮鐮佹墍鍦ㄦゼ灞� - Short liftLev = liftProtocol.getLev();//鎻愬崌鏈烘墍鍦ㄦゼ灞� - if (liftLev == null) {//鎻愬崌鏈哄彲鑳藉湪杈撻�佺嚎妤煎眰 - continue; - } - if (liftLev.intValue() != lev) { - continue;//鎻愬崌鏈轰笉鍦ㄧ洰鏍囨ゼ灞傝烦杩� - } - - Integer staNo = Utils.levToOutInStaNo(lev >= 2 ? lev + 1 : lev); - DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); - //鑾峰彇鐩爣绔欎俊鎭� - StaProtocol staProtocol1 = devpThread.getStation().get(staNo); - if (staProtocol1 == null) { - continue;//绔欑偣淇℃伅涓嶅瓨鍦� - } - if (!staProtocol1.isLiftArrival()) { - continue;//绔欑偣鎻愬崌鏈哄埌浣嶄俊鍙穎alse - } - - //缁х画瀹屾垚涔嬪墠灏忚溅鏈畬鎴愮殑浠诲姟 - shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); - } else if (wrkMast.getWrkSts() == 31) { - //缁х画瀹屾垚涔嬪墠灏忚溅鏈畬鎴愮殑浠诲姟 - shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); - } - - if (shuttleThread == null) { - continue; - } - - ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); - if (shuttleProtocol == null) { - continue; - } - - if (outStaLocNo == null) { - continue; - } - - if (wrkMast.getWrkSts() == 21) { - - if (!shuttleProtocol.isIdle()) { - continue; - } - - //婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) - String currentLocNo = shuttleProtocol.getCurrentLocNo(); - - //灏忚溅褰撳墠灞傞珮 - Integer currentLev = Utils.getLev(currentLocNo); - //褰撳墠妤煎眰鎻愬崌鏈鸿緭閫佺珯鐐瑰簱浣嶅彿 - String liftSiteLocNo = Utils.levToOutInStaLocNo(currentLev); - - ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); - //鍥涘悜绌挎杞﹀彿 - assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); - //浠诲姟鍙� - assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); - //鍏ュ嚭搴撴ā寮� - assignCommand.setTaskMode(ShuttleTaskModeType.PAK_OUT.id.shortValue()); - assignCommand.setSourceLocNo(currentLocNo); - - //鍒ゆ柇灏忚溅鍜屽簱浣嶆槸鍚﹀湪鍚屼竴灞� - if (currentLev == Utils.getLev(wrkMast.getSourceLocNo())) { - //鍚屼竴灞�(灏嗗皬杞︾Щ鍔ㄥ埌璐х墿浣嶇疆) - - List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, wrkMast.getSourceLocNo(), liftSiteLocNo, assignCommand, shuttleThread); - if (commands == null) { - //鏈壘鍒拌矾寰勶紝绛夊緟涓嬩竴娆� - continue; - } - - //鍒嗛厤鐩爣搴撲綅 - shuttleProtocol.setLocNo(wrkMast.getSourceLocNo()); - //鍒嗛厤浠诲姟鍙� - shuttleProtocol.setTaskNo(wrkMast.getWrkNo().shortValue()); - //鍒嗛厤婧愬簱浣� - shuttleProtocol.setSourceLocNo(currentLocNo); - //鐩爣搴撲綅 - assignCommand.setLocNo(wrkMast.getSourceLocNo()); -// assignCommand.setCommands(commands); - wrkMast.setWrkSts(26L);//灏忚溅鎼繍涓� - - if (wrkMastMapper.updateById(wrkMast) > 0) { - //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); - } - }else { - //涓嶅悓灞傦紝灏嗙洰鏍囧簱浣嶅垎閰嶆垚鎻愬崌鏈哄簱浣嶅彿(灏嗗皬杞︾Щ鍔ㄥ埌鎻愬崌鏈轰綅缃�) - - //灏忚溅鍒版彁鍗囨満鍙f寚浠� - List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftSiteLocNo, ShuttleTaskModeType.PAK_IN.id, assignCommand, shuttleThread); - if (commands == null) { - if (!currentLocNo.equals(liftSiteLocNo)) {//褰撳墠浣嶇疆涔熶笉鍦ㄦ彁鍗囨満鍙� - continue;//鏈壘鍒拌矾寰� - } - commands = new ArrayList<>(); - } - shuttleProtocol.setLocNo(liftSiteLocNo); - //鍒嗛厤浠诲姟鍙� - shuttleProtocol.setTaskNo(wrkMast.getWrkNo().shortValue()); - //鍒嗛厤婧愬簱浣� - shuttleProtocol.setSourceLocNo(currentLocNo); - - //鑾峰彇褰撳墠灏忚溅鎵�鍦ㄦゼ灞傜殑绔欑偣淇℃伅 - BasDevp basDevp = basDevpService.queryByLocNo(liftSiteLocNo); - Short endStartCode = Short.parseShort(basDevp.getQrCodeValue());//绔欑偣浜岀淮鐮� - -// //澧炲姞绉诲姩杩涙彁鍗囨満鍛戒护 -// ShuttleCommand moveCommand = shuttleThread.getMoveCommand(endStartCode, liftProtocol.getBarcode(), 1600, ShuttleRunDirection.TOP.id, null, null, 500); -// commands.add(moveCommand); - - //鐩爣搴撲綅 - assignCommand.setLocNo(liftSiteLocNo); -// assignCommand.setCommands(commands); - wrkMast.setWrkSts(22L);//灏忚溅杩佺Щ鐘舵�� - - if (wrkMastMapper.updateById(wrkMast) > 0) { - //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); - } - } - } else if (wrkMast.getWrkSts() == 25) { - if (!shuttleProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { - continue; - } - - wrkMast.setShuttleNo(shuttleProtocol.getShuttleNo().intValue());//缁欏伐浣滄。鍒嗛厤鍥涘悜绌挎杞﹀彿 - - //褰撳墠妤煎眰鎻愬崌鏈鸿緭閫佺珯鐐瑰簱浣嶅彿 - String liftSiteLocNo = Utils.levToOutInStaLocNo(liftProtocol.getLev().intValue()); - - ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); - //鍥涘悜绌挎杞﹀彿 - assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); - //浠诲姟鍙� - assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); - //鍏ュ嚭搴撴ā寮� - assignCommand.setTaskMode(ShuttleTaskModeType.PAK_OUT.id.shortValue()); - assignCommand.setSourceLocNo(liftSiteLocNo); - - List<ShuttleCommand> commands = this.shuttleAssignCommand(liftSiteLocNo, wrkMast.getSourceLocNo(), liftSiteLocNo, assignCommand, shuttleThread); - if (commands == null) { - continue;//鏈壘鍒拌矾寰� - } - -// //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝闇�瑕佸涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛 -// short startCode = liftProtocol.getBarcode();//鎻愬崌鏈哄唴閮ㄤ簩缁寸爜 -// Short distCode = commands.get(0).getStartCodeNum();//鐩爣浜岀淮鐮� -// //鑾峰彇绉诲姩鍛戒护 -// ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCode, distCode, 1600, commands.get(0).getRunDirection(), null, null, 500); -// commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶� - - //鍒嗛厤鐩爣搴撲綅 - shuttleProtocol.setLocNo(wrkMast.getSourceLocNo()); - //鍒嗛厤浠诲姟鍙� - shuttleProtocol.setTaskNo(wrkMast.getWrkNo().shortValue()); - //鍒嗛厤婧愬簱浣� - shuttleProtocol.setSourceLocNo(liftSiteLocNo); - //鐩爣搴撲綅 - assignCommand.setLocNo(wrkMast.getSourceLocNo()); -// assignCommand.setCommands(commands); - wrkMast.setWrkSts(26L);//灏忚溅鎼繍涓� - - if (wrkMastMapper.updateById(wrkMast) > 0) { - //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); - } - } - - } + boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//灏忚溅鎼嚭搴撲腑 + if (!step1) { + continue; } } + } + + /** + * 鍑哄簱-灏忚溅鎼嚭搴撲腑 + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + public boolean shuttleOutExecuteStep1(WrkMast wrkMast) { + //21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓� + if (wrkMast.getWrkSts() == 21) { + if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴� + dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐� + return false; + } + + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + return false; + } + ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + if (shuttleProtocol == null) { + return false; + } + if (!shuttleProtocol.isIdle()) { + return false; + } + + //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� + BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getLiftNo()); + if (targetBasDevp == null) { + return false;//缂哄皯绔欑偣淇℃伅 + } + + //鍒ゆ柇灏忚溅鏄惁鍒拌揪璐х墿搴撲綅 + if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { + //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃� + dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐� + return false; + } + + //灏忚溅宸叉姷杈捐揣鐗╀綅缃紝杩涜鎼繍璐х墿 + NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getSourceLocNo(), targetBasDevp.getLocNo()); + if (result == null) {//鍑哄簱璺緞璁$畻澶辫触 + return false; + } + + //鍒涘缓鍒嗛厤鍛戒护 + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.PAK_OUT.id.shortValue());//鍑哄簱妯″紡 + assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) + assignCommand.setCommands(result.getCommands());//杩愯鍛戒护 + assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣 + + wrkMast.setWrkSts(22L);//21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓� + wrkMast.setModiTime(new Date()); + if (wrkMastMapper.updateById(wrkMast) > 0) { + //涓嬪彂浠诲姟 + MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); + } + return false; + } + return true; } /** @@ -1391,19 +1233,13 @@ continue; } - -// if (!liftProtocol.isIdle()) { -// continue; -// } - - //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庣┖闂茬姸鎬侊紝娌℃湁鍒ゆ柇浠诲姟鍙凤紝鍙兘鎻愬崌鏈哄浜庣┖闂诧紝浣嗘槸杩樻湁浠诲姟鏈畬鎴� - if (!liftProtocol.isIdleNoTask()) { + if (!liftProtocol.isIdle()) { continue; } //鎼滅储鏄惁鏈夊緟澶勭悊鐨勪换鍔� - List<WrkMast> wrkMasts = wrkMastMapper.selectLiftStep262327(); - if (wrkMasts.size() == 0) { + List<WrkMast> wrkMasts = wrkMastMapper.selectLiftStep223103(); + if (wrkMasts.isEmpty()) { continue; } @@ -1414,243 +1250,142 @@ continue; } - //鍛戒护list - ArrayList<LiftCommand> commands = new ArrayList<>(); - - DevpThread devpThread = null; - Integer devpId = null; - for (DevpSlave devp : slaveProperties.getDevp()){ - // 鑾峰彇鍏ュ簱绔欎俊鎭� - devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); - devpId = devp.getId(); + boolean stepIn = this.liftIoExecuteStepIn(wrkMast);//鎻愬崌鏈哄叆搴� + if (!stepIn) { + continue; } - if (wrkMast.getWrkSts() == 2) {//2.璁惧涓婅蛋 - if (liftProtocol.getTaskNo().intValue() != 0) { - //瀛樺湪鏈畬鎴愪换鍔″彿 - continue; - } -// if (liftProtocol.getPlatShuttleCheck()) { -// //鎻愬崌鏈烘鏃舵湁鍥涘悜杞︼紝鍙兘鏈夋湭瀹屾垚鐨勪换鍔★紝绂佹鍒嗛厤鏂颁换鍔� -// continue; -// } - - //鑾峰彇鐩爣绔� - StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getStaNo()); - if (staProtocol.isLoading() || !staProtocol.isInEnable()) {//鐩爣绔欐湁鐗╋紝涓嶅彲鍏ワ紝绂佹鍒嗛厤浠诲姟 - continue; - } - - //宸ヤ綔妗g洰鏍囧簱浣嶅彿 - String wrkMastLocNo = wrkMast.getLocNo(); - //宸ヤ綔妗g洰鏍囧簱浣嶆ゼ灞� - int wrkMastLocNoLey = Utils.getLev(wrkMastLocNo); - - Integer levTmp = wrkMastLocNoLey; - if (wrkMastLocNoLey >= 2) { - levTmp += 1; - } - Integer distStaNo = Utils.levToOutInStaNo(levTmp); - -// if (liftProtocol.getPositionArrivalFeedback().intValue() != LiftLevType.TWO.realLev.intValue()) { -// //鎻愬崌鏈轰笉鍦ㄨ緭閫佺嚎妤煎眰锛岃幏鍙栧埌杈撻�佺嚎灞傜殑鎻愬崌鏈哄懡浠� -// LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), LiftLevType.TWO.lev); -// commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list -// } - -// //杈撻�佺嚎灏嗚揣鐗╄繍杩涙潵(鏃犺揣姝h浆) -// LiftCommand command2 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 3); -// command2.setOperaStaNo((short) 102);//鎿嶄綔102绔� -// command2.setRotationDire(1);//缁欒緭閫佺嚎涓嬪彂閾炬潯杞姩淇″彿锛屾杞� -// command2.setDevpId(devpId); -// command2.setStaNo(distStaNo.shortValue());//璁剧疆鐩爣绔� -// commands.add(command2);//灏嗗懡浠ゆ坊鍔犺繘list -// -// //鎻愬崌鏈哄墠寰�鐩爣妤煎眰(宸ヤ綔妗g洰鏍囨ゼ灞�) -// LiftCommand command3 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), levTmp); -// commands.add(command3);//灏嗗懡浠ゆ坊鍔犺繘list -// -// //鎻愬崌鏈哄埌杈炬寚瀹氭ゼ灞傦紝杈撻�佺嚎灏嗚揣鐗╃Щ鍑哄幓(姝h浆) -// //杈撻�佺嚎灏嗚揣鐗╃Щ鍑哄幓 -// LiftCommand command4 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 1); -// command4.setOperaStaNo(distStaNo.shortValue());//鎿嶄綔鐩爣妤煎眰绔欑偣 -// command4.setRotationDire(1);//缁欒緭閫佺嚎涓嬪彂閾炬潯杞姩淇″彿锛屾杞� -// command4.setDevpId(devpId); -// command4.setStaNo(distStaNo.shortValue());//璁剧疆鐩爣绔� -// commands.add(command4);//灏嗗懡浠ゆ坊鍔犺繘list - - //缁欐彁鍗囨満鍒嗛厤浠诲姟 - liftProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());//璁剧疆浠诲姟鍙� - liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓� - - wrkMast.setLiftNo(liftProtocol.getLiftNo().intValue());//璁剧疆鎻愬崌鏈哄彿鐢ㄤ簬閿佸畾鎻愬崌鏈洪槻姝㈣鍏朵粬浠诲姟鍗犵敤 - wrkMast.setWrkSts(3L);//3.鎻愬崌鏈烘惉杩愪腑 - } else if (wrkMast.getWrkSts() == 6) {//6.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 7.鎻愬崌鏈鸿縼绉诲皬杞︿腑 - if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkMast.getWrkNo()) { - //鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛屼笖鎻愬崌鏈轰换鍔″彿鍜屽綋鍓嶅伐浣滄。浠诲姟鍙蜂笉涓�鑷� - continue; - } - liftProtocol.setShuttleNo(wrkMast.getShuttleNo().shortValue());//璁剧疆鍥涘悜绌挎杞﹀彿 - - //鍒ゆ柇灏忚溅鏄惁鍦ㄦ彁鍗囨満鍐咃紝涓斿浜庣┖闂茬姸鎬� - ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); - if (shuttleThread == null) { - continue; - } - ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); - if (shuttleProtocol == null) { - continue; - } - if (!shuttleProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { - continue;//灏忚溅鐘舵�佸繖 - } -// if (shuttleProtocol.getCurrentCode().intValue() != liftProtocol.getBarcode().intValue()) { -// continue;//灏忚溅褰撳墠浜岀淮鐮佸拰鎻愬崌鏈哄唴閮ㄤ簩缁寸爜涓嶄竴鑷达紝涓嶅厑璁告墽琛� -// } -// if (!liftProtocol.getPlatShuttleCheck()) { -// //鎻愬崌鏈烘湭妫�娴嬪埌灏忚溅锛岀姝㈡墽琛� -// continue; -// } - - //宸ヤ綔妗g洰鏍囧簱浣嶅彿 - String wrkMastLocNo = wrkMast.getLocNo(); - //宸ヤ綔妗g洰鏍囧簱浣嶆ゼ灞� - int wrkMastLocNoLey = Utils.getLev(wrkMastLocNo); - if (wrkMastLocNoLey >= 2) { - wrkMastLocNoLey++; - } - -// //鎻愬崌鏈哄墠寰�鐩爣妤煎眰(宸ヤ綔妗g洰鏍囨ゼ灞�) -// LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), wrkMastLocNoLey); -// commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list - - //缁欐彁鍗囨満鍒嗛厤浠诲姟 - liftProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());//璁剧疆浠诲姟鍙� - liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓� - - wrkMast.setLiftNo(liftProtocol.getLiftNo().intValue());//璁剧疆鎻愬崌鏈哄彿鐢ㄤ簬閿佸畾鎻愬崌鏈洪槻姝㈣鍏朵粬浠诲姟鍗犵敤 - wrkMast.setWrkSts(7L);//6.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 7.鎻愬崌鏈鸿縼绉诲皬杞︿腑 - } else if(wrkMast.getWrkSts() == 23) {//23.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 24.鎻愬崌鏈鸿縼绉诲皬杞︿腑 - if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkMast.getWrkNo()) { - //鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛屼笖鎻愬崌鏈轰换鍔″彿鍜屽綋鍓嶅伐浣滄。浠诲姟鍙蜂笉涓�鑷� - continue; - } - liftProtocol.setShuttleNo(wrkMast.getShuttleNo().shortValue());//璁剧疆鍥涘悜绌挎杞﹀彿 - - //鍒ゆ柇灏忚溅鏄惁鍦ㄦ彁鍗囨満鍐咃紝涓斿浜庣┖闂茬姸鎬� - ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); - if (shuttleThread == null) { - continue; - } - ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); - if (shuttleProtocol == null) { - continue; - } - - if (!shuttleProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { - continue;//灏忚溅鐘舵�佸繖 - } -// if (shuttleProtocol.getCurrentCode().intValue() != liftProtocol.getBarcode().intValue()) { -// continue;//灏忚溅褰撳墠浜岀淮鐮佸拰鎻愬崌鏈哄唴閮ㄤ簩缁寸爜涓嶄竴鑷达紝涓嶅厑璁告墽琛� -// } -// if (!liftProtocol.getPlatShuttleCheck()) { -// //鎻愬崌鏈烘湭妫�娴嬪埌灏忚溅锛岀姝㈡墽琛� -// continue; -// } - - //宸ヤ綔妗g洰鏍囧簱浣嶅彿 - String wrkMastLocNo = wrkMast.getSourceLocNo(); - //宸ヤ綔妗g洰鏍囧簱浣嶆ゼ灞� - int wrkMastLocNoLey = Utils.getLev(wrkMastLocNo); - if (wrkMastLocNoLey >= 2) { - wrkMastLocNoLey++; - } - -// //鎻愬崌鏈哄墠寰�鐩爣妤煎眰(宸ヤ綔妗g洰鏍囨ゼ灞�) -// LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), wrkMastLocNoLey); -// commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list - - //缁欐彁鍗囨満鍒嗛厤浠诲姟 - liftProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());//璁剧疆浠诲姟鍙� - liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓� - - wrkMast.setLiftNo(liftProtocol.getLiftNo().intValue());//璁剧疆鎻愬崌鏈哄彿鐢ㄤ簬閿佸畾鎻愬崌鏈洪槻姝㈣鍏朵粬浠诲姟鍗犵敤 - wrkMast.setWrkSts(24L);//23.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 24.鎻愬崌鏈鸿縼绉诲皬杞︿腑 - } else if (wrkMast.getWrkSts() == 27) {//27.灏忚溅鍑哄簱鎼繍瀹屾垚 - if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkMast.getWrkNo()) { - //鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛屼笖鎻愬崌鏈轰换鍔″彿鍜屽綋鍓嶅伐浣滄。浠诲姟鍙蜂笉涓�鑷� - continue; - } -// if (liftProtocol.getPlatShuttleCheck()) { -// //鎻愬崌鏈烘鏃舵湁鍥涘悜杞︼紝鍙兘鏈夋湭瀹屾垚鐨勪换鍔★紝绂佹鍒嗛厤鏂颁换鍔� -// continue; -// } - - //宸ヤ綔妗f簮搴撲綅鍙� - String wrkMastLocNo = wrkMast.getSourceLocNo(); - //宸ヤ綔妗f簮搴撲綅妤煎眰 - int wrkMastLocNoLey = Utils.getLev(wrkMastLocNo); - - //鎻愬崌鏈哄綋鍓嶆ゼ灞� - int liftLev = liftProtocol.getLev().intValue(); - -// //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀埌浣� -// StaProtocol staProtocol = devpThread.getStation().get(Utils.levToOutInStaNo(wrkMastLocNoLey >= 2 ? wrkMastLocNoLey + 1 : wrkMastLocNoLey));//璧峰绔欑偣 -// if (liftLev != wrkMastLocNoLey && !staProtocol.isLiftArrival()) { -// //鎻愬崌鏈轰笉鍦ㄥ伐浣滄。婧愬簱浣嶆ゼ灞傦紝璋冨害鎻愬崌鏈� -// LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), wrkMastLocNoLey); -// commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list -// } -// -// //杈撻�佺嚎灏嗚揣鐗╄繍杩涙潵(鏃犺揣鍙嶈浆) -// LiftCommand command2 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 4); -// command2.setOperaStaNo(staProtocol.getSiteId().shortValue());//杈撻�佺嚎鎿嶄綔绔欑偣鍙� -// command2.setRotationDire(2);//缁欒緭閫佺嚎涓嬪彂閾炬潯杞姩淇″彿锛屽弽杞� -// command2.setDevpId(devpId);//杈撻�佺嚎ID -// command2.setStaNo((short) 104);//鍐欏叆鍑哄簱鐩爣绔�104 -// commands.add(command2);//灏嗗懡浠ゆ坊鍔犺繘list -// -// //鎻愬崌鏈哄墠寰�鍑哄簱鍙o紝杈撻�佺嚎妤煎眰 -// LiftCommand command3 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), LiftLevType.TWO.lev); -// command3.setDevpId(devpId);//杈撻�佺嚎ID -// commands.add(command3);//灏嗗懡浠ゆ坊鍔犺繘list -// -// //鎻愬崌鏈哄埌杈炬寚瀹氭ゼ灞傦紝杈撻�佺嚎灏嗚揣鐗╃Щ鍑哄幓(鍙嶈浆) -// //杈撻�佺嚎灏嗚揣鐗╃Щ鍑哄幓 -// LiftCommand command4 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 2); -// command4.setOperaStaNo((short) 102);//鎿嶄綔102绔� -// command4.setRotationDire(2);//缁欒緭閫佺嚎涓嬪彂閾炬潯杞姩淇″彿锛屽弽杞� -// command4.setDevpId(devpId);//杈撻�佺嚎ID -// commands.add(command4);//灏嗗懡浠ゆ坊鍔犺繘list -// -// //鎻愬崌鏈洪摼鏉℃墽琛屽畬姣曞悗锛岀粰102绔欏啓鍏ヨ祫鏂� -// LiftCommand command5 = liftThread.getResetCommand(); -// command5.setDevpId(devpId);//杈撻�佺嚎ID -// command5.setOperaStaNo((short) 102);//鎿嶄綔102绔� -// command5.setStaNo((short) 104);//鍐欏叆鍑哄簱鐩爣绔�104 -// command5.setRotationDire(0);//閾炬潯杞姩鍋滄 -// commands.add(command5); - - //缁欐彁鍗囨満鍒嗛厤浠诲姟 - liftProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());//璁剧疆浠诲姟鍙� - liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓� - - wrkMast.setLiftNo(liftProtocol.getLiftNo().intValue());//璁剧疆鎻愬崌鏈哄彿鐢ㄤ簬閿佸畾鎻愬崌鏈洪槻姝㈣鍏朵粬浠诲姟鍗犵敤 - wrkMast.setWrkSts(28L);//28.鎻愬崌鏈烘惉杩愪腑 - } - - //鎵�闇�鍛戒护缁勫悎瀹屾瘯锛屾洿鏂版暟鎹簱锛屾彁浜ゅ埌绾跨▼鍘诲伐浣� - LiftAssignCommand assignCommand = new LiftAssignCommand(); -// assignCommand.setCommands(commands); - assignCommand.setLiftNo(liftProtocol.getLiftNo()); - assignCommand.setTaskNo(liftProtocol.getTaskNo()); - if (wrkMastMapper.updateById(wrkMast) > 0) { - //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand)); + boolean stepOut = this.liftIoExecuteStepOut(wrkMast);//鎻愬崌鏈哄嚭搴� + if (!stepOut) { + continue; } } } + } + + /** + * 鎻愬崌鏈哄叆搴� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean liftIoExecuteStepIn(WrkMast wrkMast) { + //--------------------------------------鎻愬崌鏈哄叆搴�-----------------------------------------// + Date now = new Date(); + + //2.璁惧涓婅蛋 ==> 3.鎻愬崌鏈烘惉杩愪腑 + if (wrkMast.getWrkSts() == 2) { + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); + if (liftThread == null) { + return false; + } + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (liftProtocol == null) { + return false; + } + if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { + return false; + } + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 + WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId()); + if (liftWrkMast != null) { + return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + + //鑾峰彇婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐� + BasDevp sourceBasDevp = basDevpService.selectById(wrkMast.getSourceStaNo()); + //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� + BasDevp targetBasDevp = basDevpService.selectById(wrkMast.getStaNo()); + if (sourceBasDevp == null || targetBasDevp == null) { + return false;//缂哄皯绔欑偣淇℃伅 + } + + //鑾峰彇鎻愬崌鏈哄懡浠� + NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, sourceBasDevp.getDevNo(), targetBasDevp.getDevNo(), wrkMast.getWrkNo()); + + ArrayList<NyLiftCommand> commands = new ArrayList<>(); + commands.add(liftCommand); + + //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 + LiftAssignCommand assignCommand = new LiftAssignCommand(); + assignCommand.setCommands(commands); + assignCommand.setLiftNo(liftProtocol.getLiftNo()); + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); + assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_TRAY.id.shortValue()); + + wrkMast.setWrkSts(3L);//2.璁惧涓婅蛋 ==> 3.鎻愬崌鏈烘惉杩愪腑 + wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙� + wrkMast.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast) > 0) { + //涓嬪彂浠诲姟 + MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand)); + } + + return false; + } + return true; + } + + /** + * 鎻愬崌鏈哄嚭搴� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean liftIoExecuteStepOut(WrkMast wrkMast) { + //--------------------------------------鎻愬崌鏈哄嚭搴�-----------------------------------------// + Date now = new Date(); + + //23.灏忚溅鎼繍瀹屾垚 ==> 24.鎻愬崌鏈烘惉杩愪腑 + if (wrkMast.getWrkSts() == 23) { + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); + if (liftThread == null) { + return false; + } + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (liftProtocol == null) { + return false; + } + if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { + return false; + } + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 + WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId()); + if (liftWrkMast != null) { + return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + + //鑾峰彇婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐� + BasDevp sourceBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getSourceLocNo()), liftProtocol.getLiftNo().intValue()); + //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� + BasDevp targetBasDevp = basDevpService.selectById(wrkMast.getSourceStaNo()); + if (sourceBasDevp == null || targetBasDevp == null) { + return false;//缂哄皯绔欑偣淇℃伅 + } + + //鑾峰彇鎻愬崌鏈哄懡浠� + NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, sourceBasDevp.getDevNo(), targetBasDevp.getDevNo(), wrkMast.getWrkNo()); + + ArrayList<NyLiftCommand> commands = new ArrayList<>(); + commands.add(liftCommand); + + //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 + LiftAssignCommand assignCommand = new LiftAssignCommand(); + assignCommand.setCommands(commands); + assignCommand.setLiftNo(liftProtocol.getLiftNo()); + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); + assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_TRAY.id.shortValue()); + + wrkMast.setWrkSts(24L);//23.灏忚溅鎼繍瀹屾垚 ==> 24.鎻愬崌鏈烘惉杩愪腑 + wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙� + wrkMast.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast) > 0) { + //涓嬪彂浠诲姟 + MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand)); + } + + return false; + } + return true; } /** @@ -1677,6 +1412,7 @@ switch (wrkMast.getWrkSts().intValue()) { case 3://3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴� wrkMast.setWrkSts(4L); + wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� break; case 24://24.鎻愬崌鏈烘惉杩愪腑 ==> 25.鎻愬崌鏈烘惉杩愬畬鎴� wrkMast.setWrkSts(25L); @@ -2619,6 +2355,13 @@ } /** + * 璋冨害杞﹁締-璋冨害鎸囧畾绌挎杞� + */ + public void dispatchShuttle(Integer wrkNo, String locNo, Integer shuttleNo) { + shuttleMoveGenerate(wrkNo, locNo, shuttleNo); + } + + /** * 璋冨害杞﹁締 */ public void dispatchShuttle(Integer wrkNo, String locNo) { @@ -2985,6 +2728,7 @@ assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_CAR.id.shortValue()); wrkMast.setWrkSts(104L);//鎻愬崌鏈烘惉杩愪腑 103.灏忚溅鍒版彁鍗囨満瀹屾垚 ==> 104.鎻愬崌鏈烘惉杩愪腑 + wrkMast.setLiftNo(liftThread.getSlave().getId());//閿佸畾鎻愬崌鏈洪槻姝㈣鍗犵敤 wrkMast.setModiTime(now); if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 -- Gitblit v1.9.1