From db27cce4c6ead2054c63f403dd25756ce045ac88 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期四, 13 十月 2022 15:53:28 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/model/DevpSlave.java | 4 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 287 ++++++++++++++++++++++++++++++++++++----------- src/main/java/com/zy/asrs/mapper/WrkMastMapper.java | 2 src/main/resources/mapper/WrkMastMapper.xml | 4 src/main/java/com/zy/common/model/SearchLocParam.java | 2 src/main/java/com/zy/core/MainProcess.java | 3 src/main/resources/application.yml | 16 ++ 7 files changed, 247 insertions(+), 71 deletions(-) diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java index 44e4e48..9aab3b2 100644 --- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java +++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java @@ -41,6 +41,8 @@ // @Select("select top 1 * from asr_wrk_mast where wrk_no=#{workNo} and wrk_sts=14 and (io_type=103 or io_type=107 or io_type=104)") WrkMast selectPickStep(@Param("wrkNo")Short wrkNo); + WrkMast selectPickStepByBarcode(@Param("barcode")String barcode); + // 鍑哄簱绗竴姝ワ紝浠庡簱浣嶅埌鍫嗗灈鏈哄嚭搴撶珯 // @Select("select top 1 * from dbo.asr_wrk_mast where crn_no=#{crnNo} and wrk_sts=11 and io_type>100 order by io_pri desc,io_time,wrk_no asc") WrkMast selectPakOutStep111215(@Param("crnNo")Integer crnNO, @Param("sourceStaNo")Integer sourceStaNo); 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 39cac0e..722f314 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -67,6 +67,8 @@ @Autowired private LocMastService locMastService; @Autowired + private LocDetlService locDetlService; + @Autowired private StaDescService staDescService; @Autowired private BasCrnpService basCrnpService; @@ -266,12 +268,12 @@ } /** - * 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱 + * 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱 銆愮1闃舵銆� */ - public synchronized void stnToCrnStnPick(){ + public synchronized void stnToCrnStnPick0(){ for (DevpSlave devp : slaveProperties.getDevp()) { // 閬嶅巻鎷f枡鍏ュ簱鍙� - for (DevpSlave.Sta pickSta : devp.getPickSta()) { + for (DevpSlave.Sta pickSta : devp.getPickOutSta()) { // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭� DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); @@ -281,24 +283,119 @@ } else { staProtocol = staProtocol.clone(); } - if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()){ + if (staProtocol.isAutoing() + && staProtocol.isLoading() + && staProtocol.isInEnable() + && staProtocol.getWorkNo() > 0 + && staProtocol.isPakMk()) { + WrkMast wrkMast = wrkMastMapper.selectPickStep(staProtocol.getWorkNo()); + if (wrkMast == null) { + // 鏃犳嫞鏂欐暟鎹� + continue; + } + short staNo; + switch (wrkMast.getSourceStaNo()) { + case 104: + case 108: + staNo = 103; + break; + case 204: + case 208: + staNo = 203; + break; + default: + log.error("{}浠诲姟鍐嶅叆搴撳け璐ワ紝绯荤粺鏁版嵁寮傚父锛�", wrkMast.getWrkNo()); + continue; + } + // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护 +// staProtocol.setWorkNo((short) 9994); + staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); + staProtocol.setStaNo(staNo); + devpThread.setPakMk(staProtocol.getSiteId(), false); + boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + if (!result) { + log.error("鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId()); + } + } + } + } + } + + /** + * 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱銆愮2闃舵銆� + */ + public synchronized void stnToCrnStnPick1(){ + for (DevpSlave devp : slaveProperties.getDevp()) { + // 閬嶅巻鎷f枡鍏ュ簱鍙� + for (DevpSlave.Sta pickSta : devp.getPickInSta()) { + + // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭� + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + if (staProtocol.isAutoing() + && staProtocol.isLoading() + && staProtocol.isInEnable() + // 0 - 9990 鎴栬�� 9996 + && ((staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9990) || staProtocol.getWorkNo() == 9996) + && staProtocol.getStaNo().equals(staProtocol.getWorkNo()) + && staProtocol.isPakMk()){ // 鑾峰彇鏉$爜鎵弿浠俊鎭� -// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); -// if (barcodeThread == null) { -// continue; -// } -// String barcode = barcodeThread.getBarcode(); -// if(!Cools.isEmpty(barcode)) { -// log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode); -// if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { -// continue; -// } -// } else { -// continue; -// } + BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); + if (barcodeThread == null) { + continue; + } - WrkMast wrkMast = wrkMastMapper.selectPickStep(staProtocol.getWorkNo()); + WrkMast wrkMast = null; + if (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9990) { + wrkMast = wrkMastMapper.selectPickStep(staProtocol.getWorkNo()); + if (null == wrkMast) { + log.error("{}浠诲姟鍙烽敊璇紝鏆傛棤鎷f枡浠诲姟锛�", staProtocol.getWorkNo()); + } + } + if (staProtocol.getWorkNo() == 9996) { + String barcode = barcodeThread.getBarcode(); + if(!Cools.isEmpty(barcode)) { + log.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", pickSta.getBarcode(), barcode); + if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) { + staProtocol.setWorkNo((short) 9995); + staProtocol.setStaNo(pickSta.getBackSta().shortValue()); + devpThread.setPakMk(staProtocol.getSiteId(), false); + MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + + // led 寮傚父鏄剧ず + LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed()); + if (ledThread != null) { + String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯"; + MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg)); + } + continue; + } + } else { + staProtocol.setWorkNo((short) 9995); + staProtocol.setStaNo(pickSta.getBackSta().shortValue()); + devpThread.setPakMk(staProtocol.getSiteId(), false); + MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + + // led 寮傚父鏄剧ず + LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed()); + if (ledThread != null) { + String errorMsg = "鎵爜澶辫触锛岃閲嶈瘯"; + MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg)); + } + continue; + } + wrkMast = wrkMastMapper.selectPickStepByBarcode(barcode); + if (null == wrkMast) { + log.error("{}鏉$爜閿欒锛屾殏鏃犳嫞鏂欎换鍔★紒", barcode); + } + } + if (wrkMast == null) { // 鏃犳嫞鏂欐暟鎹� continue; @@ -308,67 +405,123 @@ continue; } - // 鑾峰彇鐩爣绔� - Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() - .eq("type_no", wrkMast.getIoType() - 50) - .eq("stn_no", pickSta.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯 - .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿 - StaDesc staDesc = staDescService.selectOne(wrapper); - if (Cools.isEmpty(staDesc)) { - log.error("鍏ュ簱璺緞涓嶅瓨鍦紒type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo()); - continue; - } - try { - // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。 + // 璁块棶 WMS 鑾峰彇鍏ュ簱搴撲綅 + LocTypeDto locTypeDto = new LocTypeDto(staProtocol); + SearchLocParam param = new SearchLocParam(); + param.setWrkNo(wrkMast.getWrkNo()); + param.setIoType(wrkMast.getIoType()); + param.setSourceStaNo(pickSta.getStaNo()); + param.setLocType1(locTypeDto.getLocType1()); + String response = new HttpHandler.Builder() + .setUri(wmsUrl) + .setPath("/rpc/pakin/loc/v1") + .setJson(JSON.toJSONString(param)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed()); + Integer code = jsonObject.getInteger("code"); + if (code.equals(200)) { + StartupDto dto = jsonObject.getObject("data", StartupDto.class); + + // 鑾峰彇鐩爣绔� + Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() + .eq("type_no", wrkMast.getIoType() - 50) + .eq("stn_no", pickSta.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯 + .eq("crn_no", dto.getCrnNo()); // 鍫嗗灈鏈哄彿 + StaDesc staDesc = staDescService.selectOne(wrapper); + if (Cools.isEmpty(staDesc)) { + log.error("鍏ュ簱璺緞涓嶅瓨鍦紒type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo()); + continue; + } + + // 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。 // if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) { // throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。澶辫触"); // } - // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� - if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { - throw new CoolException("淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�"); + // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗� + if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { + throw new CoolException(wrkMast.getWrkNo() + "淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�"); + } + + // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�) + Integer staNo = staDesc.getCrnStn(); + // 鏇存柊宸ヤ綔妗f暟鎹姸鎬� + wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57 + wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋 + wrkMast.setSourceStaNo(pickSta.getStaNo()); // 婧愮珯 + wrkMast.setStaNo(staNo); // 鐩爣绔� + wrkMast.setCrnNo(dto.getCrnNo()); + wrkMast.setLocNo(dto.getLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣� + wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌� + wrkMast.setModiTime(new Date()); + if (wrkMastMapper.updateById(wrkMast) == 0) { + throw new CoolException(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); + } + if (wrkMastMapper.setSteEmpty(wrkMast.getWrkNo()) == 0) { + throw new CoolException(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); + } + // 淇敼婧愬簱浣嶇姸鎬� O.绌哄簱浣� + LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo()); + locMast.setLocSts("O"); + locMast.setModiTime(new Date()); + if (!locMastService.updateById(locMast)) { + throw new CoolException(wrkMast.getWrkNo() + "淇敼婧愬簱浣嶇姸鎬� O.绌哄簱浣�"); + } + // 淇敼鐩爣搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴� + locMast = locMastService.selectById(wrkMast.getLocNo()); + locMast.setLocSts("Q"); + locMast.setModiTime(new Date()); + if (!locMastService.updateById(locMast)) { + throw new CoolException(wrkMast.getWrkNo() + "淇敼鐩爣搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�"); + } + // 搴撳瓨鏄庣粏杞Щ + if (!locDetlService.updateLocNo(wrkMast.getLocNo(), wrkMast.getSourceLocNo())) { + throw new CoolException(wrkMast.getWrkNo() + "浠诲姟搴撳瓨鏄庣粏杞Щ澶辫触锛侊紒锛�"); + } + + // 鏉$爜璁惧澶勭悊 + barcodeThread.setBarcode(""); + + // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂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) { + log.error("鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId()); + } + + } else if (code == 500){ + if (ledThread != null) { + String errorMsg = jsonObject.getString("msg"); + if (!Cools.isEmpty(errorMsg)) { + MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg)); + } + } + log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response); + } else { + staProtocol.setWorkNo((short) 9995); + 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 = jsonObject.getString("msg"); +// String errorMsg = barcode + "鎵樼洏璇嗗埆寮傚父锛岃鍏堣繘琛岀粍鎵橈紒"; + MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, errorMsg)); + } } - // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�) - Integer staNo = staDesc.getCrnStn(); - // 鏇存柊宸ヤ綔妗f暟鎹姸鎬� - wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57 - wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋 - wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯 - wrkMast.setStaNo(staNo); // 鐩爣绔� - wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣� - wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌� - wrkMast.setModiTime(new Date()); - if (wrkMastMapper.updateById(wrkMast) == 0) { - throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); - } - if (wrkMastMapper.setSteEmpty(wrkMast.getWrkNo()) == 0) { -// throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�"); - } - // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴� - LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); - locMast.setLocSts("Q"); - locMast.setModiTime(new Date()); - if (!locMastService.updateById(locMast)) { - throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�"); - } } catch (Exception e) { e.printStackTrace(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); - continue; - } - - // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂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) { - log.error("鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId()); +// continue; } } - } } diff --git a/src/main/java/com/zy/common/model/SearchLocParam.java b/src/main/java/com/zy/common/model/SearchLocParam.java index 159024e..eb230b0 100644 --- a/src/main/java/com/zy/common/model/SearchLocParam.java +++ b/src/main/java/com/zy/common/model/SearchLocParam.java @@ -9,6 +9,8 @@ @Data public class SearchLocParam { + private Integer wrkNo; + private Integer ioType; private Integer sourceStaNo; diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java index b40b59c..6826c57 100644 --- a/src/main/java/com/zy/core/MainProcess.java +++ b/src/main/java/com/zy/core/MainProcess.java @@ -47,7 +47,8 @@ mainService.generateStoreWrkFile(); // 缁勬墭 mainService.generateStoreWrkFile0(); // WMS鍏ュ簱 // 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱 - mainService.stnToCrnStnPick(); + mainService.stnToCrnStnPick0(); + mainService.stnToCrnStnPick1(); // 鍑哄簱 ===>> 鍫嗗灈鏈哄嚭搴撶珯鍒板嚭搴撶珯 mainService.crnStnToOutStn(); // 鍏ュ嚭搴� ===>> 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂 diff --git a/src/main/java/com/zy/core/model/DevpSlave.java b/src/main/java/com/zy/core/model/DevpSlave.java index e327301..c5c02f0 100644 --- a/src/main/java/com/zy/core/model/DevpSlave.java +++ b/src/main/java/com/zy/core/model/DevpSlave.java @@ -25,7 +25,9 @@ private List<Sta> outSta = new ArrayList<>(); - private List<Sta> pickSta = new ArrayList<>(); + private List<Sta> pickInSta = new ArrayList<>(); + + private List<Sta> pickOutSta = new ArrayList<>(); @Data public static class Sta { diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 63008e2..e2c7d89 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -186,9 +186,21 @@ # 鍑哄簱鍙�2 outSta[1]: staNo: 200 - # 鎷f枡鍏ュ簱鍙� - pickSta[0]: + # 鎷f枡鍑哄簱鍙� + pickOutSta[0]: staNo: 300 + # 鎷f枡鍑哄簱鍙� + pickInSta[0]: + staNo: 103 + barcode: ${wcs-slave.barcode[0].id} + backSta: 100 + led: ${wcs-slave.led[0].id} + # 鎷f枡鍑哄簱鍙� + pickInSta[1]: + staNo: 203 + barcode: ${wcs-slave.barcode[1].id} + backSta: 200 + led: ${wcs-slave.led[2].id} # 鏉$爜鎵弿浠� barcode[0]: id: 1 diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml index 4349215..c4b0371 100644 --- a/src/main/resources/mapper/WrkMastMapper.xml +++ b/src/main/resources/mapper/WrkMastMapper.xml @@ -109,6 +109,10 @@ select top 1 * from asr_wrk_mast where wrk_no=#{wrkNo} and wrk_sts=17 and (io_type=103 or io_type=107 or io_type=104) </select> + <select id="selectPickStepByBarcode" resultMap="BaseResultMap"> + select top 1 * from asr_wrk_mast where barcode=#{barcode} and wrk_sts=17 and (io_type=103 or io_type=107 or io_type=104) + </select> + <select id="selectPakOutStep111215" resultMap="BaseResultMap"> select top 1 * from dbo.asr_wrk_mast where crn_no=#{crnNo} and source_sta_no=#{sourceStaNo} and wrk_sts in (11,12,13,14,15, 16) and io_type>100 order by io_pri desc,io_time,wrk_no asc </select> -- Gitblit v1.9.1