From 3f02e208daff9a760d3a0ea5680a0138e0a23e03 Mon Sep 17 00:00:00 2001 From: tqs <56479841@qq.com> Date: 星期六, 03 十二月 2022 14:32:26 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 1012 +++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 881 insertions(+), 131 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 5516330..7769479 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -9,6 +9,7 @@ import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.mapper.BasCrnErrorMapper; +import com.zy.asrs.mapper.BasRgvErrMapper; import com.zy.asrs.mapper.WaitPakinMapper; import com.zy.asrs.mapper.WrkMastMapper; import com.zy.asrs.service.*; @@ -26,30 +27,26 @@ import com.zy.core.cache.MessageQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.*; -import com.zy.core.model.CrnSlave; -import com.zy.core.model.DevpSlave; -import com.zy.core.model.LedSlave; -import com.zy.core.model.Task; +import com.zy.core.model.*; import com.zy.core.model.command.CrnCommand; import com.zy.core.model.command.LedCommand; +import com.zy.core.model.command.RgvCommand; import com.zy.core.model.protocol.CrnProtocol; +import com.zy.core.model.protocol.RgvProtocol; import com.zy.core.model.protocol.StaProtocol; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.BarcodeThread; import com.zy.core.thread.LedThread; +import com.zy.core.thread.RgvThread; import com.zy.core.thread.SiemensDevpThread; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; /** @@ -72,13 +69,13 @@ @Autowired private WrkDetlService wrkDetlService; @Autowired - private WaitPakinMapper waitPakinMapper; - @Autowired private LocMastService locMastService; @Autowired private StaDescService staDescService; @Autowired private BasCrnpService basCrnpService; + @Autowired + private BasRgvService basRgvService; @Autowired private BasDevpService basDevpService; @Autowired @@ -87,6 +84,10 @@ private BasErrLogService basErrLogService; @Autowired private BasCrnErrorMapper basCrnErrorMapper; + @Autowired + private BasRgvErrMapper basRgvErrMapper; + @Autowired + private BasRgvErrLogService basRgvErrLogService; @Value("${wms.url}") private String wmsUrl; @@ -106,6 +107,7 @@ continue; } String barcode = barcodeThread.getBarcode(); + if (!Cools.isEmpty(barcode)) { log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode); if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) { @@ -116,6 +118,7 @@ } // 鑾峰彇鍏ュ簱绔欎俊鎭� +// SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); if (staProtocol == null) { @@ -126,14 +129,16 @@ // 鍏ュ嚭搴撴ā寮忓垽鏂� // if ( inSta.getStaNo()==203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { continue; } - if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) { - continue; - } +// if (inSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) { +// continue; +// } // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢 - if (staProtocol.isAutoing() && staProtocol.isLoading() + if (staProtocol.isAutoing() + && staProtocol.isLoading() && staProtocol.isInEnable() - && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990) + && !staProtocol.isEmptyMk() + && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990) && staProtocol.isPakMk()) {// && !Cools.isEmpty(barcode)) { // if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) { @@ -192,64 +197,6 @@ } else { log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response); } - - -// // 妫�绱㈠簱浣� -// LocTypeDto locTypeDto = new LocTypeDto(staProtocol); -// List<String> matNos = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList()); -// StartupDto startupDto = commonService.getLocNo(1, 1, inSta.getStaNo(), matNos, locTypeDto, 0); -// // 宸ヤ綔鍙� -// int workNo = startupDto.getWorkNo(); -// // 鎻掑叆宸ヤ綔鏄庣粏妗� -// wrkDetlService.createWorkDetail(workNo, waitPakins, barcode); -// -// // 鎻掑叆宸ヤ綔涓绘。 -// wrkMast = new WrkMast(); -// wrkMast.setWrkNo(workNo); -// wrkMast.setIoTime(new Date()); -// wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋 -// wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱 -// wrkMast.setIoPri(10D); // 浼樺厛绾э細10 -// wrkMast.setCrnNo(startupDto.getCrnNo()); -// wrkMast.setSourceStaNo(startupDto.getSourceStaNo()); -// wrkMast.setStaNo(startupDto.getStaNo()); -// wrkMast.setLocNo(startupDto.getLocNo()); -// wrkMast.setBarcode(barcode); // 鎵樼洏鐮� -// wrkMast.setFullPlt("Y"); // 婊℃澘锛歒 -// wrkMast.setPicking("N"); // 鎷f枡 -// wrkMast.setExitMk("N"); // 閫�鍑� -// wrkMast.setEmptyMk("N"); // 绌烘澘 -// wrkMast.setLinkMis("N"); -// // 鎿嶄綔浜哄憳鏁版嵁 -// wrkMast.setAppeTime(new Date()); -// wrkMast.setModiTime(new Date()); -// Integer insert = wrkMastMapper.insert(wrkMast); -// if (insert == 0) { -// throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); -// } -// // 鏇存柊鐩爣搴撲綅鐘舵�� -// LocMast locMast = locMastService.selectById(startupDto.getLocNo()); -// locMast.setLocSts("S"); // S.鍏ュ簱棰勭害 -// locMast.setModiTime(new Date()); -// if (!locMastService.updateById(locMast)){ -// throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�"); -// } -// // 灏嗗叆搴撻�氱煡妗d慨鏀逛负宸插惎鍔� -// if (wrkMastMapper.updateWaitPakInStep1(barcode) == 0) { -// throw new CoolException("淇敼鍏ュ簱閫氱煡妗g姸鎬佷负宸插惎鍔ㄥけ璐�"); -// } -// -// // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- -// -// // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护 -// barcodeThread.setBarcode(""); -// staProtocol.setWorkNo((short) workNo); -// staProtocol.setStaNo(startupDto.getStaNo().shortValue()); -// devpThread.setPakMk(staProtocol.getSiteId(), false); -// boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); -// if (!result) { -// throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); -// } } catch (Exception e) { e.printStackTrace(); @@ -448,8 +395,7 @@ /** * 鍫嗗灈鏈虹珯鍑哄簱鍒板嚭搴撶珯 */ - @Async - public void crnStnToOutStn() { + public synchronized void crnStnToOutStn() { for (CrnSlave crnSlave : slaveProperties.getCrn()) { // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯 for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) { @@ -526,14 +472,12 @@ continue; } -// //鍫嗗灈鏈哄洖鍘熺偣浠诲姟涓� -// if(crnThread.isBackHpFlag()){ -// continue; -// } - // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛� - if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO - && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) { + if (crnProtocol.getStatusType() == CrnStatusType.IDLE + && crnProtocol.getTaskNo() == 0 + && crnProtocol.getModeType() == CrnModeType.AUTO + && crnProtocol.getLoaded() == 0 + && crnProtocol.getForkPos() == 0) { // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡 if (crnProtocol.getLastIo().equals("I")) { if (basCrnp.getInEnable().equals("Y")) { @@ -559,6 +503,53 @@ this.locToLoc(crn, crnProtocol); // this.crnRebackHp(crnProtocol, crnThread); + } + } + + /** + * 鍏ュ嚭搴� ===>> RGV鍏ュ嚭搴撲綔涓氫笅鍙� + */ + public synchronized void rgvIoExecute() { + for (RgvSlave rgv : slaveProperties.getRgv()) { + // 鑾峰彇RGV淇℃伅 + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + continue; + } + BasRgv basRgv = basRgvService.selectById(rgv.getId()); + if (basRgv == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgv.getId()); + continue; + } + + // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�, 骞朵笖鏃犱换鍔°�佹棤鐗╂椂鎵嶇户缁墽琛� + if (rgvProtocol.getStatusType() == RgvStatusType.IDLE + && rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 + && rgvProtocol.getLoaded1() == 0 && rgvProtocol.getLoaded2() == 0 + ) { + // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡 + if (rgvProtocol.getLastIo().equals("I")) { + if (basRgv.getInEnable().equals("Y")) { + this.rgvInStn(rgv, rgvProtocol); // 鍏ュ簱 + rgvProtocol.setLastIo("O"); + } else if (basRgv.getOutEnable().equals("Y")) { + this.rgvOutStn(rgv, rgvProtocol); // 鍑哄簱 + rgvProtocol.setLastIo("I"); + } + } + // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡 + else if (rgvProtocol.getLastIo().equals("O")) { + if (basRgv.getOutEnable().equals("Y")) { + this.rgvOutStn(rgv, rgvProtocol); // 鍑哄簱 + rgvProtocol.setLastIo("I"); + } else if (basRgv.getInEnable().equals("Y")) { + this.rgvInStn(rgv, rgvProtocol); // 鍏ュ簱 + rgvProtocol.setLastIo("O"); + } + } + } } } @@ -621,7 +612,7 @@ /** * 鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鍒板簱浣� */ - public void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol) { + public synchronized void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol) { for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) { boolean flag = false; // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅 @@ -1006,6 +997,637 @@ // } /** + * 鏌ユ壘宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級,涓擱GV鍏ュ簱鎺ラ┏绔欑鍚堢殑鐨勫叆搴撳伐浣滄。锛屾彁鍙栧嚭鏈�澶�2绗� + * @param slave + * @return + */ + public synchronized List<WrkMast> getRgvInTask(RgvSlave slave){ + List<WrkMast> wrkMastTask = new ArrayList<>(); + List<Integer> staNos = new ArrayList<>(); + for (RgvSlave.RgvStn rgvStn : slave.getRgvInSStn()) { + staNos.add(rgvStn.getStaNo()); + } + if(staNos.size() < 1){ + return null; + } + List<WrkMast> wrkMasts = wrkMastMapper.selectRgvInStep1(slave.getId(), staNos); + for(WrkMast wrkMast : wrkMasts){ + Integer plcId = 0; + for (RgvSlave.RgvStn rgvStn : slave.getRgvInSStn()) { + if(rgvStn.getStaNo() == wrkMast.getRgvSstaNo()){ + plcId = rgvStn.getDevpPlcId(); + break; + } + } + + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, plcId); + //鍒ゆ柇RGV鍏ュ簱婧愮珯鐐癸紝鑷姩銆佹湁鐗╋紝鏈変换鍔″彿锛屽彲鍑� + boolean flag1 = false; + StaProtocol staProtocol1 = devpThread.getStation().get(wrkMast.getRgvSstaNo()); + if (staProtocol1 == null) { + continue; + } else { + staProtocol1 = staProtocol1.clone(); + } + // 鏌ヨ绔欑偣璇︾粏淇℃伅 + BasDevp staDetl1 = basDevpService.selectById(wrkMast.getRgvSstaNo()); + if (staDetl1 == null) { + log.error("RGV鍏ュ簱 ===>> 杈撻�佹満婧愮珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", wrkMast.getRgvSstaNo()); + continue; + } + if (staProtocol1.isAutoing() && staProtocol1.isLoading() && staProtocol1.getWorkNo().intValue() == wrkMast.getWrkNo() + && staProtocol1.isOutEnable() && staDetl1.getOutEnable() != null && staDetl1.getOutEnable().equals("Y")) { + flag1 = true; + } + + //鍒ゆ柇RGV鍏ュ簱鐩爣绔欑偣锛岃嚜鍔ㄣ�佹棤鐗╋紝娌℃湁浠诲姟鍙凤紝鍙叆 + boolean flag2 = false; + StaProtocol staProtocol2 = devpThread.getStation().get(wrkMast.getRgvDstaNo()); + if (staProtocol2 == null) { + continue; + } else { + staProtocol2 = staProtocol2.clone(); + } + // 鏌ヨ绔欑偣璇︾粏淇℃伅 + BasDevp staDetl2 = basDevpService.selectById(wrkMast.getRgvSstaNo()); + if (staDetl2 == null) { + log.error("RGV鍏ュ簱 ===>> 杈撻�佹満婧愮珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", wrkMast.getRgvSstaNo()); + continue; + } + if (staProtocol2.isAutoing() && staProtocol2.isLoading() && staProtocol2.getWorkNo().intValue() == wrkMast.getWrkNo() + && staProtocol2.isInEnable() && staDetl2.getCanining() != null && staDetl2.getCanining().equals("Y")) { + flag2 = true; + } + + if(flag1 && flag2){ + wrkMastTask.add(wrkMast); + if(wrkMastTask.size() >= 2) break; + } + } + return wrkMastTask; + } + + /** + * 鍏ュ簱 ===>> RGV鍏ュ簱绔欏埌绔� + */ + public synchronized void rgvInStn(RgvSlave slave, RgvProtocol rgvProtocol) { + //鏌ユ壘宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級,涓擱GV鍏ュ簱鎺ラ┏绔欑鍚堢殑鐨勫叆搴撳伐浣滄。锛屾彁鍙栧嚭鏈�澶�2绗� + List<WrkMast> wrkMastTask = getRgvInTask(slave); + if(wrkMastTask.size() <= 0){ + return; + } + + // RGV鎺у埗杩囨护锛� 蹇呴』婊¤冻鑷姩銆佺┖闂诧紝娌℃湁浠诲姟鍙� + if (!rgvProtocol.getStatusType().equals(CrnStatusType.IDLE) + || rgvProtocol.getModeType() != RgvModeType.AUTO + || rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getTaskNo2() != 0) { + return; + } + + // 宸茬粡瀛樺湪RGV鎵ц浠诲姟鏃讹紝鍒欒繃婊� + if(wrkMastMapper.selectRgvInWorking(slave.getId()).size() > 0){ + return; + } + + if(wrkMastTask.size() == 2){ + //鏈�2绗擱GV寰呭叆搴撲换鍔★紝2涓伐浣嶏紝鍙栬揣銆佹斁璐т换鍔″悓鏃朵笅鍙� + WrkMast wrkMast1 = wrkMastTask.get(0); + WrkMast wrkMast2 = wrkMastTask.get(1); + if(Cools.isEmpty(wrkMast1) || Cools.isEmpty(wrkMast2)){ + log.error("宸ヤ綔妗GV鍏ュ簱鏁版嵁涓虹┖"); + return; + } + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(slave.getId()); // RGV缂栧彿 + rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅1浠诲姟妯″紡: 鍙栨斁璐� + rgvCommand.setSourceStaNo1(wrkMast1.getRgvSstaNo().shortValue()); //宸ヤ綅1婧愮珯鐐� + rgvCommand.setDestinationStaNo1(wrkMast1.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo2(wrkMast2.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙� + rgvCommand.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅2浠诲姟妯″紡: 鍙栨斁璐� + rgvCommand.setSourceStaNo2(wrkMast2.getRgvSstaNo().shortValue()); //宸ヤ綅2婧愮珯鐐� + rgvCommand.setDestinationStaNo2(wrkMast2.getRgvDstaNo().shortValue()); //宸ヤ綅2鐩爣绔欑偣 + rgvCommand.setCommand((short) 0); //宸ヤ綅1銆�2浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(2, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", slave.getId(), JSON.toJSON(rgvCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 6.RGV鍏ュ簱鍙栬揣涓� + Date now = new Date(); + wrkMast1.setWrkSts(6L); + wrkMast1.setCrnStrTime(now); + wrkMast1.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast1) == 0) { + log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 6.RGV鍏ュ簱鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast1.getWrkNo()); + } + + wrkMast2.setWrkSts(6L); + wrkMast2.setCrnStrTime(now); + wrkMast2.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast2) == 0) { + log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 6.RGV鍏ュ簱鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast2.getWrkNo()); + } + } + } else if(wrkMastTask.size() == 1){ + //鍙湁1绗擱GV寰呭叆搴撲换鍔★紝鍏堜笅鍙戝彇璐т换鍔★紝鍙栬揣鍚庡啀鍒ゆ柇鏄惁鏈変笅涓�绗斿緟鍏ュ簱浠诲姟 + WrkMast wrkMast1 = wrkMastTask.get(0); + if(Cools.isEmpty(wrkMast1)){ + log.error("宸ヤ綔妗GV鍏ュ簱鏁版嵁涓虹┖"); + return; + } + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(slave.getId()); // RGV缂栧彿 + rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 宸ヤ綅1浠诲姟妯″紡: 鍙栬揣 + rgvCommand.setSourceStaNo1(wrkMast1.getRgvSstaNo().shortValue()); //宸ヤ綅1婧愮珯鐐� + rgvCommand.setDestinationStaNo1(wrkMast1.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setCommand((short) 0); //宸ヤ綅1銆�2浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2浠诲姟纭锛� step=4锛屽伐浣�1纭锛� step=5锛屽伐浣�2浠诲姟纭 + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", slave.getId(), JSON.toJSON(rgvCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 6.RGV鍏ュ簱鍙栬揣涓� + Date now = new Date(); + wrkMast1.setWrkSts(6L); + wrkMast1.setCrnStrTime(now); + wrkMast1.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast1) == 0) { + log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 6.RGV鍏ュ簱鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast1.getWrkNo()); + } + } + } + } + + /** + * 鍑哄簱 ===>> RGV鍑哄簱绔欏埌绔� + */ + public synchronized void rgvOutStn(RgvSlave slave, RgvProtocol rgvProtocol) { + //鏌ユ壘宸ヤ綔鐘舵�佷负14锛堝嚭搴撳畬鎴愶級,涓擱GV鍑哄簱鎺ラ┏绔欑鍚堢殑鐨勫嚭搴撳伐浣滄。锛屾彁鍙栧嚭鏈�澶�2绗� + List<WrkMast> wrkMastTask = getRgvOutTask(slave); + if(wrkMastTask.size() <= 0){ + return; + } + + // RGV鎺у埗杩囨护锛� 蹇呴』婊¤冻鑷姩銆佺┖闂诧紝娌℃湁浠诲姟鍙� + if (!rgvProtocol.getStatusType().equals(CrnStatusType.IDLE) + || rgvProtocol.getModeType() != RgvModeType.AUTO + || rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getTaskNo2() != 0) { + return; + } + + // 宸茬粡瀛樺湪RGV鎵ц浠诲姟鏃讹紝鍒欒繃婊� + if(wrkMastMapper.selectRgvOutWorking(slave.getId()).size() > 0){ + return; + } + + if(wrkMastTask.size() == 2){ + //鏈�2绗擱GV寰呭叆搴撲换鍔★紝2涓伐浣嶏紝鍙栬揣銆佹斁璐т换鍔″悓鏃朵笅鍙� + WrkMast wrkMast1 = wrkMastTask.get(0); + WrkMast wrkMast2 = wrkMastTask.get(1); + if(Cools.isEmpty(wrkMast1) || Cools.isEmpty(wrkMast2)){ + log.error("宸ヤ綔妗GV鍏ュ簱鏁版嵁涓虹┖"); + return; + } + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(slave.getId()); // RGV缂栧彿 + rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅1浠诲姟妯″紡: 鍙栨斁璐� + rgvCommand.setSourceStaNo1(wrkMast1.getRgvSstaNo().shortValue()); //宸ヤ綅1婧愮珯鐐� + rgvCommand.setDestinationStaNo1(wrkMast1.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo2(wrkMast2.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙� + rgvCommand.setTaskMode2(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅2浠诲姟妯″紡: 鍙栨斁璐� + rgvCommand.setSourceStaNo2(wrkMast2.getRgvSstaNo().shortValue()); //宸ヤ綅2婧愮珯鐐� + rgvCommand.setDestinationStaNo2(wrkMast2.getRgvDstaNo().shortValue()); //宸ヤ綅2鐩爣绔欑偣 + rgvCommand.setCommand((short) 0); //宸ヤ綅1銆�2浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(2, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", slave.getId(), JSON.toJSON(rgvCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 14.鍑哄簱瀹屾垚 => 16.RGV鍑哄簱鍙栬揣涓� + Date now = new Date(); + wrkMast1.setWrkSts(16L); + wrkMast1.setCrnStrTime(now); + wrkMast1.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast1) == 0) { + log.error("淇敼宸ヤ綔妗g姸鎬� 14.鍑哄簱瀹屾垚 => 16.RGV鍑哄簱鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast1.getWrkNo()); + } + + wrkMast2.setWrkSts(16L); + wrkMast2.setCrnStrTime(now); + wrkMast2.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast2) == 0) { + log.error("淇敼宸ヤ綔妗g姸鎬� 14.鍑哄簱瀹屾垚 => 16.RGV鍑哄簱鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast2.getWrkNo()); + } + } + } else if(wrkMastTask.size() == 1){ + //鍙湁1绗擱GV寰呭叆搴撲换鍔★紝鍏堜笅鍙戝彇璐т换鍔★紝鍙栬揣鍚庡啀鍒ゆ柇鏄惁鏈変笅涓�绗斿緟鍏ュ簱浠诲姟 + WrkMast wrkMast1 = wrkMastTask.get(0); + if(Cools.isEmpty(wrkMast1)){ + log.error("宸ヤ綔妗GV鍏ュ簱鏁版嵁涓虹┖"); + return; + } + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(slave.getId()); // RGV缂栧彿 + rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 宸ヤ綅1浠诲姟妯″紡: 鍙栬揣 + rgvCommand.setSourceStaNo1(wrkMast1.getRgvSstaNo().shortValue()); //宸ヤ綅1婧愮珯鐐� + rgvCommand.setDestinationStaNo1(wrkMast1.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setCommand((short) 0); //宸ヤ綅1銆�2浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2浠诲姟纭锛� step=4锛屽伐浣�1纭锛� step=5锛屽伐浣�2浠诲姟纭 + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", slave.getId(), JSON.toJSON(rgvCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 14.鍑哄簱瀹屾垚 => 16.RGV鍑哄簱鍙栬揣涓� + Date now = new Date(); + wrkMast1.setWrkSts(16L); + wrkMast1.setCrnStrTime(now); + wrkMast1.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast1) == 0) { + log.error("淇敼宸ヤ綔妗g姸鎬� 14.鍑哄簱瀹屾垚 => 16.RGV鍑哄簱鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast1.getWrkNo()); + } + } + } + } + + /** + * 鏌ユ壘宸ヤ綔鐘舵�佷负14锛堝嚭搴撳畬鎴愶級,涓擱GV鍑哄簱鎺ラ┏绔欑鍚堢殑鐨勫嚭搴撳伐浣滄。锛屾彁鍙栧嚭鏈�澶�2绗� + * @param slave + * @return + */ + public synchronized List<WrkMast> getRgvOutTask(RgvSlave slave){ + List<WrkMast> wrkMastTask = new ArrayList<>(); + List<Integer> staNos = new ArrayList<>(); + for (RgvSlave.RgvStn rgvStn : slave.getRgvOutSStn()) { + staNos.add(rgvStn.getStaNo()); + } + if(staNos.size() < 1){ + return null; + } + List<WrkMast> wrkMasts = wrkMastMapper.selectRgvOutStep1(slave.getId(), staNos); + for(WrkMast wrkMast : wrkMasts){ + Integer plcId = 0; + for (RgvSlave.RgvStn rgvStn : slave.getRgvOutSStn()) { + if(rgvStn.getStaNo() == wrkMast.getRgvSstaNo()){ + plcId = rgvStn.getDevpPlcId(); + break; + } + } + + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, plcId); + //鍒ゆ柇RGV鍑哄簱婧愮珯鐐癸紝鑷姩銆佹湁鐗╋紝鏈変换鍔″彿锛屽彲鍑� + boolean flag1 = false; + StaProtocol staProtocol1 = devpThread.getStation().get(wrkMast.getRgvSstaNo()); + if (staProtocol1 == null) { + continue; + } else { + staProtocol1 = staProtocol1.clone(); + } + // 鏌ヨ绔欑偣璇︾粏淇℃伅 + BasDevp staDetl1 = basDevpService.selectById(wrkMast.getRgvSstaNo()); + if (staDetl1 == null) { + log.error("RGV鍑哄簱 ===>> 杈撻�佹満婧愮珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", wrkMast.getRgvSstaNo()); + continue; + } + if (staProtocol1.isAutoing() && staProtocol1.isLoading() && staProtocol1.getWorkNo().intValue() == wrkMast.getWrkNo() + && staProtocol1.isOutEnable() && staDetl1.getOutEnable() != null && staDetl1.getOutEnable().equals("Y")) { + flag1 = true; + } + + //鍒ゆ柇RGV鍑哄簱鐩爣绔欑偣锛岃嚜鍔ㄣ�佹棤鐗╋紝娌℃湁浠诲姟鍙凤紝鍙叆 + boolean flag2 = false; + StaProtocol staProtocol2 = devpThread.getStation().get(wrkMast.getRgvDstaNo()); + if (staProtocol2 == null) { + continue; + } else { + staProtocol2 = staProtocol2.clone(); + } + // 鏌ヨ绔欑偣璇︾粏淇℃伅 + BasDevp staDetl2 = basDevpService.selectById(wrkMast.getRgvSstaNo()); + if (staDetl2 == null) { + log.error("RGV鍑哄簱 ===>> 杈撻�佹満婧愮珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", wrkMast.getRgvSstaNo()); + continue; + } + if (staProtocol2.isAutoing() && staProtocol2.isLoading() && staProtocol2.getWorkNo().intValue() == wrkMast.getWrkNo() + && staProtocol2.isInEnable() && staDetl2.getCanining() != null && staDetl2.getCanining().equals("Y")) { + flag2 = true; + } + + if(flag1 && flag2){ + wrkMastTask.add(wrkMast); + if(wrkMastTask.size() >= 2) break; + } + } + return wrkMastTask; + } + + /** + * 鏍规嵁RGV瀹屾垚淇″彿锛屾墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔锛屽拰RGV鐨勪换鍔′笅鍙� + */ + public synchronized void rgvFinished() { + for (RgvSlave rgv : slaveProperties.getRgv()) { + // 鑾峰彇RGV淇℃伅 + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + continue; + } + // 宸ヤ綅1鐘舵�侊細鍙栬揣瀹屾垚绛夊緟纭91 骞朵笖 浠诲姟瀹屾垚浣� = 1 + if (rgvProtocol.statusType1 == RgvStatusType.FETCHWAITING && rgvProtocol.getTaskNo1() != 0) { + //宸ヤ綅1鍙栬揣瀹屾垚鍚庯紝宸ヤ綅2鏄棤璐х┖闂茬姸鎬佹椂锛屽噯澶囩粰宸ヤ綅2鍙戜换鍔★紝纭鏄惁鏈夊緟鎵цRGV浠诲姟 + if (rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvProtocol.getTaskNo1() > 0 && rgvProtocol.getTaskNo2() == 0 + && rgvProtocol.getLoaded1() > 0 && rgvProtocol.getLoaded2() == 0 + && rgvProtocol.getStatusType2() == RgvStatusType.IDLE + ) { + WrkMast wrkMast1 = wrkMastMapper.selectPakInStep3(rgvProtocol.getTaskNo1().intValue()); + if (wrkMast1 == null) { + log.error("RGV宸ヤ綅1澶勪簬绛夊緟纭涓斿彇璐т换鍔″畬鎴愮姸鎬侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�俁GV鍙�={}锛屽伐浣滃彿={}", rgv.getId(), rgvProtocol.getTaskNo1()); + continue; + } + List<WrkMast> wrkMastTask = new ArrayList<>(); + List<WrkMast> list = new ArrayList<>(); + Integer type = 0;//1鍏ュ簱锛�2鍑哄簱 + if(wrkMast1.getWrkSts()==6L){ + wrkMastTask = getRgvInTask(rgv); + list = wrkMastMapper.selectRgvInWorking(rgv.getId()); + type = 1; + } else if(wrkMast1.getWrkSts()==16L){ + wrkMastTask = getRgvOutTask(rgv); + list = wrkMastMapper.selectRgvOutWorking(rgv.getId()); + type = 2; + } + if(wrkMastTask.size() > 0){//鏈夌户缁墽琛屼换鍔★紝涓嬪彂鍙栬揣浠诲姟缁欏伐浣�2 + // 宸茬粡瀛樺湪RGV鎵ц浠诲姟鏃讹紝鍒欒繃婊� + if (list.size() > 1) { + continue; + } + WrkMast wrkMast2 = wrkMastTask.get(0); + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgv.getId()); // RGV缂栧彿 + rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo2(wrkMast2.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙� + rgvCommand.setTaskMode2(RgvTaskModeType.FETCH); // 宸ヤ綅2浠诲姟妯″紡: 鍙栬揣 + rgvCommand.setSourceStaNo2(wrkMast2.getRgvSstaNo().shortValue()); //宸ヤ綅2婧愮珯鐐� + rgvCommand.setDestinationStaNo2(wrkMast2.getRgvDstaNo().shortValue()); //宸ヤ綅2鐩爣绔欑偣 + rgvCommand.setCommand((short) 0); //宸ヤ綅1銆�2浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Crn, wrkMast2.getRgvNo(), new Task(5, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgv.getId(), JSON.toJSON(rgvCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 6.RGV鍏ュ簱鍙栬揣涓� + Date now = new Date(); + wrkMast2.setWrkSts(type==1 ? 6L : 16L); + wrkMast2.setCrnStrTime(now); + wrkMast2.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast2) == 0) { + log.error("宸ヤ綅2淇敼宸ヤ綔妗g姸鎬� 2/14.璁惧涓婅蛋 => 6/16.RGV鍏ュ簱鍙栬揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast2.getWrkNo()); + } + } + } else {//娌℃湁缁х画鎵ц浠诲姟锛屼笅鍙戞斁璐т换鍔$粰宸ヤ綅1 + if(type == 1 && wrkMast1.getWrkSts() != 6L){//RGV鍏ュ簱鍙栬揣涓� + continue; + } + if(type == 2 && wrkMast1.getWrkSts() != 16L){//RGV鍑哄簱鍙栬揣涓� + continue; + } + + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgv.getId()); // RGV缂栧彿 + rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 宸ヤ綅1浠诲姟妯″紡: 鏀捐揣 + rgvCommand.setSourceStaNo1(wrkMast1.getRgvSstaNo().shortValue()); //宸ヤ綅1婧愮珯鐐� + rgvCommand.setDestinationStaNo1(wrkMast1.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setCommand((short) 0); //宸ヤ綅1銆�2浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2浠诲姟纭锛� step=4锛屽伐浣�1纭锛� step=5锛屽伐浣�2浠诲姟纭 + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgv.getId(), JSON.toJSON(rgvCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 6.RGV鍏ュ簱鍙栬揣涓� => 7.RGV鍏ュ簱鏀捐揣涓� + Date now = new Date(); + wrkMast1.setWrkSts(type==1 ? 7L : 17L); + wrkMast1.setCrnEndTime(now); + wrkMast1.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast1) == 0) { + log.error("淇敼宸ヤ綔妗g姸鎬� 6/16.RGV鍏ュ簱鍙栬揣涓� => 7/17.RGV鍏ュ簱鏀捐揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast1.getWrkNo()); + } + log.error("RGV鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgv.getId(), JSON.toJSON(rgvCommand)); + } + } + } else if (rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvProtocol.getTaskNo1() > 0 && rgvProtocol.getTaskNo2() > 0 + && rgvProtocol.getLoaded1() > 0 && rgvProtocol.getLoaded2() > 0 + && rgvProtocol.statusType2 == RgvStatusType.FETCHWAITING){ + // 宸ヤ綅2鐘舵�侊細涔熸槸鍙栬揣瀹屾垚绛夊緟纭91 骞朵笖 浠诲姟瀹屾垚浣� = 1, 宸ヤ綅1銆�2鍚屾椂涓嬪彂鏀捐揣浠诲姟 + WrkMast wrkMast1 = wrkMastMapper.selectPakInStep3(rgvProtocol.getTaskNo1().intValue()); + WrkMast wrkMast2 = wrkMastMapper.selectPakInStep3(rgvProtocol.getTaskNo2().intValue()); + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgv.getId()); // RGV缂栧彿 + rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkMast1.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 宸ヤ綅1浠诲姟妯″紡: 鏀捐揣 + rgvCommand.setSourceStaNo1(wrkMast1.getRgvSstaNo().shortValue()); //宸ヤ綅1婧愮珯鐐� + rgvCommand.setDestinationStaNo1(wrkMast1.getRgvDstaNo().shortValue()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo2(wrkMast2.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙� + rgvCommand.setTaskMode2(RgvTaskModeType.PUT); // 宸ヤ綅2浠诲姟妯″紡: 鏀捐揣 + rgvCommand.setSourceStaNo2(wrkMast2.getRgvSstaNo().shortValue()); //宸ヤ綅2婧愮珯鐐� + rgvCommand.setDestinationStaNo2(wrkMast2.getRgvDstaNo().shortValue()); //宸ヤ綅2鐩爣绔欑偣 + rgvCommand.setCommand((short) 0); //宸ヤ綅1銆�2浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Crn, wrkMast1.getRgvNo(), new Task(2, rgvCommand))) { + //step=2,宸ヤ綅1銆�2浠诲姟纭锛� step=4锛屽伐浣�1纭锛� step=5锛屽伐浣�2浠诲姟纭 + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgv.getId(), JSON.toJSON(rgvCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 6.RGV鍏ュ簱鍙栬揣涓� + Date now = new Date(); + wrkMast1.setWrkSts(wrkMast1.getWrkSts()==6L ? 7L : 17L); + wrkMast1.setCrnStrTime(now); + wrkMast1.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast1) == 0) { + log.error("淇敼宸ヤ綔妗g姸鎬� 6/16.RGV鍏ュ簱鍙栬揣涓� => 7/17.RGV鍏ュ簱鏀捐揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast1.getWrkNo()); + } + + wrkMast2.setWrkSts(wrkMast2.getWrkSts()==6L ? 7L : 17L); + wrkMast2.setCrnStrTime(now); + wrkMast2.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast2) == 0) { + log.error("淇敼宸ヤ綔妗g姸鎬� 6/16.RGV鍏ュ簱鍙栬揣涓� => 7/17.RGV鍏ュ簱鏀捐揣涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast2.getWrkNo()); + } + } + } + } + + } + } + + /** + * 鍏ュ嚭搴� ===>> RGV鍑哄簱绔欏埌鍫嗗灈鏈哄叆搴撶珯/绯荤粺鍏ュ簱绔� + * rgvInDStnToCrnStn + */ + public synchronized void rgvDestStnToCrnStn() { + for (RgvSlave rgvSlave : slaveProperties.getRgv()) { + // 閬嶅巻鍏ュ簱浠诲姟鐨凴GV鍑哄簱绔� + for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvDestStn()) { + // 鑾峰彇RGV鍑哄簱绔欎俊鎭� + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId()); + StaProtocol staProtocol = devpThread.getStation().get(rgvStn.getStaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) { + // 鏌ヨ宸ヤ綔妗ist +// List<WrkMast> wrkMasts = wrkMastMapper.selectRgvInStep2(staProtocol.getSiteId()); + List<WrkMast> wrkMasts = wrkMastMapper.selectRgvDestStep2(staProtocol.getSiteId()); + for(WrkMast wrkMast : wrkMasts){ + // 鍒ゆ柇宸ヤ綔妗f潯浠� + if (wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null + || wrkMast.getRgvSstaNo() == null || wrkMast.getRgvDstaNo() == null) { + continue; + } + + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, wrkMast.getRgvNo()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + // 鍒ゆ柇RGV鐘舵�佺瓑寰呯‘璁�,宸ヤ綅1 + if (rgvProtocol.modeType == RgvModeType.AUTO && rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue()) + && rgvProtocol.statusType1 == RgvStatusType.WAITING) { + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + // 涓嬪彂绔欑偣淇℃伅 + staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); + staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); + if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) { + continue; + } + // 鏇存柊宸ヤ綔妗g姸鎬佷负2,14 + wrkMast.setWrkSts(wrkMast.getWrkSts()==7L ? 2L : 14L); + wrkMast.setOnlineYn("Y"); + wrkMast.setCrnEndTime(new Date()); + if (wrkMastMapper.updateById(wrkMast) != 0) { + // 澶嶄綅RGV宸ヤ綅1 + rgvThread.setResetFlag1(true); + } else { + log.error("RGV宸ヤ綅1鎺ラ┏锛屾洿鏂板伐浣滄。鐨勫伐浣滅姸鎬佷负{}澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkSts()==7L ? 2L : 14L, wrkMast.getWrkNo()); + } + } + // 鍒ゆ柇RGV鐘舵�佺瓑寰呯‘璁�,宸ヤ綅2 + if (rgvProtocol.modeType == RgvModeType.AUTO && rgvProtocol.getTaskNo2().equals(wrkMast.getWrkNo().shortValue()) + && rgvProtocol.statusType2 == RgvStatusType.WAITING) { + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + // 涓嬪彂绔欑偣淇℃伅 + staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); + staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); + if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) { + continue; + } + // 鏇存柊宸ヤ綔妗g姸鎬佷负2,14 + wrkMast.setWrkSts(wrkMast.getWrkSts()==7L ? 2L : 14L); + wrkMast.setOnlineYn("Y"); + wrkMast.setCrnEndTime(new Date()); + if (wrkMastMapper.updateById(wrkMast) != 0) { + // 澶嶄綅RGV宸ヤ綅2 + rgvThread.setResetFlag2(true); + } else { + log.error("RGV宸ヤ綅2鎺ラ┏锛屾洿鏂板伐浣滄。鐨勫伐浣滅姸鎬佷负{}澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkSts()==7L ? 2L : 14L, wrkMast.getWrkNo()); + } + } + } + + } + } + } + } + + /** + * 鍑哄簱 ===>> RGV鍑哄簱绔欏埌绯荤粺鍑哄簱绔� + */ + public synchronized void rgvOutDStnToOutStn() { + for (RgvSlave rgvSlave : slaveProperties.getRgv()) { + // 閬嶅巻鍑哄簱浠诲姟鐨凴GV鍑哄簱绔� + for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvDestStn()) { + // 鑾峰彇RGV鍑哄簱绔欎俊鎭� + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId()); + StaProtocol staProtocol = devpThread.getStation().get(rgvStn.getStaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) { + // 鏌ヨ宸ヤ綔妗ist + List<WrkMast> wrkMasts = wrkMastMapper.selectRgvOutStep2(staProtocol.getSiteId()); + for(WrkMast wrkMast : wrkMasts){ + // 鍒ゆ柇宸ヤ綔妗f潯浠� + if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null + || wrkMast.getRgvSstaNo() == null || wrkMast.getRgvDstaNo() == null) { + continue; + } + + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, wrkMast.getRgvNo()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + // 鍒ゆ柇RGV鐘舵�佺瓑寰呯‘璁�,宸ヤ綅1 + if (rgvProtocol.modeType == RgvModeType.AUTO && rgvProtocol.getTaskNo1().equals(wrkMast.getWrkNo().shortValue()) + && rgvProtocol.statusType1 == RgvStatusType.WAITING) { + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + // 涓嬪彂绔欑偣淇℃伅 + staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); + staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); + if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) { + continue; + } + // 鏇存柊宸ヤ綔妗g姸鎬佷负14 + wrkMast.setWrkSts(14L); + wrkMast.setOnlineYn("Y"); //鎺у埗WMS灏嗗伐浣滅姸鎬�14杞�15鐨勬椂鏈猴紝鍙湁RGV杩愭惉瀹屾垚鍚庢墠鍙互杞� + wrkMast.setCrnEndTime(new Date()); + if (wrkMastMapper.updateById(wrkMast) != 0) { + // 澶嶄綅RGV宸ヤ綅1 + rgvThread.setResetFlag1(true); + } else { + log.error("RGV宸ヤ綅1鎺ラ┏锛屾洿鏂板伐浣滄。鐨勫伐浣滅姸鎬佷负2澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo()); + } + } + // 鍒ゆ柇RGV鐘舵�佺瓑寰呯‘璁�,宸ヤ綅2 + if (rgvProtocol.modeType == RgvModeType.AUTO && rgvProtocol.getTaskNo2().equals(wrkMast.getWrkNo().shortValue()) + && rgvProtocol.statusType2 == RgvStatusType.WAITING) { + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + // 涓嬪彂绔欑偣淇℃伅 + staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); + staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); + if (!MessageQueue.offer(SlaveType.Devp, rgvStn.getDevpPlcId(), new Task(2, staProtocol))) { + continue; + } + // 鏇存柊宸ヤ綔妗g姸鎬佷负14 + wrkMast.setWrkSts(14L); + wrkMast.setOnlineYn("Y"); //鎺у埗WMS灏嗗伐浣滅姸鎬�14杞�15鐨勬椂鏈猴紝鍙湁RGV杩愭惉瀹屾垚鍚庢墠鍙互杞� + wrkMast.setCrnEndTime(new Date()); + if (wrkMastMapper.updateById(wrkMast) != 0) { + // 澶嶄綅RGV宸ヤ綅2 + rgvThread.setResetFlag2(true); + } else { + log.error("RGV宸ヤ綅2鎺ラ┏锛屾洿鏂板伐浣滄。鐨勫伐浣滅姸鎬佷负2澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo()); + } + } + } + + } + } + } + } + + /** * 搴撲綅绉昏浆 */ public void locToLoc(CrnSlave slave, CrnProtocol crnProtocol) { @@ -1076,8 +1698,7 @@ /** * 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣� */ - @Async - public void storeFinished() { + public synchronized void storeFinished() { for (CrnSlave crn : slaveProperties.getCrn()) { // 鑾峰彇鍫嗗灈鏈轰俊鎭� CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); @@ -1118,10 +1739,141 @@ } /** + * 寮傚父淇℃伅璁板綍 + */ + public synchronized void recErr() { + try { + this.recCrnErr(); + this.recRgvErr(); + } catch (Exception e) { + log.error("recErr fail", e); + } + } + + /** + * RGV寮傚父淇℃伅璁板綍 + */ + public synchronized void recRgvErr() { + Date now = new Date(); + for (RgvSlave rgv : slaveProperties.getRgv()) { + // 鑾峰彇RGV淇℃伅 + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + continue; + } + if (true) { + // 鏈変换鍔� + if (rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getTaskNo2() != 0) { + Integer taskNo = rgvProtocol.getTaskNo1() > 0 ? rgvProtocol.getTaskNo1().intValue() : rgvProtocol.getTaskNo2().intValue(); + BasRgvErrLog latest = basRgvErrLogService.findLatestByTaskNo(rgv.getId(), taskNo); + // 鏈夊紓甯� + if (latest == null) { + if (rgvProtocol.getAlarm() != null && rgvProtocol.getAlarm() > 0) { + WrkMast wrkMast = wrkMastMapper.selectById(taskNo); + if (wrkMast == null) { + continue; + } + BasRgvErr rgvErr = basRgvErrMapper.selectById(rgvProtocol.getAlarm()); + String errName = rgvErr == null ? String.valueOf(rgvProtocol.getAlarm()) : rgvErr.getErrName(); + BasRgvErrLog basRgvErrLog = new BasRgvErrLog( + null, // 缂栧彿 + wrkMast.getWrkNo(), // 宸ヤ綔鍙� + now, // 鍙戠敓鏃堕棿 + null, // 缁撴潫鏃堕棿 + wrkMast.getWrkSts(), // 宸ヤ綔鐘舵�� + wrkMast.getIoType(), // 鍏ュ嚭搴撶被鍨� + rgv.getId(), // 鍫嗗灈鏈� + null, // plc + wrkMast.getLocNo(), // 鐩爣搴撲綅 + wrkMast.getStaNo(), // 鐩爣绔� + wrkMast.getSourceStaNo(), // 婧愮珯 + wrkMast.getSourceLocNo(), // 婧愬簱浣� + wrkMast.getBarcode(), // 鏉$爜 + (int) rgvProtocol.getAlarm(), // 寮傚父鐮� + errName, // 寮傚父 + 1, // 寮傚父鎯呭喌 + now, // 娣诲姞鏃堕棿 + null, // 娣诲姞浜哄憳 + now, // 淇敼鏃堕棿 + null, // 淇敼浜哄憳 + "浠诲姟涓紓甯�" // 澶囨敞 + ); + + if (!basRgvErrLogService.insert(basRgvErrLog)) { + log.error("RGV寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", rgv.getId(), errName); + } + } + } else { + // 寮傚父淇 + if (rgvProtocol.getAlarm() == null || rgvProtocol.getAlarm() == 0) { + latest.setEndTime(now); + latest.setUpdateTime(now); + latest.setStatus(2); + if (!basRgvErrLogService.updateById(latest)) { + log.error("鍫嗗灈鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", rgv.getId(), latest.getId()); + } + } + } + // 鏃犱换鍔� + } else { + BasRgvErrLog latest = basRgvErrLogService.findLatest(rgv.getId()); + // 鏈夊紓甯� + if (rgvProtocol.getAlarm() != null && rgvProtocol.getAlarm() > 0) { + // 璁板綍鏂板紓甯� + if (latest == null || (latest.getErrCode() != rgvProtocol.getAlarm().intValue())) { + BasRgvErr rgvErr = basRgvErrMapper.selectById(rgvProtocol.getAlarm()); + String errName = rgvErr == null ? String.valueOf(rgvProtocol.getAlarm()) : rgvErr.getErrName(); + BasRgvErrLog basRgvErrLog = new BasRgvErrLog( + null, // 缂栧彿 + null, // 宸ヤ綔鍙� + now, // 鍙戠敓鏃堕棿 + null, // 缁撴潫鏃堕棿 + null, // 宸ヤ綔鐘舵�� + null, // 鍏ュ嚭搴撶被鍨� + rgv.getId(), // 鍫嗗灈鏈� + null, // plc + null, // 鐩爣搴撲綅 + null, // 鐩爣绔� + null, // 婧愮珯 + null, // 婧愬簱浣� + null, // 鏉$爜 + (int) rgvProtocol.getAlarm(), // 寮傚父鐮� + errName, // 寮傚父 + 1, // 寮傚父鎯呭喌 + now, // 娣诲姞鏃堕棿 + null, // 娣诲姞浜哄憳 + now, // 淇敼鏃堕棿 + null, // 淇敼浜哄憳 + "鏃犱换鍔″紓甯�" // 澶囨敞 + ); + + if (!basRgvErrLogService.insert(basRgvErrLog)) { + log.error("RGV寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", rgv.getId(), errName); + } + } + // 鏃犲紓甯� + } else { + // 寮傚父淇 + if (latest != null && latest.getStatus() == 1) { + latest.setEndTime(now); + latest.setUpdateTime(now); + latest.setStatus(2); + if (!basRgvErrLogService.updateById(latest)) { + log.error("RGV寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", rgv.getId(), latest.getId()); + } + } + } + } + } + + } + } + + /** * 鍫嗗灈鏈哄紓甯镐俊鎭褰� */ - @Async - public void recCrnErr() { + public synchronized void recCrnErr() { Date now = new Date(); for (CrnSlave crn : slaveProperties.getCrn()) { // 鑾峰彇鍫嗗灈鏈轰俊鎭� @@ -1236,14 +1988,12 @@ } } - // ------------------------------------------------------------------------------- /** * 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐� */ - @Async - public void storeEmptyPlt() { + public synchronized void storeEmptyPlt() { for (DevpSlave devp : slaveProperties.getDevp()) { // 閬嶅巻绌烘澘鍏ュ簱鍙� for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) { @@ -1254,12 +2004,6 @@ continue; } else { staProtocol = staProtocol.clone(); - } - -// // 鍏ュ嚭搴撴ā寮忓垽鏂� -// if ( emptyInSta.getStaNo()==203 && devpThread.ioModeOf2F != IoModeType.PAKIN_MODE) { continue; } - if (emptyInSta.getStaNo() == 203 && devpThread.ioModeOf2F == IoModeType.PAKOUT_MODE) { - continue; } // 绔欑偣鏉′欢鍒ゆ柇 @@ -1363,8 +2107,7 @@ /** * 鍑哄簱 ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣� */ - @Async - public void ledExecute() { + public synchronized void ledExecute() { for (LedSlave led : slaveProperties.getLed()) { // 鑾峰彇杈撻�佺嚎plc绾跨▼ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId()); @@ -1480,35 +2223,7 @@ /** * 鍏朵粬 ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅 */ - @Async - public void ledReset() { -// for (LedSlave led : slaveProperties.getLed()) { -// // 鑾峰彇杈撻�佺嚎plc绾跨▼ -// DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId()); -// // 鍛戒护闆嗗悎 -// boolean reset = true; -// for (Integer staNo : led.getStaArr()) { -// // 鑾峰彇鍙夎溅绔欑偣 -// StaProtocol staProtocol = devpThread.getStation().get(staNo); -// if (staProtocol == null) { -// continue; -// } else { -// staProtocol = staProtocol.clone(); -// } -// if (staProtocol.getWorkNo() != 0) { -// reset = false; -// break; -// } -// } -// // 鑾峰彇led绾跨▼ -// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getDevpPlcId()); -// // led鏄剧ず榛樿鍐呭 -// if (reset) { -// if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) { -// log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort()); -// } -// } -// } + public synchronized void ledReset() { for (LedSlave led : slaveProperties.getLed()) { // 鑾峰彇杈撻�佺嚎plc绾跨▼ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId()); @@ -1628,7 +2343,7 @@ * 鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堢珛鍗虫墽琛岀増) * tip锛氬悓姝� */ - private void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc) { + private synchronized void moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc) { try { List<Integer> rows = locMastService.queryDistinctRow(crn.getId()); LocMast loc = null; @@ -1989,7 +2704,23 @@ if (null != pakoutEmpty) { return; } - //鏈紑WMS鍒嗘敮锛岃姹俉MS鐢熸垚绌烘澘鍑哄簱鏈啓 + try { + String response = new HttpHandler.Builder() + .setUri(wmsUrl) + .setPath("/rpc/auto/emptyOut/v1") + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + if (jsonObject.getInteger("code").equals(200)) { + JSONObject data = (JSONObject) jsonObject.get("data"); + log.info((String) data.get("msg")); + } else { + log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/auto/emptyOut/v1","", response); + } + } catch (Exception e) { + e.printStackTrace(); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } } } @@ -2008,7 +2739,26 @@ && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990) //宸ヤ綔鍙蜂负0鎴栬�呭伐浣滃彿鏄�9991~9999锛堣緭閫佹満鐣欑敤锛� ) { - //鏈紑WMS鍒嗘敮锛岃姹俉MS鐢熸垚绌烘澘鍏ュ簱鏈啓 + try { + LocTypeDto locTypeDto = new LocTypeDto((short) 1, (short) 1, (short) 1); + + + String response = new HttpHandler.Builder() + .setUri(wmsUrl) + .setPath("/rpc/auto/emptyIn/v1") + .setJson(JSON.toJSONString(locTypeDto)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + if (jsonObject.getInteger("code").equals(200)) { + log.info((String) jsonObject.get("msg")); + } else { + log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/auto/emptyIn/v1", JSON.toJSONString(locTypeDto), response); + } + } catch (Exception e) { + e.printStackTrace(); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } } } } -- Gitblit v1.9.1