From 3009c8b166815ef1ca58d43643e6d1f9f3a57747 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期二, 22 四月 2025 13:09:46 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 237 +++++++++++++++++++++++++++++++++++----------------------- 1 files changed, 142 insertions(+), 95 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 2713265..893a5ee 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -120,6 +120,7 @@ )); for (WrkMast wrkMast : wrkMasts) { boolean step1 = this.shuttleInExecuteStep1(wrkMast);//灏忚溅鎼叆搴撲腑 + Thread.sleep(100); if (!step1) { continue; } @@ -134,7 +135,7 @@ * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue */ - public boolean shuttleInExecuteStep1(WrkMast wrkMast) { + public synchronized boolean shuttleInExecuteStep1(WrkMast wrkMast) { if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts) { //鑾峰彇鐩爣绔� ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo()); @@ -177,6 +178,15 @@ News.info("{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } + +// //妫�娴嬮殰纰嶇墿杞� +// boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{ +// add(shuttleProtocol.getShuttleNo()); +// }}); +// if (checkObstacle) { +// News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo()); +// return false; +// } ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� @@ -233,6 +243,7 @@ )); for (WrkMast wrkMast : wrkMasts) { boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//灏忚溅鎼嚭搴撲腑 + Thread.sleep(100); if (!step1) { continue; } @@ -247,7 +258,7 @@ * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue */ - public boolean shuttleOutExecuteStep1(WrkMast wrkMast) { + public synchronized boolean shuttleOutExecuteStep1(WrkMast wrkMast) { //101.鐢熸垚鍑哄簱浠诲姟 => 102.灏忚溅鎼繍涓� if (wrkMast.getWrkSts() == WrkStsType.NEW_OUTBOUND.sts) { Integer liftNo = wrkMast.getLiftNo(); @@ -258,20 +269,6 @@ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo()); return false; } - - //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 - WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftNo); - if (liftWrkMast != null) { - if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftNo); - return false; - } - } - - wrkMast.setLiftNo(liftNo); - wrkMast.setModiTime(new Date()); - wrkMastService.updateById(wrkMast); - return false; } ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); @@ -352,6 +349,15 @@ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } + +// //妫�娴嬮殰纰嶇墿杞� +// boolean checkObstacle = shuttleOperaUtils.checkObstacle(liftSta.getLocNo(), new ArrayList<Integer>() {{ +// add(shuttleProtocol.getShuttleNo()); +// }}); +// if (checkObstacle) { +// News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo()); +// return false; +// } ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� @@ -593,59 +599,6 @@ } for (WrkMast wrkMast : wrkMasts) { - Integer liftNo = wrkMast.getLiftNo(); - if (liftNo == null) { - //鏈垎閰嶆彁鍗囨満 - Integer staNo = wrkMast.getIoType() == WrkIoType.IN.id ? wrkMast.getSourceStaNo() : wrkMast.getStaNo(); - liftNo = ForkLiftUtils.getConveyorBindLiftNo(staNo); - if(liftNo == null) { - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo()); - continue; - } - - ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); - if (forkLiftThread == null) { - continue; - } - ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); - if (forkLiftProtocol == null) { - continue; - } - - if (!forkLiftThread.isIdle()) { - News.info("{}鍙锋彁鍗囨満锛屽繖纰屼腑", liftNo); - continue; - } - - //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 - WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); - if (liftWrkMast != null) { - if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); - continue;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� - } - } - - wrkMast.setLiftNo(liftNo); - wrkMast.setModiTime(new Date()); - wrkMastService.updateById(wrkMast); - continue; - } - - ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); - if (forkLiftThread == null) { - continue; - } - ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); - if (forkLiftProtocol == null) { - continue; - } - - if (!forkLiftThread.isIdle()) { - News.info("{}鍙锋彁鍗囨満锛屽繖纰屼腑", liftNo); - continue; - } - boolean stepIn = this.liftIoExecuteStepIn(wrkMast);//鎻愬崌鏈哄叆搴� if (!stepIn) { continue; @@ -688,7 +641,18 @@ return false; } - ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftSta.getLiftNo()); + Integer liftNo = wrkMast.getLiftNo(); + if (liftNo == null) { + //鏈垎閰嶆彁鍗囨満 + Integer staNo = wrkMast.getSourceStaNo(); + liftNo = ForkLiftUtils.getConveyorBindLiftNo(staNo); + if(liftNo == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo()); + return false; + } + } + + ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); if (forkLiftThread == null) { return false; } @@ -739,6 +703,13 @@ return false; } + //璇锋眰涓婄骇绯荤粺锛屾槸鍚﹀厑璁稿叆搴� + boolean inMission = ForkLiftUtils.queryInMission(wrkMast.getSourceStaNo(), liftSta.getLiftNo(), wrkMast.getWmsWrkNo()); + if (!inMission) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屼笂绾х郴缁熶笉鍏佽鍏ュ簱", wrkMast.getWrkNo()); + return false; + } + //鑾峰彇鎻愬崌鏈哄懡浠� List<ForkLiftCommand> liftCommands = forkLiftThread.getPickAndPutCommand(wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), liftSta.getLev()); ArrayList<ForkLiftCommand> commands = new ArrayList<>(); @@ -747,11 +718,12 @@ //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 LiftAssignCommand assignCommand = new LiftAssignCommand(); assignCommand.setCommands(commands); - assignCommand.setLiftNo(wrkMast.getLiftNo().shortValue()); + assignCommand.setLiftNo(liftNo.shortValue()); assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); assignCommand.setTaskMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue()); wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 1.鐢熸垚鍏ュ簱浠诲姟 ==> 3.鎻愬崌鏈烘惉杩愪腑 + wrkMast.setLiftNo(liftNo); wrkMast.setSystemMsg("");//娓呯┖娑堟伅 wrkMast.setModiTime(now); if (wrkMastService.updateById(wrkMast)) { @@ -772,15 +744,6 @@ //--------------------------------------鎻愬崌鏈哄嚭搴�-----------------------------------------// //103.灏忚溅鎼繍瀹屾垚 ==> 104.鎻愬崌鏈烘惉杩愪腑 if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_SHUTTLE_RUN_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; - } - //鑾峰彇婧愮珯 ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo()); if (liftSta == null) { @@ -788,20 +751,38 @@ return false;//鎵句笉鍒扮珯鐐� } - if (shuttleProtocol.getCurrentLocNo().equals(liftSta.getLocNo())) { - //灏忚溅杩樺湪杈撻�佺珯鐐� - //鑾峰彇灏忚溅寰呮満浣� - String standbyLocNo = Utils.getShuttleStandbyLocNo(liftSta.getLocNo()); - if(standbyLocNo == null) { - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃幏鍙栧皬杞﹀緟鏈轰綅澶辫触", wrkMast.getWrkNo()); + if(wrkMast.getShuttleNo() != null) { + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { return false; } - //璋冨害灏忚溅鍘诲緟鏈轰綅 - boolean dispatchShuttle = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), standbyLocNo, wrkMast.getShuttleNo()); - if (!dispatchShuttle) { - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹀湪杈撻�佺珯鐐硅皟搴﹀皬杞﹂伩璁╁け璐�", wrkMast.getWrkNo()); + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if(shuttleProtocol == null) { return false; } + + if (shuttleProtocol.getCurrentLocNo().equals(liftSta.getLocNo())) { + //灏忚溅杩樺湪杈撻�佺珯鐐� + //鑾峰彇灏忚溅寰呮満浣� + String standbyLocNo = Utils.getShuttleStandbyLocNo(liftSta.getLocNo()); + if (standbyLocNo == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃幏鍙栧皬杞﹀緟鏈轰綅澶辫触", wrkMast.getWrkNo()); + return false; + } + //璋冨害灏忚溅鍘诲緟鏈轰綅 + boolean dispatchShuttle = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), standbyLocNo, wrkMast.getShuttleNo()); + if (!dispatchShuttle) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹀湪杈撻�佺珯鐐硅皟搴﹀皬杞﹂伩璁╁け璐�", wrkMast.getWrkNo()); + return false; + } + } else { + //灏忚溅宸蹭笉鍦ㄨ緭閫佺珯鐐逛綅缃紝閲婃斁灏忚溅 + wrkMast.setShuttleNo(null);//閲婃斁灏忚溅 + wrkMast.setModiTime(new Date()); + wrkMastService.updateById(wrkMast); + return false; + } + return false; } if (liftSta.getHasCar()) { @@ -814,7 +795,18 @@ return false; } - ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftSta.getLiftNo()); + Integer liftNo = wrkMast.getLiftNo(); + if (liftNo == null) { + //鏈垎閰嶆彁鍗囨満 + Integer staNo = wrkMast.getStaNo(); + liftNo = ForkLiftUtils.getConveyorBindLiftNo(staNo); + if(liftNo == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo()); + return false; + } + } + + ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); if (forkLiftThread == null) { return false; } @@ -857,11 +849,12 @@ //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 LiftAssignCommand assignCommand = new LiftAssignCommand(); assignCommand.setCommands(commands); - assignCommand.setLiftNo(wrkMast.getLiftNo().shortValue()); + assignCommand.setLiftNo(liftNo.shortValue()); assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); assignCommand.setTaskMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue()); wrkMast.setWrkSts(WrkStsType.OUTBOUND_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 103.鐢熸垚鍏ュ簱浠诲姟 ==> 104.鎻愬崌鏈烘惉杩愪腑 + wrkMast.setLiftNo(liftNo); wrkMast.setShuttleNo(null);//閲婃斁灏忚溅 wrkMast.setSystemMsg("");//娓呯┖娑堟伅 wrkMast.setModiTime(new Date()); @@ -904,12 +897,12 @@ wrkMast.setWrkSts(WrkStsType.COMPLETE_OUTBOUND.sts); wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� forkLiftThread.setSyncTaskNo(0); + redisUtil.set(RedisKeyType.FORK_LIFT_PUT_COMPLETE.key + forkLiftProtocol.getLiftNo(), wrkMast.getWmsWrkNo(), 60 * 3); } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_RUN.sts) { //306.鎻愬崌鏈烘惉杩愪腑 ==> 307.鎻愬崌鏈烘惉杩愬畬鎴� wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts); forkLiftThread.setSyncTaskNo(0); } - wrkMast.setModiTime(new Date()); if (wrkMastService.updateById(wrkMast)) { forkLiftThread.reset(); @@ -1382,6 +1375,15 @@ return false; } +// //妫�娴嬮殰纰嶇墿杞� +// boolean checkObstacle = shuttleOperaUtils.checkObstacle(basShuttleCharge.getWaitLocNo(), new ArrayList<Integer>() {{ +// add(shuttleProtocol.getShuttleNo()); +// }}); +// if (checkObstacle) { +// News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo()); +// return false; +// } + //璋冨害灏忚溅鍘诲緟鏈轰綅 boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), basShuttleCharge.getWaitLocNo(), wrkMast.getShuttleNo()); if (!dispatched) { @@ -1474,6 +1476,32 @@ 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) { @@ -1739,6 +1767,15 @@ return false;//璺緞璁$畻澶辫触 } +// //妫�娴嬮殰纰嶇墿杞� +// boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{ +// add(shuttleProtocol.getShuttleNo()); +// }}); +// if (checkObstacle) { +// News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo()); +// return false; +// } + assignCommand.setCommands(commands); wrkMast.setWrkSts(WrkStsType.MOVE_SHUTTLE.sts);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓� @@ -1767,9 +1804,19 @@ continue; } + List<Integer> liftAllStaNo = ForkLiftUtils.getLiftAllStaNo(liftNo); + if (liftAllStaNo.isEmpty()) { + continue; + } + + List<Integer> conveyorBindLiftAllStaNo = ForkLiftUtils.getConveyorBindLiftAllStaNo(liftNo); + if (conveyorBindLiftAllStaNo.isEmpty()) { + continue; + } + //鑾峰彇鍏ュ簱浠诲姟 List<WrkMast> inWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() - .eq("lift_no", liftNo) + .in("sta_no", liftAllStaNo) .in("wrk_sts" , WrkStsType.NEW_INBOUND.sts , WrkStsType.INBOUND_DEVICE_RUN.sts @@ -1781,7 +1828,7 @@ //鑾峰彇鍑哄簱浠诲姟 List<WrkMast> outWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() - .eq("lift_no", liftNo) + .eq("sta_no", conveyorBindLiftAllStaNo) .in("wrk_sts" , WrkStsType.NEW_OUTBOUND.sts , WrkStsType.OUTBOUND_SHUTTLE_RUN.sts -- Gitblit v1.9.1