From ec5a96479a750b1714b33a53f1b86394c9f87433 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期一, 30 六月 2025 15:00:39 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 181 ++++++++++++++++++++++++++++++--------------- 1 files changed, 121 insertions(+), 60 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 9aabe1c..e6ccc5e 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -444,9 +444,13 @@ //102.灏忚溅鎼繍涓� ==> 103.灏忚溅鎼繍瀹屾垚 wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts); shuttleThread.setSyncTaskNo(0); - } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE.sts) { - //302.灏忚溅绉诲姩鑷崇珯鐐� ==> 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� - wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_NEARBY.sts) { + //302.灏忚溅绉诲姩鑷宠繎鐐逛腑 ==> 303.灏忚溅绉诲姩鑷宠繎鐐瑰畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_NEARBY_COMPLETE.sts); + shuttleThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_LIFT.sts) { + //304.灏忚溅杩佸叆鎻愬崌鏈轰腑 ==> 305.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_IN_LIFT_COMPLETE.sts); shuttleThread.setSyncTaskNo(0); } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT.sts) { //308.灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� @@ -1443,8 +1447,13 @@ //鏌ヨ灏忚溅绉诲簱浠诲姟 List<WrkMast> wrkMasts = wrkMastService.selectShuttleMoveWrk(); for (WrkMast wrkMast : wrkMasts) { - boolean stepMoveSta = this.shuttleMoveExecuteStepMoveSta(wrkMast);//灏忚溅绉诲姩鍒扮珯鐐� - if (!stepMoveSta) { + boolean stepMoveNearby = this.shuttleMoveExecuteStepMoveNearby(wrkMast);//灏忚溅绉诲姩鍒拌繎鐐� + if (!stepMoveNearby) { + continue; + } + + boolean stepMoveInLift = this.shuttleMoveExecuteStepMoveInLift(wrkMast);//灏忚溅杩佸叆鎻愬崌鏈轰腑 + if (!stepMoveInLift) { continue; } @@ -1470,15 +1479,15 @@ } /** - * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒扮珯鐐� + * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒拌繎鐐逛腑 * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue */ - private boolean shuttleMoveExecuteStepMoveSta(WrkMast wrkMast) { - //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------// + private boolean shuttleMoveExecuteStepMoveNearby(WrkMast wrkMast) { + //--------------------------------------灏忚溅绉诲姩鍒拌繎鐐逛腑-----------------------------------------// Date now = new Date(); - //灏忚溅绉诲姩鑷崇珯鐐� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷崇珯鐐逛腑 + //灏忚溅绉诲姩鍒拌繎鐐� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷崇珯鐐逛腑 if (wrkMast.getWrkSts() == WrkStsType.NEW_MOVE.sts) { //鑾峰彇鍥涘悜绌挎杞︾嚎绋� ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); @@ -1539,6 +1548,102 @@ return false; } + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟 + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� + assignCommand.setAuto(true);//鑷姩妯″紡 + + //璁$畻杩戠偣浣嶇疆 + String endLocation = navigateUtils.calcEndLocation(shuttleProtocol.getCurrentLocNo(), liftSta.getLocNo(), NavigationMapType.NORMAL.id, null, null, 1); + if (endLocation == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹁繎鐐逛綅缃绠楀け璐�", wrkMast.getWrkNo()); + return false; + } + + //鑾峰彇灏忚溅鍒拌繎鐐硅璧板懡浠� + List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), endLocation, NavigationMapType.NORMAL.id, assignCommand, shuttleThread); + if (commands == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false;//璺緞瑙i攣澶辫触 + } + + assignCommand.setCommands(commands); + + wrkMast.setWrkSts(WrkStsType.MOVE_NEARBY.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷宠繎鐐逛腑 + wrkMast.setModiTime(now); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + if (wrkMastService.updateById(wrkMast)) { + //涓嬪彂浠诲姟 + shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVING); + //瑙﹀彂閫氱煡 + return false; + } + return false; + } + return true; + } + + /** + * 灏忚溅杩佺Щ-灏忚溅杩佸叆鎻愬崌鏈轰腑 + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean shuttleMoveExecuteStepMoveInLift(WrkMast wrkMast) { + //--------------------------------------灏忚溅杩佸叆鎻愬崌鏈轰腑-----------------------------------------// + Date now = new Date(); + + //灏忚溅杩佸叆鎻愬崌鏈� 303.灏忚溅绉诲姩鑷宠繎鐐瑰畬鎴� ==> 304.灏忚溅杩佸叆鎻愬崌鏈轰腑 + if (wrkMast.getWrkSts() == WrkStsType.MOVE_NEARBY_COMPLETE.sts) { + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + return false; + } + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + return false; + } + + //灏忚溅澶勪簬绌洪棽鐘舵�� + if (!shuttleThread.isIdle()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + //鑾峰彇婧愯緭閫佺珯 + ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo()); + if (liftSta == null) { + return false;//鎵句笉鍒扮珯鐐� + } + + if (liftSta.getHasTray()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾簮绔欏瓨鍦ㄦ墭鐩�", wrkMast.getWrkNo()); + return false; + } + + if (liftSta.getHasCar()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾簮绔欏瓨鍦ㄥ皬杞�", wrkMast.getWrkNo()); + return false; + } + + //鑾峰彇鐩爣杈撻�佺珯 + ForkLiftStaProtocol liftStaTarget = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo()); + if (liftStaTarget == null) { + return false;//鎵句笉鍒扮珯鐐� + } + + if (liftStaTarget.getHasTray()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪鎵樼洏", wrkMast.getWrkNo()); + return false; + } + + if (liftStaTarget.getHasCar()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪灏忚溅", wrkMast.getWrkNo()); + return false; + } + if (wrkMast.getLiftNo() == null) { //鐢宠鎻愬崌鏈鸿祫婧�(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満) boolean applyForkLift = forkLiftAction.applyForkLift(liftSta.getLiftNo(), wrkMast.getWrkNo()); @@ -1549,43 +1654,22 @@ return false; } - //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�*************** - List<NavigateNode> targetNodes = ForkLiftUtils.getLiftStaNodes(wrkMast.getStaNo()); - if (targetNodes == null) { - return false;//鏈幏鍙栧埌鑺傜偣 - } - boolean checkPathIsAvailable = navigateUtils.checkPathIsAvailable(targetNodes, shuttleProtocol.getShuttleNo(), Utils.getLev(wrkMast.getLocNo())); - if (!checkPathIsAvailable) { - News.info("{}浠诲姟锛寋}灏忚溅锛岀洰鏍囩珯鐐硅矾寰勮鍗犵敤锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - return false;//妫�娴嬬洰鏍囩珯鐐硅矾寰勬槸鍚︽湭琚崰鐢� - } - //灏濊瘯閿佸畾鐩爣绔欒矾寰� - boolean result2 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), shuttleProtocol.getShuttleNo(), targetNodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� - if (!result2) { - News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勯攣瀹氬け璐ワ紝绂佹娲惧彂", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - return false;//璺緞閿佸畾澶辫触 - } - //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�*************** - ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟 assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� assignCommand.setAuto(true);//鑷姩妯″紡 - //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠� + //鑾峰彇灏忚溅鍒版彁鍗囨満琛岃蛋鍛戒护 List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftSta.getLocNo(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread); if (commands == null) { News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - - //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� - navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), shuttleProtocol.getShuttleNo(), targetNodes, false); return false;//璺緞瑙i攣澶辫触 } assignCommand.setCommands(commands); - wrkMast.setWrkSts(WrkStsType.MOVE_SITE.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷崇珯鐐� + wrkMast.setWrkSts(WrkStsType.MOVE_IN_LIFT.sts);//303.灏忚溅绉诲姩鑷宠繎鐐瑰畬鎴� ==> 304.灏忚溅杩佸叆鎻愬崌鏈轰腑 wrkMast.setModiTime(now); wrkMast.setSystemMsg("");//娓呯┖娑堟伅 if (wrkMastService.updateById(wrkMast)) { @@ -1609,8 +1693,8 @@ //--------------------------------------鎻愬崌鏈烘惉杩愪腑-----------------------------------------// Date now = new Date(); - //鎻愬崌鏈烘惉杩愪腑 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑 - if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE_COMPLETE.sts) { + //鎻愬崌鏈烘惉杩愪腑 305.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑 + if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_LIFT_COMPLETE.sts) { ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, wrkMast.getLiftNo()); if (forkLiftThread == null) { return false; @@ -1650,7 +1734,7 @@ assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); assignCommand.setTaskMode(ForkLiftTaskModeType.SHUTTLE_SWITCH.id.shortValue()); - wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑 + wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 305.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑 wrkMast.setSystemMsg("");//娓呯┖娑堟伅 wrkMast.setModiTime(now); if (wrkMastService.updateById(wrkMast)) { @@ -1760,30 +1844,8 @@ assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣� assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅 - List<ShuttleCommand> commands = null; - //璺ㄦゼ灞傜Щ鍔ㄤ换鍔� - if (Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(wrkMast.getLocNo())) { - if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(wrkMast.getLocNo())) { - return false;//灏忚溅鏈埌杈剧洰鏍囧眰 - } - - //闇�瑕佸皢鍓嶄袱涓妭鐐逛綔涓虹櫧鍚嶅崟鑺傜偣浼犲叆 - List<NavigateNode> targetNodes = ForkLiftUtils.getLiftStaNodes(wrkMast.getStaNo()); - if (targetNodes == null) { - return false;//鏈幏鍙栧埌鑺傜偣 - } - - //璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟 - ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟 - for (NavigateNode node : targetNodes) { - whiteList.add(new int[]{node.getX(), node.getY()}); - } - commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id, whiteList, assignCommand, shuttleThread); - }else { - //鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠� - commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread); - } - + //鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠� + List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread); if (commands == null) { News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false;//璺緞璁$畻澶辫触 @@ -1795,7 +1857,6 @@ wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� wrkMast.setSystemMsg("");//娓呯┖娑堟伅 wrkMast.setModiTime(now); - if (wrkMastService.updateById(wrkMast)) { //涓嬪彂浠诲姟 shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); -- Gitblit v1.9.1