From 96668ab15eb069daf487d128fd091d795b814861 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期二, 25 七月 2023 08:25:00 +0800 Subject: [PATCH] 捡料 --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 246 +++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 237 insertions(+), 9 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 b9d9799..54bd758 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -397,7 +397,6 @@ } if (staProtocol.isAutoing() && staProtocol.isLoading() - && staProtocol.isInEnable() // 0 - 9990 鎴栬�� 9996 && (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9990) && staProtocol.getStaNo().equals(staProtocol.getSiteId().shortValue()) @@ -938,13 +937,13 @@ middlePath = nodes.get(nodes.size() - 3); //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ()); - middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� + middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� } else if (nodes.size() > 5) {//涓鐮佷紶鍊掓暟绗簩涓� //涓棿璺緞 middlePath = nodes.get(nodes.size() - 2); //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ()); - middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� + middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� } //鐩爣璺緞 @@ -1008,13 +1007,13 @@ middlePath = nodes.get(nodes.size() - 3); //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ()); - middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� + middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� } else if (nodes.size() > 5) {//涓鐮佷紶鍊掓暟绗簩涓� //涓棿璺緞 middlePath = nodes.get(nodes.size() - 2); //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ()); - middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� + middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� } //鐩爣璺緞 @@ -1060,13 +1059,13 @@ middlePath = nodes.get(nodes.size() - 3); //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ()); - middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� + middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� } else if (nodes.size() > 5) {//涓鐮佷紶鍊掓暟绗簩涓� //涓棿璺緞 middlePath = nodes.get(nodes.size() - 2); //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ()); - middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� + middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� } //鐩爣璺緞 @@ -1343,12 +1342,15 @@ //鍒ゆ柇鍏朵粬绌洪棽绌挎杞︽槸鍚︾浠诲姟鏈�杩� String distLocNo = null;//鐩爣鍦扮偣锛屽叆搴�=銆嬫彁鍗囨満鍙o紝鍑哄簱=銆嬭揣鐗╁簱浣嶅彿 - if (wrkMast.getIoType() < 101) { + if (wrkMast.getIoType() == 1 || wrkMast.getIoType() == 10) { //鍏ュ簱 distLocNo = Utils.levToOutInStaLocNo(lev); - }else { + }else if(wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103){ //鍑哄簱 distLocNo = locNo; + } else if (wrkMast.getIoType() == 11) { + //搴撲綅绉昏浆 + distLocNo = wrkMast.getSourceLocNo(); } //鍒ゆ柇褰撳墠浠诲姟鎵�鍦ㄦゼ灞傛槸鍚︽湁鍏朵粬浠诲姟宸茬粡鍒嗛厤浜嗗皬杞︼紝濡傛湁鍒欑洿鎺ョ敤璇ュ皬杞�(涓�灞傛ゼ浠呭垎閰嶄竴鍙拌溅) @@ -2013,6 +2015,232 @@ } /** + * 搴撲綅绉昏浆 + */ + public synchronized void locToLocExecute() { + //鑾峰彇鍑哄叆搴撳伐浣滄。 + List<WrkMast> wrkMasts = wrkMastMapper.selectInOutWrkMast(); + if (wrkMasts.size() > 0) { + //鏈夊嚭鍏ュ簱浠诲姟锛屽繀椤荤瓑寰呬换鍔℃墽琛屽畬姣曞啀鎵ц搴撲綅绉昏浆 + return; + } + + //鏌ヨ搴撲綅绉昏浆宸ヤ綔妗� + List<WrkMast> wrkMasts1 = wrkMastMapper.selectLocToLocWrkMast(); + for (WrkMast wrkMast : wrkMasts1) { + + boolean step1 = this.locToLocExecuteStep1(wrkMast);//缁戝畾灏忚溅 + if (!step1) { + continue; + } + + boolean step2 = this.locToLocExecuteStep2(wrkMast);//璋冨害灏忚溅鍒扮洰鏍囨ゼ灞� + if (!step2) { + continue; + } + + boolean step3 = this.locToLocExecuteStep3(wrkMast);//鍚屾ゼ灞傚簱浣嶇Щ杞� + if (!step3) { + continue; + } + + } + } + + /** + * 缁戝畾灏忚溅骞惰皟搴﹁溅 + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean locToLocExecuteStep1(WrkMast wrkMast) { + if (wrkMast.getShuttleNo() == null) {//缁欏簱浣嶇Щ杞粦瀹氱┛姊溅鍙� + //瀵绘壘鏈�杩戜笖绌洪棽鐨勫洓鍚戠┛姊溅 + HashMap<String,Object> searchIdleShuttle = this.searchIdleShuttle(wrkMast); + ShuttleThread shuttleThread = (ShuttleThread) searchIdleShuttle.get("result"); + if (shuttleThread == null) { + //娌℃湁鎵惧埌绌洪棽绌挎杞� + return false; + } + wrkMast.setShuttleNo(shuttleThread.getSlave().getId());//缁欏伐浣滄。鍒嗛厤鍥涘悜绌挎杞﹀彿 + wrkMastMapper.updateById(wrkMast); + } + return true; + } + + /** + * 璋冨害灏忚溅鍒扮洰鏍囨ゼ灞� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean locToLocExecuteStep2(WrkMast wrkMast) { + if (wrkMast.getWrkSts() == 1 && wrkMast.getShuttleNo() != null) { + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + if (!shuttleProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { + return false;//灏忚溅澶勪簬涓嶇┖闂茬姸鎬� + } + + String currentLocNo = shuttleProtocol.getCurrentLocNo();//灏忚溅褰撳墠搴撲綅鍙� + int shuttleLev = Utils.getLev(currentLocNo);//灏忚溅鎵�鍦ㄦゼ灞� + + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + + //鍒ゆ柇灏忚溅鏄惁鍐嶇洰鏍囨ゼ灞� + if (shuttleLev != Utils.getLev(wrkMast.getLocNo())) { + //灏忚溅鍜岀洰鏍囦笉鍦ㄥ悓涓�妤煎眰 + + //鎻愬崌鏈哄彛绔欑偣搴撲綅鍙� + String liftSiteLocNo = Utils.levToOutInStaLocNo(shuttleLev); + + //鍒涘缓鍒嗛厤鍛戒护 + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id.shortValue());//鍏ュ嚭搴撴ā寮� + assignCommand.setSourceLocNo(currentLocNo);//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) + + //灏忚溅绉诲姩鍒版彁鍗囨満鍙o紝璁$畻璺緞 + List<ShuttleCommand> commands = this.shuttleAssignCommand(shuttleProtocol.getLocNo(), liftSiteLocNo, NavigationMapType.NONE.id, assignCommand, shuttleThread); + if (commands == null) { + return false;//鏈壘鍒拌矾寰� + } + + //鑾峰彇褰撳墠灏忚溅鎵�鍦ㄦゼ灞傜殑绔欑偣淇℃伅 + 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); + + //鍒嗛厤鐩爣搴撲綅 + shuttleProtocol.setLocNo(liftSiteLocNo); + //鐩爣搴撲綅 + assignCommand.setLocNo(liftSiteLocNo); + assignCommand.setCommands(commands); + wrkMast.setWrkSts(5L);//灏忚溅杩佺Щ鐘舵�� + + if (wrkMastMapper.updateById(wrkMast) > 0) { + //涓嬪彂浠诲姟 + MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); + } + } + } + return true; + } + + /** + * 鍚屾ゼ灞傚簱浣嶇Щ杞� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean locToLocExecuteStep3(WrkMast wrkMast) { + if (wrkMast.getShuttleNo() == null) { + return false; + } + + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + if (!shuttleProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { + return false;//灏忚溅澶勪簬涓嶇┖闂茬姸鎬� + } + + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + + DevpThread devpThread = null; + for (DevpSlave devp : slaveProperties.getDevp()){ + // 鑾峰彇鍏ュ簱绔欎俊鎭� + devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + } + + //鍒ゆ柇灏忚溅鏄惁鍦ㄥ伐浣滄。浠诲姟鐩爣妤煎眰 + String currentLocNo = shuttleProtocol.getCurrentLocNo();//灏忚溅褰撳墠搴撲綅鍙� + int shuttleLev = Utils.getLev(currentLocNo);//灏忚溅鎵�鍦ㄦゼ灞� + if (shuttleLev != Utils.getLev(wrkMast.getLocNo())) { + return false;//涓嶅湪鍚屼竴妤煎眰 + } + + if (wrkMast.getWrkSts() == 1 || wrkMast.getWrkSts() == 8) { + //璋冨害灏忚溅鎵ц鍚屾ゼ灞傜Щ搴撲换鍔� + + //鍒涘缓鍒嗛厤鍛戒护 + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿 + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id.shortValue());//鍏ュ嚭搴撴ā寮� + assignCommand.setSourceLocNo(currentLocNo);//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) + + List<ShuttleCommand> commands = new ArrayList<>(); + + if (wrkMast.getWrkSts() == 8) {//8.鎻愬崌鏈鸿縼绉诲皬杞﹀畬鎴愶紝闇�瑕佸皢灏忚溅绉诲嚭鎻愬崌鏈� + //鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂� + if (!liftProtocol.isIdleNoTask()) { + return false;//鎻愬崌鏈哄繖 + } + //鍒ゆ柇鎻愬崌鏈轰换鍔″彿鍜屽綋鍓嶅伐浣滄。浠诲姟鍙锋槸鍚︿竴鑷� + if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkMast.getWrkNo()) { + return false; + } + + //鍒ゆ柇鎻愬崌鏈烘ゼ灞傛槸鍚﹀埌浣嶏紝鍒ゆ柇绔欑偣鏄惁缁欏嚭鎻愬崌鏈哄埌浣嶄俊鍙� + String locNo = wrkMast.getLocNo(); + int lev = Utils.getLev(locNo);//鐩爣浜岀淮鐮佹墍鍦ㄦゼ灞� + int liftLev = liftProtocol.getLev().intValue();//鎻愬崌鏈烘墍鍦ㄦゼ灞� + if (liftLev != lev) { + return false;//鎻愬崌鏈轰笉鍦ㄧ洰鏍囨ゼ灞傝烦杩� + } + + Integer staNo = Utils.levToOutInStaNo(lev >= 2 ? lev + 1 : lev); + //鑾峰彇鐩爣绔欎俊鎭� + StaProtocol staProtocol1 = devpThread.getStation().get(staNo); + if (staProtocol1 == null) { + return false;//绔欑偣淇℃伅涓嶅瓨鍦� + } + if (!staProtocol1.isLiftArrival()) { + return false;//绔欑偣鎻愬崌鏈哄埌浣嶄俊鍙穎alse + } + + BasDevp basDevp = basDevpService.selectById(staNo); + short startCode = liftProtocol.getBarcode();//鎻愬崌鏈哄唴閮ㄤ簩缁寸爜 + Short distCode = Short.parseShort(basDevp.getQrCodeValue());//鎻愬崌鏈哄彛绔欑偣浜岀淮鐮� + Short runDirection = ShuttleRunDirection.BOTTOM.id;//杩愯鏂瑰悜 + //鑾峰彇鍛戒护 + ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCode, distCode, 1600, runDirection, null, null, 500); + commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶� + + currentLocNo = basDevp.getLocNo();//浣跨敤杈撻�佺珯鐐瑰彛浣滀负璧风偣鍧愭爣 + } + + //鐩存帴璁$畻杞﹀埌婧愬簱浣嶅埌鐩爣搴撲綅璺緞 + List<ShuttleCommand> commands1 = this.shuttleAssignCommand(currentLocNo, wrkMast.getSourceLocNo(), wrkMast.getLocNo(), assignCommand, shuttleThread); + if (commands1 == null) { + return false;//鎵句笉鍒拌矾寰勭瓑寰呬笅涓�娆� + } + commands.addAll(commands1); + + //鍒嗛厤浠诲姟鍙� + shuttleProtocol.setTaskNo(wrkMast.getWrkNo().shortValue()); + //鍒嗛厤婧愬簱浣� + shuttleProtocol.setSourceLocNo(wrkMast.getSourceLocNo()); + + assignCommand.setCommands(commands); + //鍒嗛厤鐩爣搴撲綅 + shuttleProtocol.setLocNo(wrkMast.getLocNo()); + //鐩爣搴撲綅 + assignCommand.setLocNo(wrkMast.getLocNo()); + wrkMast.setWrkSts(9L);//灏忚溅鍏ュ簱涓� + if (wrkMastMapper.updateById(wrkMast) > 0) { + //涓嬪彂浠诲姟 + MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); + } + } + + return true; + } + + /** * 寮傚父淇℃伅璁板綍 */ public void recErr() { -- Gitblit v1.9.1