From 78489da7e2185f53faaec9356fa1a8997cedab70 Mon Sep 17 00:00:00 2001 From: whycq <123456> Date: 星期三, 28 五月 2025 08:46:55 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 602 +++++++++++++++++++++++++++++++++--------------------- 1 files changed, 371 insertions(+), 231 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 34b993d..992fb0f 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -19,6 +19,7 @@ import com.zy.common.model.SearchLocParam; import com.zy.common.model.StartupDto; import com.zy.common.service.CommonService; +import com.zy.common.utils.CollectionUtils; import com.zy.common.utils.HttpHandler; import com.zy.common.utils.News; import com.zy.core.CrnThread; @@ -39,14 +40,17 @@ import com.zy.core.thread.LedThread; import com.zy.core.thread.SiemensDevpThread; import lombok.extern.slf4j.Slf4j; -import net.bytebuddy.asm.Advice; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Set; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -90,6 +94,8 @@ @Value("${wms.url}") private String wmsUrl; + public short wrkNo = 11000; + /** * 缁勬墭 * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2 @@ -115,47 +121,98 @@ if (barcodeThread == null) { continue; } + String barcode = barcodeThread.getBarcode(); - //9998閫�鍥烇紝9996绌烘澘 - if (!Cools.isEmpty(barcode) && (staProtocol.getWorkNo() != 9998 || staProtocol.getWorkNo() != 9996)) { - log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode); - if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) { - String errorMsg = "15绔欐壂鐮佸け璐ワ紝宸查��鍥�14绔�"; - staProtocol.setWorkNo((short) 9998); - staProtocol.setStaNo((short) 14); - devpThread.setPakMk(staProtocol.getSiteId(), false); - // led 寮傚父鏄剧ず - if (ledThread != null) { - News.error(methodName + ":鎵爜澶辫触锛岃閲嶈瘯"); - MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); - } - continue; - } - } else { - continue; + // 灏哄妫�娴嬪紓甯� + boolean back = false; + String errMsg = ""; + if (staProtocol.isFrontErr()) { + errMsg = "鍓嶈秴闄�"; + back = true; + } + if (!back && staProtocol.isBackErr()) { + errMsg = "鍚庤秴闄�"; + back = true; + } + if (!back && staProtocol.isHighErr()) { + errMsg = "楂樿秴闄�"; + back = true; + } + if (!back && staProtocol.isLeftErr()) { + errMsg = "宸﹁秴闄�"; + back = true; + } + if (!back && staProtocol.isRightErr()) { + errMsg = "鍙宠秴闄�"; + back = true; + } + if (!back && staProtocol.isWeightErr()) { + errMsg = "瓒呴噸"; + back = true; + } + if (!back && staProtocol.isBarcodeErr()) { + errMsg = "鎵爜澶辫触"; + back = true; } + + + // 閫�鍥� + if (back) { +// News.warn("鎵爜鍏ュ簱澶辫触锛寋}鍏ュ簱绔欏洜{}寮傚父锛屾墭鐩樺凡琚��鍥�", inSta.getStaNo(), errMsg); + if(!staProtocol.isOutEnable()){ + continue; + } + + if (!staProtocol.isLoading()){ + continue; + } + if (!staProtocol.isPakMk()) { + continue; + } + staProtocol.setWorkNo(wrkNo); + News.info("{}鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", inSta.getStaNo(), errMsg,wrkNo); + wrkNo++; + staProtocol.setStaNo(inSta.getBackSta().shortValue()); + devpThread.setPakMk(staProtocol.getSiteId(), false); + MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg)); + } + //鎷f枡銆佺洏鐐逛换鍔★紝涓嶈繘鍏ユ柊鏉垮叆搴撴柟娉曪紝鐩存帴璺冲嚭 + if(staProtocol.getWorkNo()>=3001 && staProtocol.getWorkNo()<=6000){ + continue; + } // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && !staProtocol.isEmptyMk() - && (staProtocol.getWorkNo() == 9999 || staProtocol.getWorkNo() == 9997 || staProtocol.getWorkNo() == 9995) - && staProtocol.isPakMk()) {// && !Cools.isEmpty(barcode)) { + && staProtocol.isPakMk() && !back) {// && !Cools.isEmpty(barcode)) { -// if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) { -// News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode); -// //鏉$爜涓虹┖鎴栬�呬笉绗﹀悎锛岄��搴撳埌172绔欑偣 -// staProtocol.setWorkNo((short)9999); -// staProtocol.setStaNo((short)172); -// devpThread.setPakMk(staProtocol.getSiteId(), false); -// boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); -// if (!result) { -// throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); + if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) { + News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode); + //鏉$爜涓虹┖鎴栬�呬笉绗﹀悎锛岄��搴撳埌172绔欑偣 + staProtocol.setWorkNo(wrkNo); + staProtocol.setStaNo(inSta.getBackSta().shortValue()); + wrkNo++; + devpThread.setPakMk(staProtocol.getSiteId(), false); + boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + if (!result) { + throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); + } + continue; + } +// //鍒ゆ柇101鍜�104鏄惁鏄嫞鏂欍�佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱 璁惧鏆備笉鏀寔101銆�104绔欑洏鐐�/鎷f枡鍏ュ簱 +// WrkMast wrkMast1=wrkMastMapper.selectpj(inSta.getStaNo(),barcode); +// if(!Cools.isEmpty(wrkMast1)){ +// if (wrkMast1.getIoType()!=1){ +// continue; // } +// } +// if( !Cools.isEmpty(barcode)&&!Cools.isEmpty(wrkMast1)){ +// log.error("101鎴�104鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱", wrkMast1.getWrkNo()); // continue; // } - // 鍒ゆ柇閲嶅宸ヤ綔妗� WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode); if (wrkMast != null) { @@ -169,10 +226,18 @@ WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>() .eq("barcode", barcode) - .eq("io_type", 103)); + .in("io_type", 107,103,104,57,53)); if (!Cools.isEmpty(checkPick)) { continue; + } else { + News.info("鏂版澘鍏ュ簱鏉$爜===>>" + barcode); } +// WrkMast checkPick2 = wrkMastService.selectOne(new EntityWrapper<WrkMast>() +// .eq("barcode", barcode) +// .in("io_type", 57,53)); +// if (!Cools.isEmpty(checkPick2)) { +// continue; +// } try { @@ -185,6 +250,7 @@ param.setLocType1(locTypeDto.getLocType1()); String response = new HttpHandler.Builder() .setUri(wmsUrl) + .setTimeout(30, TimeUnit.SECONDS) .setPath("/rpc/pakin/loc/v1") .setJson(JSON.toJSONString(param)) .build() @@ -202,12 +268,15 @@ News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触"); throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); + }else { + ledThread.errorReset(); } } else { - staProtocol.setWorkNo((short) 9998); - staProtocol.setStaNo((short) 14); + staProtocol.setWorkNo(wrkNo); + wrkNo++; + staProtocol.setStaNo(inSta.getBackSta().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); @@ -379,23 +448,46 @@ } String barcode = barcodeThread.getBarcode(); - if (!Cools.isEmpty(barcode) && (staProtocol.getWorkNo() != 9998 || staProtocol.getWorkNo() != 9996)) { - log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode); - if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) { - staProtocol.setWorkNo((short) 9998); - staProtocol.setStaNo((short) 14); - devpThread.setPakMk(staProtocol.getSiteId(), false); - MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); - // led 寮傚父鏄剧ず - if (ledThread != null) { - String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯"; - News.error(methodName + ":鎵爜澶辫触锛岃閲嶈瘯"); - MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg)); + WrkMast wrkMast1 = wrkMastMapper.selectPickStep1(staProtocol.getWorkNo().intValue()); + + //浠诲姟鍙峰鏋滃湪宸ヤ綔妗d腑瀛樺湪锛屽氨涓嶇敤鍘诲垽鏂潯鐮� + if(Cools.isEmpty(wrkMast1)) { +// WrkMast mast = wrkMastMapper.selectPickStep(barcode); +// if (Cools.isEmpty(mast)) { +// break; +// } + + if (!Cools.isEmpty(barcode)) { + + +// log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode); + if ("NG".endsWith(barcode) || "NoRead".equals(barcode) && staProtocol.isPakMk()) { + if (!staProtocol.isLoading()) { + continue; + } + if (!staProtocol.isPakMk()) { + continue; + } + if (staProtocol.getWorkNo() != 0) { + continue; + } + + staProtocol.setWorkNo(wrkNo); + wrkNo++; + staProtocol.setStaNo(pickSta.getBackSta().shortValue()); + devpThread.setPakMk(staProtocol.getSiteId(), false); + MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + // led 寮傚父鏄剧ず + if (ledThread != null) { + String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯"; + News.error(methodName + ":鎵爜澶辫触锛岃閲嶈瘯"); + MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg)); + } + continue; } + } else { continue; } - } else { - continue; } @@ -406,10 +498,15 @@ && staProtocol.isLoading() && staProtocol.isInEnable() && !staProtocol.isEmptyMk() - && (staProtocol.getWorkNo() == 9999 || staProtocol.getWorkNo() == 9997 || staProtocol.getWorkNo() == 9995) +// && (staProtocol.getWorkNo() == 9999 || staProtocol.getWorkNo() == 9997 || staProtocol.getWorkNo() == 9995) && staProtocol.isPakMk()) { - WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode); + WrkMast wrkMast = null; + //浼樺厛鏌ヨ浠诲姟鍙峰搴旂殑宸ヤ綔妗f湁娌℃湁锛屽鏋滄湁鐨勮瘽灏变笉鐢ㄦ煡鏉$爜鍙� + wrkMast = wrkMastMapper.selectPickStep1(staProtocol.getWorkNo().intValue()); + if(Cools.isEmpty(wrkMast)) { + wrkMast = wrkMastMapper.selectPickStep(barcode); + } // WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue()); if (wrkMast == null) { // 鏃犳嫞鏂欐暟鎹� @@ -419,6 +516,9 @@ || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { continue; } + LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", wrkMast.getSourceLocNo())); + + // 鎷c�佺洏銆佸苟 浣滀笟绔欒浆鎹� // int stnNo = 0; @@ -432,8 +532,7 @@ // 鑾峰彇鐩爣绔� Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() .eq("type_no", wrkMast.getIoType() - 50) - //閫熻吘鐗规湁鎹℃枡锛� 11绔欐槸鍑哄簱绔欙紝 鐒跺悗鎵嬪姩璧板埌15绔欒繘琛屽啀鍏ュ簱 - .eq("stn_no", 15) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯 + .eq("stn_no", pickSta.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯 .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿 StaDesc staDesc = staDescService.selectOne(wrapper); if (Cools.isEmpty(staDesc)) { @@ -489,12 +588,16 @@ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); continue; } - + if (ledThread != null) { + ledThread.errorReset(); + } // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护 staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + + if (!result) { News.error(methodName + ":鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId()); @@ -561,6 +664,7 @@ wrkMast.setCrnEndTime(new Date()); if (wrkMastMapper.updateById(wrkMast) != 0) { // 澶嶄綅鍫嗗灈鏈� + News.info("crnStnToOutStn鍫嗗灈鏈哄浣嶆椂宸ヤ綔鍙�===>>" + crnProtocol.getTaskNo()); crnThread.setResetFlag(true); } else { News.error(methodName + ":鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo()); @@ -689,9 +793,97 @@ /** * 鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鍒板簱浣� - * 鏍规嵁鍏ュ簱鏃堕棿杩涜鎺掑簭鍏ュ簱 + * 鏍规嵁鍏ュ簱鏃堕棿杩涜鎺掑簭鍏ュ簱,鍚屼竴鍫嗗灈鏈哄厛鏌ヨ鎵�鏈夊伐浣滄。浠诲姟鍙凤紝鍐嶆牴鎹紭鍏堢骇銆佹椂闂存帓搴忥紝纭繚鍏堣繘鍏堝嚭 */ public synchronized void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol) { + for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) { + boolean flag = false; + // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅 + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); + StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + // 鏌ヨ绔欑偣璇︾粏淇℃伅 + BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); + if (staDetl == null) { + log.error("鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo()); + continue; + } + if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable() + && staDetl.getCanining()!=null && staDetl.getCanining().equals("Y")) { + flag = true; + } + if (!flag) { + continue; + } + // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。 + WrkMast wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue(),crnStn.getStaNo()); + if(null == wrkMast) { + log.error("鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getWorkNo()); + continue; + } + // 鑾峰彇搴撲綅淇℃伅 + LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); + if (locMast == null) { + log.error("鏌ヨ搴撳瓨鏃犳暟鎹�--搴撲綅鍙穥}", wrkMast.getLocNo()); + continue; + } + if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) { + log.error("鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts()); + continue; + } + CrnThread crnThreadNow = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo()); + CrnProtocol crnProtocolNow = crnThreadNow.getCrnProtocol(); + + // 鍫嗗灈鏈烘帶鍒惰繃婊� + if (!crnProtocolNow.getStatusType().equals(CrnStatusType.IDLE) || crnProtocolNow.getTaskNo() != 0) { + continue; + } + + // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊� + if (wrkMastMapper.selectWorking(slave.getId()) != null) { + break; +// return; + } + + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + CrnCommand crnCommand = new CrnCommand(); + crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙� + crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙� + crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� + crnCommand.setTaskMode(CrnTaskModeType.PAKIN); // 浠诲姟妯″紡: 搴撲綅绉昏浆 + crnCommand.setSourcePosX(crnStn.getRow().shortValue()); // 婧愬簱浣嶆帓 + crnCommand.setSourcePosY(crnStn.getBay().shortValue()); // 婧愬簱浣嶅垪 + crnCommand.setSourcePosZ(crnStn.getLev().shortValue()); // 婧愬簱浣嶅眰 + crnCommand.setDestinationPosX(locMast.getRow1().shortValue()); // 鐩爣搴撲綅鎺� + crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 鐩爣搴撲綅鍒� + crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 鐩爣搴撲綅灞� + log.error("1"+crnCommand+crnProtocol); + if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { + log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); + } else { + System.err.println("鍏ュ簱鍒板簱浣嶅懡浠や笅鍙�"); + // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� + Date now = new Date(); + wrkMast.setWrkSts(3L); + wrkMast.setCrnStrTime(now); + wrkMast.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast) == 0) { + log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); + } + } + } + + } + + /** + * 鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鍒板簱浣� + * 鏍规嵁鍏ュ簱鏃堕棿杩涜鎺掑簭鍏ュ簱 + */ + public synchronized void crnStnToLoc2(CrnSlave slave, CrnProtocol crnProtocol) { String methodName = Thread.currentThread().getStackTrace()[1].getMethodName(); List<WrkMast> wrkMasts= new ArrayList<>(); //鎸囬拡 @@ -729,7 +921,7 @@ wrkMasts.add(wrkMast); count++; if(count==0) continue; - if(wrkMast.getWrkDate().getTime()<wrkMasts.get(i).getWrkDate().getTime() && wrkMast.getIoPri()<wrkMasts.get(i).getIoPri()) + if(wrkMast.getWrkDate().getTime()<wrkMasts.get(i).getWrkDate().getTime() && wrkMast.getIoPri()>=wrkMasts.get(i).getIoPri()) i=count; crnStn1=crnStn; } @@ -737,6 +929,8 @@ continue; } } + + if(!Cools.isEmpty(wrkMasts)){ wrkMast=wrkMasts.get(i); // 鑾峰彇搴撲綅淇℃伅 @@ -812,20 +1006,20 @@ // }catch(Exception ignore){} // } - // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� - Date now = new Date(); - wrkMast.setWrkSts(3L); - wrkMast.setCrnStrTime(now); - wrkMast.setModiTime(now); - if (wrkMastMapper.updateById(wrkMast) == 0) { - News.error(methodName + ":淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); - } - } + // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� + Date now = new Date(); + wrkMast.setWrkSts(3L); + wrkMast.setCrnStrTime(now); + wrkMast.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast) == 0) { + News.error(methodName + ":淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); + } + } } } }else News.error(methodName + ":鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts()); }else News.error(methodName + ":鏌ヨ搴撳瓨鏃犳暟鎹�--搴撲綅鍙穥}", wrkMast.getLocNo()); - } + } } public synchronized void crnStnToLoc1(CrnSlave slave, CrnProtocol crnProtocol) { @@ -971,7 +1165,7 @@ for (WrkMast wrkMast : wrkMasts) { CrnSlave.CrnStn crnStn = null; for (CrnSlave.CrnStn crnStn1 : slave.getCrnOutStn()) { - if (crnStn1.getStaNo() == wrkMast.getSourceStaNo()) { + if (wrkMast.getSourceStaNo().equals(crnStn1.getStaNo())) { crnStn = crnStn1; break; } else { @@ -1017,6 +1211,7 @@ // continue; } // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵�� + if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) { // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- @@ -1366,6 +1561,7 @@ } // 鍏ュ簱 + 搴撲綅杞Щ ==> 4.鍏ュ簱瀹屾垚 if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) { + log.error("鍏ュ簱瀹屾垚鍫嗗灈鏈轰换鍔�=========銆�"+JSON.toJSONString(wrkMast)); wrkMast.setWrkSts(4L); } else { continue; @@ -1376,6 +1572,7 @@ // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 if (wrkMastMapper.updateById(wrkMast) > 0) { // 鍫嗗灈鏈哄浣� + News.info("storeFinished鍫嗗灈鏈哄浣嶆椂宸ヤ綔鍙�===>>" + crnProtocol.getTaskNo()); crnThread.setResetFlag(true); } } @@ -1530,7 +1727,6 @@ && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isEmptyMk() - && (staProtocol.getWorkNo() == 9996) && staProtocol.isPakMk()) { try { @@ -1542,6 +1738,7 @@ param.setLocType1(locTypeDto.getLocType1()); String response = new HttpHandler.Builder() .setUri(wmsUrl) + .setTimeout(30, TimeUnit.SECONDS) .setPath("/rpc/pakin/loc/v1") .setJson(JSON.toJSONString(param)) .build() @@ -1633,144 +1830,111 @@ * 鍑哄簱 ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣� */ public synchronized void ledExecute() { -// String methodName = Thread.currentThread().getStackTrace()[1].getMethodName(); - for (LedSlave led : slaveProperties.getLed()) { // 鑾峰彇杈撻�佺嚎plc绾跨▼ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId()); -// // 鍛戒护闆嗗悎 -// List<LedCommand> commands = new ArrayList<>(); -// // 宸ヤ綔妗i泦鍚� -// List<WrkMast> wrkMasts = new ArrayList<>(); + // 鍛戒护闆嗗悎 + List<LedCommand> commands = new ArrayList<>(); + // 宸ヤ綔妗i泦鍚� + List<WrkMast> wrkMasts = new ArrayList<>(); for (Integer staNo : led.getStaArr()) { // 鑾峰彇鍙夎溅绔欑偣 StaProtocol staProtocol = devpThread.getStation().get(staNo); if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo() || !staProtocol.isLoading()) { - MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, "")); continue; } else { staProtocol = staProtocol.clone(); } // 鑾峰彇宸ヤ綔妗f暟鎹� WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo()); - if (null == wrkMast) { - MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, "")); - continue; - } - ArrayList<MatDto> matDtos = new ArrayList<>(); - Wrapper<WrkDetl> detlWrapper = new EntityWrapper<WrkDetl>() - .eq("wrk_no", wrkMast.getWrkNo()); + if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; } + wrkMasts.add(wrkMast); + // 缁勮鍛戒护 LedCommand ledCommand = new LedCommand(); ledCommand.setWorkNo(wrkMast.getWrkNo()); - ledCommand.setStaNo(wrkMast.getStaNo()); - ledCommand.setSourceStaNo(wrkMast.getSourceStaNo()); - ledCommand.setLocNo(wrkMast.getLocNo()); - ledCommand.setSourceLocNo(wrkMast.getSourceLocNo()); ledCommand.setIoType(wrkMast.getIoType()); - ledCommand.setTitle(wrkMast.getIoType$()); - + // 鍑哄簱妯″紡 switch (wrkMast.getIoType()) { - case 10: + case 101: + ledCommand.setTitle("鍏ㄦ澘鍑哄簱"); + break; + case 103: + ledCommand.setTitle("鎷f枡鍑哄簱"); + break; + case 104: + ledCommand.setTitle("骞舵澘鍑哄簱"); + break; + case 107: + ledCommand.setTitle("鐩樼偣鍑哄簱"); + break; case 110: + ledCommand.setTitle("绌烘澘鍑哄簱"); ledCommand.setEmptyMk(true); break; default: - ledCommand.setBarcode(wrkMast.getBarcode()); - List<WrkDetl> wrkDetls = wrkDetlService.selectList(detlWrapper); - for (WrkDetl wrkDetl : wrkDetls) { - MatDto matDto = new MatDto(); - matDto.setMaknx(wrkDetl.getMaktx()); - matDto.setMatNo(wrkDetl.getMatnr()); - matDto.setCount(wrkDetl.getAnfme()); - matDtos.add(matDto); - } + News.error("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkMast.getWrkNo(), wrkMast.getIoType()); break; - - } - ledCommand.setMatDtos(matDtos); - MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, ledCommand.toString())); + ledCommand.setSourceLocNo(wrkMast.getSourceLocNo()); + ledCommand.setStaNo(wrkMast.getStaNo()); + ledCommand.setBarcode(wrkMast.getBarcode()); + if (wrkMast.getIoType() != 110) { + List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo()); -// wrkMasts.add(wrkMast); -// // 缁勮鍛戒护 -// LedCommand ledCommand = new LedCommand(); -// ledCommand.setWorkNo(wrkMast.getWrkNo()); -// ledCommand.setIoType(wrkMast.getIoType()); -// // 鍑哄簱妯″紡 -// switch (wrkMast.getIoType()) { -// case -1: -// ledCommand.setTitle("鍏ㄦ澘鍏ュ簱"); -// break; -// case 10: -// ledCommand.setTitle("绌烘澘鍏ュ簱"); -// break; -// case 10-1: -// ledCommand.setTitle("鍏ㄦ澘鍑哄簱"); -// break; -// case 103: -// ledCommand.setTitle("鎷f枡鍑哄簱"); -// break; -// case 104: -// ledCommand.setTitle("骞舵澘鍑哄簱"); -// break; -// case 107: -// ledCommand.setTitle("鐩樼偣鍑哄簱"); -// break; -// case 110: -// ledCommand.setTitle("绌烘澘鍑哄簱"); -// ledCommand.setEmptyMk(true); -// break; -// default: -// News.error(methodName + ":浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkMast.getWrkNo(), wrkMast.getIoType()); -// break; -// } -// ledCommand.setSourceLocNo(wrkMast.getSourceLocNo()); -// ledCommand.setLocNo(wrkMast.getLocNo()); -// ledCommand.setStaNo(wrkMast.getStaNo()); -//// ledCommand.setSourceStaNo(wrkMast.getSourceStaNo()); -// if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) { -// List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo()); -// wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme()))); -// } -// commands.add(ledCommand); -// } -// Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet()); -// // 鑾峰彇LED绾跨▼ -// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId()); -// // 鐩稿悓宸ヤ綔鍙烽泦鍚堝垯杩囨护 -//// if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) { -//// continue; -//// } -// // 鍛戒护涓嬪彂 ------------------------------------------------------------------------------- -// if (!commands.isEmpty()) { -// String errMsg = ""; -// if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) { -// News.error(methodName + ":{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort()); -// continue; -// } else { -// ledThread.setLedMk(false); -// } -// -// + wrkDetls.forEach(wrkDetl -> { + Double total = 0.0; + EntityWrapper<LocDetl> wrapper = new EntityWrapper<>(); + LocDetl locDetl = locDetlService.selectOne(wrapper.eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr())); + if (!Cools.isEmpty(locDetl)) { + total = locDetl.getAnfme(); + } + if (wrkMast.getIoType() == 101) { + ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total)); + } + if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) { + ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total)); + } + if (wrkMast.getIoType() == 107) { + ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total)); + } + }); + } + commands.add(ledCommand); } -// -// try { -// // 淇敼涓绘。led鏍囪 -// for (WrkMast wrkMast : wrkMasts) { -// wrkMast.setOveMk("Y"); -// wrkMast.setModiTime(new Date()); -// if (wrkMastMapper.updateById(wrkMast) == 0) { -// throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�"); -// } -// } -// -// // 鏇存柊绾跨▼褰撳墠宸ヤ綔鍙烽泦鍚� -// ledThread.setWorkNos(workNos); -// -// } catch (Exception e) { -// e.printStackTrace(); -// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); -// } + Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet()); + // 鑾峰彇LED绾跨▼ + LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId()); + // 鐩稿悓宸ヤ綔鍙烽泦鍚堝垯杩囨护 + if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) { + continue; + } + // 鍛戒护涓嬪彂 ------------------------------------------------------------------------------- + if (!commands.isEmpty()) { + if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) { + News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort()); + continue; + } else { +// News.info("{}鍙稬ED鍛戒护涓嬪彂鎴愬姛锛侊紒锛乕ip锛歿}] [port锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort(),commands); + } + } + + try { + // 淇敼涓绘。led鏍囪 + for (WrkMast wrkMast : wrkMasts) { + wrkMast.setOveMk("Y"); + wrkMast.setModiTime(new Date()); + if (wrkMastMapper.updateById(wrkMast) == 0) { + throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�"); + } + } + + // 鏇存柊绾跨▼褰撳墠宸ヤ綔鍙烽泦鍚� + ledThread.setWorkNos(workNos); + + } catch (Exception e) { + e.printStackTrace(); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } } } @@ -1779,33 +1943,6 @@ * 鍏朵粬 ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅 */ public synchronized 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<>()))) { -// News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort()); -// } -// } -// } for (LedSlave led : slaveProperties.getLed()) { // 鑾峰彇杈撻�佺嚎plc绾跨▼ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId()); @@ -1814,34 +1951,35 @@ for (Integer staNo : led.getStaArr()) { // 鑾峰彇鍙夎溅绔欑偣 StaProtocol staProtocol = devpThread.getStation().get(staNo); - if (staProtocol == null) { - continue; - } - if (staProtocol.getWorkNo() != 0 && staProtocol.isLoading()) { + StaProtocol staProtocol1 = devpThread.getStation().get(staNo+1); + if (staProtocol == null) { continue; } + if (staProtocol1 == null) { continue; } + if (staProtocol.getWorkNo() != 0 || staProtocol.isLoading()) { reset = false; break; } + if (staProtocol1.isLoading() || staProtocol1.getWorkNo() != 0) { + reset = false; + break; + } + if (!staProtocol.isLoading() && staProtocol.getWorkNo() == 0 && !staProtocol1.isLoading() && staProtocol1.getWorkNo() == 0){ +// News.error("{}鍙稬ED鍏ュ簱鍙�2涓珯鐐归兘娌℃湁鏁版嵁,鍑嗗reset澶嶄綅鏄剧ず鍣紒锛侊紒[ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort()); + } } -// // 鑾峰彇led绾跨▼ -// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId()); -// // led鏄剧ず榛樿鍐呭 -// if (reset && !ledThread.isLedMk()) { -// if (led.getId() == 7) { -// ledThread.setLedMk(true); -// if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) { -// News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort()); -// } else { -// -// } -// } else { -// ledThread.setLedMk(true); -// if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) { -// News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort()); -// } else { -// -// } -// } -// } + // 鑾峰彇led绾跨▼ +// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getDevpPlcId()); + LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId()); + // led鏄剧ず榛樿鍐呭 + if (reset) { + //News.info("{}鍙稬ED鍛戒护閲嶇疆锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort()); + if (ledThread == null) { + continue; + } + ledThread.errorReset(); + if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) { + News.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort()); + } + } } } @@ -2300,6 +2438,7 @@ try { String response = new HttpHandler.Builder() .setUri(wmsUrl) + .setTimeout(30, TimeUnit.SECONDS) .setPath("/rpc/auto/emptyOut/v1") .build() .doPost(); @@ -2338,6 +2477,7 @@ String response = new HttpHandler.Builder() .setUri(wmsUrl) + .setTimeout(30, TimeUnit.SECONDS) .setPath("/rpc/auto/emptyIn/v1") .setJson(JSON.toJSONString(locTypeDto)) .build() -- Gitblit v1.9.1