From bcd4e611a77fcb65dfc7bc1aacf26eb68095293f Mon Sep 17 00:00:00 2001 From: lty <876263681@qq.com> Date: 星期六, 19 七月 2025 09:42:57 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 469 +++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 396 insertions(+), 73 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 0c9f582..2685114 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -110,12 +110,7 @@ public Integer wrkNo = 10000; @Autowired private ConfigMapper configMapper; - - /** - * 缁勬墭 - * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2 - */ - public synchronized void generateStoreWrkFile(Integer mark) { + public synchronized void generateStoreWrkFile3(Integer mark) { String methodName = Thread.currentThread().getStackTrace()[1].getMethodName(); // 鏍规嵁杈撻�佺嚎plc閬嶅巻 for (DevpSlave devp : slaveProperties.getDevp()) { @@ -136,73 +131,6 @@ continue; } String barcode = barcodeThread.getBarcode(); - if(staProtocolIn.getStamp() == 1) { - WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>() - .eq("barcode", barcode) - .in("io_type", 107, 103, 57)); - if (!Cools.isEmpty(checkPick)) { - continue; - } - try { - LocTypeDto locTypeDto = new LocTypeDto(staProtocol); - - SearchLocParam param = new SearchLocParam(); - locTypeDto.setLocType1((short) 1); - param.setBarcode(barcode); - param.setIoType(1); - param.setSourceStaNo(inSta.getStaNo()); - param.setLocType1(locTypeDto.getLocType1()); - param.setWeight(staProtocol.getWeight()); - String response = new HttpHandler.Builder() - .setTimeout(30, TimeUnit.SECONDS) - .setUri(wmsUrl) - .setPath("/rpc/pakin/loc/v1") - .setJson(JSON.toJSONString(param)) - .build() - .doPost(); - JSONObject jsonObject = JSON.parseObject(response); - if (jsonObject.getInteger("code").equals(200)) { - StartupDto dto = jsonObject.getObject("data", StartupDto.class); - barcodeThread.setBarcode(""); - staProtocol.setWorkNo(dto.getWorkNo()); - //staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo())); - staProtocol.setStaNo(dto.getStaNo().shortValue()); - devpThread.setPakMk(staProtocol.getSiteId(), false); - boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); - log.error("杈撻�佺嚎涓嬪彂2锛�" + dto.getWorkNo() + "," + dto.getStaNo()); - - ledThread.errorReset(); - log.error("缁勬墭璇锋眰鍚嶭ED閿欒娓呴櫎"); - - if (!result) { - News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触"); - - throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); - } - } else { - if (jsonObject.getString("msg").equals("宸ヤ綔妗e凡瀛樺湪")) { - continue; - } - staProtocol.setWorkNo(wrkNo); - wrkNo++; - staProtocol.setStaNo(inSta.getBackSta().shortValue()); - devpThread.setPakMk(staProtocol.getSiteId(), false); - MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); - log.error("杈撻�佺嚎涓嬪彂2锛�" + staProtocol.getWorkNo() + "," + staProtocol.getStaNo()); - -// if (ledThread != null) { - String errorMsg = jsonObject.getString("msg"); - if (!Cools.isEmpty(errorMsg)) { - MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); - } -// } -// News.error(methodName + ":璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response); - } - } catch (Exception e) { - e.printStackTrace(); - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); - } - } if (staProtocol == null) { continue; @@ -398,6 +326,401 @@ // News.infoNoLog(""+mark+" - 0"+" - 缁勬墭 ===銆嬫墽琛屽畬鎴�"); } + /** + * 缁勬墭 + * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2 + */ +// public synchronized void generateStoreWrkFile(Integer mark) { +// String methodName = Thread.currentThread().getStackTrace()[1].getMethodName(); +// // 鏍规嵁杈撻�佺嚎plc閬嶅巻 +// for (DevpSlave devp : slaveProperties.getDevp()) { +// // 閬嶅巻鍏ュ簱鍙� +// for (DevpSlave.Sta inSta : devp.getInSta()) { +// // 鑾峰彇鏉$爜鎵弿浠俊鎭� +// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); +// LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); +// SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); +// StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); +// StaProtocol staProtocolIn = devpThread.getStation().get(inSta.getStaNo() -1); +// if (staProtocolIn == null) { +// continue; +// } else { +// staProtocolIn = staProtocolIn.clone(); +// } +// if (barcodeThread == null) { +// continue; +// } +// String barcode = barcodeThread.getBarcode(); +// if(staProtocolIn.getStamp() == 1 && barcode!=null && !barcode.isEmpty()) { +// log.error("鐢熸垚浠诲姟涓�"); +// +// WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>() +// .eq("barcode", barcode) +// .in("io_type", 107, 103, 57)); +// if (!Cools.isEmpty(checkPick)) { +// continue; +// } +// try { +// LocTypeDto locTypeDto = new LocTypeDto(staProtocol); +// +// SearchLocParam param = new SearchLocParam(); +// locTypeDto.setLocType1((short) 1); +// param.setBarcode(barcode); +// param.setIoType(1); +// param.setSourceStaNo(inSta.getStaNo()); +// param.setLocType1(locTypeDto.getLocType1()); +// param.setWeight(staProtocol.getWeight()); +// String response = new HttpHandler.Builder() +// .setTimeout(30, TimeUnit.SECONDS) +// .setUri(wmsUrl) +// .setPath("/rpc/pakin/loc/v1") +// .setJson(JSON.toJSONString(param)) +// .build() +// .doPost(); +// JSONObject jsonObject = JSON.parseObject(response); +// if (jsonObject.getInteger("code").equals(200)) { +// StartupDto dto = jsonObject.getObject("data", StartupDto.class); +// barcodeThread.setBarcode(""); +// staProtocolIn.setWorkNo(dto.getWorkNo()); +//// //staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo())); +//// staProtocol.setStaNo(dto.getStaNo().shortValue()); +// devpThread.setPakMk(staProtocolIn.getSiteId(), false); +// boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocolIn)); +// log.error("宸ヤ綔鍙蜂笅鍙�2锛�" + dto.getWorkNo() + "," + dto.getStaNo()); +// ledThread.errorReset(); +// log.error("缁勬墭璇锋眰鍚嶭ED閿欒娓呴櫎"); +// if (!result) { +// News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触"); +// +// throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); +// } +// } +// } catch (Exception e) { +// e.printStackTrace(); +// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); +// } +// }else{ +// if (staProtocol == null) { +// continue; +// } else { +// staProtocol = staProtocol.clone(); +// } +// +// // 灏哄妫�娴嬪紓甯� +// 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.getWeight() > 1000) { +// errMsg = "瓒呴噸鎴栨湭璇诲彇"; +// back = true; +// } +// if (!back && staProtocol.isBarcodeErr()) { +// errMsg = "鎵爜澶辫触"; +// back = true; +// } +// +// // 閫�鍥� +// if (back) { +// log.info("errmsg: " + errMsg); +//// News.warn("鎵爜鍏ュ簱澶辫触锛寋}鍏ュ簱绔欏洜{}寮傚父锛屾墭鐩樺凡琚��鍥�", inSta.getStaNo(), errMsg); +// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg)); +// +// if (!staProtocol.isLoading()) { +// continue; +// } +// if (!staProtocol.isPakMk()) { +// continue; +// } +// staProtocol.setWorkNo(wrkNo); +// News.info("{}PLC鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", 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)); +// log.error("杈撻�佺嚎涓嬪彂1锛�" + wrkNo + "," + inSta.getBackSta()); +// } +// +// // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢 +// if (staProtocol.isAutoing() +// && staProtocol.isLoading() +// && staProtocol.isInEnable() +// && !staProtocol.isEmptyMk() +// && staProtocol.isPakMk()) { +// if (Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) { +// News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode); +// +// staProtocol.setWorkNo(wrkNo); +// News.info("{}barcode鍏ュ簱鍥為��锛歿}锛屼换鍔″彿锛歿}", 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)); +// log.error("杈撻�佺嚎涓嬪彂1锛�" + wrkNo + "," + inSta.getBackSta()); +// continue; +// } +// // 鍒ゆ柇閲嶅宸ヤ綔妗� +// WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode); +// if (wrkMast != null) { +// News.error(barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,璇锋煡鐪媁CS杈撻�佺嚎鐣岄潰,宸ヤ綔鍙�={}", wrkMast.getWrkNo()); +// continue; +// } +// WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>() +// .eq("barcode", barcode) +// .in("io_type", 107, 103, 57)); +// if (!Cools.isEmpty(checkPick)) { +// continue; +// } +// try { +// LocTypeDto locTypeDto = new LocTypeDto(staProtocol); +// +// SearchLocParam param = new SearchLocParam(); +// locTypeDto.setLocType1((short) 1); +// param.setBarcode(barcode); +// param.setIoType(1); +// param.setSourceStaNo(inSta.getStaNo()); +// param.setLocType1(locTypeDto.getLocType1()); +// param.setWeight(staProtocol.getWeight()); +// String response = new HttpHandler.Builder() +// .setTimeout(30,TimeUnit.SECONDS) +// .setUri(wmsUrl) +// .setPath("/rpc/pakin/loc/v1") +// .setJson(JSON.toJSONString(param)) +// .build() +// .doPost(); +// JSONObject jsonObject = JSON.parseObject(response); +// if (jsonObject.getInteger("code").equals(200)) { +// StartupDto dto = jsonObject.getObject("data", StartupDto.class); +// barcodeThread.setBarcode(""); +// staProtocol.setWorkNo(dto.getWorkNo()); +// //staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo())); +// staProtocol.setStaNo(dto.getStaNo().shortValue()); +// devpThread.setPakMk(staProtocol.getSiteId(), false); +// boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); +// log.error("杈撻�佺嚎涓嬪彂2锛�" + dto.getWorkNo() + "," + dto.getStaNo()); +// +// ledThread.errorReset(); +// log.error("缁勬墭璇锋眰鍚嶭ED閿欒娓呴櫎"); +// +// if (!result) { +// News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触"); +// +// throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); +// } +// } else { +// if (jsonObject.getString("msg").equals("宸ヤ綔妗e凡瀛樺湪")) { +// continue; +// } +// staProtocol.setWorkNo(wrkNo); +// wrkNo++; +// staProtocol.setStaNo(inSta.getBackSta().shortValue()); +// devpThread.setPakMk(staProtocol.getSiteId(), false); +// MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); +// log.error("杈撻�佺嚎涓嬪彂2锛�" + staProtocol.getWorkNo() + "," + staProtocol.getStaNo()); +// +// String errorMsg = jsonObject.getString("msg"); +// if (!Cools.isEmpty(errorMsg)) { +// MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); +// } +// } +// +// } catch (Exception e) { +// e.printStackTrace(); +// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); +// } +// +// } +// } +// } +// } +// +// } + + public synchronized void generateStoreWrkFile(Integer mark) { + String methodName = Thread.currentThread().getStackTrace()[1].getMethodName(); + final Set<String> INVALID_BARCODES = new HashSet<>(Arrays.asList("NG", "NoRead", "00000000")); + + for (DevpSlave devp : slaveProperties.getDevp()) { + for (DevpSlave.Sta inSta : devp.getInSta()) { + BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); + LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + + StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); + StaProtocol staProtocolIn = devpThread.getStation().get(inSta.getStaNo() - 1); + + if (staProtocolIn == null || barcodeThread == null) continue; + staProtocolIn = staProtocolIn.clone(); + String barcode = barcodeThread.getBarcode(); + + // 濡傛灉鍓嶅伐浣嶆湁璐� + 鎵爜鍣ㄦ湁鏉$爜 + if (staProtocolIn.getStamp() == 1 && barcode != null && !barcode.isEmpty()) { + if (wrkMastService.selectOne(new EntityWrapper<WrkMast>() + .eq("barcode", barcode) + .in("io_type", 107, 103, 57)) != null) { + continue; + } + + try { + SearchLocParam param = new SearchLocParam(); + param.setBarcode(barcode); + param.setIoType(1); + param.setSourceStaNo(inSta.getStaNo()); + param.setLocType1((short) 1); + param.setWeight(staProtocolIn.getWeight()); + + String response = new HttpHandler.Builder() + .setTimeout(30, TimeUnit.SECONDS) + .setUri(wmsUrl) + .setPath("/rpc/pakin/loc/v1") + .setJson(JSON.toJSONString(param)) + .build() + .doPost(); + + JSONObject json = JSON.parseObject(response); + if (json.getInteger("code").equals(200)) { + StartupDto dto = json.getObject("data", StartupDto.class); + barcodeThread.setBarcode(""); + staProtocolIn.setWorkNo(dto.getWorkNo()); + devpThread.setPakMk(staProtocolIn.getSiteId(), false); + boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocolIn)); + ledThread.errorReset(); + log.error("宸ヤ綔鍙蜂笅鍙�2锛�" + dto.getWorkNo() + "," + dto.getStaNo()); + + if (!result) { + News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触"); + throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); + } + } + } catch (Exception e) { + log.error("缁勬墭浠诲姟寮傚父锛�", e); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + + continue; + } + + // 灏哄/閲嶉噺/鎵爜寮傚父妫�娴� + if (staProtocol == null) continue; + staProtocol = staProtocol.clone(); + boolean back = false; + String errMsg = ""; + + if (staProtocol.isFrontErr()) { errMsg = "鍓嶈秴闄�"; back = true; } + else if (staProtocol.isBackErr()) { errMsg = "鍚庤秴闄�"; back = true; } + else if (staProtocol.isHighErr()) { errMsg = "楂樿秴闄�"; back = true; } + else if (staProtocol.isLeftErr()) { errMsg = "宸﹁秴闄�"; back = true; } + else if (staProtocol.isRightErr()) { errMsg = "鍙宠秴闄�"; back = true; } + else if (staProtocol.getWeight() > 1000) { errMsg = "瓒呴噸鎴栨湭璇诲彇"; back = true; } + else if (staProtocol.isBarcodeErr()) { errMsg = "鎵爜澶辫触"; back = true; } + + // 灏哄寮傚父鍥為�� + if (back) { + log.info("errmsg: " + errMsg); + MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg)); + + if (!staProtocol.isLoading() || !staProtocol.isPakMk()) continue; + staProtocol.setWorkNo(wrkNo++); + staProtocol.setStaNo(inSta.getBackSta().shortValue()); + devpThread.setPakMk(staProtocol.getSiteId(), false); + MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + log.error("杈撻�佺嚎涓嬪彂1锛�" + wrkNo + "," + inSta.getBackSta()); + continue; + } + + // 鍏ュ簱鏉′欢婊¤冻锛屽紑濮嬭姹傚叆搴撳湴鍧� + if (staProtocol.isAutoing() && staProtocol.isLoading() + && staProtocol.isInEnable() && !staProtocol.isEmptyMk() && staProtocol.isPakMk()) { + + if (Cools.isEmpty(barcode) || INVALID_BARCODES.contains(barcode)) { + News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode); + staProtocol.setWorkNo(wrkNo++); + staProtocol.setStaNo(inSta.getBackSta().shortValue()); + devpThread.setPakMk(staProtocol.getSiteId(), false); + MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + log.error("杈撻�佺嚎涓嬪彂1锛歿} , {}", wrkNo, inSta.getBackSta()); + continue; + } + + if (wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode) != null || + wrkMastService.selectOne(new EntityWrapper<WrkMast>() + .eq("barcode", barcode) + .in("io_type", 107, 103, 57)) != null) { + News.error(barcode + "鏉$爜宸插瓨鍦ㄧ姸鎬佷负锛�2.璁惧涓婅蛋锛夌殑鏁版嵁锛岃鏌ョ湅WCS杈撻�佺嚎鐣岄潰"); + continue; + } + + try { + SearchLocParam param = new SearchLocParam(); + param.setBarcode(barcode); + param.setIoType(1); + param.setSourceStaNo(inSta.getStaNo()); + param.setLocType1((short) 1); + param.setWeight(staProtocol.getWeight()); + + String response = new HttpHandler.Builder() + .setTimeout(30, TimeUnit.SECONDS) + .setUri(wmsUrl) + .setPath("/rpc/pakin/loc/v1") + .setJson(JSON.toJSONString(param)) + .build() + .doPost(); + + JSONObject json = JSON.parseObject(response); + if (json.getInteger("code").equals(200)) { + StartupDto dto = json.getObject("data", StartupDto.class); + barcodeThread.setBarcode(""); + staProtocol.setWorkNo(dto.getWorkNo()); + staProtocol.setStaNo(dto.getStaNo().shortValue()); + devpThread.setPakMk(staProtocol.getSiteId(), false); + boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + ledThread.errorReset(); + log.error("杈撻�佺嚎涓嬪彂2锛�" + dto.getWorkNo() + "," + dto.getStaNo()); + + if (!result) { + News.error(methodName + ":鏇存柊plc绔欑偣淇℃伅澶辫触"); + throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); + } + } else { + String msg = json.getString("msg"); + if (!"宸ヤ綔妗e凡瀛樺湪".equals(msg)) { + staProtocol.setWorkNo(wrkNo++); + staProtocol.setStaNo(inSta.getBackSta().shortValue()); + devpThread.setPakMk(staProtocol.getSiteId(), false); + MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + log.error("杈撻�佺嚎涓嬪彂2锛�" + staProtocol.getWorkNo() + "," + staProtocol.getStaNo()); + if (!Cools.isEmpty(msg)) { + MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, msg)); + } + } + } + } catch (Exception e) { + log.error("缁勬墭浠诲姟寮傚父锛�", e); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + } + } + } + } + /** * wms鍏ュ簱 -- Gitblit v1.9.1