From ab18ecb1c25613535c2047467cf8c14d3b41b047 Mon Sep 17 00:00:00 2001 From: zjj <3272660260@qq.com> Date: 星期二, 07 五月 2024 15:46:58 +0800 Subject: [PATCH] #空桶入库完成 --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 351 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 350 insertions(+), 1 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 d4eaf2f..8263c0a 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -24,6 +24,7 @@ import com.zy.common.utils.News; import com.zy.core.CrnThread; import com.zy.core.DevpThread; +import com.zy.core.RgvThread; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.*; @@ -46,6 +47,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; +import java.io.IOException; import java.util.*; import java.util.stream.Collectors; @@ -86,9 +88,13 @@ private BasErrLogService basErrLogService; @Autowired private BasCrnErrorMapper basCrnErrorMapper; + @Autowired + private EmptyBarrelInService emptyBarrelInService; @Value("${wms.url}") private String wmsUrl; + + public int workNo = 9900; /** * 缁勬墭 @@ -491,6 +497,9 @@ */ public synchronized void crnStnToOutStn() { for (CrnSlave crnSlave : slaveProperties.getCrn()) { + if (crnSlave.getId() ==5){ + continue; + } // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯 for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) { // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅 @@ -561,6 +570,9 @@ */ public synchronized void crnIoExecute() { for (CrnSlave crn : slaveProperties.getCrn()) { + if (crn.getId() == 5){ + continue; + } // 鑾峰彇鍫嗗灈鏈轰俊鎭� CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); CrnProtocol crnProtocol = crnThread.getCrnProtocol(); @@ -2189,7 +2201,29 @@ if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) { - Crn5InTaskSta(crnSlave,crnProtocol); +// Crn5InTaskSta(crnSlave,crnProtocol); + + // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡 + if (crnProtocol.getLastIo().equals("I")) { + if (basCrnp.getInEnable().equals("Y")) { + this.Crn5InTaskSta(crnSlave,crnProtocol); + crnProtocol.setLastIo("O"); + } else if (basCrnp.getOutEnable().equals("Y")) { + this.locToCrn5Stn(crnSlave, crnProtocol); // 鍑哄簱 + crnProtocol.setLastIo("I"); + } + } + // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡 + else if (crnProtocol.getLastIo().equals("O")) { + if (basCrnp.getOutEnable().equals("Y")) { + this.locToCrn5Stn(crnSlave, crnProtocol); // 鍑哄簱 + crnProtocol.setLastIo("I"); + } else if (basCrnp.getInEnable().equals("Y")) { + + this.Crn5InTaskSta(crnSlave,crnProtocol); + crnProtocol.setLastIo("O"); + } + } } @@ -2249,4 +2283,319 @@ } + + public synchronized void crn5StnToOutStn() { + for (CrnSlave crnSlave : slaveProperties.getCrn()) { + if (crnSlave.getId() != 5){ + continue; + } + // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯 + for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) { + // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅 + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); + StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()) { + // 鏌ヨ宸ヤ綔妗� + WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(crnStn.getStaNo()); + if (wrkMast == null) { + continue; + } + // 鍒ゆ柇宸ヤ綔妗f潯浠� + if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) { + continue; + } + // 鍒ゆ柇鍚婅溅鏄惁瀹為檯宸插畬鎴愶紝涓旂數鑴戠姸鎬佸湪move涓紝浠ュ鐢佃剳杩涜鏇存柊宸ヤ綔妗� + CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo()); + CrnProtocol crnProtocol = crnThread.getCrnProtocol(); + if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) { + // 绉诲姩涓� + continue; + } + // 鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁� + if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue()) + && crnProtocol.statusType == CrnStatusType.WAITING + && crnProtocol.forkPosType == CrnForkPosType.HOME) { + + // 鏇存柊宸ヤ綔妗g姸鎬佷负14 + wrkMast.setWrkSts(14L); + + wrkMast.setCrnEndTime(new Date()); + if (wrkMastMapper.updateById(wrkMast) != 0) { + // 澶嶄綅鍫嗗灈鏈� + crnThread.setResetFlag(true); + } else { + log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo()); + } + + } + + } + } + } + } + + + public synchronized void locToCrn5Stn(CrnSlave slave, CrnProtocol crnProtocol) { + for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) { + // 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗� +// WrkMast wrkMast = wrkMastMapper.selectPakOutStep1(slave.getId(), crnStn.getStaNo()); + List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo()); + // 鑾峰彇宸ヤ綔鐘舵�佷负14鐨勫伐浣滄。 + WrkMast wrkMast1 = wrkMastMapper.selectPakOutStep14(slave.getId(), crnStn.getStaNo()); + if ( wrkMast1 !=null) { + continue; + } + for (WrkMast wrkMast : wrkMasts) { + if (wrkMast == null) { + continue; + } + // 宸ヤ綔妗g姸鎬佸垽鏂� + if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null) { + log.error("鏌ヨ宸ヤ綔妗f暟鎹笉绗﹀悎鏉′欢--鍏ュ嚭绫诲瀷/绔欑偣, 宸ヤ綔鍙�={}锛屾簮搴撲綅={}锛屽叆鍑虹被鍨�={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType()); + continue; + } + // 鑾峰彇婧愬簱浣嶄俊鎭� + LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo()); + if (!locMast.getLocSts().equals("R") && !locMast.getLocSts().equals("P")) { + log.error("鍑哄簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts()); + continue; + } + // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅 + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); + StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); + if (staProtocol == null) { + break; +// continue; + } else { + staProtocol = staProtocol.clone(); + } + + // 鏌ヨ绔欑偣璇︾粏淇℃伅 + BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); + if (staDetl == null) { + log.error("鍑哄簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo()); + break; +// continue; + } + // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵�� + if (staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.isOutEnable()) { + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + + // 鍫嗗灈鏈烘帶鍒惰繃婊� + if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { +// continue; + break; + } + + + // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊� + if (wrkMastMapper.selectWorking(slave.getId()) != null) { + break; +// return; + } + + // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔� + CrnCommand crnCommand = new CrnCommand(); + crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙� + crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙� + crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� + crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 + crnCommand.setSourcePosX(locMast.getRow1()==9?(short)4:(short)5); // 婧愬簱浣嶆帓 + crnCommand.setSourcePosY(locMast.getBay1().shortValue()); // 婧愬簱浣嶅垪 + crnCommand.setSourcePosZ(locMast.getLev1().shortValue()); // 婧愬簱浣嶅眰 + crnCommand.setDestinationPosX(crnStn.getRow().shortValue()); // 鐩爣搴撲綅鎺� + crnCommand.setDestinationPosY(crnStn.getBay().shortValue()); // 鐩爣搴撲綅鍒� + crnCommand.setDestinationPosZ(crnStn.getLev().shortValue()); // 鐩爣搴撲綅灞� + crnCommand.setLocType1(locMast.getLocType1().shortValue()); // 璐х墿绫诲瀷 + if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { + log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� + Date now = new Date(); + wrkMast.setWrkSts(12L); + wrkMast.setCrnStrTime(now); + wrkMast.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast) == 0) { + log.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); + } + break; + } + } + } + } + } + + public synchronized void crn5TaskCreate() throws IOException { + for (CrnSlave crnSlave : slaveProperties.getCrn()) { + if (crnSlave.getId() != 5){ + continue; + } + for (CrnSlave.CrnStn crnStn : crnSlave.getCrnInStn()) { + // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅 + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); + StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); + if (staProtocol == null) { + break; +// continue; + } else { + staProtocol = staProtocol.clone(); + } + if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()){ + + EmptyBarrelIn emptyBarrelIn = emptyBarrelInService.selectOne(new EntityWrapper<>()); + if (Cools.isEmpty(emptyBarrelIn)){ + continue; + } + + FullStoreParam fullStoreParam = new FullStoreParam(); + fullStoreParam.setDevpNo(crnStn.getStaNo()); + FullStoreParam.MatCodeStore matCodeStore = new FullStoreParam.MatCodeStore(); + matCodeStore.setMatnr(emptyBarrelIn.getMatnr()); + matCodeStore.setBatch(emptyBarrelIn.getBatch()); + if (staProtocol.isForce()){ + log.info("绌烘《寮哄埗鍏ュ簱锛�"+staProtocol.getAmount()); + matCodeStore.setAnfme(Double.valueOf(staProtocol.getAmount())); + }else { + matCodeStore.setAnfme(8d) ; + } + ArrayList<FullStoreParam.MatCodeStore> matCodeStores = new ArrayList<>(); + matCodeStores.add(matCodeStore); + fullStoreParam.setList(matCodeStores); + try { + String response = new HttpHandler.Builder() + .setUri(wmsUrl) + .setPath("/full/store/put/start") + .setJson(JSON.toJSONString(fullStoreParam)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + if (jsonObject.getInteger("code").equals(200)) { + devpThread.setPakMk(crnStn.getStaNo(),false); + } + }catch (CoolException e){ + + } + + } + + } + } + } + + public synchronized void RGVTaskPut(){ + for (RgvSlave rgvSlave:slaveProperties.getRgv()){ + ZyRgvThread rgvThread = (ZyRgvThread)SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol.getModeType() != RgvModeType.AUTO){ + continue; + } + + + int workNo1 = 0; + int workNo2 = 0; + short souSta1 = 0; + short sta1 = 0; + short souSta2 = 0; + short sta2 = 0; + + //宸ヤ綅涓�浠诲姟 + for (RgvSlave.Sta inStn : rgvSlave.getInStn()){ + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, inStn.getSourcePlcId()); + StaProtocol staProtocol = devpThread.getStation().get(inStn.getSourceStaNo()); + if (staProtocol == null) { + break; +// continue; + } else { + staProtocol = staProtocol.clone(); + } + if (staProtocol.isLoading() && staProtocol.isLoading() && staProtocol.isInEnable()){ + if (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() <9900){ + WrkMast wrkMast = wrkMastService.selectByworkNo(staProtocol.getWorkNo()); + if (Cools.isEmpty(wrkMast)){ + log.error("鏈壘鍒板伐浣滄。"); + continue; + } + workNo1 = wrkMast.getWrkNo(); + souSta1 = inStn.getSourceStaNo().shortValue(); + sta1 = Utils.getRgvEndStaNo(rgvSlave.getId(),wrkMast.getStaNo()); + break; + } + workNo1 = workNo++; + souSta1 = inStn.getSourceStaNo().shortValue(); + sta1 = inStn.getStaNo().shortValue(); + break; + } + } + + + //宸ヤ綅浜屼换鍔� + for (RgvSlave.Sta inStn : rgvSlave.getInStn()){ + if (souSta1 == inStn.getSourceStaNo()){ + continue; + } + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, inStn.getSourcePlcId()); + StaProtocol staProtocol = devpThread.getStation().get(inStn.getSourceStaNo()); + if (staProtocol == null) { + break; +// continue; + } else { + staProtocol = staProtocol.clone(); + } + if (staProtocol.isLoading() && staProtocol.isLoading() && staProtocol.isInEnable()){ + if (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() <9900){ + WrkMast wrkMast = wrkMastService.selectByworkNo(staProtocol.getWorkNo()); + if (Cools.isEmpty(wrkMast)){ + log.error("鏈壘鍒板伐浣滄。"); + continue; + } + workNo2 = wrkMast.getWrkNo(); + souSta2 = inStn.getSourceStaNo().shortValue(); + sta2 = Utils.getRgvEndStaNo(rgvSlave.getId(),wrkMast.getStaNo()); + break; + } + workNo2 = workNo++; + souSta2 = inStn.getSourceStaNo().shortValue(); + sta2 = inStn.getStaNo().shortValue(); + break; + } + } + + //rgv浠诲姟涓嬪彂-------------------------------------------------------------- + RgvCommand command = new RgvCommand(); + command.setRgvNo(rgvSlave.getId()); // RGV缂栧彿 + //宸ヤ綅1 + command.setTaskNo1(workNo1); // 宸ヤ綔鍙� + command.setSourceStaNo1(souSta1); // 婧愮珯 + command.setDestinationStaNo1(sta1); // 鐩爣绔� + command.setAckFinish1(false); // 浠诲姟瀹屾垚纭浣� + + //宸ヤ綅2 + command.setTaskNo2(workNo2); // 宸ヤ綔鍙� + command.setSourceStaNo2(souSta2); // 婧愮珯 + command.setDestinationStaNo2(sta2); // 鐩爣绔� + command.setAckFinish2(false); // 浠诲姟瀹屾垚纭浣� + + if (workNo1 != 0 && workNo2 ==0){ + command.setTaskMode(RgvTaskModeType.FETCH_PUT2); // 浠诲姟妯″紡: 鍙栨斁璐� + } else if (workNo1 == 0 && workNo2 !=0) { + command.setTaskMode(RgvTaskModeType.FETCH_PUT1); // 浠诲姟妯″紡: 鍙栨斁璐� + }else { + command.setTaskMode(RgvTaskModeType.FETCH_PUT_ALL); // 浠诲姟妯″紡: 鍙栨斁璐� + } + command.setCommand(false); + MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(2, command)); + log.info("rgv浠诲姟涓嬪彂锛�"+JSON.toJSONString(command)); + + } + } + + + public synchronized void RGVTaskOver() { + + } } -- Gitblit v1.9.1