From 1503a5ccffbf2448d15ac662ad949521a189a2c7 Mon Sep 17 00:00:00 2001 From: zc <zc@123> Date: 星期四, 01 五月 2025 12:10:10 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 213 ++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 169 insertions(+), 44 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 98bd691..27bc4e9 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -1,6 +1,7 @@ package com.zy.asrs.service.impl; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; @@ -21,14 +22,8 @@ import com.zy.core.cache.SlaveConnection; import com.zy.core.dispatcher.ShuttleDispatchUtils; import com.zy.core.enums.*; -import com.zy.core.model.DevpSlave; -import com.zy.core.model.LiftSlave; -import com.zy.core.model.ShuttleSlave; -import com.zy.core.model.Task; -import com.zy.core.model.command.LiftAssignCommand; -import com.zy.core.model.command.LiftCommand; -import com.zy.core.model.command.ShuttleAssignCommand; -import com.zy.core.model.command.ShuttleCommand; +import com.zy.core.model.*; +import com.zy.core.model.command.*; import com.zy.core.model.protocol.ForkLiftStaProtocol; import com.zy.core.model.protocol.LiftProtocol; import com.zy.core.model.protocol.ShuttleProtocol; @@ -39,12 +34,15 @@ import com.zy.core.thread.LiftThread; import com.zy.core.thread.ShuttleThread; import com.zy.core.thread.impl.FyDevpThread; +import com.zy.core.thread.impl.NormalLedThread; import com.zy.system.service.ConfigService; +import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.io.IOException; import java.util.*; /** @@ -184,32 +182,33 @@ LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); String errMsg = ""; if (!back && staProtocol.isBackErr()) { - errMsg = "瓒呭寮傚父"; + errMsg = "鍚庤秴闄�"; back = true; } if (!back && staProtocol.isHighErr()) { errMsg = "瓒呴珮寮傚父"; back = true; } - if (!back && staProtocol.isRightErr()) { - errMsg = "瓒呴暱寮傚父"; + if (!back && staProtocol.isWeightErr()) { + errMsg = "瓒呴噸寮傚父"; back = true; } - if (!back && staProtocol.isWeightErr()) { - errMsg = "瓒呴噸"; + if (!back && staProtocol.isRightErr()) { + errMsg = "鍙宠秴闄�"; + back = true; + } + if (!back && staProtocol.isLeftErr()) { + errMsg = "宸﹁秴闄�"; + back = true; + } + if (!back && staProtocol.isBarcodeErr()) { + errMsg = "鎵爜寮傚父"; back = true; } // 閫�鍥� if (back) { - if (!staProtocol.isLoading()) { - continue; - } - if (!staProtocol.isPakMk()) { - continue; - } // led 寮傚父鏄剧ず if (ledThread != null) { - MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg)); ledThread.error(errMsg); } } @@ -292,6 +291,9 @@ .setJson(JSON.toJSONString(hashMap)) .build() .doPost(); +// if (!Cools.isEmpty(msg)&&"璇峰厛缁勬墭".equalsIgnoreCase(msg)){ +// ledThread.error(msg); +// } News.error("鍏ュ簱鐢宠澶辫触锛屼换鍔℃暟鎹�={}锛岃姹傚搷搴�={}", JSON.toJSON(param), JSON.toJSON(jsonObject)); } } catch (Exception e) { @@ -307,6 +309,42 @@ } else { staProtocol = staProtocol.clone(); } + LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); + String errMsg = ""; + boolean back = false; + if (!back && staProtocol.isBackErr()) { + errMsg = "鍚庤秴闄�"; + back = true; + } + if (!back && staProtocol.isHighErr()) { + errMsg = "瓒呴珮寮傚父"; + back = true; + } + if (!back && staProtocol.isWeightErr()) { + errMsg = "瓒呴噸寮傚父"; + back = true; + } + if (!back && staProtocol.isRightErr()) { + errMsg = "鍙宠秴闄�"; + back = true; + } + if (!back && staProtocol.isLeftErr()) { + errMsg = "宸﹁秴闄�"; + back = true; + } + if (!back && staProtocol.isBarcodeErr()) { + errMsg = "鎵爜寮傚父"; + back = true; + } + // 閫�鍥� + if (back) { + + // led 寮傚父鏄剧ず + if (ledThread != null) { + ledThread.error(errMsg); + } + } + Short workNo = staProtocol.getWorkNo(); if (staProtocol.isAutoing() && staProtocol.isLoading() && isInEnable(devpThread, inSta.getStaNo()) && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999)) && staProtocol.isPakMk()) { String barcode = staProtocol.getBarcode(); @@ -340,6 +378,9 @@ .setJson(JSON.toJSONString(hashMap)) .build() .doPost(); +// if (!Cools.isEmpty(msg)&&"璇峰厛缁勬墭".equalsIgnoreCase(msg)){ +// ledThread.error(msg); +// } News.error("鍏ュ簱鐢宠澶辫触锛屼换鍔℃暟鎹�={}锛岃姹傚搷搴�={}", JSON.toJSON(param), JSON.toJSON(jsonObject)); } } catch (Exception e) { @@ -386,6 +427,29 @@ if (wrkMast.getStaNo() == 1026) { locNo = "1200305"; } + //鑾峰彇鎻愬崌鏈轰俊鎭� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + if (liftThread == null) { + continue; + } + + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + continue; + } + + if (!liftThread.isIdle()) { + continue; + } + + + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩� + if (liftProtocol.getHasTray()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮棤鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + continue; + } + + boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleNoLift(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_DEVP"); if (!dispatchShuttle) { News.info("{}浠诲姟锛岃皟搴﹀皬杞﹀け璐�", wrkMast.getWrkNo()); @@ -399,6 +463,8 @@ wrkMast.setModiTime(new Date()); if (!wrkMastService.updateById(wrkMast)) { News.info("{}浠诲姟锛屾洿鏂板伐浣滄。澶辫触", wrkMast.getWrkNo()); + } else { + setLedData(Integer.parseInt(wrkMast.getWmsWrkNo()), wrkMast.getStaNo()); } } } @@ -433,15 +499,19 @@ if (wrkMast.getStaNo() == 1024) { locNo = "1200305"; } + boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleNoLift(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), locNo, "TRANSPORT_DEVP"); if (!dispatchShuttle) { News.info("{}浠诲姟锛岃皟搴﹀皬杞﹀け璐�", wrkMast.getWrkNo()); continue; } - + WrkMast wrkMast2 = wrkMastService.selectByMainWrkNo(wrkMast.getWrkNo()); wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN.sts); wrkMast.setSystemMsg("");//娓呯┖娑堟伅 wrkMast.setModiTime(now); + if (wrkMast2 != null) { + wrkMast.setShuttleNo(wrkMast2.getShuttleNo()); + } if (!wrkMastService.updateById(wrkMast)) { News.info("{}浠诲姟锛屾洿鏂板伐浣滄。澶辫触", wrkMast.getWrkNo()); } else { @@ -514,12 +584,39 @@ wrkMast.setModiTime(new Date()); wrkMast.setShuttleNo(null); wrkMastService.updateById(wrkMast); + setLedData(Integer.parseInt(wrkMast.getWmsWrkNo()), wrkMast.getStaNo()); } } } } } + + private void setLedData(Integer wrkNo, Integer staNo) { + try { + Map<String, Object> param = new HashMap<>(); + param.put("taskNo", wrkNo); + String response = null; + response = new HttpHandler.Builder() + .setUri(wmsUrl) + .setPath("/rpc/led/getTask2") + .setJson(JSON.toJSONString(param)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + Integer code = jsonObject.getInteger("code"); + if (code.equals(200)) { + String data = jsonObject.getString("data"); + List<LedCommand> wrkDetls = JSONArray.parseArray(data, LedCommand.class); + redisUtil.set("LED_" + staNo, wrkDetls, 30); + log.info("鐢佃鏈烘暟鎹缃細{},{}", staNo, data); + } else { + log.info("鐢佃鏈烘暟鎹缃紓甯革細{},{}", wrkNo, response); + } + } catch (Exception e) { + e.printStackTrace(); + } + } /** * 鍒濆鍖栧疄鏃跺湴鍥� @@ -855,17 +952,17 @@ for (WrkMast wrkMast : wrkMasts) { boolean step0 = this.liftInExecuteStep0(wrkMast);//璁惧涓婅蛋 if (!step0) { - return; + continue; } boolean step1 = this.liftInExecuteStep1(wrkMast);//鎻愬崌鏈烘惉杩� if (!step1) { - return; + continue; } boolean step2 = this.liftInExecuteStep2(wrkMast);//瑙﹀彂鎼繍浠诲姟 if (!step2) { - return; + continue; } } } catch (Exception e) { @@ -896,19 +993,27 @@ LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led); String errMsg = ""; if (!back && staProtocol.isBackErr()) { - errMsg = "瓒呭寮傚父"; + errMsg = "鍚庤秴闄�"; back = true; } if (!back && staProtocol.isHighErr()) { errMsg = "瓒呴珮寮傚父"; back = true; } - if (!back && staProtocol.isRightErr()) { - errMsg = "瓒呴暱寮傚父"; + if (!back && staProtocol.isWeightErr()) { + errMsg = "瓒呴噸寮傚父"; back = true; } - if (!back && staProtocol.isWeightErr()) { - errMsg = "瓒呴噸"; + if (!back && staProtocol.isRightErr()) { + errMsg = "鍙宠秴闄�"; + back = true; + } + if (!back && staProtocol.isLeftErr()) { + errMsg = "宸﹁秴闄�"; + back = true; + } + if (!back && staProtocol.isBarcodeErr()) { + errMsg = "鎵爜寮傚父"; back = true; } // 閫�鍥� @@ -920,19 +1025,20 @@ } } String barcode = staProtocol.getBarcode(); - if (Cools.isEmpty(barcode) || "?".endsWith(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) { - return false; - } - if (!staProtocol.isAutoing()) { - News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鍦ㄨ嚜鍔ㄧ姸鎬�", wrkMast.getWrkNo(), staProtocol.getSiteId()); - return false; - } + if (!staProtocol.isLoading()) { News.info("{}浠诲姟锛寋}绔欑偣锛屾棤鎵樼洏", wrkMast.getWrkNo(), staProtocol.getSiteId()); return false; } if (wrkMast.getSourceStaNo() != 1031) { + if (!staProtocol.isAutoing()) { + News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鍦ㄨ嚜鍔ㄧ姸鎬�", wrkMast.getWrkNo(), staProtocol.getSiteId()); + return false; + } + if (Cools.isEmpty(barcode) || "?".endsWith(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) { + return false; + } if (!staProtocol.getBarcode().equals(wrkMast.getBarcode())) { News.info("{}浠诲姟锛寋}绔欑偣锛屾墭鐩樼爜涓嶅尮閰嶏紝绔欑偣鎵樼洏鐮侊細{}锛屼换鍔℃墭鐩樼爜锛歿}", wrkMast.getWrkNo(), staProtocol.getSiteId(), staProtocol.getBarcode(), wrkMast.getBarcode()); return false; @@ -957,13 +1063,14 @@ staProtocol = staProtocol.clone(); staProtocol.setStaNo(staNo); - staProtocol.setWorkNo(wrkMast.getMainWrkNo().shortValue()); + staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol)); wrkMast.setWrkSts(WrkStsType.INBOUND_DEVICE_RUN.sts); wrkMast.setSystemMsg("");//娓呯┖娑堟伅 wrkMast.setModiTime(now); if (wrkMastService.updateById(wrkMast)) { + setLedData(Integer.parseInt(wrkMast.getWmsWrkNo()), wrkMast.getStaNo()); return false; } return false; @@ -1043,7 +1150,7 @@ return false; } } else if (sourceStaNo == 1012) { - if (staProtocol.getWorkNo().intValue() != wrkMast.getWrkNo()) { + if (staProtocol.getFinishWorkNo().intValue() != wrkMast.getWrkNo()) { News.info("{}浠诲姟锛寋}绔欑偣锛屼换鍔″彿涓嶄竴鑷�", wrkMast.getWrkNo(), staProtocol.getSiteId()); return false; } @@ -1060,7 +1167,7 @@ } else if (wrkMast.getSourceStaNo() == 1032) { locNo = "0200308"; } - boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleS(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_LIFT"); + boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleNoLift(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_LIFT"); if (!dispatchShuttle) { News.info("{}浠诲姟锛岃皟搴﹀皬杞﹀け璐�", wrkMast.getWrkNo()); return false; @@ -1163,12 +1270,12 @@ for (WrkMast wrkMast : wrkMasts) { boolean step1 = this.liftOutExecuteStep1(wrkMast);//瑙﹀彂鎼繍浠诲姟 if (!step1) { - return; + continue; } boolean step2 = this.liftOutExecuteStep2(wrkMast);//鎻愬崌鏈烘惉杩� if (!step2) { - return; + continue; } } } catch (Exception e) { @@ -1287,10 +1394,10 @@ Integer sourceLev = liftThread.getLevToStaNo(Utils.getLev(wrkMast.getSourceLocNo())); //鑾峰彇鎻愬崌鏈哄懡浠� - List<LiftCommand> liftCommands = liftThread.getPalletOutCommand(wrkMast.getMainWrkNo(), sourceLev, wrkMast.getStaNo()); + List<LiftCommand> liftCommands = liftThread.getPalletOutCommand(wrkMast.getWrkNo(), sourceLev, wrkMast.getStaNo()); LiftCommand liftCommand = liftCommands.get(0); // if (wrkMast.getMainWrkNo() != null) { - liftCommand.setTaskNo(wrkMast.getMainWrkNo()); + liftCommand.setTaskNo(wrkMast.getWrkNo()); // } else { // int deviceWrk = commonService.getWorkNo(8);//鐢熸垚鎻愬崌鏈鸿澶囧伐浣滃彿 // liftCommand.setTaskNo(deviceWrk);//鏇存崲闅忔満浠诲姟鍙� @@ -1303,7 +1410,7 @@ LiftAssignCommand assignCommand = new LiftAssignCommand(); assignCommand.setCommands(commands); assignCommand.setLiftNo(liftProtocol.getLiftNo().shortValue()); - assignCommand.setTaskNo(wrkMast.getMainWrkNo().shortValue()); + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); assignCommand.setTaskMode(LiftCommandModeType.PALLET_OUT.id.shortValue()); wrkMast.setWrkSts(WrkStsType.OUTBOUND_LIFT_RUN.sts); @@ -1312,6 +1419,7 @@ wrkMast.setModiTime(now); if (wrkMastService.updateById(wrkMast)) { + setLedData(Integer.parseInt(wrkMast.getWmsWrkNo()), wrkMast.getStaNo()); //涓嬪彂浠诲姟 liftAction.assignWork(wrkMast.getLiftNo(), assignCommand); return false; @@ -1427,6 +1535,11 @@ notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡 } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_12.sts) { wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_13.sts); + WrkMast wrkMast1 = wrkMastService.selectByWorkNo(wrkMast.getMainWrkNo()); + if (wrkMast1 != null) { + wrkMast1.setShuttleNo(wrkMast.getShuttleNo()); + log.info("瀵逛富宸ヤ綔妗h繘琛岀粦瀹氬皬杞︼紝涓轰簡灏忚溅杩涜绉昏溅,{},{}", wrkMast1.getWrkNo(), wrkMast.getShuttleNo()); + } shuttleThread.setSyncTaskNo(0); notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡 } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_10.sts) { @@ -1748,6 +1861,14 @@ try { this.recShuttleErr(); this.recLiftErr(); + LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, 1); + ledThread.errorReset(); + ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, 2); + ledThread.errorReset(); + ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, 3); + ledThread.errorReset(); + ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, 4); + ledThread.errorReset(); } catch (Exception e) { News.error("recErr fail", e); } @@ -2271,6 +2392,10 @@ * 鍏ュ嚭搴撴ā寮忓垏鎹㈠嚱鏁� */ public synchronized void ioConvert() { + for (LedSlave led : slaveProperties.getLed()) { + NormalLedThread ledThread = (NormalLedThread) SlaveConnection.get(SlaveType.Led, led.getId()); + ledThread.reset(); + } try { // 鏍规嵁杈撻�佺嚎plc閬嶅巻 FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1); -- Gitblit v1.9.1