From d2fd7cfc1a426baabe4fac47f88b4db03432e22b Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期二, 31 十月 2023 12:32:32 +0800 Subject: [PATCH] #websocket --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 470 ++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 327 insertions(+), 143 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 e2ec5d0..bcdd0f3 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -25,6 +25,8 @@ import com.zy.core.model.protocol.*; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.*; +import com.zy.system.entity.Config; +import com.zy.system.service.ConfigService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -102,6 +104,12 @@ private RedisUtil redisUtil; @Autowired private WrkMastLocMapper wrkMastLocMapper; + @Autowired + private BasLiftOptService basLiftOptService; + @Autowired + private ConfigService configService; + @Autowired + private NavigateMapUtils navigateMapUtils; /** @@ -522,6 +530,7 @@ wrkMast.setStaNo(liftStaProtocol.getStaNo());//鐩爣绔� wrkMast.setLocNo(sourceLocNo); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣� wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌� + wrkMast.setLiftNo(null);// 鎻愬崌鏈烘竻绌� wrkMast.setModiTime(new Date()); if (wrkMastMapper.updateById(wrkMast) == 0) { throw new CoolException(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); @@ -846,8 +855,18 @@ return false;//鍑哄簱绔欑偣涓嶅瓨鍦� } + if (!basDevp.getAutoing().equals("Y")) { + return false;//涓嶆槸鑷姩鐘舵�� + } + if (!basDevp.getOutEnable().equals("Y")) { return false;//鍑哄簱绔欑偣涓嶅彲鍑� + } + + Integer liftNo = basDevp.getLiftNo();//鎼滅储鍑哄簱鎻愬崌鏈烘槸鍚﹀瓨鍦ㄥ叆搴撲换鍔★紝濡傚瓨鍦ㄧ姝㈠嚭搴� + List<WrkMast> liftWrkMasts = wrkMastMapper.selectInWrkMastByLiftNo(liftNo); + if (!liftWrkMasts.isEmpty()) { + return false;//瀛樺湪鍏ュ簱浠诲姟锛岀姝㈠嚭搴� } //鑾峰彇婧愮珯 @@ -1096,6 +1115,18 @@ return false;//绔欑偣涓嶅彲鍏� } + //鍒ゆ柇鎻愬崌鏈烘暣涓笁妤兼槸鍚﹂兘澶勪簬鍏ュ簱妯″紡 + Integer outInModel1 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 1); + Integer outInModel2 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 5); + Integer outInModel3 = Utils.getOutInModelByLift(sourceBasDevp.getLiftNo(), 8); + if (outInModel1 == null || outInModel2 == null || outInModel3 == null) { + return false;//涓嶅瓨鍦ㄥ嚭鍏ュ簱妯″紡 + } + + if (outInModel1 == 2 || outInModel2 == 2 && outInModel3 == 2) { + return false;//鍙鏈変竴涓浜庡嚭搴撴ā寮忥紝绂佹鍏ュ簱 + } + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, sourceBasDevp.getLiftNo()); if (liftThread == null) { return false; @@ -1190,16 +1221,27 @@ return false; } - //璋冨害灏忚溅閬胯 - boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getShuttleNo(), shuttleThread); - if (!result) { - return false; - } - //鑾峰彇鍑哄簱绔欑偣(鐩爣绔�) BasDevp basDevp = basDevpService.selectById(wrkMast.getStaNo()); if (basDevp == null) { return false;//鍑哄簱绔欑偣涓嶅瓨鍦� + } + + //鑾峰彇婧愮珯瀵瑰簲鐨勭墰鐪兼彁鍗囨満绔欑偣缂栧彿(璧风偣缂栧彿) + LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(basDevp.getLiftNo(), Utils.getLev(wrkMast.getSourceLocNo())); + if (liftStaProtocol == null) { + return false;//鎵句笉鍒扮珯鐐� + } + Integer startSta = liftStaProtocol.getStaNo(); + + NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + if (shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) { + //灏忚溅杩樺湪杈撻�佺珯鐐� + //璋冨害灏忚溅閬胯 + boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getShuttleNo(), shuttleThread); + if (!result) { + return false; + } } if (!basDevp.getOutEnable().equals("Y")) { @@ -1214,6 +1256,7 @@ if (liftProtocol == null) { return false; } + if (!liftProtocol.isIdle()) { return false; } @@ -1226,13 +1269,6 @@ if (liftWrkMast != null) { return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� } - - //鑾峰彇婧愮珯瀵瑰簲鐨勭墰鐪兼彁鍗囨満绔欑偣缂栧彿(璧风偣缂栧彿) - LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(liftThread.getSlave().getId(), Utils.getLev(wrkMast.getSourceLocNo())); - if (liftStaProtocol == null) { - return false;//鎵句笉鍒扮珯鐐� - } - Integer startSta = liftStaProtocol.getStaNo(); //鑾风洰鏍囩珯婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐� BasDevp targetBasDevp = basDevpService.selectById(wrkMast.getStaNo()); @@ -1286,8 +1322,14 @@ && liftProtocol.getTaskNo() != 0 && !liftProtocol.getBusy() ) { + BasLiftOpt basLiftOpt = basLiftOptService.selectByDeviceWrk(liftProtocol.getTaskNo().toString()); + int taskNo = liftProtocol.getTaskNo().intValue(); + if (basLiftOpt != null) { + taskNo = basLiftOpt.getWrkNo(); + } + //灏嗕换鍔℃。鏍囪涓哄畬鎴� - WrkMast wrkMast = wrkMastMapper.selectByWorkNo324104(liftProtocol.getTaskNo().intValue()); + WrkMast wrkMast = wrkMastMapper.selectByWorkNo324104(taskNo); if (wrkMast != null) { switch (wrkMast.getWrkSts().intValue()) { case 3://3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴� @@ -1302,15 +1344,18 @@ wrkMast.setWrkSts(25L); if (wrkMast.getIoType() == 11) {//搴撲綅绉昏浆 wrkMast.setWrkSts(4L);//4.鎻愬崌鏈烘惉杩愬畬鎴� + }else { + if (wrkMast.getMk() == null || !wrkMast.getMk().equals("Y")) { + //涓嶉渶瑕佺敤鍒版満姊拌噦锛岀洿鎺ヨ浆29.鍑哄簱瀹屾垚 + wrkMast.setWrkSts(29L); + wrkMast.setShuttleNo(null);//閲婃斁灏忚溅 + wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� + } } + if (liftProtocol.getToken().equals(wrkMast.getWrkNo())) { //閲婃斁鎻愬崌鏈轰护鐗� liftProtocol.setToken(0); - } - - if (wrkMast.getMk() == null || !wrkMast.getMk().equals("Y")) { - //涓嶉渶瑕佺敤鍒版満姊拌噦锛岀洿鎺ヨ浆29.鍑哄簱瀹屾垚 - wrkMast.setWrkSts(29L); } break; @@ -1377,7 +1422,7 @@ continue; } - boolean step4 = this.locToLocExecuteStep4(wrkMast);//璋冨害杞﹁締鍙栬揣骞惰繍閫佸埌鍑哄簱鍙� + boolean step4 = this.locToLocExecuteStep4(wrkMast);//璋冨害杞﹁締鍙栬揣骞惰繍閫佸埌鐩爣搴撲綅 if (!step4) { continue; } @@ -1479,7 +1524,7 @@ } //鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満杈撻�佺珯鐐� - LiftStaProtocol liftSta = shuttleDispatchUtils.getRecentLiftSta(shuttleThread.getSlave().getId()); + LiftStaProtocol liftSta = shuttleDispatchUtils.getRecentLiftSta(shuttleThread.getSlave().getId(), Utils.getLev(wrkMast.getLocNo())); if (liftSta == null) { return false;//娌℃湁鍙敤涓旂┖闂茬殑杈撻�佺珯鐐� } @@ -1525,14 +1570,47 @@ private boolean locToLocExecuteStep3(WrkMast wrkMast) { Date now = new Date(); if (wrkMast.getWrkSts() == 23) {//23.灏忚溅鎼繍瀹屾垚 + //婧愮珯 + Integer sourceStaNo = wrkMast.getSourceStaNo(); + //鐩爣绔� + Integer staNo = wrkMast.getStaNo(); + if (sourceStaNo == null || staNo == null) { + return false;//婧愮珯鎴栫洰鏍囩珯涓虹┖ + } + + int liftNo = staNo / 100;//鑾峰彇鎻愬崌鏈哄彿 + //鑾峰彇鎻愬崌鏈虹嚎绋� - LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftNo); if (liftThread == null) { return false; } LiftProtocol liftProtocol = liftThread.getLiftProtocol(); if (liftProtocol == null) { return false; + } + + //鑾峰彇婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐� + LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(liftNo, Utils.getLev(wrkMast.getSourceLocNo())); + if (liftStaProtocol == null) { + return false;//鎵句笉鍒扮珯鐐� + } + + if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && liftStaProtocol.getHasTray())) { + return false;//绔欑偣蹇呴』鑷姩銆佺┖闂层�佹湁鎵樼洏 + } + NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); + if (shuttleThread == null) { + return false; + } + NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + if (shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) { + //灏忚溅杩樺湪杈撻�佺珯鐐� + //璋冨害灏忚溅閬胯 + boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getShuttleNo(), shuttleThread); + if (!result) { + return false; + } } if (!liftProtocol.isIdle()) { @@ -1543,14 +1621,6 @@ WrkMast wrkMast1 = wrkMastMapper.selectLiftWrkMast(liftProtocol.getLiftNo().intValue()); if (wrkMast1 != null && wrkMast1.getWrkNo().intValue() != wrkMast.getWrkNo().intValue()) { return false; - } - - //婧愮珯 - Integer sourceStaNo = wrkMast.getSourceStaNo(); - //鐩爣绔� - Integer staNo = wrkMast.getStaNo(); - if (sourceStaNo == null || staNo == null) { - return false;//婧愮珯鎴栫洰鏍囩珯涓虹┖ } //鑾峰彇鎻愬崌鏈哄懡浠� @@ -1587,13 +1657,17 @@ private boolean locToLocExecuteStep4(WrkMast wrkMast) { if (wrkMast.getWrkSts() == 4) {//4.鎻愬崌鏈烘惉杩愬畬鎴� //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� - BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getLocNo()), wrkMast.getLiftNo()); - if (targetBasDevp == null) { - return false;//缂哄皯绔欑偣淇℃伅 + LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(wrkMast.getLiftNo(), Utils.getLev(wrkMast.getLocNo())); + if (liftStaProtocol == null) { + return false;//鎵句笉鍒扮珯鐐� + } + + if (!(liftStaProtocol.getModel() && !liftStaProtocol.getBusy() && liftStaProtocol.getHasTray())) { + return false;//绔欑偣蹇呴』鑷姩銆佺┖闂层�佹湁鎵樼洏 } if (wrkMast.getShuttleNo() == null) { - shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), targetBasDevp.getLocNo());//璋冨害灏忚溅鍒扮洰鏍囪緭閫佺珯鐐硅繘琛屽彇璐� + shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo());//璋冨害灏忚溅鍒扮洰鏍囪緭閫佺珯鐐硅繘琛屽彇璐� return false; } @@ -1611,14 +1685,14 @@ } //鍒ゆ柇灏忚溅鏄惁鍒拌揪鐩爣杈撻�佺珯鐐� - if (!shuttleProtocol.getCurrentLocNo().equals(targetBasDevp.getLocNo())) { + if (!shuttleProtocol.getCurrentLocNo().equals(liftStaProtocol.getLocNo())) { //灏忚溅涓嶅湪鐩爣杈撻�佺珯鐐� - shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), targetBasDevp.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒扮洰鏍囪緭閫佺珯鐐硅繘琛屽彇璐� + shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftStaProtocol.getLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒扮洰鏍囪緭閫佺珯鐐硅繘琛屽彇璐� return false; } //灏忚溅宸叉姷杈剧洰鏍囪緭閫佺珯鐐癸紝灏嗚揣鐗╂惉杩愬埌鐩爣搴撲綅 - NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), targetBasDevp.getLocNo(), wrkMast.getLocNo()); + NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), liftStaProtocol.getLocNo(), wrkMast.getLocNo()); if (result == null) {//璺緞璁$畻澶辫触 return false; } @@ -1959,10 +2033,10 @@ } /** - * AGV琛ヨ揣 => 鏈烘鑷傛嫞鏂� + * AGV琛ヨ揣 => 鐢熸垚鍏ュ簱閫氱煡妗� */ - public void agvRestockByRobot() { - //妫�娴�300绔欐槸鍚﹁嚜鍔ㄣ�佹湁鐗┿�佸伐浣滃彿 + public void robotGenerateAgvTask() { +//妫�娴�300绔欐槸鍚﹁嚜鍔ㄣ�佹湁鐗┿�佸伐浣滃彿 for (DevpSlave devp : slaveProperties.getDevp()) { // 鑾峰彇鍏ュ簱绔欎俊鎭� DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); @@ -1992,33 +2066,82 @@ } else if (staProtocol317.isAutoing() && !staProtocol317.isLoading()) { //鑷姩銆佹棤鐗� targetSta = (short) 317; - }else { + } else { continue;//娌℃湁绌洪棽绔欑偣 } - targetSta = (short) 317; - if (wrkMast.getStaNo() != 303 && wrkMast.getStaNo() != 317) { - //瑕嗙洊宸ヤ綔妗g洰鏍囩珯 - wrkMast.setStaNo(targetSta.intValue()); - if (wrkMastMapper.updateById(wrkMast) > 0) { - //鍚�300绔欏啓鍏ョ洰鏍囩珯 - staProtocol = staProtocol.clone(); - staProtocol.setStaNo(targetSta);//绉诲姩鍒扮洰鏍囩珯 - boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); - try { - Thread.sleep(500); - } catch (Exception e) { - e.printStackTrace(); + //鍚慉GV鍙戣捣缁勬墭璇锋眰 + try { + HashMap<String, Object> param = new HashMap<>(); + param.put("wrkNo", wrkMast.getWrkNo()); + String response = new HttpHandler.Builder() + .setUri(wmsUrl) + .setPath("/rpc/replenishment") + .setJson(JSON.toJSONString(param)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + Integer code = jsonObject.getInteger("code"); + if (code.equals(200)) {//AGV缁勬墭鎴愬姛 + //瑕嗙洊宸ヤ綔妗g洰鏍囩珯 + wrkMast.setStaNo(targetSta.intValue()); + wrkMast.setShuttleNo(null);//閲婃斁灏忚溅 + wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� + if (wrkMastMapper.updateById(wrkMast) > 0) { + //鍚�300绔欏啓鍏ョ洰鏍囩珯 + staProtocol = staProtocol.clone(); + staProtocol.setStaNo(targetSta);//绉诲姩鍒扮洰鏍囩珯 + boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + try { + Thread.sleep(500); + } catch (Exception e) { + e.printStackTrace(); + } + continue; + } } - continue; + } catch (Exception e) { + e.printStackTrace(); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } + +// //瑕嗙洊宸ヤ綔妗g洰鏍囩珯 +// wrkMast.setStaNo(targetSta.intValue()); +// wrkMast.setShuttleNo(null);//閲婃斁灏忚溅 +// wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� +// if (wrkMastMapper.updateById(wrkMast) > 0) { +// //鍚�300绔欏啓鍏ョ洰鏍囩珯 +// staProtocol = staProtocol.clone(); +// staProtocol.setStaNo(targetSta);//绉诲姩鍒扮洰鏍囩珯 +// boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); +// try { +// Thread.sleep(500); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// continue; +// } } } } + } + } + /** + * AGV琛ヨ揣 => 鏈烘鑷傛嫞鏂� + */ + public void agvRestockByRobot() { + //妫�娴�300绔欐槸鍚﹁嚜鍔ㄣ�佹湁鐗┿�佸伐浣滃彿 + for (DevpSlave devp : slaveProperties.getDevp()) { + // 鑾峰彇鍏ュ簱绔欎俊鎭� + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol303 = devpThread.getStation().get(303); StaProtocol staProtocol317 = devpThread.getStation().get(317); + if (staProtocol303 == null || staProtocol317 == null) { + continue; + } + if (staProtocol303.isAutoing() && staProtocol303.isLoading() && staProtocol303.getWorkNo() != 0) { //璋冨害鏈烘鑷� //鏌ヨ鏄惁鏈夊伐浣滄。 @@ -2026,15 +2149,15 @@ if (wrkMast == null) { continue; } - WrkDetl wrkDetl = wrkDetlService.selectById(wrkMast.getWrkNo()); - if (wrkDetl == null) { + List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo()); + if (wrkDetls.isEmpty()) { continue; } if (wrkMast.getInvWh() == null) { wrkMast.setInvWh("Y");//鏍囪宸茬粡涓嬪彂鏈烘鑷備换鍔� if (wrkMastMapper.updateById(wrkMast) > 0) { - RobotUtils.sendTask(staProtocol303.getWorkNo().toString(), wrkDetl.getAnfme().intValue(), "303"); + RobotUtils.sendTask(staProtocol303.getWorkNo().toString(), wrkDetls.size(), "303"); } } }else if (staProtocol317.isAutoing() && staProtocol317.isLoading() && staProtocol317.getWorkNo() != 0) { @@ -2044,18 +2167,86 @@ if (wrkMast == null) { continue; } - WrkDetl wrkDetl = wrkDetlService.selectById(wrkMast.getWrkNo()); - if (wrkDetl == null) { + List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo()); + if (wrkDetls.isEmpty()) { continue; } if (wrkMast.getInvWh() == null) { wrkMast.setInvWh("Y");//鏍囪宸茬粡涓嬪彂鏈烘鑷備换鍔� if (wrkMastMapper.updateById(wrkMast) > 0) { - RobotUtils.sendTask(staProtocol303.getWorkNo().toString(), wrkDetl.getAnfme().intValue(), "317"); + RobotUtils.sendTask(staProtocol317.getWorkNo().toString(), wrkDetls.size(), "317"); } } } } + } + + /** + * AGV琛ヨ揣(閫氱煡AGV鍙栬揣) + */ + public void agvRestockInto() { + //妫�娴�309鍜�312绔欐槸鍚﹁嚜鍔ㄣ�佹湁鐗� + for (DevpSlave devp : slaveProperties.getDevp()) { + // 鑾峰彇鍏ュ簱绔欎俊鎭� + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + StaProtocol staProtocol309 = devpThread.getStation().get(309); + StaProtocol staProtocol312 = devpThread.getStation().get(312); + if (staProtocol309 == null || staProtocol312 == null) { + continue; + } + + if (staProtocol309.isAutoing() && staProtocol309.isLoading() && staProtocol309.isInEnable()) { + // 鑾峰彇鏉$爜鎵弿浠俊鎭� + BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 9);//308绔欐潯鐮佸櫒 + if (barcodeThread == null) { + continue; + } + String barcode = barcodeThread.getBarcode(); + if(!Cools.isEmpty(barcode)) { + //閫氱煡AGV鍙栬揣 + agvRestockCall("301-1", barcode); + log.info("閫氱煡AGV鍙栬揣锛屾潯鐮佸彿锛�" + barcode); + } + } + + if (staProtocol312.isAutoing() && staProtocol312.isLoading() && staProtocol312.isInEnable()) { + // 鑾峰彇鏉$爜鎵弿浠俊鎭� + BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 10);//311绔欐潯鐮佸櫒 + if (barcodeThread == null) { + continue; + } + String barcode = barcodeThread.getBarcode(); + if(!Cools.isEmpty(barcode)) { + //閫氱煡AGV鍙栬揣 + agvRestockCall("302-1", barcode); + log.info("閫氱煡AGV鍙栬揣锛屾潯鐮佸彿锛�" + barcode); + } + } + } + } + + //閫氱煡AGV鍙栬揣 + private boolean agvRestockCall(String staNo, String barcode) { + try { + HashMap<String, Object> param = new HashMap<>(); + param.put("devNo", staNo); + param.put("containerCode", barcode); + String response = new HttpHandler.Builder() + .setUri(wmsUrl) + .setPath("/rpc/start") + .setJson(JSON.toJSONString(param)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + Integer code = jsonObject.getInteger("code"); + if (code.equals(200)) {//鍛煎彨AGV + return true; + } + } catch (Exception e) { + e.printStackTrace(); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + return false; } // 300绔欐嫞鏂� @@ -2075,7 +2266,7 @@ continue; } - if (wrkMast.getWrkSts() != 25) {//25.鎻愬崌鏈烘惉杩愬畬鎴� + if (wrkMast.getWrkSts() != 29) {//29.鍑哄簱瀹屾垚 continue; } @@ -2085,6 +2276,7 @@ //瑕嗙洊宸ヤ綔妗g洰鏍囩珯 wrkMast.setStaNo(sourceStaNo); wrkMast.setSourceStaNo(staNo); + wrkMast.setMk("N"); if (wrkMastMapper.updateById(wrkMast) > 0) { //鍚�300绔欏啓鍏ョ洰鏍囩珯 staProtocol = staProtocol.clone(); @@ -2396,7 +2588,16 @@ } } else if (wrkCharge.getWrkSts() == 52) { //妫�娴嬪皬杞︽槸鍚︽弧鐢� + + //鑾峰彇婊$數闃堝�� int maxPower = 95; + EntityWrapper<Config> wrapper = new EntityWrapper<>(); + wrapper.eq("code", "chargeMaxValue"); + Config config = configService.selectOne(wrapper); + if (config != null) { + maxPower = Integer.parseInt(config.getValue()); + } + if (shuttleProtocol.getPowerPercent() < maxPower) { continue; } @@ -2479,8 +2680,6 @@ continue; } -// this.shuttleMoveExecuteStepClearWrkMast(wrkMast);//娓呯悊111.灏忚溅绉诲姩瀹屾垚 - } } @@ -2538,6 +2737,22 @@ if (liftWrkMast != null) { return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� } + + //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�*************** + List<NavigateNode> targetNodes = NyLiftUtils.getLiftStaNodes(wrkMast.getStaNo()); + if (targetNodes == null) { + return false;//鏈幏鍙栧埌鑺傜偣 + } + boolean checkPathIsAvailable = NavigateUtils.checkPathIsAvailable(targetNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(wrkMast.getLocNo()), null); + if (!checkPathIsAvailable) { + return false;//妫�娴嬬洰鏍囩珯鐐硅矾寰勬槸鍚︽湭琚崰鐢� + } + //灏濊瘯閿佸畾鐩爣绔欒矾寰� + boolean result2 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), targetNodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� + if (!result2) { + return false;//璺緞閿佸畾澶辫触 + } + //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�*************** //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠� NyShuttleOperaResult result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), liftSta.getLocNo(), NavigationMapType.NORMAL.id); @@ -2894,6 +3109,7 @@ if (basLift.getPoint() == null) { return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍� } + NavigateNode liftNode = new NavigateNode(basLift.getPoint$().getX(), basLift.getPoint$().getY()); liftNode.setZ(liftSta.getLev()); @@ -2958,22 +3174,26 @@ return false; } -// //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐� -// BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getLocNo()), wrkMast.getLiftNo()); -// if (targetBasDevp == null) { -// return false;//缂哄皯绔欑偣淇℃伅 -// } +// //璺ㄦゼ灞傜Щ鍔ㄤ换鍔� +// if (Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(wrkMast.getLocNo())) { +// //鑾峰彇鐩爣绔� +// LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo()); +// if (liftSta == null) { +// return false;//鎵句笉鍒扮珯鐐� +// } // -// //鑾峰彇鎻愬崌鏈烘暟鎹� -// BasLift basLift = basLiftService.selectById(targetBasDevp.getLiftNo()); -// if (basLift == null) { -// return false;//娌℃湁鎻愬崌鏈烘暟鎹� +// //*************灏濊瘯瑙i攣鐩爣绔欒矾寰�*************** +// List<NavigateNode> targetNodes = NyLiftUtils.getLiftStaNodes(liftSta.getStaNo()); +// if (targetNodes == null) { +// return false;//鏈幏鍙栧埌鑺傜偣 +// } +// //灏濊瘯瑙i攣鐩爣绔欒矾寰� +// boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), targetNodes, false);//鎵�浣跨敤鐨勮矾寰勮繘琛岃В閿� +// if (!result) { +// return false;//璺緞瑙i攣澶辫触 +// } +// //*************灏濊瘯瑙i攣鐩爣绔欒矾寰�*************** // } -// if (basLift.getPoint() == null) { -// return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍� -// } -// NavigateNode liftNode = new NavigateNode(basLift.getPoint$().getX(), basLift.getPoint$().getY()); -// liftNode.setZ(basLift.getPoint$().getZ()); //灏忚溅宸茬粡鍦ㄧ洰鏍囧簱浣嶏紝鐩存帴璁ゅ畾灏忚溅绉诲姩浠诲姟瀹屾垚 if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) { @@ -2985,6 +3205,9 @@ wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� wrkMast.setModiTime(now); wrkMastMapper.updateById(wrkMast); + + shuttleProtocol.setShuttleNo((short) 0);//閲婃斁灏忚溅 + shuttleProtocol.setToken(0);//閲婃斁灏忚溅 if (wrkMast.getWrkSts() == 111) { // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� @@ -2999,8 +3222,32 @@ return false; } - //鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠� - NyShuttleOperaResult result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id); + NyShuttleOperaResult result = 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()}); + } + result = NyShuttleOperaUtils.getStartToTargetCommandsByWhites(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id, whiteList); + }else { + //鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠� + result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id); + } + if (result == null) { return false;//璺緞璁$畻澶辫触 } @@ -3039,69 +3286,6 @@ MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); } } - return true; - } - - /** - * 灏忚溅杩佺Щ-娓呯悊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; } -- Gitblit v1.9.1