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 | 349 ++++++++++++++++++--------------------------------------- 1 files changed, 112 insertions(+), 237 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 dc1bfb5..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; // /** @@ -851,11 +856,18 @@ //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); - }else { + 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()) { @@ -912,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; } // /** @@ -1561,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() { @@ -1988,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; @@ -2188,6 +2097,8 @@ 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; @@ -2402,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