From ec25a39ab1d455e8c38e043ccdf2172139462068 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@63.com> Date: 星期四, 24 十一月 2022 10:18:45 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 1078 +++++++++++++++++++++++++++++++++-------------------------- 1 files changed, 598 insertions(+), 480 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 275afd2..3134932 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -15,6 +15,7 @@ import com.zy.common.model.MatDto; import com.zy.common.model.SearchLocParam; import com.zy.common.model.StartupDto; +import com.zy.common.model.enums.WrkChargeType; import com.zy.common.service.CommonService; import com.zy.common.utils.CollectionUtils; import com.zy.common.utils.HttpHandler; @@ -43,7 +44,10 @@ 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.stream.Collectors; /** @@ -94,7 +98,6 @@ * 缁勬墭 * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2 */ - @Async public void generateStoreWrkFile() { // 鏍规嵁杈撻�佺嚎plc閬嶅巻 for (DevpSlave devp : slaveProperties.getDevp()) { @@ -225,7 +228,6 @@ * wms鍏ュ簱 * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 1 ==>> 2 */ - @Async public void generateStoreWrkFile0() { // 鏍规嵁杈撻�佺嚎plc閬嶅巻 for (DevpSlave devp : slaveProperties.getDevp()) { @@ -642,8 +644,6 @@ } // 搴撲綅绉昏浆 this.locToLoc(crn, crnProtocol); - // 婕旂ず浠诲姟 - this.steMoveDemo(crn, crnProtocol); } } } @@ -720,42 +720,37 @@ String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getLocNo()); LocMast shallowLoc = locMastService.selectById(shallowLocNo); // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒 - switch (shallowLoc.getLocSts()) { - case "P": - case "R": { - WrkMast waitWrkMast = wrkMastMapper.selectBySourceLocNo(shallowLocNo); - if (null == waitWrkMast) { - log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo); - } else { - if (waitWrkMast.getWrkSts() < 17) { - waitWrkMast.setIoPri(20D); - waitWrkMast.setModiTime(new Date()); - if (wrkMastMapper.updateById(waitWrkMast) == 0) { - log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo()); - } - //20220719 Add锛屽鏋滄祬搴撲綅鐘舵�佷负P/R锛屽伐浣滅姸鎬佷负14/15,璇存槑娴呭簱浣嶅凡缁忕┖浜嗭紝鍙互鎵ц鍏ュ簱浠诲姟 - continue; + if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) { + WrkMast waitWrkMast = wrkMastMapper.selectBySourceLocNo(shallowLocNo); + if (null == waitWrkMast) { + log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo); + } else { + if (waitWrkMast.getWrkSts() < 17) { + waitWrkMast.setIoPri(30D); + waitWrkMast.setModiTime(new Date()); + if (wrkMastMapper.updateById(waitWrkMast) == 0) { + log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo()); } - } - break; - } - case "F": - case "D": - // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔� - if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) { - wrkMast.setUpdMk("Y"); - wrkMast.setIoPri(20D); - wrkMastMapper.updateById(wrkMast); - // 鐢熸垚宸ヤ綔妗c�佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�併�佷笅鍙戝爢鍨涙満鍛戒护锛堢珛椹墽琛�) - moveLocForDeepLoc(slave, shallowLoc); - } - continue; - case "Q": { - WrkMast waitWrkMast = wrkMastMapper.selectBySourceLocNo(shallowLocNo); - if (null != waitWrkMast && waitWrkMast.getWrkSts() == 9) { + //20220719 Add锛屽鏋滄祬搴撲綅鐘舵�佷负P/R锛屽伐浣滅姸鎬佷负14/15,璇存槑娴呭簱浣嶅凡缁忕┖浜嗭紝鍙互鎵ц鍏ュ簱浠诲姟 continue; } - break; + } + } + if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { + // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔� + if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) { + wrkMast.setUpdMk("Y"); + wrkMast.setIoPri(20D); + wrkMastMapper.updateById(wrkMast); + // 鐢熸垚宸ヤ綔妗c�佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�併�佷笅鍙戝爢鍨涙満鍛戒护锛堢珛椹墽琛�) + moveLocForDeepLoc(slave, shallowLoc); + } + continue; + } + if (shallowLoc.getLocSts().equals("Q")) { + WrkMast waitWrkMast = wrkMastMapper.selectBySourceLocNo(shallowLocNo); + if (null != waitWrkMast && waitWrkMast.getWrkSts() == 9) { + continue; } } } @@ -846,7 +841,7 @@ } - // 鐩爣搴撲綅 ===>> 闈炴渶澶栧眰搴撲綅 + // 鐩爣搴撲綅 ===>> 闈炴渶澶栧眰搴撲綅 } else { // 鍒ゆ柇灏忚溅鏄惁鍦ㄥ綋鍓嶇粍搴撲綅锛屽鏋滄槸鍒欏皢绌挎杞︾Щ鑷虫渶澶栧眰锛岀瓑寰呭爢鍨涙満鏀捐揣锛涘鏋滀笉鏄紝鍒欏爢鍨涙満瀵绘壘绌挎杞︼紝骞舵斁缃綋鍓嶇粍鏈�澶栧眰 Integer steNo = this.hasCarOfIdle(wrkMast.getLocNo()); @@ -898,7 +893,7 @@ } } } - // 娌℃湁灏忚溅 + // 娌℃湁灏忚溅 } else { if (wrkMast.getWrkSts() == 2L && wrkMast.getSteNo() == null) { // 瀵绘壘褰撳墠鍫嗗灈鏈哄搴旂殑灏忚溅 @@ -992,15 +987,13 @@ log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo); } else { if(waitWrkMast.getWrkSts() == 11) { - waitWrkMast.setIoPri(15D); + waitWrkMast.setIoPri(20D); waitWrkMast.setModiTime(new Date()); if (wrkMastMapper.updateById(waitWrkMast) == 0) { log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo()); } - continue; - } else { - } + continue; } } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔� @@ -1029,9 +1022,9 @@ crnCommand.setSourcePosX(sourceSta.getRow1().shortValue()); // 婧愬簱浣嶆帓 crnCommand.setSourcePosY(sourceSta.getBay1().shortValue()); // 婧愬簱浣嶅垪 crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue()); // 婧愬簱浣嶅眰 -// crnCommand.setDestinationPosX(crnStn.getRow().shortValue()); // 鐩爣搴撲綅鎺� -// crnCommand.setDestinationPosY(crnStn.getBay().shortValue()); // 鐩爣搴撲綅鍒� -// crnCommand.setDestinationPosZ(crnStn.getLev().shortValue()); // 鐩爣搴撲綅灞� + crnCommand.setDestinationPosX(crnStn.getRow().shortValue()); // 鐩爣搴撲綅鎺� + crnCommand.setDestinationPosY(crnStn.getBay().shortValue()); // 鐩爣搴撲綅鍒� + crnCommand.setDestinationPosZ(crnStn.getLev().shortValue()); // 鐩爣搴撲綅灞� if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); } else { @@ -1080,7 +1073,7 @@ } return true; } - // 涓嶆槸鏈�澶栧眰搴撲綅锛岄渶瑕佷娇鐢ㄧ┛姊溅鎼繍鍚庯紝鍐嶅爢鍨涙満鍑哄簱 + // 涓嶆槸鏈�澶栧眰搴撲綅锛岄渶瑕佷娇鐢ㄧ┛姊溅鎼繍鍚庯紝鍐嶅爢鍨涙満鍑哄簱 } else { // 褰撳墠缁勫簱浣嶆槸鍚︽湁绌挎杞� Integer steNo = this.hasCarOfIdle(wrkMast.getSourceLocNo()); @@ -1100,7 +1093,7 @@ steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙� steCommand.setTaskMode(SteTaskModeType.findOutByLoc(wrkMast.getSourceLocNo())); // 浠诲姟妯″紡: 鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙� - steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue()); + steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), false).shortValue()); steCommand.setBay(steProtocol.getBay()); steCommand.setLev(steProtocol.getLev()); @@ -1131,7 +1124,7 @@ crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙� crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 - crnCommand.setSourcePosX(Utils.getGroupRow(sourceSta.getRow1()).shortValue()); // 婧愬簱浣嶆帓 + crnCommand.setSourcePosX(Utils.getGroupRow(sourceSta.getRow1(), false).shortValue()); // 婧愬簱浣嶆帓 crnCommand.setSourcePosY(sourceSta.getBay1().shortValue()); // 婧愬簱浣嶅垪 crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue()); // 婧愬簱浣嶅眰 crnCommand.setDestinationPosX(crnStn.getRow().shortValue()); // 鐩爣搴撲綅鎺� @@ -1152,7 +1145,7 @@ } } - // 娌℃湁灏忚溅 + // 娌℃湁灏忚溅 } else { if (wrkMast.getWrkSts() == 11L && wrkMast.getSteNo() == null) { // 瀵绘壘鏈�杩戠殑灏忚溅 @@ -1258,12 +1251,46 @@ // 鑾峰彇鍫嗗灈鏈轰俊鎭� SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId()); SteProtocol steProtocol = steThread.getSteProtocol(); - if (steProtocol == null) { continue; } - if (Utils.getGroupRow(locNo).equals(Utils.getGroupRow(steProtocol.getRow().intValue())) && steProtocol.getBay() == Utils.getBay(locNo) && steProtocol.getLev() == Utils.getLev(locNo)) { - return steProtocol.getSteNo().intValue(); + BasSte basSte = basSteService.selectById(ste.getId()); + if (Cools.isEmpty(steProtocol, basSte)) { continue; } + if (Utils.getGroupRow(locNo, true).equals(Utils.getGroupRow(basSte.getRow(), true)) + && basSte.getBay() == Utils.getBay(locNo) + && basSte.getLev() == Utils.getLev(locNo)) { + return ste.getId(); } } return null; + } + + /** + * 褰撳墠搴撲綅缁勬槸鍚﹀瓨鍦ㄥ叾浠栧皬杞� + */ + public Integer existOtherSte(String locNo, Integer steNo) { + Integer otherSteNo = null; + for (SteSlave ste : slaveProperties.getSte()) { + if (ste.getId().equals(steNo)) { continue; } + // 鑾峰彇鍫嗗灈鏈轰俊鎭� + SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId()); + SteProtocol steProtocol = steThread.getSteProtocol(); + if (steProtocol == null) { continue; } + if (steProtocol.isEnable()) { + BasSte basSte = basSteService.selectById(ste.getId()); + if (basSte != null) { + if ((Utils.getGroupRow(locNo, true).equals(Utils.getGroupRow(basSte.getRow(), true)) + && basSte.getBay() == Utils.getBay(locNo) + && basSte.getLev() == Utils.getLev(locNo)) + || + (Utils.getGroupRow(locNo, true).equals(Utils.getGroupRow(steProtocol.getRow().intValue(), true)) + && steProtocol.getBay() == Utils.getBay(locNo) + && steProtocol.getLev() == Utils.getLev(locNo)) + ) { + otherSteNo = ste.getId(); + break; + } + } + } + } + return otherSteNo; } /** @@ -1276,7 +1303,9 @@ SteProtocol steProtocol = steThread.getSteProtocol(); if (steProtocol == null) { continue; } if (steProtocol.isIdle()) { - if (Utils.getGroupRow(locNo).equals(Utils.getGroupRow(steProtocol.getRow().intValue())) && steProtocol.getBay() == Utils.getBay(locNo) && steProtocol.getLev() == Utils.getLev(locNo)) { + if (Utils.getGroupRow(locNo, true).equals(Utils.getGroupRow(steProtocol.getRow().intValue(), true)) + && steProtocol.getBay() == Utils.getBay(locNo) + && steProtocol.getLev() == Utils.getLev(locNo)) { return steProtocol.getSteNo().intValue(); } } @@ -1288,17 +1317,32 @@ * 鏌ユ壘褰撳墠搴撲綅鏈�閫傚悎鐨勭┛姊溅鏉ヤ綔涓� */ public SteThread queryIdleCar(WrkMast wrkMast) { - Integer crnNo = wrkMast.getCrnNo(); - BasSte basSte = basSteService.findByCrnNo(crnNo); - // 鑾峰彇绌挎杞︿俊鎭� - SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, basSte.getSteNo()); - SteProtocol steProtocol = steThread.getSteProtocol(); - if (steProtocol != null) { - if (steProtocol.isIdle()) { - return steThread; + List<BasSte> basStes = basSteService.selectList(new EntityWrapper<>()); + int val = 0; + SteThread result = null; + for (BasSte basSte : basStes) { + // 鑾峰彇绌挎杞︿俊鎭� + SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, basSte.getSteNo()); + SteProtocol steProtocol = steThread.getSteProtocol(); + if (steProtocol == null) { continue; } + if (!steProtocol.isIdle()) { continue; } + String locNo = wrkMast.getWrkSts() < 10 ? wrkMast.getLocNo() : wrkMast.getSourceLocNo(); + LocMast locMast = locMastService.selectById(locNo); + int lev = locMast.getLev1(); + int bay = locMast.getBay1(); + int levAbs = Math.abs(lev - steProtocol.getLev()); + int bayAbs = Math.abs(bay - steProtocol.getBay()); + if (val == 0) { + val = levAbs + bayAbs; + result = steThread; + } else { + if ((levAbs + bayAbs) < val) { + val = levAbs + bayAbs; + result = steThread; + } } } - return null; + return result; } /** @@ -1318,7 +1362,7 @@ steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙� steCommand.setTaskMode(SteTaskModeType.findWaiting(steProtocol.getRow().intValue())); // 浠诲姟妯″紡: 鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙� - steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue()); + steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue()); steCommand.setBay(steProtocol.getBay()); steCommand.setLev(steProtocol.getLev()); @@ -1350,9 +1394,9 @@ SteCommand steCommand = new SteCommand(); steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙� steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙� - steCommand.setTaskMode(SteTaskModeType.findOriginByLoc(steProtocol.getRow())); // 浠诲姟妯″紡: 鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙� + steCommand.setTaskMode(SteTaskModeType.findOriginByLoc(steProtocol.getRow().intValue())); // 浠诲姟妯″紡: 鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙� - steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue()); + steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue()); steCommand.setBay(steProtocol.getBay()); steCommand.setLev(steProtocol.getLev()); @@ -1385,7 +1429,7 @@ steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙� steCommand.setTaskMode(SteTaskModeType.findOriginByLoc(steProtocol)); // 浠诲姟妯″紡: 鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙� - steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue()); + steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue()); steCommand.setBay(steProtocol.getBay()); steCommand.setLev(steProtocol.getLev()); @@ -1403,40 +1447,6 @@ } /** - * 璁╁皬杞︿粠 杩滅偣 ====>> 绉诲姩鍒拌繎鐐� - * 绛夊緟鍫嗗灈鏈烘惉杩� - */ - public void letCarBeReady(WrkCharge wrkCharge, Integer steNo) { - // 鑾峰彇绌挎杞︿俊鎭� - SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); - SteProtocol steProtocol = steThread.getSteProtocol(); - if (steProtocol == null) { return; } - if (steProtocol.isIdle()) { - - // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- - SteCommand steCommand = new SteCommand(); - steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙� - steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙� - steCommand.setTaskMode(SteTaskModeType.findOriginByLoc(steProtocol)); // 浠诲姟妯″紡: 鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙� - - steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue()); - steCommand.setBay(steProtocol.getBay()); - steCommand.setLev(steProtocol.getLev()); - - if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) { - log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand)); - } else { - // 淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞� - wrkCharge.setSteNo(steNo); - wrkCharge.setModiTime(new Date()); - if (!wrkChargeService.updateById(wrkCharge)) { - log.error("淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); - } - } - } - } - - /** * 鍏ュ嚭搴� ===>> 鍫嗗灈鏈烘惉鍏ュ皬杞� */ public void carMoveIn(WrkMast wrkMast, Integer steNo, CrnProtocol crnProtocol) { @@ -1446,10 +1456,18 @@ if (steProtocol == null) { return; } if (steProtocol.isIdle()) { // 鍫嗗灈鏈虹┖闂� - if (crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() == 0) { + if (crnProtocol.getStatusType().equals(CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) { LocMast locMast; // 鍏ュ簱鎼� if (wrkMast.getWrkSts() <= 10) { + + // 鍒ゆ柇琚Щ搴撲綅鏄惁瀛樺湪鍏朵粬灏忚溅 + Integer otherSte = existOtherSte(wrkMast.getLocNo(), steNo); + if (otherSte != null) { + log.warn("{}鍙峰皬杞︾Щ鍏}搴撲綅缁勫け璐ワ紝鍘熷洜锛氬瓨鍦▄}鍙风┛姊溅锛�", steNo, wrkMast.getLocNo(), otherSte); + return; + } + locMast = locMastService.selectById(wrkMast.getLocNo()); // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 -------------------------------------------------------------------------- CrnCommand crnCommand = new CrnCommand(); @@ -1457,17 +1475,17 @@ crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙� crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 - crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue()); // 婧愬簱浣嶆帓 + crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue()); // 婧愬簱浣嶆帓 crnCommand.setSourcePosY(steProtocol.getBay()); // 婧愬簱浣嶅垪 crnCommand.setSourcePosZ(steProtocol.getLev()); // 婧愬簱浣嶅眰 - crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo()).shortValue()); // 鐩爣搴撲綅鎺� + crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo(), true).shortValue()); // 鐩爣搴撲綅鎺� crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 鐩爣搴撲綅鍒� crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 鐩爣搴撲綅灞� if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); } else { // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞� - steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo()), locMast.getBay1(), locMast.getLev1()); + steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo(), true), locMast.getBay1(), locMast.getLev1()); // 淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉 => 4.杩佸叆灏忚溅 Date now = new Date(); wrkMast.setWrkSts(4L); @@ -1479,6 +1497,13 @@ } // 鍑哄簱鎼� } else { + // 鍒ゆ柇琚Щ搴撲綅鏄惁瀛樺湪鍏朵粬灏忚溅 + Integer otherSte = existOtherSte(wrkMast.getSourceLocNo(), steNo); + if (otherSte != null) { + log.warn("{}鍙峰皬杞︾Щ鍏}搴撲綅缁勫け璐ワ紝鍘熷洜锛氬瓨鍦▄}鍙风┛姊溅锛�", steNo, wrkMast.getSourceLocNo(), otherSte); + return; + } + locMast = locMastService.selectById(wrkMast.getSourceLocNo()); // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 -------------------------------------------------------------------------- CrnCommand crnCommand = new CrnCommand(); @@ -1486,17 +1511,17 @@ crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙� crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 - crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue()); // 婧愬簱浣嶆帓 + crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue()); // 婧愬簱浣嶆帓 crnCommand.setSourcePosY(steProtocol.getBay()); // 婧愬簱浣嶅垪 crnCommand.setSourcePosZ(steProtocol.getLev()); // 婧愬簱浣嶅眰 - crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo()).shortValue()); // 鐩爣搴撲綅鎺� + crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo(), true).shortValue()); // 鐩爣搴撲綅鎺� crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 鐩爣搴撲綅鍒� crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 鐩爣搴撲綅灞� if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); } else { // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞� - steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo()), locMast.getBay1(), locMast.getLev1()); + steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo(), true), locMast.getBay1(), locMast.getLev1()); // 淇敼宸ヤ綔妗g姸鎬� 12.灏忚溅寰呮惉 => 13.杩佸叆灏忚溅 Date now = new Date(); wrkMast.setWrkSts(13L); @@ -1523,14 +1548,22 @@ // 绌挎杞︾┖闂� if (steProtocol.isIdle()) { // 鍫嗗灈鏈虹┖闂� - if (crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() == 0) { + if (crnProtocol.getStatusType().equals(CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) { BasSte basSte = basSteService.selectById(steNo); if (basSte == null) { log.error("{}鍙风┛姊溅鍦ㄦ暟鎹簱涓嶅瓨鍦紒锛侊紒", steNo); return; } + String idleLocNo = basSte.getIdleLoc(); + + // 鍒ゆ柇琚Щ搴撲綅鏄惁瀛樺湪鍏朵粬灏忚溅 + Integer otherSte = existOtherSte(idleLocNo, steNo); + if (otherSte != null) { + log.warn("{}鍙峰皬杞︾Щ鍏}搴撲綅缁勫け璐ワ紝鍘熷洜锛氬瓨鍦▄}鍙风┛姊溅锛�", steNo, idleLocNo, otherSte); + return; + } // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 -------------------------------------------------------------------------- CrnCommand crnCommand = new CrnCommand(); @@ -1538,17 +1571,17 @@ crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙� crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 - crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue()); // 婧愬簱浣嶆帓 + crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue()); // 婧愬簱浣嶆帓 crnCommand.setSourcePosY(steProtocol.getBay()); // 婧愬簱浣嶅垪 crnCommand.setSourcePosZ(steProtocol.getLev()); // 婧愬簱浣嶅眰 - crnCommand.setDestinationPosX(Utils.getGroupRow(idleLocNo).shortValue()); // 鐩爣搴撲綅鎺� + crnCommand.setDestinationPosX(Utils.getGroupRow(idleLocNo, true).shortValue()); // 鐩爣搴撲綅鎺� crnCommand.setDestinationPosY((short) Utils.getBay(idleLocNo)); // 鐩爣搴撲綅鍒� crnCommand.setDestinationPosZ((short) Utils.getLev(idleLocNo)); // 鐩爣搴撲綅灞� if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); } else { // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞� - steThread.modifyPos(Utils.getGroupRow(idleLocNo), Utils.getBay(idleLocNo), Utils.getLev(idleLocNo)); + steThread.modifyPos(Utils.getGroupRow(idleLocNo, true), Utils.getBay(idleLocNo), Utils.getLev(idleLocNo)); // 淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉 => 5.杩佸嚭灏忚溅 Date now = new Date(); wrkMast.setWrkSts(5L); @@ -1601,6 +1634,20 @@ log.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬厖鐢典换鍔″彿锛歿}", wrkCharge.getSteNo(), wrkCharge.getWrkNo()); } } + } else if (wrkCharge.getWrkSts() == 27) { + // 鍫嗗灈鏈哄浣� + crnThread.setResetFlag(true); + // 绌挎杞﹂噸鏂板畾浣嶆帓鍒楀眰 + SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkCharge.getSteNo()); + if (steThread.confirmPos()) { + // 27.鏀捐嚦鍏呯數浣� ===>> 28.鍏呯數灏辩华 + wrkCharge.setWrkSts(28L); + if (!wrkChargeService.updateById(wrkCharge)) { + log.error("淇敼鍏呯數浠诲姟鐘舵�� 27.鏀捐嚦鍏呯數浣� ===>> 28.鍏呯數灏辩华 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); + } + } else { + log.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬厖鐢典换鍔″彿锛歿}", wrkCharge.getSteNo(), wrkCharge.getWrkNo()); + } } else if (wrkCharge.getWrkSts() == 34) { // 34.鍚婅溅鎼繍 ===>> 35.灏忚溅灏辩华 wrkCharge.setWrkSts(35L); @@ -1613,6 +1660,34 @@ SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkCharge.getSteNo()); if (!steThread.confirmPos()) { log.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬厖鐢典换鍔″彿锛歿}", wrkCharge.getSteNo(), wrkCharge.getWrkNo()); + } + } + } else if (wrkCharge.getWrkSts() == 42) { + // 42.鍚婅溅鎼繍 ===>> 43.灏忚溅鍒拌揪 + wrkCharge.setWrkSts(43L); + if (!wrkChargeService.updateById(wrkCharge)) { + log.error("淇敼澶嶄綅浠诲姟鐘舵�� 42.鍚婅溅鎼繍 ===>> 43.灏忚溅鍒拌揪 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); + } else { + // 鍫嗗灈鏈哄浣� + crnThread.setResetFlag(true); + // 绌挎杞﹂噸鏂板畾浣嶆帓鍒楀眰 + SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkCharge.getSteNo()); + if (!steThread.confirmPos()) { + log.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬浣嶄换鍔″彿锛歿}", wrkCharge.getSteNo(), wrkCharge.getWrkNo()); + } + } + } else if (wrkCharge.getWrkSts() == 46) { + // 46.鏀捐嚦寰呮満浣� ===>> 47.澶嶄綅鎴愬姛 + wrkCharge.setWrkSts(47L); + if (!wrkChargeService.updateById(wrkCharge)) { + log.error("淇敼澶嶄綅浠诲姟鐘舵�� 46.鏀捐嚦寰呮満浣� ===>> 47.澶嶄綅鎴愬姛 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); + } else { + // 鍫嗗灈鏈哄浣� + crnThread.setResetFlag(true); + // 绌挎杞﹂噸鏂板畾浣嶆帓鍒楀眰 + SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkCharge.getSteNo()); + if (!steThread.confirmPos()) { + log.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬浣嶄换鍔″彿锛歿}", wrkCharge.getSteNo(), wrkCharge.getWrkNo()); } } } @@ -1638,7 +1713,7 @@ } } else { // 鍒ゆ柇鏄惁闇�瑕佸皬杞﹀叆搴� - if (locMastService.isOutMost(wrkMast.getLocNo())) { + if (locMastService.isOutMost(wrkMast.getLocNo(), true)) { // ==> 9.鍏ュ簱瀹屾垚 wrkMast.setWrkSts(9L); Date now = new Date(); @@ -1779,128 +1854,16 @@ } // 搴撲綅绉昏浆 } else { - if (wrkMast.getWrkSts() == 16) { - Date now = new Date(); - if (locMastService.isOutMost(wrkMast.getLocNo())) { - // 16.鍚婅溅鍑哄簱涓� ==> 9.鍏ュ簱瀹屾垚 - wrkMast.setWrkSts(9L); - wrkMast.setCrnEndTime(now); - } else { - // 16.鍚婅溅鍑哄簱涓� ==> 9.鍏ュ簱瀹屾垚 - wrkMast.setWrkSts(9L); - } - wrkMast.setModiTime(now); - // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 - if (wrkMastMapper.updateById(wrkMast) > 0) { - // 鍫嗗灈鏈哄浣� - crnThread.setResetFlag(true); - } else { - log.error("淇敼宸ヤ綔妗g姸鎬� 16.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); - } - } else if (wrkMast.getWrkSts() == 4) { - // 4.杩佸叆灏忚溅 ==> 6.灏忚溅寰呭叆 - wrkMast.setWrkSts(6L); - Date now = new Date(); - wrkMast.setCrnEndTime(now); - wrkMast.setModiTime(now); - // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 - if (wrkMastMapper.updateById(wrkMast) > 0) { - // 鍫嗗灈鏈哄浣� - crnThread.setResetFlag(true); - // 绌挎杞﹂噸鏂板畾浣嶆帓鍒楀眰 - SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkMast.getSteNo()); - if (!steThread.confirmPos()) { - log.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬伐浣滄。浠诲姟鍙凤細{}", wrkMast.getSteNo(), wrkMast.getWrkNo()); - } - // 绌挎杞﹀幓寰呮満浣� - BasSte basSte = basSteService.selectById(wrkMast.getSteNo()); - SteCommand steCommand = new SteCommand(); - steCommand.setSteNo(wrkMast.getSteNo()); // 绌挎杞︾紪鍙� - steCommand.setTaskNo(9999); // 宸ヤ綔鍙� - steCommand.setTaskMode(SteTaskModeType.findWaiting(basSte.getRow())); // 浠诲姟妯″紡: 鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙� -// steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue()); -// steCommand.setBay(steProtocol.getBay()); -// steCommand.setLev(steProtocol.getLev()); - if (!MessageQueue.offer(SlaveType.Ste, wrkMast.getSteNo(), new Task(2, steCommand))) { - log.error("绌挎杞﹀緟鏈轰綅鍛戒护涓嬪彂澶辫触锛岀┛姊溅鍙�={}锛屼换鍔℃暟鎹�={}", wrkMast.getSteNo(), JSON.toJSON(steCommand)); - } - } else { - log.error("淇敼宸ヤ綔妗g姸鎬� 4.杩佸叆灏忚溅 => 6.灏忚溅寰呭叆 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); - } - // 鍏ュ簱 ===>> 杩佸嚭灏忚溅 瀹屾垚 - } else if (wrkMast.getWrkSts() == 7){ - // 鍒ゆ柇鏄惁闇�瑕佸皬杞﹀叆搴� - if (locMastService.isOutMost(wrkMast.getLocNo())) { - // ==> 9.鍏ュ簱瀹屾垚 - wrkMast.setWrkSts(9L); - Date now = new Date(); - wrkMast.setCrnEndTime(now); - wrkMast.setModiTime(now); - // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 - if (wrkMastMapper.updateById(wrkMast) > 0) { - // 鍫嗗灈鏈哄浣� + if (!locMastService.isShuttle(wrkMast.getLocNo())) { + if (wrkMast.getWrkSts() == 16 && wrkMast.getIoType() == 11){ + // 鏇存柊宸ヤ綔妗g姸鎬佷负 17.鍑哄簱瀹屾垚 + wrkMast.setWrkSts(17L); + wrkMast.setCrnEndTime(new Date()); + if (wrkMastMapper.updateById(wrkMast) != 0) { + // 澶嶄綅鍫嗗灈鏈� crnThread.setResetFlag(true); } else { - log.error("淇敼宸ヤ綔妗g姸鎬� 7.鍚婅溅鍏ュ簱涓� => 9.鍏ュ簱瀹屾垚 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); - } - } else { - // 缁欑┛姊溅涓嬪彂鍛戒护 - Integer steNo = wrkMast.getSteNo(); - SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); - SteProtocol steProtocol = steThread.getSteProtocol(); - if (steProtocol == null) { continue; } - if (steProtocol.isIdle()) { - // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- - SteCommand steCommand = new SteCommand(); - steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙� - steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙� - steCommand.setTaskMode(SteTaskModeType.findInByLoc(wrkMast.getLocNo())); // 浠诲姟妯″紡: 鎼叆搴� - if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) { - log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand)); - } else { - // 淇敼宸ヤ綔妗g姸鎬� 7.鍚婅溅鍏ュ簱涓� => 8.灏忚溅鎼叆搴� - wrkMast.setWrkSts(8L); - Date now = new Date(); - wrkMast.setCrnEndTime(now); - wrkMast.setModiTime(now); - if (wrkMastMapper.updateById(wrkMast) > 0) { - // 鍫嗗灈鏈哄浣� - crnThread.setResetFlag(true); - } else { - log.error("淇敼宸ヤ綔妗g姸鎬� 7.鍚婅溅鍏ュ簱涓� => 8.灏忚溅鎼叆搴� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); - } - } - } - } - } else if (wrkMast.getWrkSts() == 13) { - // 缁欑┛姊溅涓嬪彂鍛戒护 - Integer steNo = wrkMast.getSteNo(); - SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); - SteProtocol steProtocol = steThread.getSteProtocol(); - if (steProtocol == null) { continue; } - // 绌挎杞﹂噸鏂板畾浣嶆帓鍒楀眰 - if (!steThread.confirmPos()) { - log.error("{}鍙风┛姊溅閲嶆柊瀹氫綅澶辫触锛佷綔涓氬伐浣滄。浠诲姟鍙凤細{}", wrkMast.getSteNo(), wrkMast.getWrkNo()); - } - // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- - SteCommand steCommand = new SteCommand(); - steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙� - steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙� - steCommand.setTaskMode(SteTaskModeType.findOutByLoc(wrkMast.getSourceLocNo())); // 浠诲姟妯″紡: 鎼嚭搴� - if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) { - log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand)); - } else { - // 13.杩佸叆灏忚溅 ==> 14.灏忚溅鎼嚭搴� - wrkMast.setWrkSts(14L); - Date now = new Date(); - wrkMast.setCrnEndTime(now); - wrkMast.setModiTime(now); - // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 - if (wrkMastMapper.updateById(wrkMast) > 0) { - // 鍫嗗灈鏈哄浣� - crnThread.setResetFlag(true); - } else { - log.error("淇敼宸ヤ綔妗g姸鎬� 13.杩佸叆灏忚溅 ==> 14.灏忚溅鎼嚭搴� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); + log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负 17.鍑哄簱瀹屾垚 澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo()); } } } @@ -1940,18 +1903,26 @@ steThread.setResetFlag(true); } } else if (wrkCharge.getWrkSts() == 25) { - // 25.灏忚溅鍘诲厖鐢� ===>> 26.绛夊緟鍏呯數 + // 25.灏忚溅璧拌 ===>> 26.绛夊緟鍏呯數 wrkCharge.setWrkSts(26L); if (!wrkChargeService.updateById(wrkCharge)) { - log.error("淇敼鍏呯數浠诲姟鐘舵�� 25.灏忚溅鍘诲厖鐢� ===>> 26.绛夊緟鍏呯數 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); + log.error("淇敼鍏呯數浠诲姟鐘舵�� 25.灏忚溅璧拌 ===>> 26.绛夊緟鍏呯數 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); } else { steThread.setResetFlag(true); } - } else if (wrkCharge.getWrkSts() == 32) { + } else if (wrkCharge.getWrkSts() == 29) { + // 29.寮�濮嬪厖鐢� ===>> 30.瀹屾垚鍏呯數 + wrkCharge.setWrkSts(30L); + if (!wrkChargeService.updateById(wrkCharge)) { + log.error("淇敼鍏呯數浠诲姟鐘舵�� 29.寮�濮嬪厖鐢� ===>> 30.瀹屾垚鍏呯數 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); + } else { + steThread.setResetFlag(true); + } + } else if (wrkCharge.getWrkSts() == 32) { // 32.灏忚溅璧拌 ===>> 33.灏忚溅寰呮惉 wrkCharge.setWrkSts(33L); if (!wrkChargeService.updateById(wrkCharge)) { - log.error("淇敼婕旂ず浠诲姟鐘舵�� 25.灏忚溅鍘诲厖鐢� ===>> 26.绛夊緟鍏呯數 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); + log.error("淇敼婕旂ず浠诲姟鐘舵�� 32.灏忚溅璧拌 ===>> 33.灏忚溅寰呮惉 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); } else { steThread.setResetFlag(true); } @@ -1960,6 +1931,14 @@ wrkCharge.setWrkSts(37L); if (!wrkChargeService.updateById(wrkCharge)) { log.error("淇敼婕旂ず浠诲姟鐘舵�� 36.灏忚溅璧拌 ===>> 37.婕旂ず瀹屾垚 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); + } else { + steThread.setResetFlag(true); + } + } else if (wrkCharge.getWrkSts() == 44) { + // 44.灏忚溅璧拌 ===>> 45.灏忚溅寰呮惉 + wrkCharge.setWrkSts(45L); + if (!wrkChargeService.updateById(wrkCharge)) { + log.error("淇敼婕旂ず浠诲姟鐘舵�� 44.灏忚溅璧拌 ===>> 45.灏忚溅寰呮惉 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); } else { steThread.setResetFlag(true); } @@ -1999,7 +1978,9 @@ } else { if (wrkMast.getMk().equals("I")) { String locNo = wrkMast.getLocNo(); - if (Utils.getGroupRow(locNo).equals(Utils.getGroupRow(steProtocol.getRow().intValue())) && steProtocol.getBay() == Utils.getBay(locNo) && steProtocol.getLev() == Utils.getLev(locNo)) { + if (Utils.getGroupRow(locNo, false).equals(Utils.getGroupRow(steProtocol.getRow().intValue(), false)) + && steProtocol.getBay() == Utils.getBay(locNo) + && steProtocol.getLev() == Utils.getLev(locNo)) { // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 6.灏忚溅寰呭叆 wrkMast.setWrkSts(6L); } else { @@ -2501,7 +2482,15 @@ /** * 灏忚溅鐢甸噺妫�娴� ===>> 鍙戣捣鍏呯數 */ + @SuppressWarnings("serial") public synchronized void loopSteCharge() { + if (null != wrkChargeService.selectWorking(null, WrkChargeType.reset)) { + return; + } + if (null != wrkChargeService.selectWorking(null, WrkChargeType.charge)) { + return; + } + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); for (SteSlave ste : slaveProperties.getSte()) { SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId()); SteProtocol steProtocol = steThread.getSteProtocol(); @@ -2512,6 +2501,7 @@ if (steProtocol.getMode() == 0 || !steProtocol.statusType.equals(SteStatusType.IDLE) || basSte.getPakMk().equals("Y") + || basSte.getAutoCharge().equals("N") // || steProtocol.getChargeStatus() == 1 ) { continue; @@ -2522,223 +2512,314 @@ if (steProtocol.getCharge() > Float.parseFloat(basSte.getChargeLine())) { continue; } - WrkCharge wrkCharge = wrkChargeService.selectWorking(steProtocol.getSteNo().intValue()); + WrkCharge wrkCharge = wrkChargeService.selectWorking(null, WrkChargeType.charge); if (wrkCharge == null && steProtocol.getChargeStatus() == 0) { - String idleLoc = basSte.getIdleLoc(); + // 瀵绘壘绌洪棽鍏呯數妗� + SteChargeType steCharge = null; + do { + String locNo; + if (!devpThread.charge0) { + SteChargeType first = SteChargeType.FIRST; + locNo = first.locNo; + if (basSteService.hasCarOfLocNo(locNo) == null + && wrkChargeService.selectWorkingOfCharge(first.ssbm) != null) { + steCharge = first; + break; + } + } + if (!devpThread.charge1) { + SteChargeType second = SteChargeType.SECOND; + locNo = second.locNo; + if (basSteService.hasCarOfLocNo(locNo) == null + && wrkChargeService.selectWorkingOfCharge(second.ssbm) != null) { + steCharge = second; + break; + } + } + if (!devpThread.charge2) { + SteChargeType third = SteChargeType.THIRD; + locNo = third.locNo; + if (basSteService.hasCarOfLocNo(locNo) == null + && wrkChargeService.selectWorkingOfCharge(third.ssbm) != null) { + steCharge = third; + break; + } + } + break; + } while (false); + + if (steCharge == null) { + log.warn("{}鍙峰皬杞︺�愮數閲忥細{}銆戝厖鐢靛け璐ワ紝鍘熷洜锛氭病鏈夌┖闂插厖鐢垫々銆�", ste.getId(), steProtocol.getCharge()); + continue; + } + String chargeLocNo = steCharge.locNo; wrkCharge = new WrkCharge(); wrkCharge.setSteNo(ste.getId()); + wrkCharge.setCharge(steCharge.ssbm); wrkCharge.setWrkNo(commonService.getChargeWorkNo(4)); wrkCharge.setWrkSts(21L); // 21.鍑嗗鍏呯數 - wrkCharge.setCrnNo(basSte.getCrnNo()); + wrkCharge.setCrnNo(2); // 鍥哄畾2鍙峰爢鍨涙満 wrkCharge.setIoPri((double) 10); - wrkCharge.setLocNo(idleLoc); + wrkCharge.setLocNo(chargeLocNo); wrkCharge.setMemo("charge"); + wrkCharge.setAppeTime(new Date()); if (!wrkChargeService.insert(wrkCharge)) { log.error("淇濆瓨{}鍙风┛姊溅鍏呯數浠诲姟澶辫触!!!", ste.getId()); continue; } // 澶勪簬鍏呯數搴撲綅缁� - if (Utils.getGroupRow(idleLoc).equals(Utils.getGroupRow(steProtocol.getRow().intValue())) && steProtocol.getBay() == Utils.getBay(idleLoc) && steProtocol.getLev() == Utils.getLev(idleLoc)) { - // 淇敼宸ヤ綔妗g姸鎬� 21.鍑嗗鍏呯數 => 24.灏忚溅鍒拌揪 - wrkCharge.setWrkSts(24L); + if (steProtocol.getRow().intValue() == Utils.getRow(chargeLocNo) + && steProtocol.getBay().intValue() == Utils.getBay(chargeLocNo) + && steProtocol.getLev().intValue() == Utils.getLev(chargeLocNo)) { + // 淇敼宸ヤ綔妗g姸鎬� 21.鍑嗗鍏呯數 => 28.鍏呯數灏辩华 + wrkCharge.setWrkSts(28L); wrkCharge.setModiTime(new Date()); if (!wrkChargeService.updateById(wrkCharge)) { - log.error("淇敼鍏呯數浠诲姟鐘舵�� 21.鍑嗗鍏呯數 => 24.灏忚溅鍒拌揪 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); + log.error("淇敼鍏呯數浠诲姟鐘舵�� 21.鍑嗗鍏呯數 => 28.鍏呯數灏辩华 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); } } else { this.letCarBeWaiting(wrkCharge, ste.getId()); } - } else { - // filter - if (wrkCharge == null || (wrkCharge.getWrkSts() < 26 && steProtocol.getChargeStatus() == 1)) { - continue; - } - - // 22.灏忚溅寰呮惉 - if (wrkCharge.getWrkSts() == 22) { - // 鎼皬杞﹁嚦鍏呯數搴撲綅 - LocMast locMast = locMastService.selectById(basSte.getIdleLoc()); - - // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 -------------------------------------------------------------------------- - CrnCommand crnCommand = new CrnCommand(); - crnCommand.setCrnNo(wrkCharge.getCrnNo()); // 鍫嗗灈鏈虹紪鍙� - crnCommand.setTaskNo(wrkCharge.getWrkNo().shortValue()); // 宸ヤ綔鍙� - crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� - crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 - crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue()); // 婧愬簱浣嶆帓 - crnCommand.setSourcePosY(steProtocol.getBay()); // 婧愬簱浣嶅垪 - crnCommand.setSourcePosZ(steProtocol.getLev()); // 婧愬簱浣嶅眰 - crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo()).shortValue()); // 鐩爣搴撲綅鎺� - crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 鐩爣搴撲綅鍒� - crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 鐩爣搴撲綅灞� - if (!MessageQueue.offer(SlaveType.Crn, wrkCharge.getCrnNo(), new Task(2, crnCommand))) { - log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getCrnNo(), JSON.toJSON(crnCommand)); - } else { - // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞� - steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo()), locMast.getBay1(), locMast.getLev1()); - // 淇敼宸ヤ綔妗g姸鎬� 22.灏忚溅寰呮惉 => 23.鍚婅溅鎼繍 - Date now = new Date(); - wrkCharge.setWrkSts(23L); - wrkCharge.setCrnStrTime(now); - wrkCharge.setModiTime(now); - if (!wrkChargeService.updateById(wrkCharge)) { - log.error("淇敼宸ヤ綔妗g姸鎬� 22.灏忚溅寰呮惉 => 23.鍚婅溅鎼繍 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); - } - } - - } else if (wrkCharge.getWrkSts() == 24L) { - // 灏忚溅琛岄┒鑷冲厖鐢典綅 - if (steProtocol.statusType.equals(SteStatusType.IDLE) && steProtocol.getPakMk().equals("N")) { - if (steProtocol.getChargeStatus() == 1) { continue; } - // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- - SteCommand steCommand = new SteCommand(); - steCommand.setSteNo(wrkCharge.getSteNo()); // 绌挎杞︾紪鍙� - steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙� - steCommand.setTaskMode(SteTaskModeType.findChargeByLoc(steProtocol.getRow().intValue())); - if (!MessageQueue.offer(SlaveType.Ste, wrkCharge.getSteNo(), new Task(2, steCommand))) { - log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getSteNo(), JSON.toJSON(steCommand)); - } else { - // 淇敼宸ヤ綔妗g姸鎬� 24.灏忚溅鍒拌揪 ===> 25.灏忚溅鍘诲厖鐢� - wrkCharge.setWrkSts(25L); - Date now = new Date(); - wrkCharge.setCrnEndTime(now); - wrkCharge.setModiTime(now); - if (!wrkChargeService.updateById(wrkCharge)) { - log.error("淇敼鍏呯數浠诲姟鐘舵�� 24.灏忚溅鍒拌揪 ===> 25.灏忚溅鍘诲厖鐢� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); - } - } - } - } else if (wrkCharge.getWrkSts() == 26) { - if (steProtocol.getChargeStatus() == 0) { continue; } - // 缁欒緭閫佺嚎涓嬪彂鍏呯數浠诲姟 - SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); - SteChargeType steChargeType = SteChargeType.get(wrkCharge.getLocNo()); - if (null != steChargeType) { - if (devpThread.charge(steChargeType.ssbm - 1, true)) { - // 淇敼宸ヤ綔妗g姸鎬� 26.绛夊緟鍏呯數 ===> 28.瀹屾垚鍏呯數 - wrkCharge.setWrkSts(28L); - if (!wrkChargeService.updateById(wrkCharge)) { - log.error("淇敼鍏呯數浠诲姟鐘舵�� 26.绛夊緟鍏呯數 ===> 28.瀹屾垚鍏呯數 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); - } else { - steThread.setResetFlag(true); - } - } - } else { - log.error("鑾峰彇鍏呯數妗╁彿澶辫触锛岃В鏋愬簱浣嶏細{}", wrkCharge.getLocNo()); - } - } + break; } } catch (Exception e) { - log.error("fail", e); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + log.error("loopSteCharge fail", e); } } } - - public List<String> crn1DemoLocs = new ArrayList<String>(); public String crn1LastLoc = ""; - public List<String> crn2DemoLocs = new ArrayList<String>(); public String crn2LastLoc = ""; - public List<String> crn3DemoLocs = new ArrayList<String>(); public String crn3LastLoc = ""; - public synchronized void demo() { - if (Cools.isEmpty(crn1DemoLocs)) { - crn1DemoLocs = locMastService.getDemoNextLoc(1); + /** + * 鎵ц灏忚溅鍏呯數浠诲姟 + */ + public synchronized void executeSteCharge() { + WrkCharge wrkCharge = wrkChargeService.selectWorking(null, WrkChargeType.charge); + if (null == wrkCharge) { return; } + Integer steNo = wrkCharge.getSteNo(); + SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); + SteProtocol steProtocol = steThread.getSteProtocol(); + BasSte basSte = basSteService.selectById(steNo); + if (Cools.isEmpty(steProtocol, basSte)) { return; } + if (steProtocol.getMode() == 0 + || !steProtocol.statusType.equals(SteStatusType.IDLE) + || basSte.getPakMk().equals("Y") + || basSte.getAutoCharge().equals("N") +// || steProtocol.getChargeStatus() == 1 + ) { + return; } - if (Cools.isEmpty(crn2DemoLocs)) { - crn2DemoLocs = locMastService.getDemoNextLoc(2); + if (!steProtocol.isEnable()) { + return; } - if (Cools.isEmpty(crn3DemoLocs)) { - crn3DemoLocs = locMastService.getDemoNextLoc(3); + if (steProtocol.getCharge() > Float.parseFloat(basSte.getChargeLine())) { + wrkCharge.setWrkSts(30L); + wrkChargeMapper.updateById(wrkCharge); + return; } - for (CrnSlave crn : slaveProperties.getCrn()) { - if (!crn.getDemo()) { - continue; - } // 蹇呴』涓烘紨绀虹姸鎬� - - CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); - CrnProtocol crnProtocol = crnThread.getCrnProtocol(); - if (crnProtocol == null) { - continue; + try { + // filter + if (wrkCharge.getWrkSts() < 28 && steProtocol.getChargeStatus() == 1) { + return; } - // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛� - if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { + // 22.灏忚溅寰呮惉 + if (wrkCharge.getWrkSts() == 22) { - // filter - if (wrkChargeService.selectCount(new EntityWrapper<WrkCharge>() - .eq("crn_no", crn.getId()).between("wrk_sts", 31, 36)) > 0) { - continue; - } + // 鎼皬杞﹁嚦灏忚溅璧板悜閫氶亾 + List<String> channel = slaveProperties.getChannel(); + for (String channelLocNo : channel) { + Integer otherSte = existOtherSte(channelLocNo, wrkCharge.getSteNo()); + if (null != otherSte) { + log.warn("{}鍙峰皬杞︾Щ鍏}搴撲綅缁勫け璐ワ紝鍘熷洜锛氬瓨鍦▄}鍙风┛姊溅锛�", wrkCharge.getSteNo(), channelLocNo, otherSte); + } else { + LocMast channelLoc = locMastService.selectById(channelLocNo); - int steNo = crn.getId(); - SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); - SteProtocol steProtocol = steThread.getSteProtocol(); - BasSte basSte = basSteService.selectById(steNo); - if (Cools.isEmpty(steProtocol, basSte)) { continue; } - - // 鍙湁褰撶┛姊溅绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛� - if (steProtocol.isIdle()) { - - String locNo = null; - Iterator<String> iterator = crn1DemoLocs.iterator(); - if (crn.getId() == 1) { - iterator = crn1DemoLocs.iterator(); - } else if (crn.getId() == 2) { - iterator = crn2DemoLocs.iterator(); - } else if (crn.getId() == 3) { - iterator = crn3DemoLocs.iterator(); - } - while (iterator.hasNext()) { - String next = iterator.next(); - String lastLoc = ""; - if (crn.getId() == 1) { - lastLoc = crn1LastLoc; - } else if (crn.getId() == 2) { - lastLoc = crn2LastLoc; - } else if (crn.getId() == 3) { - lastLoc = crn3LastLoc; - } - if (!Cools.isEmpty(lastLoc)) { - if (!lastLoc.substring(2, 7).equals(next.substring(2, 7)) || !Utils.getGroupRow(lastLoc).equals(Utils.getGroupRow(next))) { - locNo = next; - iterator.remove(); - break; + CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkCharge.getCrnNo()); + CrnProtocol crnProtocol = crnThread.getCrnProtocol(); + if (crnProtocol == null) { continue; } + // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛� + if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { + // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 -------------------------------------------------------------------------- + CrnCommand crnCommand = new CrnCommand(); + crnCommand.setCrnNo(wrkCharge.getCrnNo()); // 鍫嗗灈鏈虹紪鍙� + crnCommand.setTaskNo(wrkCharge.getWrkNo().shortValue()); // 宸ヤ綔鍙� + crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� + crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 + crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue()); // 婧愬簱浣嶆帓 + crnCommand.setSourcePosY(steProtocol.getBay()); // 婧愬簱浣嶅垪 + crnCommand.setSourcePosZ(steProtocol.getLev()); // 婧愬簱浣嶅眰 + crnCommand.setDestinationPosX(Utils.getGroupRow(channelLoc.getLocNo(), true).shortValue()); // 鐩爣搴撲綅鎺� + crnCommand.setDestinationPosY(channelLoc.getBay1().shortValue()); // 鐩爣搴撲綅鍒� + crnCommand.setDestinationPosZ(channelLoc.getLev1().shortValue()); // 鐩爣搴撲綅灞� + if (!MessageQueue.offer(SlaveType.Crn, wrkCharge.getCrnNo(), new Task(2, crnCommand))) { + log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getCrnNo(), JSON.toJSON(crnCommand)); } else { - iterator.remove(); + // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞� + steThread.modifyPos(Utils.getGroupRow(channelLoc.getLocNo(), true), channelLoc.getBay1(), channelLoc.getLev1()); + // 淇敼宸ヤ綔妗g姸鎬� 22.灏忚溅寰呮惉 => 23.鍚婅溅鎼繍 + Date now = new Date(); + wrkCharge.setWrkSts(23L); + wrkCharge.setCrnStrTime(now); + wrkCharge.setModiTime(now); + if (!wrkChargeService.updateById(wrkCharge)) { + log.error("淇敼宸ヤ綔妗g姸鎬� 22.灏忚溅寰呮惉 => 23.鍚婅溅鎼繍 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); + } } - } else { - locNo = next; - iterator.remove(); break; } } - if (!Cools.isEmpty(locNo)) { - if (crn.getId() == 1) { - crn1LastLoc = locNo; - } else if (crn.getId() == 2) { - crn2LastLoc = locNo; - } else if (crn.getId() == 3) { - crn3LastLoc = locNo; + } + + } else if (wrkCharge.getWrkSts() == 24L) { + // 灏忚溅琛岄┒閫氶亾 + if (steProtocol.statusType.equals(SteStatusType.IDLE) && steProtocol.getPakMk().equals("N")) { + if (steProtocol.getChargeStatus() == 1) { return; } + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + SteCommand steCommand = new SteCommand(); + steCommand.setSteNo(wrkCharge.getSteNo()); // 绌挎杞︾紪鍙� + steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙� + steCommand.setTaskMode(SteTaskModeType.GO_ORIGIN); // 鍘诲彸绔� + + steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), false).shortValue()); + steCommand.setBay(steProtocol.getBay()); + steCommand.setLev(steProtocol.getLev()); + if (!MessageQueue.offer(SlaveType.Ste, wrkCharge.getSteNo(), new Task(2, steCommand))) { + log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getSteNo(), JSON.toJSON(steCommand)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 24.灏忚溅鍒拌揪 ===> 25.灏忚溅璧拌 + wrkCharge.setWrkSts(25L); + Date now = new Date(); + wrkCharge.setCrnEndTime(now); + wrkCharge.setModiTime(now); + if (!wrkChargeService.updateById(wrkCharge)) { + log.error("淇敼鍏呯數浠诲姟鐘舵�� 24.灏忚溅鍒拌揪 ===> 25.灏忚溅璧拌 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); } } + } + } else if (wrkCharge.getWrkSts() == 26) { + // 鍥哄畾鍫嗗灈鏈� + int crnNo = 1; + // 鍏呯數浣� + LocMast chargeLoc = locMastService.selectById(wrkCharge.getLocNo()); - log.info("{}鍙峰爢鍨涙満瀵箋}搴撲綅杩涜婕旂ず", crn.getId(), locNo); + CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnNo); + CrnProtocol crnProtocol = crnThread.getCrnProtocol(); + if (crnProtocol == null) { return; } + // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛� + if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { + // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 -------------------------------------------------------------------------- + CrnCommand crnCommand = new CrnCommand(); + crnCommand.setCrnNo(crnNo); // 鍫嗗灈鏈虹紪鍙� + crnCommand.setTaskNo(wrkCharge.getWrkNo().shortValue()); // 宸ヤ綔鍙� + crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� + crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 + crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), false).shortValue()); // 婧愬簱浣嶆帓 + crnCommand.setSourcePosY(steProtocol.getBay()); // 婧愬簱浣嶅垪 + crnCommand.setSourcePosZ(steProtocol.getLev()); // 婧愬簱浣嶅眰 + crnCommand.setDestinationPosX(chargeLoc.getRow1().shortValue()); // 鐩爣搴撲綅鎺� + crnCommand.setDestinationPosY(chargeLoc.getBay1().shortValue()); // 鐩爣搴撲綅鍒� + crnCommand.setDestinationPosZ(chargeLoc.getLev1().shortValue()); // 鐩爣搴撲綅灞� + if (!MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, crnCommand))) { + log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", crnNo, JSON.toJSON(crnCommand)); + } else { + // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞� + steThread.modifyPos(chargeLoc.getRow1(), chargeLoc.getBay1(), chargeLoc.getLev1()); + // 淇敼宸ヤ綔妗g姸鎬� 26.绛夊緟鍏呯數 => 27.鏀捐嚦鍏呯數浣� + Date now = new Date(); + wrkCharge.setWrkSts(27L); + wrkCharge.setCrnStrTime(now); + wrkCharge.setModiTime(now); + if (!wrkChargeService.updateById(wrkCharge)) { + log.error("淇敼宸ヤ綔妗g姸鎬� 26.绛夊緟鍏呯數 => 27.鏀捐嚦鍏呯數浣� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); + } + } + } + } else if (wrkCharge.getWrkSts() == 28L) { + // 绌挎杞︿笅鍙戝厖鐢典换鍔� + SteCommand steCommand = new SteCommand(); + steCommand.setSteNo(wrkCharge.getSteNo()); // 绌挎杞︾紪鍙� + steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙� + steCommand.setTaskMode(SteTaskModeType.CHARGE_LEFT); // 浠诲姟妯″紡: 鍏呯數 + if (!MessageQueue.offer(SlaveType.Ste, wrkCharge.getSteNo(), new Task(2, steCommand))) { + log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getSteNo(), JSON.toJSON(steCommand)); + } else { + // 28.鍏呯數灏辩华 ===>> 29.寮�濮嬪厖鐢� + wrkCharge.setWrkSts(29L); + if (!wrkChargeService.updateById(wrkCharge)) { + log.error("淇敼鍏呯數浠诲姟鐘舵�� 28.鍏呯數灏辩华 ===>> 29.寮�濮嬪厖鐢� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); + } + } + } + } catch (Exception e) { + log.error("executeSteCharge fail", e); + } + } - String sourceLocNo = Utils.getLocNo(steProtocol.getRow(), steProtocol.getBay(), steProtocol.getLev()); + /** + * 杞鍏呯數妗╂槸鍚︽湁绌洪棽灏忚溅 + */ + public synchronized void queryChargeLocOfComplete() { + // 涓庡厖鐢典换鍔′笉鍚屾杩涜 + if (null != wrkChargeService.selectWorking(null, WrkChargeType.charge)) { return; } + if (null != wrkChargeService.selectWorking(null, WrkChargeType.reset)) { return; } + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); + // 妫�绱㈠厖鐢垫々 + for (SteChargeType value : SteChargeType.values()) { + Integer steNo = basSteService.hasCarOfLocNo(value.locNo); + if (steNo != null) { + SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); + SteProtocol steProtocol = steThread.getSteProtocol(); + BasSte basSte = basSteService.selectById(steNo); + if (Cools.isEmpty(steProtocol, basSte)) { + continue; + } + // 1鍙峰厖鐢垫々 + if (value.equals(SteChargeType.FIRST) && devpThread.charge0) { + continue; + } + // 2鍙峰厖鐢垫々 + if (value.equals(SteChargeType.SECOND) && devpThread.charge1) { + continue; + } + // 3鍙峰厖鐢垫々 + if (value.equals(SteChargeType.THIRD) && devpThread.charge2) { + continue; + } + // 灏忚溅鏄惁澶勪簬鍏呯數鐘舵�� + if (steProtocol.getChargeStatus() == 1) { + continue; + } + // case 1 : 鑷姩鍏呯數寮� 棣堢數 脳 + // case 2 : 鑷姩鍏呯數寮� 婊$數 鉁� + // case 3 : 鑷姩鍏呯數鍏� 棣堢數 鉁� + // case 4 : 鑷姩鍏呯數鍏� 婊$數 鉁� + if (basSte.getAutoCharge().equals("Y") + && steProtocol.getCharge() < Float.parseFloat(basSte.getChargeLine())) { + continue; + } - WrkCharge wrkCharge = new WrkCharge(); - wrkCharge.setCrnNo(crn.getId()); + WrkCharge wrkCharge = wrkChargeService.selectWorking(steNo, WrkChargeType.reset); + + if (wrkCharge == null) { + // 寮�濮嬬┛姊溅澶嶄綅浠诲姟 + wrkCharge = new WrkCharge(); wrkCharge.setSteNo(steNo); - wrkCharge.setWrkNo(commonService.getChargeWorkNo(5)); - wrkCharge.setWrkSts(31L); // 31.鐢熸垚婕旂ずID + wrkCharge.setWrkNo(commonService.getChargeWorkNo(6)); + wrkCharge.setWrkSts(41L); // 41.灏忚溅鍑嗗澶嶄綅 + wrkCharge.setCrnNo(2); // 鍥哄畾2鍙峰爢鍨涙満 wrkCharge.setIoPri((double) 10); - wrkCharge.setSourceLocNo(sourceLocNo); - wrkCharge.setLocNo(locNo); - wrkCharge.setMemo("demo"); + wrkCharge.setSourceLocNo(value.locNo); + wrkCharge.setLocNo(basSte.getIdleLoc()); + wrkCharge.setMemo("reset"); + wrkCharge.setAppeTime(new Date()); if (!wrkChargeService.insert(wrkCharge)) { - log.error("鐢熸垚婕旂ず浠诲姟澶辫触锛屽爢鍨涙満鍙凤細{}锛屽皬杞︼細{}锛屾簮搴撲綅锛歿}锛岀洰鏍囧簱浣嶏細{}", crn.getId(), steNo, sourceLocNo, locNo); + log.error("淇濆瓨{}鍙风┛姊溅澶嶄綅浠诲姟澶辫触!!!", steNo); + } else { + break; } } } @@ -2746,97 +2827,135 @@ } /** - * 婕旂ず鍙栬揣 + * 灏忚溅浠庡厖鐢垫々 鑷� 寰呮満搴撲綅 */ - private void steMoveDemo(CrnSlave slave, CrnProtocol crnProtocol) { - // 鑾峰彇宸ヤ綔妗d俊鎭� - WrkCharge wrkCharge = wrkChargeService.selectOne(new EntityWrapper<WrkCharge>().eq("crn_no", slave.getId()) - .in("wrk_sts", 31, 33, 35)); - if (null == wrkCharge) { - return; - } + public synchronized void steFromChargeToIdleLoc() { + WrkCharge wrkCharge = wrkChargeService.selectWorking(null, WrkChargeType.reset); + if (wrkCharge == null) { return; } SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, wrkCharge.getSteNo()); SteProtocol steProtocol = steThread.getSteProtocol(); - if (null == steProtocol) { return; } - if (steProtocol.isIdle()) { - // 31.鐢熸垚婕旂ずID - if (wrkCharge.getWrkSts() == 31L) { - this.letCarBeReady(wrkCharge, steProtocol.getSteNo().intValue()); - wrkCharge.setWrkSts(32L); - wrkCharge.setModiTime(new Date()); - if (!wrkChargeService.updateById(wrkCharge)) { - log.error("淇敼婕旂ず浠诲姟{}宸ヤ綔妗� 31.鐢熸垚婕旂ずID ==>> 32.灏忚溅璧拌 澶辫触!", wrkCharge.getWrkNo()); - } - // 33.灏忚溅寰呮惉 - } else if (wrkCharge.getWrkSts() == 33L) { - LocMast locMast = locMastService.selectById(wrkCharge.getLocNo()); - // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 -------------------------------------------------------------------------- - CrnCommand crnCommand = new CrnCommand(); - crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙� - crnCommand.setTaskNo(wrkCharge.getWrkNo().shortValue()); // 宸ヤ綔鍙� - crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� - crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 - crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue()); // 婧愬簱浣嶆帓 - crnCommand.setSourcePosY(steProtocol.getBay()); // 婧愬簱浣嶅垪 - crnCommand.setSourcePosZ(steProtocol.getLev()); // 婧愬簱浣嶅眰 - crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo()).shortValue()); // 鐩爣搴撲綅鎺� - crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 鐩爣搴撲綅鍒� - crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 鐩爣搴撲綅灞� - if (!MessageQueue.offer(SlaveType.Crn, wrkCharge.getCrnNo(), new Task(2, crnCommand))) { - log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getCrnNo(), JSON.toJSON(crnCommand)); + BasSte basSte = basSteService.selectById(wrkCharge.getSteNo()); + if (Cools.isEmpty(steProtocol, basSte)) { + return; + } + // 鎼繍鑷冲浐瀹氶�氶亾 + if (wrkCharge.getWrkSts() == 41L) { + // 鎼皬杞﹁嚦灏忚溅璧板悜閫氶亾 + List<String> channel = slaveProperties.getChannel(); + for (String channelLocNo : channel) { + Integer otherSte = existOtherSte(channelLocNo, wrkCharge.getSteNo()); + if (null != otherSte) { + log.warn("{}鍙峰皬杞︾Щ鍏}搴撲綅缁勫け璐ワ紝鍘熷洜锛氬瓨鍦▄}鍙风┛姊溅锛�", wrkCharge.getSteNo(), channelLocNo, otherSte); } else { - // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞� - steThread.modifyPos(Utils.getGroupRow(locMast.getLocNo()), locMast.getBay1(), locMast.getLev1()); - // 淇敼宸ヤ綔妗g姸鎬� 33.灏忚溅寰呮惉 => 34.鍚婅溅鎼繍 - Date now = new Date(); - wrkCharge.setWrkSts(34L); - wrkCharge.setCrnStrTime(now); - wrkCharge.setModiTime(now); - if (!wrkChargeService.updateById(wrkCharge)) { - log.error("淇敼婕旂ず浠诲姟{}宸ヤ綔妗� 33.灏忚溅寰呮惉 => 34.鍚婅溅鎼繍 澶辫触!", wrkCharge.getWrkNo()); + // 鍥哄畾鍫嗗灈鏈� + int crnNo = 1; + LocMast channelLoc = locMastService.selectById(channelLocNo); + + CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnNo); + CrnProtocol crnProtocol = crnThread.getCrnProtocol(); + if (crnProtocol == null) { continue; } + // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛� + if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { + // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 -------------------------------------------------------------------------- + CrnCommand crnCommand = new CrnCommand(); + crnCommand.setCrnNo(crnNo); // 鍫嗗灈鏈虹紪鍙� + crnCommand.setTaskNo(wrkCharge.getWrkNo().shortValue()); // 宸ヤ綔鍙� + crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� + crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 + crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue()); // 婧愬簱浣嶆帓 + crnCommand.setSourcePosY(steProtocol.getBay()); // 婧愬簱浣嶅垪 + crnCommand.setSourcePosZ(steProtocol.getLev()); // 婧愬簱浣嶅眰 + crnCommand.setDestinationPosX(Utils.getGroupRow(channelLoc.getLocNo(), false).shortValue()); // 鐩爣搴撲綅鎺� + crnCommand.setDestinationPosY(channelLoc.getBay1().shortValue()); // 鐩爣搴撲綅鍒� + crnCommand.setDestinationPosZ(channelLoc.getLev1().shortValue()); // 鐩爣搴撲綅灞� + if (!MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, crnCommand))) { + log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getCrnNo(), JSON.toJSON(crnCommand)); + } else { + // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞� + steThread.modifyPos(Utils.getGroupRow(channelLoc.getLocNo(), false), channelLoc.getBay1(), channelLoc.getLev1()); + // 淇敼宸ヤ綔妗g姸鎬� 41.灏忚溅鍑嗗澶嶄綅 => 42.鍚婅溅鎼繍 + Date now = new Date(); + wrkCharge.setWrkSts(42L); + wrkCharge.setCrnStrTime(now); + wrkCharge.setModiTime(now); + if (!wrkChargeService.updateById(wrkCharge)) { + log.error("淇敼澶嶄綅浠诲姟鐘舵�� 41.灏忚溅鍑嗗澶嶄綅 => 42.鍚婅溅鎼繍 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); + } + } + break; } - } - // 35.灏忚溅灏辩华 - } else if (wrkCharge.getWrkSts() == 35L) { - int steNo = steProtocol.getSteNo().intValue(); - if (!basSteService.updatePakMk(steNo, "Y")) { - log.error("淇敼绌挎杞︿綔涓氱姸鎬� 澶辫触锛侊紒锛岀┛姊溅={}", steNo); - return; } - + } + } else if (wrkCharge.getWrkSts() == 43L) { + // 灏忚溅琛岄┒閫氶亾 + if (steProtocol.statusType.equals(SteStatusType.IDLE) && steProtocol.getPakMk().equals("N")) { // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- SteCommand steCommand = new SteCommand(); - steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙� + steCommand.setSteNo(wrkCharge.getSteNo()); // 绌挎杞︾紪鍙� steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙� - SteTaskModeType originByLoc = SteTaskModeType.findOriginByLoc(steProtocol.getRow()); - if (originByLoc.equals(SteTaskModeType.GO_ORIGIN)) { - originByLoc = SteTaskModeType.BACK_ORIGIN; - } else if (originByLoc.equals(SteTaskModeType.BACK_ORIGIN)) { - originByLoc = SteTaskModeType.GO_ORIGIN; - } else { - return; - } - steCommand.setTaskMode(originByLoc); + steCommand.setTaskMode(SteTaskModeType.BACK_ORIGIN); // 鍘诲乏绔� - steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue()).shortValue()); + steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue()); steCommand.setBay(steProtocol.getBay()); steCommand.setLev(steProtocol.getLev()); - - if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) { - log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand)); + if (!MessageQueue.offer(SlaveType.Ste, wrkCharge.getSteNo(), new Task(2, steCommand))) { + log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getSteNo(), JSON.toJSON(steCommand)); } else { - // 淇敼宸ヤ綔妗g姸鎬� 35.灏忚溅灏辩华 => 36.灏忚溅璧拌 - wrkCharge.setWrkSts(36L); - wrkCharge.setModiTime(new Date()); + // 淇敼宸ヤ綔妗g姸鎬� 43.灏忚溅鍒拌揪 ===> 44.灏忚溅璧拌 + wrkCharge.setWrkSts(44L); + Date now = new Date(); + wrkCharge.setCrnEndTime(now); + wrkCharge.setModiTime(now); if (!wrkChargeService.updateById(wrkCharge)) { - log.error("淇敼婕旂ず浠诲姟{}宸ヤ綔妗� 35.灏忚溅灏辩华 => 36.灏忚溅璧拌 澶辫触!", wrkCharge.getWrkNo()); + log.error("淇敼澶嶄綅浠诲姟鐘舵�� 43.灏忚溅鍒拌揪 ===> 44.灏忚溅璧拌 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); } } } - } + } else if (wrkCharge.getWrkSts() == 45L) { + LocMast idleLoc = locMastService.selectById(basSte.getIdleLoc()); + Integer otherSte = existOtherSte(idleLoc.getLocNo(), wrkCharge.getSteNo()); + if (null != otherSte) { + log.warn("{}鍙峰皬杞︾Щ鍏}搴撲綅缁勫け璐ワ紝鍘熷洜锛氬瓨鍦▄}鍙风┛姊溅锛�", wrkCharge.getSteNo(), idleLoc.getLocNo(), otherSte); + } else { + CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkCharge.getCrnNo()); + CrnProtocol crnProtocol = crnThread.getCrnProtocol(); + if (crnProtocol == null) { return; } + // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛� + if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { + // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 -------------------------------------------------------------------------- + CrnCommand crnCommand = new CrnCommand(); + crnCommand.setCrnNo(wrkCharge.getCrnNo()); // 鍫嗗灈鏈虹紪鍙� + crnCommand.setTaskNo(wrkCharge.getWrkNo().shortValue()); // 宸ヤ綔鍙� + crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� + crnCommand.setTaskMode(CrnTaskModeType.STE_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 + crnCommand.setSourcePosX(Utils.getGroupRow(steProtocol.getRow().intValue(), true).shortValue()); // 婧愬簱浣嶆帓 + crnCommand.setSourcePosY(steProtocol.getBay()); // 婧愬簱浣嶅垪 + crnCommand.setSourcePosZ(steProtocol.getLev()); // 婧愬簱浣嶅眰 + crnCommand.setDestinationPosX(Utils.getGroupRow(idleLoc.getLocNo(), true).shortValue()); // 鐩爣搴撲綅鎺� + crnCommand.setDestinationPosY(idleLoc.getBay1().shortValue()); // 鐩爣搴撲綅鍒� + crnCommand.setDestinationPosZ(idleLoc.getLev1().shortValue()); // 鐩爣搴撲綅灞� + if (!MessageQueue.offer(SlaveType.Crn, wrkCharge.getCrnNo(), new Task(2, crnCommand))) { + log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkCharge.getCrnNo(), JSON.toJSON(crnCommand)); + } else { + // 淇敼绌挎杞﹁繍琛屼腑鎺掑垪灞� + steThread.modifyPos(Utils.getGroupRow(idleLoc.getLocNo(), true), idleLoc.getBay1(), idleLoc.getLev1()); + // 淇敼宸ヤ綔妗g姸鎬� 45.灏忚溅寰呮惉 => 46.鏀捐嚦寰呮満浣� + Date now = new Date(); + wrkCharge.setWrkSts(46L); + wrkCharge.setCrnStrTime(now); + wrkCharge.setModiTime(now); + if (!wrkChargeService.updateById(wrkCharge)) { + log.error("淇敼宸ヤ綔妗g姸鎬� 45.灏忚溅寰呮惉 => 46.鏀捐嚦寰呮満浣� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkCharge.getWrkNo()); + } + } + } + + } + } } + /** * 鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堝嚭搴撶増) @@ -2859,7 +2978,6 @@ } } } - if (null != loc) { break; -- Gitblit v1.9.1