From c5fb7fe6010aa53345e44ad2d69552bf52d868fd Mon Sep 17 00:00:00 2001 From: tqs <56479841@qq.com> Date: 星期一, 31 十月 2022 07:57:10 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 260 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 235 insertions(+), 25 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 722f314..91e8b19 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -3,7 +3,6 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; -import com.baomidou.mybatisplus.mapper.Wrapper; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.*; @@ -153,6 +152,11 @@ continue; } + // 杩囨护鐩樼偣/鎷f枡/骞舵澘浠诲姟 + if (null != wrkMastMapper.selectPickStepByBarcode(barcode)) { + continue; + } + // 鍒ゆ柇閲嶅宸ヤ綔妗� WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode); if (wrkMast != null) { @@ -183,6 +187,8 @@ staProtocol.setWorkNo(dto.getWorkNo().shortValue()); staProtocol.setStaNo(dto.getStaNo().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); + + ledThread.errorReset(); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); if (!result) { @@ -342,7 +348,7 @@ && staProtocol.isInEnable() // 0 - 9990 鎴栬�� 9996 && ((staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9990) || staProtocol.getWorkNo() == 9996) - && staProtocol.getStaNo().equals(staProtocol.getWorkNo()) + && staProtocol.getStaNo().equals(staProtocol.getSiteId().shortValue()) && staProtocol.isPakMk()){ // 鑾峰彇鏉$爜鎵弿浠俊鎭� @@ -425,16 +431,18 @@ if (code.equals(200)) { StartupDto dto = jsonObject.getObject("data", StartupDto.class); - // 鑾峰彇鐩爣绔� - Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() - .eq("type_no", wrkMast.getIoType() - 50) - .eq("stn_no", pickSta.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯 - .eq("crn_no", dto.getCrnNo()); // 鍫嗗灈鏈哄彿 - StaDesc staDesc = staDescService.selectOne(wrapper); - if (Cools.isEmpty(staDesc)) { - log.error("鍏ュ簱璺緞涓嶅瓨鍦紒type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo()); - continue; - } +// // 鑾峰彇鐩爣绔� +// Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() +// .eq("type_no", wrkMast.getIoType() - 50) +// .eq("stn_no", pickSta.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯 +// .eq("crn_no", dto.getCrnNo()); // 鍫嗗灈鏈哄彿 +// StaDesc staDesc = staDescService.selectOne(wrapper); +// if (Cools.isEmpty(staDesc)) { +// log.error("鍏ュ簱璺緞涓嶅瓨鍦紒type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo()); +// continue; +// } +// // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�) +// Integer staNo = staDesc.getCrnStn(); // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。 // if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) { @@ -445,13 +453,12 @@ throw new CoolException(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�"); } - // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�) - Integer staNo = staDesc.getCrnStn(); + String sourceLocNo = wrkMast.getSourceLocNo().trim(); // 鏇存柊宸ヤ綔妗f暟鎹姸鎬� wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57 wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋 wrkMast.setSourceStaNo(pickSta.getStaNo()); // 婧愮珯 - wrkMast.setStaNo(staNo); // 鐩爣绔� + wrkMast.setStaNo(dto.getStaNo()); // 鐩爣绔� wrkMast.setCrnNo(dto.getCrnNo()); wrkMast.setLocNo(dto.getLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣� wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌� @@ -463,7 +470,7 @@ throw new CoolException(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); } // 淇敼婧愬簱浣嶇姸鎬� O.绌哄簱浣� - LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo()); + LocMast locMast = locMastService.selectById(sourceLocNo); locMast.setLocSts("O"); locMast.setModiTime(new Date()); if (!locMastService.updateById(locMast)) { @@ -477,12 +484,14 @@ throw new CoolException(wrkMast.getWrkNo() + "淇敼鐩爣搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�"); } // 搴撳瓨鏄庣粏杞Щ - if (!locDetlService.updateLocNo(wrkMast.getLocNo(), wrkMast.getSourceLocNo())) { + if (!locDetlService.updateLocNo(wrkMast.getLocNo(), sourceLocNo)) { throw new CoolException(wrkMast.getWrkNo() + "浠诲姟搴撳瓨鏄庣粏杞Щ澶辫触锛侊紒锛�"); } // 鏉$爜璁惧澶勭悊 barcodeThread.setBarcode(""); + + ledThread.errorReset(); // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护 staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); @@ -689,7 +698,19 @@ continue; } - // 杩囨护 + // 妫�娴嬫槸鍚﹀瓨鍦ㄥ嚭搴撲换鍔� +// WrkMast pakoutWrkMast = wrkMastMapper.selectPakout(slave.getId(), null); +// if (null != pakoutWrkMast) { +// if ((pakoutWrkMast.getIoType() == 103 || pakoutWrkMast.getIoType() == 104 || pakoutWrkMast.getIoType() == 107) +// && pakoutWrkMast.getWrkSts() == 17 +// && basDevpService.selectByWrkNo(pakoutWrkMast.getWrkNo()) != null +// ) { +// +// } else { +// log.error("{}鍏ュ簱浠诲姟鏃犳硶浣滀笟锛屽洜瀛樺湪鍑哄簱涓换鍔�!", wrkMast.getWrkNo()); +// continue; +// } +// } if (null != wrkMastMapper.selectPakout(slave.getId(), null)) { log.error("{}鍏ュ簱浠诲姟鏃犳硶浣滀笟锛屽洜瀛樺湪鍑哄簱涓换鍔�!", wrkMast.getWrkNo()); continue; @@ -1000,6 +1021,22 @@ SteThread steThread = queryIdleCar(wrkMast); if (steThread != null) { // 娌℃湁鍏朵粬浠诲姟 +// boolean hasPakout = true; +// WrkMast pakoutWrkMast = wrkMastMapper.selectPakout(slave.getId(), steNo); +// if (null != pakoutWrkMast) { +// if ((pakoutWrkMast.getIoType() == 103 || pakoutWrkMast.getIoType() == 104 || pakoutWrkMast.getIoType() == 107) +// && pakoutWrkMast.getWrkSts() == 17 +// && basDevpService.selectByWrkNo(pakoutWrkMast.getWrkNo()) != null +// ) { +// hasPakout = false; +// } +// } else { +// hasPakout = false; +// } +// if (!hasPakout) { +// // 璁╁皬杞︾瓑寰呮惉杩愬緟缁� +// this.letCarBeReady(wrkMast, steThread.getSlave().getId(), wrkMast.getSourceLocNo()); +// } if (null == wrkMastMapper.selectPakout(slave.getId(), steNo)) { // 璁╁皬杞︾瓑寰呮惉杩愬緟缁� this.letCarBeReady(wrkMast, steThread.getSlave().getId(), wrkMast.getSourceLocNo()); @@ -1016,6 +1053,172 @@ } } return false; + } + + /** + * 搴撲綅绉昏浆 NEW + */ + public void locToLoc1(CrnSlave slave, CrnProtocol crnProtocol){ + // 鑾峰彇宸ヤ綔妗d俊鎭� + WrkMast wrkMast = wrkMastMapper.selectLocMove(slave.getId()); + if (null == wrkMast) { + return; + } + // 鑾峰彇婧愬簱浣嶄俊鎭� + LocMast sourceLoc = locMastService.selectById(wrkMast.getSourceLocNo()); + if (null == sourceLoc) { + log.error("宸ヤ綔妗e簱浣嶇Щ杞け璐ワ紝鍘熷洜锛氭绱㈡簮搴撲綅澶辫触锛佸伐浣滃彿={}锛屾簮搴撲綅={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo()); + return; + } + // 婧愬簱浣� 搴撲綅鐘舵�佸垽鏂� + if (!sourceLoc.getLocSts().equals("R")) { + return; + } + // 鑾峰彇鐩爣搴撲綅淇℃伅 + LocMast loc = locMastService.selectById(wrkMast.getLocNo()); + if (null == loc || !loc.getLocSts().equals("S")) { + log.error("宸ヤ綔妗e簱浣嶇Щ杞け璐ワ紝鍘熷洜锛氭绱㈢洰鏍囧簱浣嶅け璐ワ紒宸ヤ綔鍙�={}锛屾簮搴撲綅={}", wrkMast.getWrkNo(), wrkMast.getLocNo()); + return; + } + // 鑾峰彇鍫嗗灈鏈轰俊鎭� 骞� 鍒ゆ柇鏄惁鍙叆鍑� + BasCrnp basCrnp = basCrnpService.selectById(slave.getId()); + if (!basCrnp.getInEnable().equals("Y") && !basCrnp.getOutEnable().equals("Y")) { + return; + } + + // 鍫嗗灈鏈烘帶鍒惰繃婊� + if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { + return; + } + + // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊� + if (wrkMastMapper.selectWorking(slave.getId()) != null) { + return; + } + + // 缃《浠诲姟 + wrkMast.setIoPri((double) 9999); + wrkMastMapper.updateById(wrkMast); + + // 婧愬簱浣� ===>> 鏈�澶栧眰搴撲綅 + if (locMastService.isOutMost(wrkMast.getSourceLocNo())) { + // 鐩爣搴撲綅 ===>> 鏈�澶栧眰搴撲綅 + if (locMastService.isOutMost(wrkMast.getLocNo())) { + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + CrnCommand crnCommand = new CrnCommand(); + crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙� + crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙� + crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� + crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 + crnCommand.setSourcePosX(sourceLoc.getRow1().shortValue()); // 婧愬簱浣嶆帓 + crnCommand.setSourcePosY(sourceLoc.getBay1().shortValue()); // 婧愬簱浣嶅垪 + crnCommand.setSourcePosZ(sourceLoc.getLev1().shortValue()); // 婧愬簱浣嶅眰 + crnCommand.setDestinationPosX(loc.getRow1().shortValue()); // 鐩爣搴撲綅鎺� + crnCommand.setDestinationPosY(loc.getBay1().shortValue()); // 鐩爣搴撲綅鍒� + crnCommand.setDestinationPosZ(loc.getLev1().shortValue()); // 鐩爣搴撲綅灞� + if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { + log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 16.鍚婅溅鍑哄簱涓� + Date now = new Date(); + wrkMast.setWrkSts(16L); + wrkMast.setCrnStrTime(now); + wrkMast.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast) == 0) { + log.error("銆愬簱浣嶇Щ杞�� 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 16.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); + } + } + + } + // 涓嶆槸鏈�澶栧眰搴撲綅锛岄渶瑕佷娇鐢ㄧ┛姊溅鎼繍鍚庯紝鍐嶅爢鍨涙満绉诲簱 + } else { + // 褰撳墠缁勫簱浣嶆槸鍚︽湁绌挎杞� + Integer steNo = this.hasCarOfIdle(wrkMast.getSourceLocNo()); + // 鏈夊皬杞� + if (steNo != null) { + if (wrkMast.getWrkSts() == 11L && wrkMast.getSteNo() == null) { + + // 缁欑┛姊溅涓嬪彂鍛戒护 璁╁叾灏嗚揣鐗╂尓鑷冲爢鍨涙満鎼繍鐐� + SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); + SteProtocol steProtocol = steThread.getSteProtocol(); + if (steProtocol == null) { return; } + if (steProtocol.isIdle()) { + + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + SteCommand steCommand = new SteCommand(); + steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙� + steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙� + steCommand.setTaskMode(SteTaskModeType.findOutByLoc(wrkMast.getSourceLocNo())); // 浠诲姟妯″紡: 鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙� + + steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue()); + steCommand.setBay(steProtocol.getBay()); + steCommand.setLev(steProtocol.getLev()); + + if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) { + log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 14.灏忚溅鎼嚭搴� + Date now = new Date(); + wrkMast.setWrkSts(14L); + wrkMast.setSteNo(steNo); + wrkMast.setCrnStrTime(now); + wrkMast.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast) == 0) { + log.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 14.灏忚溅鎼嚭搴� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); + } + } + } + } + if (wrkMast.getWrkSts() == 15L) { + // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊� + if (wrkMastMapper.selectWorking(slave.getId()) != null) { + return; + } + + // 鍫嗗灈鏈哄嚭搴� 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + CrnCommand crnCommand = new CrnCommand(); + crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙� + crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙� + crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� + crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 + crnCommand.setSourcePosX(Utils.getGroupRow(sourceLoc.getRow1()).shortValue()); // 婧愬簱浣嶆帓 + crnCommand.setSourcePosY(sourceLoc.getBay1().shortValue()); // 婧愬簱浣嶅垪 + crnCommand.setSourcePosZ(sourceLoc.getLev1().shortValue()); // 婧愬簱浣嶅眰 + crnCommand.setDestinationPosX(loc.getRow1().shortValue()); // 鐩爣搴撲綅鎺� + crnCommand.setDestinationPosY(loc.getBay1().shortValue()); // 鐩爣搴撲綅鍒� + crnCommand.setDestinationPosZ(loc.getLev1().shortValue()); // 鐩爣搴撲綅灞� + if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { + log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 15.绛夊緟鍚婅溅 => 16.鍚婅溅鍑哄簱涓� + Date now = new Date(); + wrkMast.setWrkSts(16L); + wrkMast.setCrnStrTime(now); + wrkMast.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast) == 0) { + log.error("淇敼宸ヤ綔妗g姸鎬� 15.绛夊緟鍚婅溅 => 16.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); + } + return; + } + } + // 娌℃湁灏忚溅 + } else { + if (wrkMast.getWrkSts() == 11L && wrkMast.getSteNo() == null) { + // 瀵绘壘鏈�杩戠殑灏忚溅 + SteThread steThread = queryIdleCar(wrkMast); + if (steThread != null) { + if (null == wrkMastMapper.selectPakout(slave.getId(), steNo)) { + // 璁╁皬杞︾瓑寰呮惉杩愬緟缁� + this.letCarBeReady(wrkMast, steThread.getSlave().getId(), wrkMast.getSourceLocNo()); + } + } + } + // 鍫嗗灈鏈烘惉杩愬皬杞� + if (wrkMast.getWrkSts() == 12L) { + this.carMoveIn(wrkMast, wrkMast.getSteNo(), crnProtocol); + } + } + } } /** @@ -1090,9 +1293,10 @@ wrkMast.setCrnStrTime(now); wrkMast.setModiTime(now); if (wrkMastMapper.updateById(wrkMast) == 0) { - log.error("銆愬簱浣嶇Щ杞�� 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); + log.error("銆愬簱浣嶇Щ杞�� 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 7.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); } } + } else { Integer steNo = this.hasCarOfIdle(wrkMast.getLocNo()); // 鏈夊皬杞� @@ -1826,13 +2030,16 @@ } else { if (wrkMast.getWrkSts() == 16) { Date now = new Date(); +// if (locMastService.isOutMost(wrkMast.getLocNo())) { +// // 16.鍚婅溅鍑哄簱涓� ==> 9.鍏ュ簱瀹屾垚 +// wrkMast.setWrkSts(9L); +// wrkMast.setCrnEndTime(now); +// } else { +// // 16.鍚婅溅鍑哄簱涓� ==> 9.鍏ュ簱瀹屾垚 +// wrkMast.setWrkSts(9L); +// } if (locMastService.isOutMost(wrkMast.getLocNo())) { - // 16.鍚婅溅鍑哄簱涓� ==> 9.鍏ュ簱瀹屾垚 - wrkMast.setWrkSts(9L); - wrkMast.setCrnEndTime(now); - } else { - // 16.鍚婅溅鍑哄簱涓� ==> 9.鍏ュ簱瀹屾垚 - wrkMast.setWrkSts(9L); + wrkMast.setWrkSts(17L); } wrkMast.setModiTime(now); // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 @@ -1965,6 +2172,7 @@ SteProtocol steProtocol = steThread.getSteProtocol(); if (steProtocol == null) { continue; } if (steProtocol.getWaiting() && steProtocol.getTaskNo() != 0) { + log.info("ste[id={}] 鎵ц宸ヤ綔妗e畬鎴愶紝浠诲姟鍙�={}", steProtocol.getSteNo(), steProtocol.getTaskNo()); if (steProtocol.getTaskNo() == 9999) { steThread.setResetFlag(true); } else { @@ -2383,6 +2591,8 @@ if (code.equals(200)) { StartupDto dto = jsonObject.getObject("data", StartupDto.class); + ledThread.errorReset(); + // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护 staProtocol.setWorkNo(dto.getWorkNo().shortValue()); staProtocol.setStaNo(dto.getStaNo().shortValue()); -- Gitblit v1.9.1