From c6ac4fcda65f2033dbf4d0cfb57fc32cdd3eee2f Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期三, 30 十一月 2022 14:42:09 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 842 +++++++++++++++++++++++++++++++++---------------------- 1 files changed, 500 insertions(+), 342 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 e1bfc3f..c03dcef 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -3,7 +3,6 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; -import com.core.annotations.ManagerAuth; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.*; @@ -16,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; @@ -44,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; /** @@ -170,7 +173,7 @@ param.setBarcode(barcode); param.setIoType(1); param.setSourceStaNo(inSta.getStaNo()); - param.setLocType1(locTypeDto.getLocType1()); +// param.setLocType1(locTypeDto.getLocType1()); String response = new HttpHandler.Builder() .setUri(wmsUrl) .setPath("/rpc/pakin/loc/v1") @@ -640,9 +643,7 @@ } } // 搴撲綅绉昏浆 - this.locToLoc(crn, crnProtocol); - // 婕旂ず浠诲姟 - this.steMoveDemo(crn, crnProtocol); +// this.locToLoc(crn, crnProtocol); } } } @@ -719,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()); } + //20220719 Add锛屽鏋滄祬搴撲綅鐘舵�佷负P/R锛屽伐浣滅姸鎬佷负14/15,璇存槑娴呭簱浣嶅凡缁忕┖浜嗭紝鍙互鎵ц鍏ュ簱浠诲姟 } - 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; + } + 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; - case "Q": { - WrkMast waitWrkMast = wrkMastMapper.selectBySourceLocNo(shallowLocNo); - if (null != waitWrkMast && waitWrkMast.getWrkSts() == 9) { - continue; - } - break; } } } @@ -851,7 +847,7 @@ Integer steNo = this.hasCarOfIdle(wrkMast.getLocNo()); // 鏈夊皬杞� if (steNo != null) { - // 灏忚溅琛岃蛋鍒板爢鍨涙満寰呮惉绉荤偣 + // 灏忚溅琛岃蛋鍒板緟鏈轰綅 if (wrkMast.getWrkSts() == 2L && wrkMast.getSteNo() == null) { // 娌℃湁鍏朵粬浠诲姟 if (null == wrkMastMapper.selectPakin(slave.getId(), steNo)) { @@ -978,7 +974,7 @@ wrkMastMapper.updateById(wrkMast); // 鍒ゆ柇鏄惁涓虹┛姊簱 - if (!locMastService.isShuttle(wrkMast.getLocNo())) { + if (!locMastService.isShuttle(wrkMast.getSourceLocNo())) { // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞� if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) { @@ -1178,6 +1174,7 @@ /** * 搴撲綅绉昏浆 */ + @Deprecated public void locToLoc(CrnSlave slave, CrnProtocol crnProtocol){ // 鑾峰彇宸ヤ綔妗d俊鎭� WrkMast wrkMast = wrkMastMapper.selectLocMove(slave.getId()); @@ -1255,11 +1252,12 @@ // 鑾峰彇鍫嗗灈鏈轰俊鎭� SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId()); SteProtocol steProtocol = steThread.getSteProtocol(); - if (steProtocol == null) { continue; } - 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(); + 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; @@ -1349,8 +1347,7 @@ } /** - * 璁╁皬杞︿粠 杩滅偣 ====>> 寰呮満 - * 绛夊緟鍫嗗灈鏈烘惉杩� + * 璁╁皬杞﹁璧拌嚦寰呮満浣� */ public void letCarBeWaiting(WrkMast wrkMast, Integer steNo, String locNo) { // 鑾峰彇绌挎杞︿俊鎭� @@ -1359,24 +1356,35 @@ if (steProtocol == null) { return; } if (steProtocol.isIdle()) { - // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- - SteCommand steCommand = new SteCommand(); - steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙� - steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙� - steCommand.setTaskMode(SteTaskModeType.findWaiting(steProtocol.getRow().intValue())); // 浠诲姟妯″紡: 鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙� - - 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)); - } else { + // 濡傛灉澶勪簬寰呮満浣� + if (steProtocol.locaType.equals(SteLocaType.A_WAITING) || steProtocol.locaType.equals(SteLocaType.B_WAITING)) { // 淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞� + wrkMast.setWrkSts(3L); wrkMast.setSteNo(steNo); wrkMast.setModiTime(new Date()); if (wrkMastMapper.updateById(wrkMast) == 0) { log.error("淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); + } + } else { + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + SteCommand steCommand = new SteCommand(); + steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙� + steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙� + steCommand.setTaskMode(SteTaskModeType.findWaiting(steProtocol.getRow().intValue())); // 浠诲姟妯″紡: 琛岃蛋鑷冲緟鏈轰綅 + + 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)); + } else { + // 淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞� + wrkMast.setSteNo(steNo); + wrkMast.setModiTime(new Date()); + if (wrkMastMapper.updateById(wrkMast) == 0) { + log.error("淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo()); + } } } } @@ -1399,7 +1407,7 @@ steCommand.setTaskNo(wrkCharge.getWrkNo()); // 宸ヤ綔鍙� 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()); @@ -1450,40 +1458,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) { @@ -1493,7 +1467,7 @@ 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) { @@ -1585,7 +1559,7 @@ // 绌挎杞︾┖闂� 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) { @@ -1671,6 +1645,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); @@ -1683,6 +1671,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()); } } } @@ -1898,18 +1914,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); } @@ -1918,6 +1942,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); } @@ -2461,7 +2493,14 @@ /** * 灏忚溅鐢甸噺妫�娴� ===>> 鍙戣捣鍏呯數 */ + @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()); @@ -2473,6 +2512,7 @@ if (steProtocol.getMode() == 0 || !steProtocol.statusType.equals(SteStatusType.IDLE) || basSte.getPakMk().equals("Y") + || basSte.getAutoCharge().equals("N") // || steProtocol.getChargeStatus() == 1 ) { continue; @@ -2483,13 +2523,43 @@ if (steProtocol.getCharge() > Float.parseFloat(basSte.getChargeLine())) { continue; } -// WrkCharge wrkCharge = wrkChargeService.selectWorking(steProtocol.getSteNo().intValue()); - WrkCharge wrkCharge = wrkChargeService.selectWorking(null); + WrkCharge wrkCharge = wrkChargeService.selectWorking(null, WrkChargeType.charge); if (wrkCharge == null && steProtocol.getChargeStatus() == 0) { -// String idleLoc = basSte.getIdleLoc(); // 瀵绘壘绌洪棽鍏呯數妗� - SteChargeType steCharge = devpThread.getIdleChargeLocNo(); + 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; @@ -2497,12 +2567,14 @@ 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(chargeLocNo); wrkCharge.setMemo("charge"); + wrkCharge.setAppeTime(new Date()); if (!wrkChargeService.insert(wrkCharge)) { log.error("淇濆瓨{}鍙风┛姊溅鍏呯數浠诲姟澶辫触!!!", ste.getId()); continue; @@ -2512,204 +2584,253 @@ if (steProtocol.getRow().intValue() == Utils.getRow(chargeLocNo) && steProtocol.getBay().intValue() == Utils.getBay(chargeLocNo) && steProtocol.getLev().intValue() == Utils.getLev(chargeLocNo)) { - // 淇敼宸ヤ綔妗g姸鎬� 21.鍑嗗鍏呯數 => 24.灏忚溅鍒拌揪 - wrkCharge.setWrkSts(24L); + // 淇敼宸ヤ綔妗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; } } } @@ -2717,97 +2838,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().intValue()); - 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()); + } + } + } + + } + } } + /** * 鍥犲弻娣卞簱浣嶉樆濉烇紝瀵规祬搴撲綅杩涜绉昏浆锛堝嚭搴撶増) @@ -2830,7 +2989,6 @@ } } } - if (null != loc) { break; -- Gitblit v1.9.1