From 28a7821e43bd5763739fe67384cfea6693b3500b Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期二, 08 九月 2020 13:19:26 +0800 Subject: [PATCH] Merge branches 'gdwcs' and 'jswcs' of https://gitee.com/luxiaotao1123/zy-wcs into jswcs --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 389 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 319 insertions(+), 70 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 c400ffb..dc5ff4a 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -9,35 +9,43 @@ import com.zy.asrs.mapper.WaitPakinMapper; import com.zy.asrs.mapper.WrkMastMapper; import com.zy.asrs.service.*; +import com.zy.common.model.MatDto; import com.zy.common.model.StartupDto; +import com.zy.common.service.CommonService; +import com.zy.common.utils.CollectionUtils; 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.command.CrnCommand; +import com.zy.core.model.command.LedCommand; import com.zy.core.model.protocol.CrnProtocol; import com.zy.core.model.protocol.StaProtocol; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.BarcodeThread; import com.zy.core.thread.CrnThread; import com.zy.core.thread.DevpThread; +import com.zy.core.thread.LedThread; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** + * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔� * Created by vincent on 2020/8/6 */ @Slf4j @Service("mainService") +@Transactional public class MainServiceImpl { @Autowired @@ -64,43 +72,44 @@ /** * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2 */ - @Transactional + @Async public void generateStoreWrkFile() { // 鏍规嵁杈撻�佺嚎plc閬嶅巻 for (DevpSlave devp : slaveProperties.getDevp()) { // 閬嶅巻鍏ュ簱鍙� for (DevpSlave.Sta inSta : devp.getInSta()) { - // 鑾峰彇鏉$爜 + // 鑾峰彇鏉$爜鎵弿浠俊鎭� BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); String barcode = barcodeThread.getBarcode(); // 鑾峰彇鍏ュ簱绔欎俊鎭� DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); + if (staProtocol == null) { + continue; + } // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢 - if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInreq1() - && !staProtocol.isEmptyMk() && staProtocol.isInreq1() && staProtocol.getWorkNo() ==0 + if (staProtocol.isAutoing() && staProtocol.isLoading() + && !staProtocol.isEmptyMk() && staProtocol.getWorkNo() == 0 && staProtocol.isPakMk() && !Cools.isEmpty(barcode)) { // 鍒ゆ柇閲嶅宸ヤ綔妗� WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode); if (wrkMast != null) { - log.warn("宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负1鐨勬暟鎹�,宸ヤ綔鍙�-{}", wrkMast.getWrkNo()); + log.warn("宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={}", wrkMast.getWrkNo()); continue; } // 鑾峰彇鍏ュ簱閫氱煡妗� - List<WaitPakin> waitPakins = waitPakinMapper.selectList(new EntityWrapper<WaitPakin>().eq("barcode", barcode)); + List<WaitPakin> waitPakins = waitPakinMapper.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", barcode).eq("io_status", "N")); + if (waitPakins.isEmpty()) { + log.warn("鏃犳鍏ュ簱鏉$爜鏁版嵁銆傛潯鐮佸彿={}", barcode); + continue; + } // 宸ヤ綔鍙� int workNo = commonService.getWorkNo(0); // 妫�绱㈠簱浣� List<String> matNos = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList()); StartupDto startupDto = commonService.getLocNo(1, 1, inSta.getStaNo(), matNos); - String locNo = startupDto.getLocNo(); - if (!waitPakins.isEmpty()) { - // 鎻掑叆宸ヤ綔鏄庣粏妗� - wrkDetlService.createWorkDetail(workNo, waitPakins, barcode); - } else { - log.warn("鏃犳鍏ュ簱鏉$爜鏁版嵁---{}", barcode); - continue; - } + // 鎻掑叆宸ヤ綔鏄庣粏妗� + wrkDetlService.createWorkDetail(workNo, waitPakins, barcode); // 鎻掑叆宸ヤ綔涓绘。 wrkMast = new WrkMast(); @@ -134,14 +143,19 @@ if (!locMastService.updateById(locMast)){ throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�"); } + // 灏嗗叆搴撻�氱煡妗d慨鏀逛负宸插惎鍔� + if (wrkMastMapper.updateWaitPakInStep1(barcode) == 0) { + throw new CoolException("淇敼鍏ュ簱閫氱煡妗g姸鎬佷负宸插惎鍔�"); + } + + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护 barcodeThread.setBarcode(""); - staProtocol.setWorkNo(workNo); - staProtocol.setStaNo(startupDto.getStaNo()); + staProtocol.setWorkNo((short) workNo); + staProtocol.setStaNo(startupDto.getStaNo().shortValue()); staProtocol.setPakMk(false); - staProtocol.setInreq1(false); - boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(4, staProtocol)); + boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); if (!result) { throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); } @@ -154,10 +168,60 @@ } + /** + * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 1 ==>> 2 + */ + @Async + public void generateStoreWrkFile2() { + // 鏍规嵁杈撻�佺嚎plc閬嶅巻 + for (DevpSlave devp : slaveProperties.getDevp()) { + // 閬嶅巻鍏ュ簱鍙� + for (DevpSlave.Sta inSta : devp.getInSta()) { + // 鑾峰彇鍏ュ簱绔欎俊鎭� + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); + if (staProtocol == null) { continue; } + // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢 + if (staProtocol.isAutoing() && staProtocol.isLoading() + && !staProtocol.isEmptyMk() && staProtocol.getWorkNo() == 0 + && staProtocol.isPakMk()) { + // 鍒ゆ柇閲嶅宸ヤ綔妗� + WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo()); + if (wrkMast == null) { + continue; + } + + // 鏇存柊宸ヤ綔涓绘。 + wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋 + wrkMast.setModiTime(new Date()); + Integer update = wrkMastMapper.updateById(wrkMast); + if (update == 0) { + throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�"); + } + + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + + // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护 + staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); + staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); + staProtocol.setPakMk(false); + boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + if (!result) { + throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); + } + + } + + + } + } + + } /** * 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱 */ + @Async public void stnToCrnStnPick(){ for (DevpSlave devp : slaveProperties.getDevp()) { // 閬嶅巻鎷f枡鍏ュ簱鍙� @@ -165,10 +229,10 @@ // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭� DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo()); - - if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInreq1() + if (staProtocol == null) { continue; } + if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.getWorkNo() > 0 && staProtocol.isPakMk()){ - WrkMast wrkMast = wrkMastMapper.selectPickStep(staProtocol.getWorkNo()); + WrkMast wrkMast = wrkMastMapper.selectPickStep(staProtocol.getWorkNo().intValue()); if (wrkMast == null) { // 鏃犳嫞鏂欐暟鎹� continue; @@ -216,11 +280,10 @@ } // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护 - staProtocol.setWorkNo(wrkMast.getWrkNo()); - staProtocol.setStaNo(wrkMast.getStaNo()); + staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); + staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); staProtocol.setPakMk(false); - staProtocol.setInreq1(false); - boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(4, staProtocol)); + boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); if (!result) { throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); } @@ -235,13 +298,15 @@ /** * 鍫嗗灈鏈虹珯鍑哄簱鍒板嚭搴撶珯 */ + @Async public void crnStnToOutStn() { - for (DevpSlave devp : slaveProperties.getDevp()) { - // 閬嶅巻鎷f枡鍏ュ簱鍙� - for (DevpSlave.Sta outSta : devp.getOutSta()) { + for (CrnSlave crnSlave : slaveProperties.getCrn()) { + // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯 + for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) { // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅 - DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); - StaProtocol staProtocol = devpThread.getStation().get(outSta.getStaNo()); + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); + StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); + if (staProtocol == null) { continue; } if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) { // 鏌ヨ宸ヤ綔妗� WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId()); @@ -259,47 +324,50 @@ // 绉诲姩涓� continue; } - // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触 todo:luxiaotao + // 鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁� if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue()) - && crnProtocol.statusType == CrnStatusType.IDLE + && crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.forkPosType == CrnForkPosType.HOME) { + + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + + // 1.澶嶄綅鍫嗗灈鏈� + crnThread.setResetFlag(true); + + // 2.涓嬪彂绔欑偣淇℃伅 + staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); + staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); + if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) { + throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); + } + + // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触 wrkMast.setWrkSts(14L); wrkMast.setCrnEndTime(new Date()); if (wrkMastMapper.updateById(wrkMast) == 0) { throw new CoolException("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛屽伐浣滃彿"+wrkMast.getWrkNo()); } + } - // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- - - // 1.澶嶄綅鍫嗗灈鏈� 鏇存柊鍫嗗灈鏈轰俊鎭� 涓� 涓嬪彂plc鍛戒护 todo:luxiaotao - crnProtocol.setStatus(CrnStatusType.IDLE); - crnProtocol.setTaskNo((short)0); - if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(4, crnProtocol))) { - throw new CoolException("鏇存柊鍫嗗灈鏈轰俊鎭け璐�"); - } - - // 2.涓嬪彂绔欑偣淇℃伅 - staProtocol.setWorkNo(wrkMast.getWrkNo()); - staProtocol.setStaNo(wrkMast.getStaNo()); - if (!MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(4, staProtocol))) { - throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); - } } } } } /** - * 鍏ュ嚭搴� ===>> 鍫嗗灈鏈虹珯鍒板簱浣� 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂 + * 鍏ュ嚭搴� ===>> 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂 */ + @Async public void crnIoExecute(){ for (CrnSlave crn : slaveProperties.getCrn()) { // 鑾峰彇鍫嗗灈鏈轰俊鎭� CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); CrnProtocol crnProtocol = crnThread.getCrnProtocol(); + if (crnProtocol == null) { continue; } BasCrnp basCrnp = basCrnpService.selectById(crn.getId()); if (basCrnp == null) { + log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId()); continue; } // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛� @@ -307,52 +375,55 @@ // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡 if (crnProtocol.getLastIo().equals("I")) { if (basCrnp.getInEnable().equals("Y")) { - this.crnStnToLoc(crn); // 鍏ュ簱 + this.crnStnToLoc(crn, crnProtocol); // 鍏ュ簱 crnProtocol.setLastIo("O"); } else if (basCrnp.getOutEnable().equals("Y")) { - this.locToCrnStn(crn); // 鍑哄簱 + this.locToCrnStn(crn, crnProtocol); // 鍑哄簱 crnProtocol.setLastIo("I"); } } // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡 else if (crnProtocol.getLastIo().equals("O")) { if (basCrnp.getOutEnable().equals("Y")) { - this.locToCrnStn(crn); // 鍑哄簱 + this.locToCrnStn(crn, crnProtocol); // 鍑哄簱 crnProtocol.setLastIo("I"); } else if (basCrnp.getInEnable().equals("Y")) { - this.crnStnToLoc(crn); // 鍏ュ簱 + this.crnStnToLoc(crn, crnProtocol); // 鍏ュ簱 crnProtocol.setLastIo("O"); } } } // 搴撲綅绉昏浆 - this.locToLoc(crn); + this.locToLoc(crn, crnProtocol); } } /** * 鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鍒板簱浣� */ - private void crnStnToLoc(CrnSlave slave){ + @Async + public 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; } // 鏌ヨ绔欑偣璇︾粏淇℃伅 BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); if (staDetl == null) { - log.error("鍏ュ簱搴� ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo()); + log.error("鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo()); continue; } - if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staDetl.getCanining().equals("Y")) { + if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 + && staDetl.getCanining()!=null && staDetl.getCanining().equals("Y")) { flag = true; } if (!flag) { continue; } // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。 - WrkMast wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo()); + WrkMast wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue()); if(null == wrkMast) { log.error("鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getWorkNo()); continue; @@ -365,6 +436,11 @@ } if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) { log.error("鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts()); + continue; + } + + // 鍫嗗灈鏈烘帶鍒惰繃婊� + if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { continue; } @@ -398,7 +474,8 @@ /** * 鍑哄簱 ===>> 搴撲綅鍒板爢鍨涙満绔� */ - private void locToCrnStn(CrnSlave slave){ + @Async + public void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol){ for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) { // 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗� WrkMast wrkMast = wrkMastMapper.selectPakOutStep1(slave.getId()); @@ -419,6 +496,7 @@ // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); + if (staProtocol == null) { continue; } // 鏌ヨ绔欑偣璇︾粏淇℃伅 BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); if (staDetl == null) { @@ -426,9 +504,16 @@ continue; } // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵�� - if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting().equals("Y") + if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() !=null && staDetl.getCanouting().equals("Y") && staProtocol.getWorkNo() == 0) { // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + + // 鍫嗗灈鏈烘帶鍒惰繃婊� + if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { + continue; + } + + // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔� CrnCommand crnCommand = new CrnCommand(); crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙� crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙� @@ -459,7 +544,8 @@ /** * 搴撲綅绉昏浆 */ - private void locToLoc(CrnSlave slave){ + @Async + public void locToLoc(CrnSlave slave, CrnProtocol crnProtocol){ // 鑾峰彇宸ヤ綔妗d俊鎭� WrkMast wrkMast = wrkMastMapper.selectLocMove(slave.getId()); if (null == wrkMast) { @@ -486,6 +572,12 @@ if (!basCrnp.getInEnable().equals("Y") && !basCrnp.getOutEnable().equals("Y")) { return; } + + // 鍫嗗灈鏈烘帶鍒惰繃婊� + if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { + return; + } + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- CrnCommand crnCommand = new CrnCommand(); crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙� @@ -500,19 +592,31 @@ crnCommand.setDestinationPosZ(sta.getLev1().shortValue()); // 鐩爣搴撲綅灞� if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� + Date now = new Date(); + wrkMast.setWrkSts(12L); + wrkMast.setCrnStrTime(now); + wrkMast.setModiTime(now); + if (wrkMastMapper.updateById(wrkMast) == 0) { + log.error("銆愬簱浣嶇Щ杞�� 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); + } } + } /** - * 鎵ц瀵瑰伐浣滄。鐨勫叆搴撳畬鎴� + * 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣� */ + @Async public void storeFinished() { for (CrnSlave crn : slaveProperties.getCrn()) { // 鑾峰彇鍫嗗灈鏈轰俊鎭� CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); CrnProtocol crnProtocol = crnThread.getCrnProtocol(); + if (crnProtocol == null) { continue; } // 鐘舵�侊細绛夊緟纭 骞朵笖 浠诲姟瀹屾垚浣� = 1 - if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.taskFinish == 1 && crnProtocol.getTaskNo() != 0) { + if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) { // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。 WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue()); if (wrkMast == null) { @@ -523,21 +627,166 @@ if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)){ wrkMast.setWrkSts(4L); // 鍑哄簱 + 鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓細12.鍚婅溅鍑哄簱涓� ==> 14.鍑哄簱瀹屾垚 - } else if (wrkMast.getWrkSts() == 12) { - wrkMast.setWrkSts(14L); + // todo:luxiaotao +// } else if (wrkMast.getWrkSts() == 12) { +// wrkMast.setWrkSts(14L); + } else { + continue; } Date now = new Date(); wrkMast.setCrnEndTime(now); wrkMast.setModiTime(now); // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 if (wrkMastMapper.updateById(wrkMast) > 0) { - // 鍛戒护涓嬪彂鍖� ------------------------------------------------------------------------- - // 澶嶄綅 - if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(3, new CrnCommand()))) { - log.error("鍫嗗灈鏈哄浣嶅懡浠や笅鍙戝け璐ワ紝宸ヤ綔鍙�={}", wrkMast.getWrkNo()); + // 鍫嗗灈鏈哄浣� + crnThread.setResetFlag(true); + } + + // 瀹屾垚閫氱煡妗� +// if (wrkMastMapper.updateWaitPakInStep2(wrkMast.getBarcode()) == 0) { +// log.error("鍏ュ簱閫氱煡妗d慨鏀圭粨鏉熺姸鎬佸け璐ワ紝workNo=[{}]", wrkMast.getWrkNo()); +// } + + } + } + } + + /** + * 鍫嗗灈鏈哄紓甯镐俊鎭褰� + */ + public void recCrnErr(){ + + } + + + // ------------------------------------------------------------------------------- + + /** + * 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐� + */ + @Async + public void storeEmptyPlt(){ + for (DevpSlave devp : slaveProperties.getDevp()) { + // 閬嶅巻绌烘澘鍏ュ簱鍙� + for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) { + // 鑾峰彇绌烘澘鍏ュ簱绔欎俊鎭� + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + StaProtocol staProtocol = devpThread.getStation().get(emptyInSta.getStaNo()); + if (staProtocol == null) { continue; } + // 绔欑偣鏉′欢鍒ゆ柇 + if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() + && staProtocol.isEmptyMk() && staProtocol.getWorkNo() == 0 && staProtocol.isPakMk()) { + // 宸ヤ綔鍙� + int workNo = commonService.getWorkNo(0); + // 妫�绱㈠簱浣� + StartupDto startupDto = commonService.getLocNo(1, 10, emptyInSta.getStaNo(), null); + + // 鎻掑叆宸ヤ綔涓绘。 + WrkMast wrkMast = new WrkMast(); + wrkMast.setWrkNo(workNo); + wrkMast.setIoTime(new Date()); + wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋 + wrkMast.setIoType(10); // 鍏ュ嚭搴撶姸鎬侊細10.绌烘澘鍏ュ簱 + wrkMast.setIoPri(10D); // 浼樺厛绾э細10 + wrkMast.setCrnNo(startupDto.getCrnNo()); + wrkMast.setSourceStaNo(startupDto.getSourceStaNo()); + wrkMast.setStaNo(startupDto.getStaNo()); + wrkMast.setLocNo(startupDto.getLocNo()); + wrkMast.setFullPlt("N"); // 婊℃澘 + wrkMast.setPicking("N"); // 鎷f枡 + wrkMast.setExitMk("N"); // 閫�鍑� + wrkMast.setEmptyMk("Y"); // 绌烘澘 + wrkMast.setLinkMis("N"); +// wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷 + // 鎿嶄綔浜哄憳鏁版嵁 + 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("鏀瑰彉搴撲綅鐘舵�佸け璐�"); + } + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + + // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护 + staProtocol.setWorkNo((short) workNo); + staProtocol.setStaNo(startupDto.getStaNo().shortValue()); + staProtocol.setPakMk(false); + boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + if (!result) { + throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); + } + + + } + + + } + } + } + + /** + * 鍑哄簱 ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣� + */ + @Async + public void ledExecute() { + 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<>(); + for (Integer staNo : led.getStaArr()) { + // 鑾峰彇鍙夎溅绔欑偣 + StaProtocol staProtocol = devpThread.getStation().get(staNo); + if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo()) { continue; } + // 鑾峰彇宸ヤ綔妗f暟鎹� + WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo()); + if (wrkMast.getWrkSts() == 14L || wrkMast.getWrkSts() == 15L) { + wrkMasts.add(wrkMast); + // 娣诲姞鍛戒护 + List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo()); + LedCommand ledCommand = new LedCommand(); + ledCommand.setWorkNo(wrkMast.getWrkNo()); + ledCommand.setSourceLocNo(wrkMast.getSourceLocNo()); + ledCommand.setStaNo(wrkMast.getStaNo()); + wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMatnr(), 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()) { + if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) { + continue; + } + } + + // 淇敼涓绘。led鏍囪 + for (WrkMast wrkMast : wrkMasts) { + wrkMast.setOveMk("Y"); + wrkMast.setModiTime(new Date()); + if (wrkMastMapper.updateById(wrkMast) == 0) { + throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�"); + } + } + + // 鏇存柊绾跨▼褰撳墠宸ヤ綔鍙烽泦鍚� + ledThread.setWorkNos(workNos); + } } -- Gitblit v1.9.1