From cb757218ff35e8b302de2d6cc5a95b842acd8ea2 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期三, 20 九月 2023 12:33:05 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 765 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 572 insertions(+), 193 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 92adad4..4b61f61 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -2,6 +2,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.*; @@ -69,6 +70,8 @@ @Autowired private BasShuttleErrLogService basShuttleErrLogService; @Autowired + private BasLiftErrLogService basLiftErrLogService; + @Autowired private BasShuttleErrService basShuttleErrService; @Autowired private BasCrnErrorMapper basCrnErrorMapper; @@ -96,6 +99,9 @@ private ShuttleDispatchUtils shuttleDispatchUtils; @Autowired private RedisUtil redisUtil; + @Autowired + private WrkMastLocMapper wrkMastLocMapper; + /** * 缁勬墭 @@ -781,6 +787,45 @@ public boolean shuttleOutExecuteStep1(WrkMast wrkMast) { //21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓� if (wrkMast.getWrkSts() == 21) { + EntityWrapper<StaDesc> wrapper = new EntityWrapper<>(); + wrapper.eq("type_no", wrkMast.getIoType());//璺緞绫诲瀷 + wrapper.eq("stn_no", wrkMast.getStaNo());//鍑哄簱绔欑偣缂栧彿 + StaDesc staDesc = staDescService.selectOne(wrapper); + if (staDesc == null) { + return false;//鍑哄簱璺緞涓嶅瓨鍦� + } + + //鑾峰彇鍑哄簱绔欑偣 + BasDevp basDevp = basDevpService.selectById(wrkMast.getStaNo()); + if (basDevp == null) { + return false;//鍑哄簱绔欑偣涓嶅瓨鍦� + } + + if (!basDevp.getOutEnable().equals("Y")) { + return false;//鍑哄簱绔欑偣涓嶅彲鍑� + } + + //鍒ゆ柇鍚勬ゼ灞傚唴閮ㄨ緭閫佺珯鐐规槸鍚︾┖闂叉棤鐗� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, basDevp.getLiftNo()); + if (liftThread == null) { + return false; + } + //鑾峰彇鎻愬崌鏈虹珯鐐筶ist + List<LiftStaProtocol> liftStaProtocols = liftThread.getLiftStaProtocols(); + if (liftStaProtocols.isEmpty()) { + return false; + } + + for (LiftStaProtocol liftStaProtocol : liftStaProtocols) { + //鍒ゆ柇褰撳墠鍑哄簱浠诲姟瀵瑰簲妤煎眰鐨勬彁鍗囨満绔欑偣鐘舵�� + if (liftStaProtocol.getLev() == Utils.getLev(wrkMast.getSourceLocNo())) { + if (liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && !liftStaProtocol.getHasTray()) { + return false;//绔欑偣蹇呴』鑷姩銆佺┖闂层�佹病鏈夋墭鐩� + } + } + } + + if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴� shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐� return false; @@ -803,12 +848,6 @@ return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟 } - //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� - BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getLiftNo()); - if (targetBasDevp == null) { - return false;//缂哄皯绔欑偣淇℃伅 - } - //鍒ゆ柇灏忚溅鏄惁鍒拌揪璐х墿搴撲綅 if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃� @@ -817,7 +856,7 @@ } //灏忚溅宸叉姷杈捐揣鐗╀綅缃紝杩涜鎼繍璐х墿 - NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getSourceLocNo(), targetBasDevp.getLocNo()); + NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getSourceLocNo(), null); if (result == null) {//鍑哄簱璺緞璁$畻澶辫触 return false; } @@ -878,14 +917,18 @@ shuttleProtocol.setToken(0); } break; - case 102://102.灏忚溅鍒版彁鍗囨満涓� ==> 103.灏忚溅鍒版彁鍗囨満瀹屾垚 + case 102://102.灏忚溅绉诲姩鑷崇珯鐐� ==> 103.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� wrkMast.setWrkSts(103L); break; - case 106://106.灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 107.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� - wrkMast.setWrkSts(107L); + case 104://104.灏忚溅杩佸叆鎻愬崌鏈轰腑 ==> 105.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� + wrkMast.setWrkSts(105L); break; - case 108://108.灏忚溅绉诲姩涓� ==> 109.灏忚溅绉诲姩瀹屾垚 + case 108://108.灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� wrkMast.setWrkSts(109L); + break; + case 110://110.灏忚溅绉诲姩涓� ==> 111.灏忚溅绉诲姩瀹屾垚 + wrkMast.setWrkSts(111L); + shuttleProtocol.setTaskNo(0); if (shuttleProtocol.getToken() == wrkMast.getWrkNo()) { //閲婃斁灏忚溅浠ょ墝 shuttleProtocol.setToken(0); @@ -895,6 +938,17 @@ } if (wrkMastMapper.updateById(wrkMast) > 0) { + if (wrkMast.getWrkSts() == 111) { + // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� + if (wrkMastLocMapper.save(wrkMast.getWrkNo()) <= 0) { + log.info("淇濆瓨宸ヤ綔鍘嗗彶妗workNo={0}]澶辫触", wrkMast.getWrkNo()); + } + // 鍒犻櫎宸ヤ綔涓绘。 + if (!wrkMastService.deleteById(wrkMast)) { + log.info("鍒犻櫎宸ヤ綔涓绘。[workNo={0}]澶辫触", wrkMast.getWrkNo()); + } + } + //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵�� shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); //婧愬簱浣嶆竻闆� @@ -906,6 +960,24 @@ News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo()); } else { News.error("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傚洓鍚戠┛姊溅鍙�={}锛屽伐浣滃彿={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo()); + } + }else { + ShuttleAssignCommand assignCommand = shuttleProtocol.getAssignCommand(); + if (!assignCommand.getAuto()) { + //鎵嬪姩妯″紡 + //宸ヤ綔鍙锋竻闆� + shuttleProtocol.setTaskNo(0); + //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵�� + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); + //婧愬簱浣嶆竻闆� + shuttleProtocol.setSourceLocNo(null); + //鐩爣搴撲綅娓呴浂 + shuttleProtocol.setLocNo(null); + //浠诲姟鎸囦护娓呴浂 + shuttleProtocol.setAssignCommand(null); + //娓呴浂浠ょ墝 + shuttleProtocol.setToken(0); + News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo()); } } @@ -929,6 +1001,11 @@ } if (!liftProtocol.isIdle()) { + continue; + } + + //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚﹁鍗犵敤 + if (liftProtocol.getToken() != 0) { continue; } @@ -993,15 +1070,25 @@ //鑾峰彇婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐� BasDevp sourceBasDevp = basDevpService.selectById(wrkMast.getSourceStaNo()); - //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� - BasDevp targetBasDevp = basDevpService.selectById(wrkMast.getStaNo()); - if (sourceBasDevp == null || targetBasDevp == null) { - return false;//缂哄皯绔欑偣淇℃伅 + if (sourceBasDevp == null) { + return false;//绔欑偣涓嶅瓨鍦� + } + //鑾峰彇婧愮珯瀵瑰簲鐨勭墰鐪兼彁鍗囨満绔欑偣缂栧彿(璧风偣缂栧彿) + Integer startSta = Integer.parseInt(sourceBasDevp.getQrCodeValue()); + Integer targetSta = null; + //鑾峰彇鐗涚溂鎻愬崌鏈虹珯鐐圭紪鍙�(鐩爣缂栧彿) + for (LiftStaProtocol liftStaProtocol : liftThread.getLiftStaProtocols()) { + if (liftStaProtocol.getLev() == Utils.getLev(wrkMast.getLocNo())) { + targetSta = liftStaProtocol.getStaNo(); + } + } + + if (targetSta == null) { + return false;//绔欑偣缂栧彿涓嶅瓨鍦� } //鑾峰彇鎻愬崌鏈哄懡浠� - NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, sourceBasDevp.getDevNo(), targetBasDevp.getDevNo(), wrkMast.getWrkNo()); - + NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, startSta, targetSta, wrkMast.getWrkNo()); ArrayList<NyLiftCommand> commands = new ArrayList<>(); commands.add(liftCommand); @@ -1058,16 +1145,28 @@ return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� } - //鑾峰彇婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐� - BasDevp sourceBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getSourceLocNo()), liftProtocol.getLiftNo().intValue()); - //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� - BasDevp targetBasDevp = basDevpService.selectById(wrkMast.getSourceStaNo()); - if (sourceBasDevp == null || targetBasDevp == null) { - return false;//缂哄皯绔欑偣淇℃伅 + //鑾峰彇婧愮珯瀵瑰簲鐨勭墰鐪兼彁鍗囨満绔欑偣缂栧彿(璧风偣缂栧彿) + Integer startSta = null; + for (LiftStaProtocol liftStaProtocol : liftThread.getLiftStaProtocols()) { + if (liftStaProtocol.getLev() == Utils.getLev(wrkMast.getLocNo())) { + startSta = liftStaProtocol.getStaNo(); + } } + if (startSta == null) { + return false;//绔欑偣缂栧彿涓嶅瓨鍦� + } + + //鑾风洰鏍囩珯婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐� + BasDevp targetBasDevp = basDevpService.selectById(wrkMast.getStaNo()); + if (targetBasDevp == null) { + return false;//绔欑偣涓嶅瓨鍦� + } + //鑾峰彇鐗涚溂鎻愬崌鏈虹珯鐐圭紪鍙�(鐩爣缂栧彿) + Integer targetSta = Integer.parseInt(targetBasDevp.getQrCodeValue()); + //鑾峰彇鎻愬崌鏈哄懡浠� - NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, sourceBasDevp.getDevNo(), targetBasDevp.getDevNo(), wrkMast.getWrkNo()); + NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, startSta, targetSta, wrkMast.getWrkNo()); ArrayList<NyLiftCommand> commands = new ArrayList<>(); commands.add(liftCommand); @@ -1133,8 +1232,8 @@ liftProtocol.setToken(0); } break; - case 104://104.鎻愬崌鏈烘惉杩愪腑 ==> 105.鎻愬崌鏈烘惉杩愬畬鎴� - wrkMast.setWrkSts(105L); + case 106://106.鎻愬崌鏈烘惉杩愪腑 ==> 107.鎻愬崌鏈烘惉杩愬畬鎴� + wrkMast.setWrkSts(107L); break; default: } @@ -1168,7 +1267,7 @@ //鏌ヨ搴撲綅绉昏浆宸ヤ綔妗� List<WrkMast> wrkMasts1 = wrkMastMapper.selectLocToLocWrkMast(); for (WrkMast wrkMast : wrkMasts1) { - if (wrkMast.getSourceLocNo().equals(wrkMast.getLocNo())) { + if (Utils.getLev(wrkMast.getSourceLocNo()) == Utils.getLev(wrkMast.getLocNo())) { boolean step1 = this.locToLocExecuteStep1(wrkMast);//鍚屾ゼ灞傚簱浣嶇Щ杞� if (!step1) { continue; @@ -1287,10 +1386,14 @@ } //鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満杈撻�佺珯鐐� - BasDevp liftSta = shuttleDispatchUtils.getRecentLiftSta(shuttleThread.getSlave().getId()); + LiftStaProtocol liftSta = shuttleDispatchUtils.getRecentLiftSta(shuttleThread.getSlave().getId()); if (liftSta == null) { return false;//娌℃湁鍙敤涓旂┖闂茬殑杈撻�佺珯鐐� } + //婧愮珯 + Integer sourceStaNo = liftSta.getStaNo(); + //鎻愬崌鏈哄彿*100+鐩爣妤煎眰=鐩爣绔欑偣 + Integer staNo = liftSta.getLiftNo() * 100 + Utils.getLev(wrkMast.getLocNo());//鐩爣绔� //灏忚溅宸叉姷杈炬簮搴撲綅锛屽皢璐х墿鎼繍鍒拌緭閫佺珯鐐� NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getSourceLocNo(), liftSta.getLocNo()); @@ -1308,7 +1411,8 @@ assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣 wrkMast.setWrkSts(22L);//21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓� - wrkMast.setLiftNo(liftSta.getLiftNo());//璁剧疆鎻愬崌鏈哄彿 + wrkMast.setSourceStaNo(sourceStaNo);//婧愮珯 + wrkMast.setStaNo(staNo);//鐩爣绔� wrkMast.setModiTime(new Date()); if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 @@ -1348,16 +1452,16 @@ return false; } - //鑾峰彇婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐� - BasDevp sourceBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getSourceLocNo()), liftProtocol.getLiftNo().intValue()); - //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� - BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getLocNo()), liftProtocol.getLiftNo().intValue()); - if (sourceBasDevp == null || targetBasDevp == null) { - return false;//缂哄皯绔欑偣淇℃伅 + //婧愮珯 + Integer sourceStaNo = wrkMast.getSourceStaNo(); + //鐩爣绔� + Integer staNo = wrkMast.getStaNo(); + if (sourceStaNo == null || staNo == null) { + return false;//婧愮珯鎴栫洰鏍囩珯涓虹┖ } //鑾峰彇鎻愬崌鏈哄懡浠� - NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, sourceBasDevp.getDevNo(), targetBasDevp.getDevNo(), wrkMast.getWrkNo()); + NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_TRAY.id, sourceStaNo, staNo, wrkMast.getWrkNo()); ArrayList<NyLiftCommand> commands = new ArrayList<>(); commands.add(liftCommand); @@ -1436,6 +1540,7 @@ assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣 wrkMast.setWrkSts(5L);//4.鎻愬崌鏈烘惉杩愬畬鎴� => 5.灏忚溅鎼繍涓� + wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� wrkMast.setModiTime(new Date()); if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 @@ -1453,6 +1558,7 @@ public void recErr() { try { this.recShuttleErr(); + this.recLiftErr(); } catch (Exception e) { News.error("recErr fail", e); } @@ -1484,7 +1590,7 @@ if (wrkMast == null) { continue; } - BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getErrCode().get(0)); + BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getErrCode()); String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName(); BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog( null, // 缂栧彿 @@ -1500,14 +1606,15 @@ wrkMast.getSourceStaNo(), // 婧愮珯 wrkMast.getSourceLocNo(), // 婧愬簱浣� wrkMast.getBarcode(), // 鏉$爜 - shuttleProtocol.getErrCode().get(0), // 寮傚父鐮� + shuttleProtocol.getErrCode(), // 寮傚父鐮� errName, // 寮傚父 1, // 寮傚父鎯呭喌 now, // 娣诲姞鏃堕棿 null, // 娣诲姞浜哄憳 now, // 淇敼鏃堕棿 null, // 淇敼浜哄憳 - "浠诲姟涓紓甯�" // 澶囨敞 + "浠诲姟涓紓甯�", // 澶囨敞 + JSON.toJSONString(shuttleProtocol) // 绯荤粺鐘舵�佹暟鎹� ); if (!basShuttleErrLogService.insert(basShuttleErrLog)) { News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName); @@ -1572,6 +1679,91 @@ // } // } // } + } + } + } + + /** + * 鎻愬崌鏈哄紓甯镐俊鎭褰� + */ + private void recLiftErr() { + Date now = new Date(); + for (LiftSlave liftSlave : slaveProperties.getLift()) { + // 鑾峰彇鎻愬崌鏈轰俊鎭� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId()); + if (liftThread == null) { + continue; + } + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (liftProtocol == null) { + continue; + } + + if (liftProtocol.getTaskNo() != 0) { + //鏈変换鍔� + BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(liftSlave.getId(), liftProtocol.getTaskNo().intValue()); + // 鏈夊紓甯� + if (latest == null) { + if (liftProtocol.getDeviceError() != null && liftProtocol.getDeviceError()) { + WrkMast wrkMast = wrkMastMapper.selectById(liftProtocol.getTaskNo()); + if (wrkMast == null) { + continue; + } + + String errName = ""; + if (liftProtocol.getFrontOverrun()) { + errName = "鍓嶈秴闄�"; + } else if (liftProtocol.getBackOverrun()) { + errName = "鍚庤秴闄�"; + } else if (liftProtocol.getLeftOverrun()) { + errName = "宸﹁秴闄�"; + } else if (liftProtocol.getRightOverrun()) { + errName = "鍙宠秴闄�"; + } else if (liftProtocol.getOverHeight()) { + errName = "瓒呴珮"; + } else if (liftProtocol.getOverWeight()) { + errName = "瓒呴噸"; + } + + BasLiftErrLog basLiftErrLog = new BasLiftErrLog( + null, // 缂栧彿 + wrkMast.getWrkNo(), // 宸ヤ綔鍙� + now, // 鍙戠敓鏃堕棿 + null, // 缁撴潫鏃堕棿 + wrkMast.getWrkSts(), // 宸ヤ綔鐘舵�� + wrkMast.getIoType(), // 鍏ュ嚭搴撶被鍨� + liftSlave.getId(), // 鎻愬崌鏈� + null, // plc + wrkMast.getLocNo(), // 鐩爣搴撲綅 + wrkMast.getStaNo(), // 鐩爣绔� + wrkMast.getSourceStaNo(), // 婧愮珯 + wrkMast.getSourceLocNo(), // 婧愬簱浣� + wrkMast.getBarcode(), // 鏉$爜 + null, // 寮傚父鐮� + errName, // 寮傚父 + 1, // 寮傚父鎯呭喌 + now, // 娣诲姞鏃堕棿 + null, // 娣诲姞浜哄憳 + now, // 淇敼鏃堕棿 + null, // 淇敼浜哄憳 + "浠诲姟涓紓甯�", // 澶囨敞 + JSON.toJSONString(liftProtocol) // 绯荤粺鐘舵�佹暟鎹� + ); + if (!basLiftErrLogService.insert(basLiftErrLog)) { + News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", liftSlave.getId(), errName); + } + } + } else { + // 寮傚父淇 + if (liftProtocol.getDeviceError() == null || !liftProtocol.getDeviceError()) { + latest.setEndTime(now); + latest.setUpdateTime(now); + latest.setStatus(2); + if (!basLiftErrLogService.updateById(latest)) { + News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", liftSlave.getId(), latest.getId()); + } + } + } } } } @@ -1904,6 +2096,10 @@ } if (wrkCharge.getWrkSts() == 51) { + if (!shuttleProtocol.isIdleNoCharge()) { + continue; + } + if (!shuttleProtocol.getCurrentLocNo().equals(wrkCharge.getLocNo())) { //灏忚溅涓嶅湪鍏呯數妗╀綅缃� shuttleDispatchUtils.dispatchShuttle(wrkCharge.getWrkNo(), wrkCharge.getLocNo(), shuttle.getId());//璋冨害灏忚溅鍘诲厖鐢垫々 @@ -1974,38 +2170,46 @@ //鏌ヨ灏忚溅绉诲簱浠诲姟 List<WrkMast> wrkMasts = wrkMastMapper.selectShuttleMoveWrk(); for (WrkMast wrkMast : wrkMasts) { - boolean step1 = this.shuttleMoveExecuteStep1(wrkMast);//灏忚溅绉诲姩鍒版彁鍗囨満涓� - if (!step1) { + boolean stepMoveSta = this.shuttleMoveExecuteStepMoveSta(wrkMast);//灏忚溅绉诲姩鍒扮珯鐐� + if (!stepMoveSta) { continue; } - boolean step2 = this.shuttleMoveExecuteStep2(wrkMast);//鎻愬崌鏈烘惉杩愪腑 - if (!step2) { + boolean stepIntoLift = this.shuttleMoveExecuteStepIntoLift(wrkMast);//灏忚溅杩佸叆鎻愬崌鏈� + if (!stepIntoLift) { continue; } - boolean step3 = this.shuttleMoveExecuteStep3(wrkMast);//灏忚溅杩佸嚭鎻愬崌鏈轰腑 - if (!step3) { + boolean stepLiftMove = this.shuttleMoveExecuteStepLiftMove(wrkMast);//鎻愬崌鏈烘惉杩愪腑 + if (!stepLiftMove) { continue; } - boolean step4 = this.shuttleMoveExecuteStep4(wrkMast);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 - if (!step4) { + boolean stepOutLift = this.shuttleMoveExecuteStepOutLift(wrkMast);//灏忚溅杩佸嚭鎻愬崌鏈� + if (!stepOutLift) { continue; } + + boolean stepMoveLoc = this.shuttleMoveExecuteStepMoveLoc(wrkMast);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 + if (!stepMoveLoc) { + continue; + } + +// this.shuttleMoveExecuteStepClearWrkMast(wrkMast);//娓呯悊111.灏忚溅绉诲姩瀹屾垚 + } } /** - * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒版彁鍗囨満涓� + * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒扮珯鐐� * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue */ - private boolean shuttleMoveExecuteStep1(WrkMast wrkMast) { - //--------------------------------------灏忚溅绉诲姩鍒版彁鍗囨満涓�-----------------------------------------// + private boolean shuttleMoveExecuteStepMoveSta(WrkMast wrkMast) { + //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------// Date now = new Date(); - //灏忚溅绉诲姩鍒版彁鍗囨満涓� 101.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 102.灏忚溅鍒版彁鍗囨満涓� + //灏忚溅绉诲姩鑷崇珯鐐� 101.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 102.灏忚溅绉诲姩鑷崇珯鐐逛腑 if (wrkMast.getWrkSts() == 101) { //鑾峰彇鍥涘悜绌挎杞︾嚎绋� NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); @@ -2018,7 +2222,7 @@ } //灏忚溅澶勪簬绌洪棽鐘舵�� - if (!shuttleProtocol.isIdleNoCharge()) { + if (!shuttleProtocol.isIdleNoCharge(wrkMast.getWrkNo())) { return false; } @@ -2028,71 +2232,26 @@ } if (Utils.getLev(wrkMast.getLocNo()) == shuttleProtocol.getPoint().getZ()) { - //鐩爣搴撲綅鍜屽皬杞﹀簱浣嶅浜庡悓涓�妤煎眰锛岄渶瑕侀�氳繃鎻愬崌鏈鸿皟搴� - return true;//鐩存帴杩涘叆108.灏忚溅绉诲姩涓� + //鐩爣搴撲綅鍜屽皬杞﹀簱浣嶅浜庡悓涓�妤煎眰锛屼笉闇�瑕侀�氳繃鎻愬崌鏈鸿皟搴� + wrkMast.setWrkSts(109L);// 109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓� + wrkMast.setModiTime(now); + shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗� + if (wrkMastMapper.updateById(wrkMast) > 0) { + //涓嬪彂浠诲姟 + return true;//鐩存帴杩涘叆109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓� + } + return false; } - //璁$畻璺濈灏忚溅鏈�杩戠殑鎻愬崌鏈虹珯鐐� - //鏌ヨ灏忚溅鎵�鍦ㄦゼ灞傛彁鍗囨満杈撻�佺珯鐐� - int recentAllDistance = 9999999;//榛樿鏈�杩戣窛绂� - BasDevp recentDevp = null;//鏈�杩戠珯鐐� - List<BasDevp> basDevps = basDevpService.selectHasLiftNoByLev(shuttleProtocol.getPoint().getZ()); - for (BasDevp basDevp : basDevps) { - LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, basDevp.getLiftNo()); - if (liftThread == null) { - continue; - } - LiftProtocol liftProtocol = liftThread.getLiftProtocol(); - if (liftProtocol == null) { - continue; - } - if (!liftProtocol.isIdle()) { - continue; - } - - //璁$畻璺緞 - List<NavigateNode> calc = NavigateUtils.calc(shuttleProtocol.getCurrentLocNo(), basDevp.getLocNo(), NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleThread.getSlave().getId(), Utils.getLev(shuttleProtocol.getCurrentLocNo()))); - if (calc == null) { - continue;//璁$畻澶辫触锛屾壘涓嬩竴涓珯鐐� - } - - Integer allDistance = NavigateUtils.getOriginPathAllDistance(calc);//鏍规嵁鍘熷鑺傜偣缁撴灉锛岃绠楁�昏璧拌窛绂� - if (recentAllDistance > allDistance) { - recentAllDistance = allDistance;//鏇存柊璺濈 - recentDevp = basDevp;//鏇存柊杈撻�佺珯鐐� - } + //鑾峰彇婧愯緭閫佺珯 + LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo()); + if (liftSta == null) { + return false;//鎵句笉鍒扮珯鐐� } - - if (recentDevp == null) { - //娌℃湁鎵惧埌鍙敤杈撻�佺珯鐐� - return false;//绛夊緟涓嬩竴娆¤疆璇� - } - - //鑾峰彇鎻愬崌鏈烘暟鎹� - BasLift basLift = basLiftService.selectById(recentDevp.getLiftNo()); - if (basLift == null) { - return false;//娌℃湁鎻愬崌鏈烘暟鎹� - } - if (basLift.getPoint() == null) { - return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍� - } - //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 - WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(basLift.getLiftNo()); - if (liftWrkMast != null) { - return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� - } - NavigateNode liftNode = new NavigateNode(basLift.getPoint().getX(), basLift.getPoint().getY()); - liftNode.setZ(basLift.getPoint().getZ()); //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠� - NyShuttleOperaResult result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), recentDevp.getLocNo()); - //鑾峰彇灏忚溅杩涙彁鍗囨満琛岃蛋鍛戒护 - NyShuttleHttpCommand moveCommand = NyHttpUtils.getInOutLiftCommand(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), NavigatePositionConvert.locNoToNode(recentDevp.getLocNo()), liftNode, true); - if (result.getCommands() == null) { - return false;//璺緞璁$畻澶辫触 - } + NyShuttleOperaResult result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), liftSta.getLocNo()); List<NyShuttleHttpCommand> commands = result.getCommands(); - commands.add(moveCommand);//娣诲姞灏忚溅杩佸叆鎻愬崌鏈哄懡浠� ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� @@ -2102,31 +2261,59 @@ assignCommand.setCommands(commands); assignCommand.setNodes(result.getNodes()); - wrkMast.setWrkSts(102L);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 101.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 102.灏忚溅鍒版彁鍗囨満涓� - wrkMast.setLiftNo(basLift.getLiftNo());//鎻愬崌鏈哄彿(閿佸畾鎻愬崌鏈洪槻姝㈣鍏朵粬浠诲姟鎶㈠崰) + wrkMast.setWrkSts(102L);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 101.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 102.灏忚溅绉诲姩鑷崇珯鐐� wrkMast.setModiTime(now); shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗� if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); + return false; } + return false; } return true; } /** - * 灏忚溅杩佺Щ-鎻愬崌鏈烘惉杩愪腑 + * 灏忚溅杩佺Щ-灏忚溅杩佸叆鎻愬崌鏈� * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue */ - private boolean shuttleMoveExecuteStep2(WrkMast wrkMast) { - //--------------------------------------鎻愬崌鏈烘惉杩愪腑-----------------------------------------// + private boolean shuttleMoveExecuteStepIntoLift(WrkMast wrkMast) { + //--------------------------------------灏忚溅杩佸叆鎻愬崌鏈�-----------------------------------------// Date now = new Date(); - //鎻愬崌鏈烘惉杩愪腑 103.灏忚溅鍒版彁鍗囨満瀹屾垚 ==> 104.鎻愬崌鏈烘惉杩愪腑 + //灏忚溅绉诲姩鍒版彁鍗囨満涓� 103.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 104.灏忚溅杩佸叆鎻愬崌鏈轰腑 if (wrkMast.getWrkSts() == 103) { + //鑾峰彇婧愮珯 + LiftStaProtocol sourceLiftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo()); + if (sourceLiftSta == null) { + return false;//鎵句笉鍒扮珯鐐� + } - LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); + //鑾峰彇鐩爣杈撻�佺珯 + LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo()); + if (liftSta == null) { + return false;//鎵句笉鍒扮珯鐐� + } + + //鑾峰彇鎻愬崌鏈烘暟鎹� + BasLift basLift = basLiftService.selectById(liftSta.getLiftNo()); + if (basLift == null) { + return false;//娌℃湁鎻愬崌鏈烘暟鎹� + } + + if (basLift.getPoint() == null) { + return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍� + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟 + WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(basLift.getLiftNo()); + if (liftWrkMast != null) { + return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSta.getLiftNo()); if (liftThread == null) { return false; } @@ -2136,10 +2323,6 @@ } if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { return false; - } - //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰� - if (liftProtocol.getToken() != 0) { - return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔� } //鑾峰彇鍥涘悜绌挎杞︾嚎绋� @@ -2157,50 +2340,92 @@ return false; } - //鑾峰彇婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐� - BasDevp sourceBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getSourceLocNo()), liftProtocol.getLiftNo().intValue()); - //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� - BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getLocNo()), liftProtocol.getLiftNo().intValue()); - if (sourceBasDevp == null || targetBasDevp == null) { - return false;//缂哄皯绔欑偣淇℃伅 + //鍒ゆ柇鎻愬崌鏈烘ゼ灞� + if (liftProtocol.getLev().intValue() != shuttleProtocol.getPoint().getZ()) { + //鎻愬崌鏈轰笉鍦ㄥ皬杞︽ゼ灞� + //璋冨害鎻愬崌鏈� + + //鑾峰彇鎻愬崌鏈哄懡浠わ紝璋冨害鎻愬崌鏈哄埌婧愮珯浣嶇疆 + NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_CAR.id, sourceLiftSta.getStaNo(), sourceLiftSta.getStaNo(), wrkMast.getWrkNo()); + + ArrayList<NyLiftCommand> commands = new ArrayList<>(); + commands.add(liftCommand); + + //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 + LiftAssignCommand assignCommand = new LiftAssignCommand(); + assignCommand.setCommands(commands); + assignCommand.setLiftNo(liftProtocol.getLiftNo()); + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); + assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_CAR.id.shortValue()); + + wrkMast.setLiftNo(liftThread.getSlave().getId());//閿佸畾鎻愬崌鏈洪槻姝㈣鍗犵敤 + wrkMast.setModiTime(now); + liftProtocol.setToken(wrkMast.getShuttleNo());//鎻愬崌鏈轰护鐗岀粦瀹氬綋鍓嶅皬杞� + if (wrkMastMapper.updateById(wrkMast) > 0) { + //涓嬪彂浠诲姟 + MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand)); + } + return false;//绛夊緟鎻愬崌鏈哄埌灏忚溅妤煎眰 } - //鑾峰彇鎻愬崌鏈哄懡浠� - NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_CAR.id, sourceBasDevp.getDevNo(), targetBasDevp.getDevNo(), wrkMast.getWrkNo()); + //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠灏忚溅 + if (liftProtocol.getToken() != wrkMast.getShuttleNo()) { + return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔� + } - ArrayList<NyLiftCommand> commands = new ArrayList<>(); - commands.add(liftCommand); + //鍒ゆ柇灏忚溅鏄惁涓哄綋鍓嶄换鍔$嫭鍗� + if (shuttleProtocol.getToken() != wrkMast.getWrkNo()) { + return false; + } - //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 - LiftAssignCommand assignCommand = new LiftAssignCommand(); + //绔欑偣鑺傜偣 + NavigateNode staNode = NavigatePositionConvert.locNoToNode(sourceLiftSta.getLocNo()); + + //鎻愬崌鏈鸿妭鐐� + NavigateNode liftNode = new NavigateNode(basLift.getPoint$().getX(), basLift.getPoint$().getY()); + liftNode.setZ(basLift.getPoint$().getZ()); + + //鑾峰彇灏忚溅杩涙彁鍗囨満琛岃蛋鍛戒护 + NyShuttleHttpCommand moveCommand = NyHttpUtils.getInOutLiftCommand(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), staNode, liftNode, true); + List<NyShuttleHttpCommand> commands = new ArrayList<>(); + commands.add(moveCommand); + List<NavigateNode> nodes = new ArrayList<>();//琛岃蛋鑺傜偣璺緞 + nodes.add(staNode); + nodes.add(liftNode); + + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO.id.shortValue());//灏忚溅绉诲簱浠诲姟 + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� + assignCommand.setAuto(true);//鑷姩妯″紡 assignCommand.setCommands(commands); - assignCommand.setLiftNo(liftProtocol.getLiftNo()); - assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); - assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_CAR.id.shortValue()); + assignCommand.setNodes(nodes); - wrkMast.setWrkSts(104L);//鎻愬崌鏈烘惉杩愪腑 103.灏忚溅鍒版彁鍗囨満瀹屾垚 ==> 104.鎻愬崌鏈烘惉杩愪腑 - wrkMast.setLiftNo(liftThread.getSlave().getId());//閿佸畾鎻愬崌鏈洪槻姝㈣鍗犵敤 + wrkMast.setWrkSts(104L);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 103.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 104.灏忚溅杩佸叆鎻愬崌鏈轰腑 wrkMast.setModiTime(now); - liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗� + wrkMast.setLiftNo(liftThread.getSlave().getId());//閿佸畾鎻愬崌鏈洪槻姝㈣鍗犵敤 + liftProtocol.setToken(wrkMast.getShuttleNo());//鎻愬崌鏈轰护鐗岀粦瀹氬綋鍓嶅皬杞� if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand)); + MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); + return false; } - + return false; } + return true; } /** - * 灏忚溅杩佺Щ-灏忚溅杩佸嚭鎻愬崌鏈轰腑 + * 灏忚溅杩佺Щ-鎻愬崌鏈烘惉杩愪腑 * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue */ - private boolean shuttleMoveExecuteStep3(WrkMast wrkMast) { - //--------------------------------------灏忚溅杩佸嚭鎻愬崌鏈轰腑-----------------------------------------// + private boolean shuttleMoveExecuteStepLiftMove(WrkMast wrkMast) { + //--------------------------------------鎻愬崌鏈烘惉杩愪腑-----------------------------------------// Date now = new Date(); - //灏忚溅杩佸嚭鎻愬崌鏈轰腑 105.鎻愬崌鏈烘惉杩愬畬鎴� ==> 106.灏忚溅杩佸嚭鎻愬崌鏈轰腑 + //鎻愬崌鏈烘惉杩愪腑 105.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 106.鎻愬崌鏈烘惉杩愪腑 if (wrkMast.getWrkSts() == 105) { LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); @@ -2214,10 +2439,14 @@ if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { return false; } + //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠灏忚溅 + if (liftProtocol.getToken() != wrkMast.getShuttleNo()) { + return false;//鎻愬崌鏈轰护鐗屽拰褰撳墠灏忚溅涓嶄竴鑷达紝绂佹娲惧彂 + } - //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠浠诲姟 - if (liftProtocol.getToken() != wrkMast.getWrkNo()) { - return false; + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞� + if (!liftProtocol.getHasCar()) { + return false;//鎻愬崌鏈哄唴鏃犲皬杞� } //鑾峰彇鍥涘悜绌挎杞︾嚎绋� @@ -2235,61 +2464,53 @@ return false; } - //鍒ゆ柇灏忚溅浠ょ墝鏄惁涓哄綋鍓嶄换鍔� + //鍒ゆ柇灏忚溅鏄惁涓哄綋鍓嶄换鍔$嫭鍗� if (shuttleProtocol.getToken() != wrkMast.getWrkNo()) { return false; } - //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� - BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getLocNo()), liftProtocol.getLiftNo().intValue()); - if (targetBasDevp == null) { + //鑾峰彇婧愮珯 + LiftStaProtocol sourceLiftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo()); + //鑾峰彇鐩爣绔� + LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo()); + if (sourceLiftSta == null || liftSta == null) { return false;//缂哄皯绔欑偣淇℃伅 } - //鑾峰彇鎻愬崌鏈烘暟鎹� - BasLift basLift = basLiftService.selectById(targetBasDevp.getLiftNo()); - if (basLift == null) { - return false;//娌℃湁鎻愬崌鏈烘暟鎹� - } - if (basLift.getPoint() == null) { - return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍� - } - NavigateNode liftNode = new NavigateNode(basLift.getPoint().getX(), basLift.getPoint().getY()); - liftNode.setZ(basLift.getPoint().getZ()); + //鑾峰彇鎻愬崌鏈哄懡浠� + NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_CAR.id, sourceLiftSta.getStaNo(), liftSta.getStaNo(), wrkMast.getWrkNo()); - List<NyShuttleHttpCommand> commands = new ArrayList<>(); - //鑾峰彇灏忚溅鍑烘彁鍗囨満琛岃蛋鍛戒护 - NyShuttleHttpCommand moveCommand = NyHttpUtils.getInOutLiftCommand(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), liftNode, NavigatePositionConvert.locNoToNode(targetBasDevp.getLocNo()), false); - commands.add(moveCommand);//娣诲姞灏忚溅杩佸嚭鎻愬崌鏈哄懡浠� + ArrayList<NyLiftCommand> commands = new ArrayList<>(); + commands.add(liftCommand); - ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); - assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� - assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO.id.shortValue());//灏忚溅绉诲簱浠诲姟 - assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� - assignCommand.setAuto(true);//鑷姩妯″紡 + //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 + LiftAssignCommand assignCommand = new LiftAssignCommand(); assignCommand.setCommands(commands); - assignCommand.setNodes(null); + assignCommand.setLiftNo(liftProtocol.getLiftNo()); + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); + assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_CAR.id.shortValue()); - wrkMast.setWrkSts(106L);//灏忚溅杩佸嚭鎻愬崌鏈轰腑 105.鎻愬崌鏈烘惉杩愬畬鎴� ==> 106.灏忚溅杩佸嚭鎻愬崌鏈轰腑 + wrkMast.setWrkSts(106L);//鎻愬崌鏈烘惉杩愪腑 105.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 106.鎻愬崌鏈烘惉杩愪腑 + wrkMast.setLiftNo(liftThread.getSlave().getId());//閿佸畾鎻愬崌鏈洪槻姝㈣鍗犵敤 wrkMast.setModiTime(now); if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 - MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); + MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand)); } + } return true; } /** - * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 + * 灏忚溅杩佺Щ-灏忚溅杩佸嚭鎻愬崌鏈� * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue */ - private boolean shuttleMoveExecuteStep4(WrkMast wrkMast) { - //--------------------------------------灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑-----------------------------------------// + private boolean shuttleMoveExecuteStepOutLift(WrkMast wrkMast) { + //--------------------------------------灏忚溅杩佸嚭鎻愬崌鏈�-----------------------------------------// Date now = new Date(); - - //灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 107.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 108.灏忚溅绉诲姩涓� + //灏忚溅绉诲姩鍒版彁鍗囨満涓� 107.鎻愬崌鏈烘惉杩愬畬鎴� ==> 108.灏忚溅杩佸嚭鎻愬崌鏈轰腑 if (wrkMast.getWrkSts() == 107) { LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); @@ -2300,6 +2521,14 @@ if (liftProtocol == null) { return false; } + if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) { + return false; + } + + //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠灏忚溅 + if (liftProtocol.getToken() != wrkMast.getShuttleNo()) { + return false;//鎻愬崌鏈轰护鐗屽拰褰撳墠灏忚溅涓嶄竴鑷达紝绂佹娲惧彂 + } //鑾峰彇鍥涘悜绌挎杞︾嚎绋� NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); @@ -2316,31 +2545,105 @@ return false; } - //鍒ゆ柇灏忚溅浠ょ墝鏄惁涓哄綋鍓嶄换鍔� + //鍒ゆ柇灏忚溅鏄惁涓哄綋鍓嶄换鍔$嫭鍗� if (shuttleProtocol.getToken() != wrkMast.getWrkNo()) { return false; } - //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� - BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getLocNo()), wrkMast.getLiftNo()); - if (targetBasDevp == null) { - return false;//缂哄皯绔欑偣淇℃伅 + //鑾峰彇鐩爣绔� + LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo()); + if (liftSta == null) { + return false;//鎵句笉鍒扮珯鐐� } //鑾峰彇鎻愬崌鏈烘暟鎹� - BasLift basLift = basLiftService.selectById(targetBasDevp.getLiftNo()); + BasLift basLift = basLiftService.selectById(liftProtocol.getLiftNo().intValue()); if (basLift == null) { return false;//娌℃湁鎻愬崌鏈烘暟鎹� } if (basLift.getPoint() == null) { return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍� } - NavigateNode liftNode = new NavigateNode(basLift.getPoint().getX(), basLift.getPoint().getY()); - liftNode.setZ(basLift.getPoint().getZ()); + NavigateNode liftNode = new NavigateNode(basLift.getPoint$().getX(), basLift.getPoint$().getY()); + liftNode.setZ(basLift.getPoint$().getZ()); - //鑾峰彇灏忚溅浠庤緭閫佺珯鍒扮洰鏍囧簱浣嶅懡浠� - NyShuttleOperaResult result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), targetBasDevp.getLocNo(), wrkMast.getLocNo()); - if (result.getCommands() == null) { + List<NyShuttleHttpCommand> commands = new ArrayList<>(); + //鑾峰彇灏忚溅鍑烘彁鍗囨満琛岃蛋鍛戒护 + NyShuttleHttpCommand moveCommand = NyHttpUtils.getInOutLiftCommand(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), liftNode, NavigatePositionConvert.locNoToNode(liftSta.getLocNo()), false); + commands.add(moveCommand);//娣诲姞灏忚溅杩佸嚭鎻愬崌鏈哄懡浠� + + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO.id.shortValue());//灏忚溅绉诲簱浠诲姟 + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙� + assignCommand.setAuto(true);//鑷姩妯″紡 + assignCommand.setCommands(commands); + assignCommand.setNodes(null); + + wrkMast.setWrkSts(108L);//灏忚溅杩佸嚭鎻愬崌鏈轰腑 107.鎻愬崌鏈烘惉杩愬畬鎴� ==> 108.灏忚溅杩佸嚭鎻愬崌鏈轰腑 + wrkMast.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast) > 0) { + //涓嬪彂浠诲姟 + MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); + return false; + } + return false; + } + return true; + } + + /** + * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 + * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false + * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue + */ + private boolean shuttleMoveExecuteStepMoveLoc(WrkMast wrkMast) { + //--------------------------------------灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑-----------------------------------------// + Date now = new Date(); + + //灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓� + if (wrkMast.getWrkSts() == 109) { + + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + return false; + } + NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + if (shuttleProtocol == null) { + return false; + } + + //灏忚溅澶勪簬绌洪棽鐘舵�� + if (!shuttleProtocol.isIdleNoCharge(wrkMast.getWrkNo())) { + return false; + } + + //鍒ゆ柇灏忚溅浠ょ墝鏄惁涓哄綋鍓嶄换鍔� + if (shuttleProtocol.getToken() != 0 && shuttleProtocol.getToken() != wrkMast.getWrkNo()) { + return false; + } + +// //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� +// BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getLocNo()), wrkMast.getLiftNo()); +// if (targetBasDevp == null) { +// return false;//缂哄皯绔欑偣淇℃伅 +// } +// +// //鑾峰彇鎻愬崌鏈烘暟鎹� +// BasLift basLift = basLiftService.selectById(targetBasDevp.getLiftNo()); +// if (basLift == null) { +// return false;//娌℃湁鎻愬崌鏈烘暟鎹� +// } +// if (basLift.getPoint() == null) { +// return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍� +// } +// NavigateNode liftNode = new NavigateNode(basLift.getPoint$().getX(), basLift.getPoint$().getY()); +// liftNode.setZ(basLift.getPoint$().getZ()); + + //鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠� + NyShuttleOperaResult result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo()); + if (result == null) { return false;//璺緞璁$畻澶辫触 } List<NyShuttleHttpCommand> commands = result.getCommands(); @@ -2353,10 +2656,23 @@ assignCommand.setCommands(commands); assignCommand.setNodes(result.getNodes()); - wrkMast.setWrkSts(108L);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 107.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 108.灏忚溅绉诲姩涓� + wrkMast.setWrkSts(110L);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓� wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� wrkMast.setModiTime(now); - liftProtocol.setToken(0);//閲婃斁鎻愬崌鏈轰护鐗� + + 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() == shuttleProtocol.getShuttleNo().intValue()) { + liftProtocol.setToken(0);//閲婃斁鎻愬崌鏈轰护鐗� + } + } if (wrkMastMapper.updateById(wrkMast) > 0) { //涓嬪彂浠诲姟 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); @@ -2366,6 +2682,69 @@ } /** + * 灏忚溅杩佺Щ-娓呯悊111.灏忚溅绉诲姩瀹屾垚 + */ + private boolean shuttleMoveExecuteStepClearWrkMast(WrkMast wrkMast) { + if (wrkMast.getWrkSts() == 111) { + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + return false; + } + NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + if (shuttleProtocol == null) { + return false; + } + + //灏忚溅澶勪簬绌洪棽鐘舵�� + if (!shuttleProtocol.isIdleNoCharge(wrkMast.getWrkNo())) { + return false; + } + + Object o = redisUtil.get("shuttle_wrk_no_" + shuttleProtocol.getTaskNo()); + if (o != null) { + ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class); + ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand(); + int size = assignCommand.getCommands().size(); + NyShuttleHttpCommand command = assignCommand.getCommands().get(size - 1);//鑾峰彇鏈�鍚庝竴娈靛懡浠� + if (!command.getComplete()) { + return false;//鏈�鍚庝竴娈靛懡浠よ繕鏈畬鎴愶紝涓嶅仛鎿嶄綔 + } + NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(shuttleProtocol.getCurrentLocNo())); + navigateMapData.writeNavigateNodeToRedisMap(assignCommand.getNodes(), false);//瑙i攣璺緞 + + //鍒犻櫎redis + redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo()); + } + + // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� + if (wrkMastLocMapper.save(wrkMast.getWrkNo()) <= 0) { + log.info("淇濆瓨宸ヤ綔鍘嗗彶妗workNo={0}]澶辫触", wrkMast.getWrkNo()); + } + // 鍒犻櫎宸ヤ綔涓绘。 + if (!wrkMastService.deleteById(wrkMast)) { + log.info("鍒犻櫎宸ヤ綔涓绘。[workNo={0}]澶辫触", wrkMast.getWrkNo()); + } + + //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵�� + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); + //婧愬簱浣嶆竻闆� + shuttleProtocol.setSourceLocNo(null); + //鐩爣搴撲綅娓呴浂 + shuttleProtocol.setLocNo(null); + //浠诲姟鎸囦护娓呴浂 + shuttleProtocol.setAssignCommand(null); + //宸ヤ綔鍙锋竻闆� + shuttleProtocol.setTaskNo(0); + //娓呴櫎浠ょ墝 + shuttleProtocol.setToken(0); + News.info("鍥涘悜绌挎杞﹀凡纭涓旂Щ鍔ㄤ换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo()); + } + + return true; + } + + /** * 鍑哄叆搴撴ā寮忓垏鎹� */ public synchronized void outAndIn() { -- Gitblit v1.9.1