From ffe256867f19115a442d96abadd270d2c17835a9 Mon Sep 17 00:00:00 2001 From: Junjie <540245094@qq.com> Date: 星期五, 08 十二月 2023 08:19:52 +0800 Subject: [PATCH] #出库强制预留小车给入库任务 --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 335 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 293 insertions(+), 42 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 946c4de..631a492 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -398,13 +398,16 @@ } /** - * 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱 + * 鎷f枡銆佸苟鏉垮啀鍏ュ簱 */ @Transactional public synchronized void stnToCrnStnPick(){ for (DevpSlave devp : slaveProperties.getDevp()) { // 閬嶅巻鎷f枡鍏ュ簱鍙� for (DevpSlave.Sta pickSta : devp.getPickInSta()) { + if (pickSta.getStaNo() == 325 || pickSta.getStaNo() == 331 || pickSta.getStaNo() == 333 || pickSta.getStaNo() == 339) { + continue; + } // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭� DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); @@ -420,31 +423,25 @@ // && (staProtocol.getWorkNo() > 0) && staProtocol.isPakMk()){ - WrkMast wrkMast = null; - if (staProtocol.getWorkNo() > 0) {//瀛樺湪宸ヤ綔鍙凤紝鍒╃敤宸ヤ綔鍙锋悳绱换鍔� - wrkMast = wrkMastMapper.selectByWorkNo(staProtocol.getWorkNo().intValue()); - }else { - //涓嶅瓨鍦ㄥ伐浣滃彿锛屼緷闈犳墭鐩樻潯鐮佹悳绱� - // 鑾峰彇鏉$爜鎵弿浠俊鎭� - BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); - if (barcodeThread == null) { - continue; - } - String barcode = barcodeThread.getBarcode(); - if(Cools.isEmpty(barcode)) { - continue; - } - if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) { - continue; - } - wrkMast = wrkMastMapper.selectPickStepByBarcode(barcode); + // 鑾峰彇鏉$爜鎵弿浠俊鎭� + BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); + if (barcodeThread == null) { + continue; + } + String barcode = barcodeThread.getBarcode(); + if(Cools.isEmpty(barcode)) { + continue; + } + if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) { + continue; } + WrkMast wrkMast = wrkMastMapper.selectPickStepByBarcode(barcode); if (wrkMast == null) {//鎵句笉鍒板伐浣滄。 continue; } - if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) + if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104) || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo()) ) { continue; } @@ -498,7 +495,103 @@ News.info(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); continue; } - if (wrkMastMapper.setSteEmpty(wrkMast.getWrkNo()) == 0) { + + // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴� + LocMast locMast = locMastService.selectById(sourceLocNo); + locMast.setLocSts("Q"); + locMast.setModiTime(new Date()); + if (!locMastService.updateById(locMast)) { + News.info("淇敼搴撲綅鐘舵�佸け璐�"); + continue; + } + } + } + + } + } + + /** + * 鎷f枡銆佸苟鏉垮啀鍏ュ簱(325銆�331銆�333銆�339) + */ + @Transactional + public synchronized void stnToCrnStnPick2(){ + for (DevpSlave devp : slaveProperties.getDevp()) { + // 閬嶅巻鎷f枡鍏ュ簱鍙� + for (DevpSlave.Sta pickSta : devp.getPickInSta()) { + if (!(pickSta.getStaNo() == 325 || pickSta.getStaNo() == 331 || pickSta.getStaNo() == 333 || pickSta.getStaNo() == 339)) { + continue; + } + + // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭� + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + if (staProtocol.isAutoing() + && staProtocol.isLoading() + && staProtocol.isInEnable() + && (staProtocol.getWorkNo() > 0) + && staProtocol.isPakMk()){ + + WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol.getWorkNo().intValue()); + if (wrkMast == null) {//鎵句笉鍒板伐浣滄。 + continue; + } + + if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104) + || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo()) ) { + continue; + } + + //*********************鍚屽簱浣嶇粍鏍¢獙********************* + boolean flag = false; + String th = ""; + List<String> innerLoc = Utils.getGroupInnerLoc(wrkMast.getSourceLocNo()); + for (String loc : innerLoc) { + LocMast locMast = locMastService.selectById(loc); + if (locMast == null) { + continue; + } + + if (!locMast.getLocSts().equals("F")) { + flag = true; + th = loc + "搴撲綅瀛樺湪鏈洖搴撲换鍔�"; + break; + } + } + if (flag) { + News.info(th); + continue; + } + //*********************鍚屽簱浣嶇粍鏍¢獙********************* + + // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� + if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { + News.info(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�"); + continue; + } + + String sourceLocNo = wrkMast.getSourceLocNo().trim(); + LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(pickSta.getLiftNo(), Utils.getLev(sourceLocNo));//鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯 + if (liftStaProtocol == null) { + continue; + } + + // 鏇存柊宸ヤ綔妗f暟鎹姸鎬� + wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57 + wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋 + wrkMast.setSourceStaNo(pickSta.getBackSta()); // 婧愮珯 +// wrkMast.setStaNo(dto.getStaNo()); // 鐩爣绔� +// wrkMast.setCrnNo(dto.getCrnNo()); + wrkMast.setStaNo(liftStaProtocol.getStaNo());//鐩爣绔� + wrkMast.setLocNo(sourceLocNo); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣� + wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌� + wrkMast.setLiftNo(null);// 鎻愬崌鏈烘竻绌� + wrkMast.setModiTime(new Date()); + if (wrkMastMapper.updateById(wrkMast) == 0) { News.info(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); continue; } @@ -512,14 +605,132 @@ continue; } - if (pickSta.getBackSta() == 325 || pickSta.getBackSta() == 331 || pickSta.getBackSta() == 333 || pickSta.getBackSta() == 339) { - staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());//鍐欏叆宸ヤ綔鍙� - staProtocol.setStaNo(pickSta.getBackSta().shortValue());//鍐欏叆鐩爣绔� - MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); - } + staProtocol.setStaNo(pickSta.getBackSta().shortValue());//鍐欏叆鐩爣绔� + MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); } } + } + } + + /** + * 鐩樼偣鍐嶅叆搴� + */ + @Transactional + public synchronized void stnToCrnStnPlate(){ + for (DevpSlave devp : slaveProperties.getDevp()) { + // 閬嶅巻鎷f枡鍏ュ簱鍙� + for (DevpSlave.Sta pickSta : devp.getPickInSta()) { +// if (pickSta.getStaNo() == 325 || pickSta.getStaNo() == 331 || pickSta.getStaNo() == 333 || pickSta.getStaNo() == 339) { +// continue; +// } + + // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭� + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + if (staProtocol.isAutoing() + && staProtocol.isLoading() + && staProtocol.isInEnable() + && (staProtocol.getWorkNo() > 0) + && staProtocol.isPakMk()){ + + WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol.getWorkNo().intValue()); + if (wrkMast == null) {//鎵句笉鍒板伐浣滄。 + continue; + } + + if ((wrkMast.getIoType() != 107) + || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo()) ) { + continue; + } + + //*********************鍚屽簱浣嶇粍鏍¢獙********************* + boolean flag = false; + String th = ""; + List<String> innerLoc = Utils.getGroupInnerLoc(wrkMast.getSourceLocNo()); + for (String loc : innerLoc) { + LocMast locMast = locMastService.selectById(loc); + if (locMast == null) { + continue; + } + + if (!locMast.getLocSts().equals("F")) { + flag = true; + th = loc + "搴撲綅瀛樺湪鏈洖搴撲换鍔�"; + break; + } + } + if (flag) { + News.info(th); + continue; + } + //*********************鍚屽簱浣嶇粍鏍¢獙********************* + + // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� + if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { + News.info(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�"); + continue; + } + + //鐩樼偣鎵炬柊搴撲綅 + try { + LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());//婧愬簱浣� + SearchLocParam param = new SearchLocParam(); + param.setWrkNo(wrkMast.getWrkNo()); + param.setBarcode(wrkMast.getBarcode()); + param.setIoType(107);//鐩樼偣 + param.setSourceStaNo(wrkMast.getStaNo()); + param.setLocType1(locMast.getLocType1()); + String response = new HttpHandler.Builder() + .setUri(wmsUrl) + .setPath("/rpc/pakin/loc/v1") + .setJson(JSON.toJSONString(param)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + Integer code = jsonObject.getInteger("code"); + if (code.equals(200)) { + StartupDto dto = jsonObject.getObject("data", StartupDto.class); + + //鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯 + LiftStaProtocol liftStaProtocol = NyLiftUtils.getLiftStaByLev(pickSta.getLiftNo(), Utils.getLev(dto.getLocNo())); + if (liftStaProtocol == null) { + News.info(wrkMast.getWrkNo() + "鑾峰彇鍥炲簱鎻愬崌鏈虹洰鏍囩珯澶辫触"); + continue; + } + + // 鏇存柊宸ヤ綔妗f暟鎹姸鎬� + wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 107->57 + wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋 + wrkMast.setSourceStaNo(dto.getSourceStaNo()); // 婧愮珯 + wrkMast.setStaNo(liftStaProtocol.getStaNo());//鐩爣绔� + wrkMast.setLocNo(dto.getLocNo()); // 鐩爣搴撲綅 + wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌� + wrkMast.setLiftNo(null);// 鎻愬崌鏈烘竻绌� + wrkMast.setModiTime(new Date()); + if (wrkMastMapper.updateById(wrkMast) == 0) { + News.info(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); + continue; + } + + staProtocol.setStaNo(dto.getSourceStaNo().shortValue());//鍐欏叆鐩爣绔� + MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + + } else if (code == 500){ + News.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response); + } + } catch (Exception e) { + e.printStackTrace(); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + + } + } } } @@ -1066,6 +1277,25 @@ } if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴� + //寮哄埗棰勭暀涓�鍙板皬杞︾粰鍏ュ簱浠诲姟 + int lev = Utils.getLev(wrkMast.getSourceLocNo()); + //鑾峰彇褰撳墠妤煎眰鏈夊嚑鍙扮┖闂插彲鐢ㄥ皬杞� + int shuttleCount = shuttleDispatchUtils.getShuttleCountByLev(lev); + if (shuttleCount >= 2) {//鍙湁鍙敤灏忚溅鏁伴噺澶т簬2锛屾墠杩涜鍏ュ簱浠诲姟棰勭暀灏忚溅 + int shuttleWrkInObligateCount = 1;//棰勭暀灏忚溅鏁伴噺 + Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "shuttleWrkInObligateCount").eq("status", 1)); + if (config != null) { + shuttleWrkInObligateCount = Integer.parseInt(config.getValue()); + } + //鍙敤鍑哄簱灏忚溅鏁伴噺(缁欏叆搴撲换鍔¢鐣欎竴鍙拌溅) + int useShuttleCount = shuttleCount - shuttleWrkInObligateCount; + //鏌ヨ妤煎眰宸插垎閰嶈溅杈嗙殑鍑哄簱浠诲姟鏁伴噺 + List<WrkMast> wrkMasts = wrkMastService.selectShuttleOutWrkByLev(lev); + if (wrkMasts.size() >= useShuttleCount) { + News.info("{}浠诲姟锛屽綋鍓嶆ゼ灞傚彲鐢ㄥ皬杞}鍙帮紝鍑哄簱浠诲姟宸插垎閰峽}鍙帮紝绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), useShuttleCount, wrkMasts.size()); + return false; + } + } boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐� News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); return false; @@ -1324,10 +1554,12 @@ if(!("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode))) { //瀛樺湪鏉$爜鍊硷紝鍒ゆ柇鏄惁鍜屽綋鍓嶅伐浣滄。涓�鑷� if (!barcode.equals(wrkMast.getBarcode())) { - News.info("{}浠诲姟锛屾潯鐮佸櫒{}鍊納}涓庡伐浣滄。鏉$爜鍊间笉涓�鑷达紝绯荤粺璺宠繃鎵ц", wrkMast.getWrkNo(), sourceBasDevp.getDevNo(), barcodeId, barcode); + News.info("{}浠诲姟,{}绔欑偣锛屾潯鐮佸櫒{}鍊納}涓庡伐浣滄。鏉$爜鍊納}涓嶄竴鑷达紝绯荤粺璺宠繃鎵ц", wrkMast.getWrkNo(), sourceBasDevp.getDevNo(), barcodeId, barcode,wrkMast.getBarcode()); return false;//绔欑偣涓嶅彲鍏� } } + }else { + return false; } //鍒ゆ柇鎻愬崌鏈烘暣涓笁妤兼槸鍚﹂兘澶勪簬鍏ュ簱妯″紡 @@ -1627,11 +1859,11 @@ */ public synchronized void locToLocExecute() { //鑾峰彇鍑哄叆搴撳伐浣滄。 - List<WrkMast> wrkMasts = wrkMastMapper.selectInOutWrkMast(); - if (wrkMasts.size() > 0) { - //鏈夊嚭鍏ュ簱浠诲姟锛屽繀椤荤瓑寰呬换鍔℃墽琛屽畬姣曞啀鎵ц搴撲綅绉昏浆 - return; - } +// List<WrkMast> wrkMasts = wrkMastMapper.selectInOutWrkMast(); +// if (wrkMasts.size() > 0) { +// //鏈夊嚭鍏ュ簱浠诲姟锛屽繀椤荤瓑寰呬换鍔℃墽琛屽畬姣曞啀鎵ц搴撲綅绉昏浆 +// return; +// } //鏌ヨ搴撲綅绉昏浆宸ヤ綔妗� List<WrkMast> wrkMasts1 = wrkMastMapper.selectLocToLocWrkMast(); @@ -2391,7 +2623,9 @@ RobotUtils.sendTask(staProtocol303.getWorkNo().toString(), wrkDetls.size(), "303"); } } - }else if (staProtocol317.isAutoing() && staProtocol317.isLoading() && staProtocol317.getWorkNo() != 0) { + } + + if (staProtocol317.isAutoing() && staProtocol317.isLoading() && staProtocol317.getWorkNo() != 0) { //璋冨害鏈烘鑷� //鏌ヨ鏄惁鏈夊伐浣滄。 WrkMast wrkMast = wrkMastMapper.selectByWorkNo(staProtocol317.getWorkNo().intValue()); @@ -2469,7 +2703,7 @@ .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); - log.info("鎮寕绾匡紝wms杩斿洖缁撴灉锛�" + jsonObject); + News.info("鎮寕绾匡紝WMS杩斿洖缁撴灉锛�" + jsonObject); Integer code = jsonObject.getInteger("code"); if (code.equals(200)) {//鍛煎彨AGV return true; @@ -2611,7 +2845,7 @@ ledCommand.setSourceLocNo(wrkMast.getSourceLocNo()); ledCommand.setLocNo(wrkMast.getLocNo()); ledCommand.setStaNo(wrkMast.getStaNo()); - if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) { + if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10 && wrkMast.getIoType() != 107) { //for (WrkDetl wrkDetl : wrkDetls) { // LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr())); // @@ -2651,11 +2885,11 @@ //} List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo())); locDetls.forEach(locDetl -> { - Wrapper<WrkDetl> wrapper = new EntityWrapper<WrkDetl>().eq("matnr", locDetl.getMatnr()).eq("wrk_no",wrkMast.getWrkNo()); - Utils.wapperSetCondition(wrapper,"batch",locDetl.getBatch()); - Utils.wapperSetCondition(wrapper,"three_code",locDetl.getThreeCode()); - Utils.wapperSetCondition(wrapper,"dead_time",locDetl.getDeadTime()); - Utils.wapperSetCondition(wrapper,"supp_code",locDetl.getSuppCode());//鏂欑鐮� + Wrapper<WrkDetl> wrapper = new EntityWrapper<WrkDetl>().eq("matnr", locDetl.getMatnr()).eq("wrk_no", wrkMast.getWrkNo()); + Utils.wapperSetCondition(wrapper, "batch", locDetl.getBatch()); + Utils.wapperSetCondition(wrapper, "three_code", locDetl.getThreeCode()); + Utils.wapperSetCondition(wrapper, "dead_time", locDetl.getDeadTime()); + Utils.wapperSetCondition(wrapper, "supp_code", locDetl.getSuppCode());//鏂欑鐮� WrkDetl detl = wrkDetlService.selectOne(wrapper); if (Cools.isEmpty(detl)) { String suppCode = ""; @@ -2672,6 +2906,14 @@ } }); } + + if (wrkMast.getIoType() == 107) { + List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); + wrkDetls.forEach(wrkDetl -> { + ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(), wrkDetl.getAnfme(), wrkDetl.getSpecs(), wrkDetl.getSuppCode())); + }); + } + commands.add(ledCommand); } Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet()); @@ -2919,9 +3161,18 @@ continue; } - if (shuttleProtocol.getVoltage() < 5630) { - continue;//鐢靛帇涓嶅缁х画鍏呯數 + //***************鍒ゆ柇鏄惁婊″厖鏍″噯*************** + EntityWrapper<Config> wrapper1 = new EntityWrapper<>(); + wrapper.eq("code", "shuttleMaxPowerVerify"); + Config config1 = configService.selectOne(wrapper1); + if (config1 != null) { + if (config1.getValue().equals("true")) { + if (shuttleProtocol.getVoltage() < 5630) { + continue;//鐢靛帇涓嶅缁х画鍏呯數 + } + } } + //***************鍒ゆ柇鏄惁婊″厖鏍″噯*************** //灏忚溅婊$數锛岀粨鏉熷厖鐢典换鍔� NyShuttleHttpCommand chargeCommand = NyHttpUtils.getChargeCommand(shuttle.getId(), wrkCharge.getWrkNo(), false); -- Gitblit v1.9.1