From ed265ddfb8f08f69af064a9adf65fcbf06289ffe Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期二, 11 二月 2025 14:07:54 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 597 ++++++++++++++++++++++++++--------------------------------- 1 files changed, 267 insertions(+), 330 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 0cee555..f37188e 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -1,9 +1,12 @@ package com.zy.asrs.service.impl; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.zy.asrs.domain.enums.NotifyMsgType; import com.zy.asrs.entity.*; import com.zy.asrs.mapper.*; import com.zy.asrs.service.*; +import com.zy.asrs.utils.NotifyUtils; import com.zy.asrs.utils.Utils; import com.zy.common.model.*; import com.zy.common.model.enums.NavigationMapType; @@ -82,6 +85,8 @@ private ShuttleAction shuttleAction; @Autowired private ForkLiftAction forkLiftAction; + @Autowired + private NotifyUtils notifyUtils; // /** @@ -839,32 +844,58 @@ //灏嗕换鍔℃。鏍囪涓哄畬鎴� WrkMast wrkMast = wrkMastService.selectByWorkNo(shuttleProtocol.getTaskNo()); if (wrkMast != null) { - switch (wrkMast.getWrkSts().intValue()) { -// case 5://5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚 -// wrkMast.setWrkSts(9L); -// shuttleProtocol.setTaskNo(0); -// if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { -// //閲婃斁灏忚溅浠ょ墝 -// shuttleProtocol.setToken(0); -// } -// break; -// case 22://22.灏忚溅鎼繍涓� ==> 23.灏忚溅鎼繍瀹屾垚 -// wrkMast.setWrkSts(23L); -// shuttleProtocol.setTaskNo(0); -// if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { -// //閲婃斁灏忚溅浠ょ墝 -// shuttleProtocol.setToken(0); -// } -// break; - case 302://302.灏忚溅绉诲姩鑷崇珯鐐� ==> 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� - wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts); - break; - case 110://310.灏忚溅绉诲姩涓� ==> 311.灏忚溅绉诲姩瀹屾垚 - wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts); - shuttleThread.setTaskNo(0); - break; - default: + if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE.sts) { + //302.灏忚溅绉诲姩鑷崇珯鐐� ==> 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts); + shuttleThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT.sts) { + //308.灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� + wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts); + shuttleThread.setSyncTaskNo(0); + } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SHUTTLE.sts) { + //310.灏忚溅绉诲姩涓� ==> 311.灏忚溅绉诲姩瀹屾垚 + wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts); + shuttleThread.setSyncTaskNo(0); + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_MOVE_COMPLETE);//瑙﹀彂閫氱煡 + } else if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_WORKING.sts) { + //204.灏忚溅鍏呯數涓� ==> 205.灏忚溅鍏呯數瀹屾垚 + wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts); + shuttleThread.setSyncTaskNo(0); + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡 + } else if (wrkMast.getWrkSts() == WrkStsType.LOC_MOVE_SHUTTLE_RUN.sts) { + //502.灏忚溅鎼繍涓� ==> 509.绉诲簱瀹屾垚 + wrkMast.setWrkSts(WrkStsType.COMPLETE_LOC_MOVE.sts); + shuttleThread.setSyncTaskNo(0); + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_DELIVERY);//瑙﹀彂閫氱煡 + } else { + continue; } +// switch (wrkMast.getWrkSts().intValue()) { +//// case 5://5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚 +//// wrkMast.setWrkSts(9L); +//// shuttleProtocol.setTaskNo(0); +//// if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { +//// //閲婃斁灏忚溅浠ょ墝 +//// shuttleProtocol.setToken(0); +//// } +//// break; +//// case 22://22.灏忚溅鎼繍涓� ==> 23.灏忚溅鎼繍瀹屾垚 +//// wrkMast.setWrkSts(23L); +//// shuttleProtocol.setTaskNo(0); +//// if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) { +//// //閲婃斁灏忚溅浠ょ墝 +//// shuttleProtocol.setToken(0); +//// } +//// break; +// case 302: +// wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts); +// break; +// case WrkStsType.MOVE_SHUTTLE.sts: +// wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts); +// shuttleThread.setSyncTaskNo(0); +// break; +// default: +// } if (wrkMastService.updateById(wrkMast)) { //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵�� @@ -893,6 +924,101 @@ } catch (Exception e) { e.printStackTrace(); } + } + + /** + * 鎵ц绉诲簱浠诲姟 + */ + public synchronized void shuttleLocMoveExecute() { + try { + //鏌ヨ绉诲簱浠诲姟 + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", WrkStsType.NEW_LOC_MOVE.sts)); + for (WrkMast wrkMast : wrkMasts) { + boolean stepToTarget = this.shuttleLocMoveExecuteToTarget(wrkMast);//绉诲簱浠诲姟-灏忚溅鍘荤洰鏍囩偣 + if (!stepToTarget) { + continue; + } + + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 绉诲簱浠诲姟-灏忚溅鍘荤洰鏍囩偣 + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean shuttleLocMoveExecuteToTarget(WrkMast wrkMast) { + //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------// + Date now = new Date(); + + //灏忚溅绉诲姩鑷崇珯鐐� 501.鐢熸垚绉诲簱浠诲姟 ==> 502.灏忚溅鎼繍涓� + if (wrkMast.getWrkSts() == WrkStsType.NEW_LOC_MOVE.sts) { + if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴� + boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╃偣杩涜鍙栬揣 + News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); + return false; + } + + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + return false; + } + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + return false; + } + + if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞︽湭鍒拌揪鍙栬揣浣嶇疆", wrkMast.getWrkNo(), wrkMast.getSourceLocNo()); + return false; + } + + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟 + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� + assignCommand.setAuto(true);//鑷姩妯″紡 + + //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠� + List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(wrkMast.getSourceLocNo(), wrkMast.getLocNo(), NavigationMapType.DFX.id, assignCommand, shuttleThread); + if (commands == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true); + if (liftCommand == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇椤跺崌鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + List<ShuttleCommand> liftCommand2 = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, false); + if (liftCommand2 == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇涓嬮檷鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + commands.add(0, liftCommand.get(0)); + commands.add(liftCommand2.get(0)); + assignCommand.setCommands(commands); + + wrkMast.setWrkSts(WrkStsType.LOC_MOVE_SHUTTLE_RUN.sts);//灏忚溅鎼繍涓� 501.鐢熸垚绉诲簱浠诲姟 ==> 502.灏忚溅鎼繍涓� + 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()), NotifyMsgType.SHUTTLE_MOVING); + return false; + } + return false; + } + return true; } // /** @@ -1263,8 +1389,7 @@ // break; case 306://306.鎻愬崌鏈烘惉杩愪腑 ==> 307.鎻愬崌鏈烘惉杩愬畬鎴� wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts); - //璐у弶鎻愬崌鏈洪渶瑕佽烦杩囪縼鍑烘彁鍗囨満娴佺▼ - wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts); + forkLiftThread.setSyncTaskNo(0); break; default: } @@ -1543,206 +1668,6 @@ // } /** - * 鍑哄簱 ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣� - */ - public void ledExecute() { -// try { -// for (LedSlave led : slaveProperties.getLed()) { -// // 鑾峰彇杈撻�佺嚎plc绾跨▼ -// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId()); -// // 鍛戒护闆嗗悎 -// List<LedCommand> commands = new ArrayList<>(); -// // 宸ヤ綔妗i泦鍚� -// List<WrkMast> wrkMasts = new ArrayList<>(); -// List<WrkMastLog> wrkMastLogs = new ArrayList<>(); -// for (Integer staNo : led.getStaArr()) { -// // 鑾峰彇鍙夎溅绔欑偣 -// StaProtocol staProtocol = devpThread.getStation().get(staNo); -// if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo() || !staProtocol.isLoading()) { -// continue; -// } else { -// staProtocol = staProtocol.clone(); -// } -// // 鑾峰彇宸ヤ綔妗f暟鎹� -// WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo()); -// Integer wrkNo = staProtocol.getWorkNo().intValue(); -// Integer ioType = null; -// String sourceLocNo = null; -// String locNo = null; -// Integer wrkStaNo = null; -// String barcode = null; -// if (wrkMast == null) { -// //鏌ヨ鍘嗗彶妗� -// WrkMastLog wrkMastLog = wrkMastLogMapper.selectLatestByWorkNo(staProtocol.getWorkNo().intValue()); -// if (wrkMastLog == null) { -// continue; -// } -// ioType = wrkMastLog.getIoType(); -// sourceLocNo = wrkMastLog.getSourceLocNo(); -// locNo = wrkMastLog.getLocNo(); -// wrkStaNo = wrkMastLog.getStaNo(); -// barcode = wrkMastLog.getBarcode(); -// wrkMastLogs.add(wrkMastLog); -// }else { -// if (wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { -// continue; -// } -// ioType = wrkMast.getIoType(); -// sourceLocNo = wrkMast.getSourceLocNo(); -// locNo = wrkMast.getLocNo(); -// wrkStaNo = wrkMast.getStaNo(); -// barcode = wrkMast.getBarcode(); -// wrkMasts.add(wrkMast); -// } -// // 缁勮鍛戒护 -// LedCommand ledCommand = new LedCommand(); -// ledCommand.setWorkNo(wrkNo); -// ledCommand.setIoType(ioType); -// // 鍑哄簱妯″紡 -// switch (ioType) { -// case 101: -// ledCommand.setTitle("鍏ㄦ澘鍑哄簱"); -// break; -// case 103: -// ledCommand.setTitle("鎷f枡鍑哄簱"); -// break; -// case 104: -// ledCommand.setTitle("骞舵澘鍑哄簱"); -// break; -// case 107: -// ledCommand.setTitle("鐩樼偣鍑哄簱"); -// break; -// case 110: -// ledCommand.setTitle("绌烘澘鍑哄簱"); -// ledCommand.setEmptyMk(true); -// break; -// default: -// News.error("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkNo, ioType); -// break; -// } -// ledCommand.setSourceLocNo(sourceLocNo); -// ledCommand.setLocNo(locNo); -// ledCommand.setStaNo(wrkStaNo); -// ledCommand.setBarcode(barcode); -// if (ioType != 110 && ioType != 10) { -// List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo)); -// if (!wrkDetls.isEmpty()) { -// wrkDetls.forEach(wrkDetl -> { -// double remainNum = wrkDetl.getStock() - wrkDetl.getAnfme();//鍓╀綑鏁伴噺 -// if (remainNum < 0) { -// remainNum = 0; -// } -// String matnr = wrkDetl.getMatnr(); -// Mat mat = matService.selectByMatnr(wrkDetl.getMatnr()); -// if (mat != null) { -// if (!mat.getMatnr().equals(mat.getMatnr2())) { -// matnr += " - " + mat.getMatnr2(); -// } -// } -// ledCommand.getMatDtos().add(new MatDto(matnr, wrkDetl.getMaktx(), wrkDetl.getAnfme(), remainNum, wrkDetl.getSpecs(), wrkDetl.getSuppCode(), wrkDetl.getOrderNo())); -// }); -// }else { -// List<WrkDetlLog> wrkDetlLogs = wrkDetlLogService.selectLatestByWorkNo(wrkNo, barcode); -// for (WrkDetlLog wrkDetlLog : wrkDetlLogs) { -// double remainNum = wrkDetlLog.getStock() - wrkDetlLog.getAnfme();//鍓╀綑鏁伴噺 -// if (remainNum < 0) { -// remainNum = 0; -// } -// String matnr = wrkDetlLog.getMatnr(); -// Mat mat = matService.selectByMatnr(wrkDetlLog.getMatnr()); -// if (mat != null) { -// if (!mat.getMatnr().equals(mat.getMatnr2())) { -// matnr += " - " + mat.getMatnr2(); -// } -// } -// ledCommand.getMatDtos().add(new MatDto(matnr, wrkDetlLog.getMaktx(), wrkDetlLog.getAnfme(), remainNum, wrkDetlLog.getSpecs(), wrkDetlLog.getSuppCode())); -// } -// } -// commands.add(ledCommand); -// } -// Set<Integer> workNos = null; -// if (!wrkMasts.isEmpty()) { -// workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet()); -// }else { -// workNos = wrkMastLogs.stream().map(WrkMastLog::getWrkNo).collect(Collectors.toSet()); -// } -// // 鑾峰彇LED绾跨▼ -// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId()); -// // 鐩稿悓宸ヤ綔鍙烽泦鍚堝垯杩囨护 -// if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) { -// continue; -// } -// // 鍛戒护涓嬪彂 ------------------------------------------------------------------------------- -// if (!commands.isEmpty()) { -// if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) { -// log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort()); -// continue; -// } else { -// ledThread.setLedMk(false); -// } -// } -// -// try { -// // 淇敼涓绘。led鏍囪 -// for (WrkMast wrkMast : wrkMasts) { -// wrkMast.setOveMk("Y"); -// wrkMast.setModiTime(new Date()); -// if (wrkMastMapper.updateById(wrkMast) == 0) { -// throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�"); -// } -// } -// -// // 鏇存柊绾跨▼褰撳墠宸ヤ綔鍙烽泦鍚� -// ledThread.setWorkNos(workNos); -// -// } catch (Exception e) { -// e.printStackTrace(); -// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); -// } -// -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } - } - - /** - * 鍏朵粬 ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅 - */ - public void ledReset() { -// try { -// for (LedSlave led : slaveProperties.getLed()) { -// // 鑾峰彇杈撻�佺嚎plc绾跨▼ -// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId()); -// // 鍛戒护闆嗗悎 -// boolean reset = true; -// for (Integer staNo : led.getStaArr()) { -// // 鑾峰彇鍙夎溅绔欑偣 -// StaProtocol staProtocol = devpThread.getStation().get(staNo); -// if (staProtocol == null) { -// continue; -// } -// if (staProtocol.isLoading()) { -// reset = false; -// break; -// } -// } -// // 鑾峰彇led绾跨▼ -// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId()); -// // led鏄剧ず榛樿鍐呭 -// if (reset) { -// ledThread.setLedMk(true); -// if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) { -// log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort()); -// } -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } - } - - /** * 鍥涘悜绌挎杞︾數閲忔娴� ===>> 鍙戣捣鍏呯數 */ public synchronized void loopShuttleCharge() { @@ -1833,7 +1758,7 @@ */ public synchronized void executeShuttleCharge() { try { - //鏌ヨ灏忚溅绉诲簱浠诲姟 + //鏌ヨ灏忚溅鍏呯數浠诲姟 for (ShuttleSlave shuttle : slaveProperties.getShuttle()) { WrkMast wrkMast = wrkMastService.selectChargeWorking(shuttle.getId()); if(wrkMast == null) { @@ -1970,6 +1895,8 @@ //涓嬪彂浠诲姟 shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); + + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_POWER_START);//瑙﹀彂閫氱煡 return false; } return true; @@ -2001,12 +1928,6 @@ List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleChargeCommand(assignCommand, shuttleThread, false); assignCommand.setCommands(commands);//杩愯鍛戒护 - wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts); - wrkMast.setModiTime(new Date()); - if (!wrkMastService.updateById(wrkMast)) { - return false; - } - //涓嬪彂浠诲姟 shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); return false; @@ -2026,22 +1947,22 @@ return false; } - ShuttleChargeType chargeType = ShuttleChargeType.get(wrkMast.getMk()); + ShuttleChargeType chargeType = ShuttleChargeType.get(Integer.parseInt(wrkMast.getMk())); if(chargeType == null) { + return false; + } + + //璋冨害灏忚溅鍘诲緟鏈轰綅 + boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), chargeType.waitLocNo, wrkMast.getShuttleNo()); + if (!dispatched) { return false; } wrkMast.setWrkSts(WrkStsType.COMPLETE_CHARGE.sts); wrkMast.setModiTime(new Date()); if (wrkMastService.updateById(wrkMast)) { - //璋冨害灏忚溅鍘诲緟鏈轰綅 - boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), chargeType.waitLocNo, wrkMast.getShuttleNo()); - if (!dispatched) { - return false; - } return false; } - return false; } return true; @@ -2062,6 +1983,11 @@ boolean stepLiftMove = this.shuttleMoveExecuteStepLiftMove(wrkMast);//鎻愬崌鏈烘惉杩愪腑 if (!stepLiftMove) { + continue; + } + + boolean updateShuttleLocation = this.shuttleMoveExecuteStepUpdateShuttleLocation(wrkMast);//鎻愬崌鏈烘惉杩愬畬鎴愭洿鏂板皬杞﹀潗鏍� + if (!updateShuttleLocation) { continue; } @@ -2099,7 +2025,7 @@ //灏忚溅澶勪簬绌洪棽鐘舵�� if (!shuttleThread.isIdle()) { - News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } @@ -2123,24 +2049,9 @@ //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満) WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftSta.getLiftNo()); if (liftWrkMast != null) { - News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getLiftNo()); + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getLiftNo()); 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.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); - return false;//璺緞瑙i攣澶辫触 - } - - assignCommand.setCommands(commands); //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�*************** List<NavigateNode> targetNodes = ForkLiftUtils.getLiftStaNodes(wrkMast.getStaNo()); @@ -2160,13 +2071,34 @@ } //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�*************** + 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.setModiTime(now); wrkMast.setLiftNo(liftSta.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈� + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 // shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗� if (wrkMastService.updateById(wrkMast)) { //涓嬪彂浠诲姟 shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); + //瑙﹀彂閫氱煡 + notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_MOVING); return false; } return false; @@ -2194,14 +2126,14 @@ return false; } if (!forkLiftThread.isIdle()) { - News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); return false; } //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); if (liftWrkMast != null) { if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚� - News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo()); return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� } } @@ -2211,10 +2143,14 @@ //鑾峰彇鐩爣绔� ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo()); if (sourceLiftSta == null || liftSta == null) { - News.info("{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo()); + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo()); return false;//缂哄皯绔欑偣淇℃伅 } + if (liftSta.getHasTray()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo()); + return false;//鏈夋墭鐩樿烦杩� + } //鑾峰彇鎻愬崌鏈哄懡浠� List<ForkLiftCommand> liftCommands = forkLiftThread.getShuttleSwitchCommand(wrkMast.getWrkNo(), sourceLiftSta.getLev(), liftSta.getLev()); @@ -2229,10 +2165,65 @@ assignCommand.setTaskMode(ForkLiftTaskModeType.SHUTTLE_SWITCH.id.shortValue()); wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑 + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 wrkMast.setModiTime(now); if (wrkMastService.updateById(wrkMast)) { //涓嬪彂浠诲姟 forkLiftAction.assignWork(wrkMast.getLiftNo(), assignCommand); + } + } + return true; + } + + /** + * 灏忚溅杩佺Щ-鎻愬崌鏈烘惉杩愬畬鎴愭洿鏂板皬杞﹀潗鏍� + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean shuttleMoveExecuteStepUpdateShuttleLocation(WrkMast wrkMast) { + //--------------------------------------鎻愬崌鏈烘惉杩愪腑-----------------------------------------// + Date now = new Date(); + + //鎻愬崌鏈烘惉杩愪腑 307.鎻愬崌鏈烘惉杩愬畬鎴� ==> 308.灏忚溅杩佸嚭鎻愬崌鏈轰腑 + if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_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; + } + + //灏忚溅澶勪簬绌洪棽鐘舵�� + if (!shuttleThread.isIdle()) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.UPDATE_LOCATION.id);//鏇存柊鍧愭爣 + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� + assignCommand.setAuto(true);//鑷姩妯″紡 + assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣� + assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅 + + //鏇存柊灏忚溅鍧愭爣 + ShuttleCommand command = shuttleThread.getUpdateLocationCommand(wrkMast.getWrkNo(), wrkMast.getLocNo()); + ArrayList<ShuttleCommand> commands = new ArrayList<>(); + commands.add(command); + + assignCommand.setCommands(commands); + + wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT.sts);//灏忚溅杩佸嚭鎻愬崌鏈轰腑 + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(now); + + if (wrkMastService.updateById(wrkMast)) { + //涓嬪彂浠诲姟 + shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); } } return true; @@ -2262,7 +2253,7 @@ //灏忚溅澶勪簬绌洪棽鐘舵�� if (!shuttleThread.isIdle()) { - News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } @@ -2286,51 +2277,33 @@ List<ShuttleCommand> commands = null; //璺ㄦゼ灞傜Щ鍔ㄤ换鍔� if (Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(wrkMast.getLocNo())) { -// //闇�瑕佸皢鍓嶄袱涓妭鐐逛綔涓虹櫧鍚嶅崟鑺傜偣浼犲叆 -// //鑾峰彇鐩爣绔� -// LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo()); -// if (liftSta == null) { -// return false;//鎵句笉鍒扮珯鐐� -// } -// -// List<NavigateNode> targetNodes = NyLiftUtils.getLiftStaNodes(liftSta.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, assignCommand, shuttleThread, whiteList); + //闇�瑕佸皢鍓嶄袱涓妭鐐逛綔涓虹櫧鍚嶅崟鑺傜偣浼犲叆 + 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); } if (commands == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false;//璺緞璁$畻澶辫触 } assignCommand.setCommands(commands); -// if (wrkMast.getLiftNo() != null) { -// 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.getToken().equals(shuttleProtocol.getShuttleNo())) { -// liftProtocol.setToken(0);//閲婃斁鎻愬崌鏈轰护鐗� -// } -// } - wrkMast.setWrkSts(WrkStsType.MOVE_SHUTTLE.sts);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓� wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 wrkMast.setModiTime(now); if (wrkMastService.updateById(wrkMast)) { @@ -2340,41 +2313,5 @@ } return true; } - -// //鎵弿璁惧PakMk鏍囪鏄惁瓒呮椂 -// public synchronized void scanDevicePakMk() { -// try { -// //鎵弿灏忚溅 -// for (ShuttleSlave slave : slaveProperties.getShuttle()) { -// NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, slave.getId()); -// NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); -// if (shuttleProtocol == null) { -// continue; -// } -// -// if ((System.currentTimeMillis() - shuttleProtocol.getSendTime() > (1000 * 60 * 5)) && shuttleProtocol.getPakMk()) { -// //璁惧瓒呰繃5鍒嗛挓杩樻病澶嶄綅鏍囪 -// shuttleProtocol.setPakMk(false);//澶嶄綅鏍囪 -// } -// } -// -// //鎵弿鎻愬崌鏈� -// for (LiftSlave slave : slaveProperties.getLift()) { -// LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, slave.getId()); -// LiftProtocol liftProtocol = liftThread.getLiftProtocol(); -// if (liftProtocol == null) { -// continue; -// } -// -// if ((System.currentTimeMillis() - liftProtocol.getSendTime() > (1000 * 60 * 5)) && liftProtocol.getPakMk()) { -// //璁惧瓒呰繃5鍒嗛挓杩樻病澶嶄綅鏍囪 -// liftProtocol.setPakMk(false);//澶嶄綅鏍囪 -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// -// } } -- Gitblit v1.9.1