From 3be5c88fbc583d17a932ca937d8e293d28b5c974 Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期六, 12 四月 2025 15:11:25 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java | 16 + src/main/java/com/zy/core/thread/LiftThread.java | 2 src/main/resources/mapper/WrkMastLogMapper.xml | 1 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 397 +++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/zy/core/cache/MessageQueue.java | 4 src/main/resources/mapper/WrkMastMapper.xml | 1 src/main/java/com/zy/asrs/entity/WrkMastLog.java | 3 src/main/java/com/zy/asrs/task/WrkMastScheduler.java | 4 src/main/resources/sql/20250412151056.nb3 | 0 src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java | 4 src/main/java/com/zy/core/thread/impl/FyDevpThread.java | 51 +---- src/main/java/com/zy/core/ServerBootstrap.java | 4 src/main/java/com/zy/core/action/LiftAction.java | 31 +-- src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java | 2 src/main/java/com/zy/core/MainProcess.java | 14 + src/main/java/com/zy/common/service/CommonService.java | 1 src/main/java/com/zy/core/thread/impl/NyLiftThread.java | 5 17 files changed, 460 insertions(+), 80 deletions(-) diff --git a/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java b/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java index b1fadc2..bef55f7 100644 --- a/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java +++ b/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java @@ -17,4 +17,6 @@ //鐩爣搴撲綅 private String locNo; + private String barcode; + } diff --git a/src/main/java/com/zy/asrs/entity/WrkMastLog.java b/src/main/java/com/zy/asrs/entity/WrkMastLog.java index b84f77c..b65aa29 100644 --- a/src/main/java/com/zy/asrs/entity/WrkMastLog.java +++ b/src/main/java/com/zy/asrs/entity/WrkMastLog.java @@ -174,6 +174,9 @@ @TableField(value = "system_msg") private String systemMsg; + @ApiModelProperty(value= "") + private Integer mainWrkNo; + public WrkMastLog() {} public String getWrkSts$(){ 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 c60f1f9..448f885 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -13,6 +13,7 @@ import com.zy.common.service.CommonService; import com.zy.common.utils.*; import com.zy.core.News; +import com.zy.core.action.LiftAction; import com.zy.core.action.ShuttleAction; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.SlaveConnection; @@ -22,11 +23,14 @@ 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.protocol.*; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.*; +import com.zy.core.thread.impl.FyDevpThread; import com.zy.system.entity.Config; import com.zy.system.service.ConfigService; import lombok.extern.slf4j.Slf4j; @@ -36,6 +40,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; /** * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔� @@ -87,6 +92,8 @@ private NoLiftInServiceImpl noLiftInService; @Autowired private NoLiftOutServiceImpl noLiftOutService; + @Autowired + private LiftAction liftAction; public static List<Integer> staNosIn = new ArrayList<Integer>() {{ @@ -449,7 +456,7 @@ } if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴� - boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftSta.getLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐� + boolean result = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), null, liftSta.getLocNo(), null);//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐� News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); return false; } @@ -628,7 +635,7 @@ return false; } } - boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐� + boolean result = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), null, wrkMast.getSourceLocNo(), null);//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐� News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); return false; } @@ -697,6 +704,390 @@ } return false; } + return true; + } + + public synchronized void liftInExecute() { + try { + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() + .in("wrk_sts", WrkStsType.NEW_INBOUND.sts, WrkStsType.INBOUND_DEVICE_RUN.sts, WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts) + .in("source_sta_no", 1012, 1022) + ); + for (WrkMast wrkMast : wrkMasts) { + boolean step0 = this.liftInExecuteStep0(wrkMast);//璁惧涓婅蛋 + if (!step0) { + return; + } + + boolean step1 = this.liftInExecuteStep1(wrkMast);//鎻愬崌鏈烘惉杩� + if (!step1) { + return; + } + + boolean step2 = this.liftInExecuteStep2(wrkMast);//瑙﹀彂鎼繍浠诲姟 + if (!step2) { + return; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + private boolean liftInExecuteStep0(WrkMast wrkMast) { + Date now = new Date(); + if (wrkMast.getWrkSts() == WrkStsType.NEW_INBOUND.sts) { + FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1); + if(devpThread == null) { + return false; + } + + Map<Integer, StaProtocol> station = devpThread.getStation(); + StaProtocol staProtocol = station.get(wrkMast.getSourceStaNo()); + if (staProtocol == null) { + 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 (!staProtocol.getBarcode().equals(wrkMast.getBarcode())) { + News.info("{}浠诲姟锛寋}绔欑偣锛屾墭鐩樼爜涓嶅尮閰嶏紝绔欑偣鎵樼洏鐮侊細{}锛屼换鍔℃墭鐩樼爜锛歿}", wrkMast.getWrkNo(), staProtocol.getSiteId(), staProtocol.getBarcode(), wrkMast.getBarcode()); + return false; + } + + short staNo = 1012; + if (wrkMast.getSourceStaNo() == 1022) { + staNo = 1023; + } + + staProtocol = staProtocol.clone(); + staProtocol.setStaNo(staNo); + 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)) { + return false; + } + return false; + } + + return true; + } + + private boolean liftInExecuteStep1(WrkMast wrkMast) { + Date now = new Date(); + if (wrkMast.getWrkSts() == WrkStsType.INBOUND_DEVICE_RUN.sts) { + //鑾峰彇鎻愬崌鏈轰俊鎭� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + if (liftThread == null) { + return false; + } + + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + return false; + } + + if (!liftThread.isIdle()) { + return false; + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満) + WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftProtocol.getLiftNo()); + if (liftWrkMast != null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞� + if (liftProtocol.getHasCar()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮湁灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false; + } + + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩� + if (liftProtocol.getHasTray()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮湁鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false; + } + + FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1); + if(devpThread == null) { + return false; + } + + Map<Integer, StaProtocol> station = devpThread.getStation(); + + Integer sourceStaNo = wrkMast.getSourceStaNo(); + if (wrkMast.getSourceStaNo() == 1022) { + sourceStaNo = 1023; + } + + StaProtocol staProtocol = station.get(sourceStaNo); + if (staProtocol == null) { + 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 (staProtocol.getWorkNo().intValue() != wrkMast.getWrkNo()) { + News.info("{}浠诲姟锛寋}绔欑偣锛屼换鍔″彿涓嶄竴鑷�", wrkMast.getWrkNo(), staProtocol.getSiteId()); + return false; + } + + if (!staProtocol.getBarcode().equals(wrkMast.getBarcode())) { + News.info("{}浠诲姟锛寋}绔欑偣锛屾墭鐩樼爜涓嶅尮閰嶏紝绔欑偣鎵樼洏鐮侊細{}锛屼换鍔℃墭鐩樼爜锛歿}", wrkMast.getWrkNo(), staProtocol.getSiteId(), staProtocol.getBarcode(), wrkMast.getBarcode()); + return false; + } + + //鑾峰彇鎻愬崌鏈哄懡浠� + List<LiftCommand> liftCommands = liftThread.getPalletInCommand(wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), 101); + LiftCommand liftCommand = liftCommands.get(0); + + int deviceWrk = commonService.getWorkNo(8);//鐢熸垚鎻愬崌鏈鸿澶囧伐浣滃彿 + liftCommand.setTaskNo(deviceWrk);//鏇存崲闅忔満浠诲姟鍙� + + ArrayList<LiftCommand> commands = new ArrayList<>(); + commands.add(liftCommand); + + //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 + LiftAssignCommand assignCommand = new LiftAssignCommand(); + assignCommand.setCommands(commands); + assignCommand.setLiftNo(liftProtocol.getLiftNo().shortValue()); + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); + assignCommand.setTaskMode(LiftCommandModeType.PALLET_IN.id.shortValue()); + + wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN.sts); + wrkMast.setLiftNo(liftProtocol.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈� + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(now); + if (wrkMastService.updateById(wrkMast)) { + //涓嬪彂浠诲姟 + liftAction.assignWork(wrkMast.getLiftNo(), assignCommand); + return false; + } + return false; + } + + return true; + } + + private boolean liftInExecuteStep2(WrkMast wrkMast) { + Date now = new Date(); + if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts) { + //鑾峰彇鎻愬崌鏈轰俊鎭� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + if (liftThread == null) { + return false; + } + + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + return false; + } + + if (!liftThread.isIdle()) { + return false; + } + + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞� + if (liftProtocol.getHasCar()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮湁灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false; + } + + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩� + if (!liftProtocol.getHasTray()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮棤鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false; + } + + boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), "0200301", wrkMast.getLocNo(), "TRANSPORT_LIFT"); + if(!dispatchShuttle) { + News.info("{}浠诲姟锛岃皟搴﹀皬杞﹀け璐�", wrkMast.getWrkNo()); + return false; + } + + wrkMast.setWrkSts(WrkStsType.INBOUND_SHUTTLE_RUN.sts); + wrkMast.setLiftNo(null); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(now); + if (wrkMastService.updateById(wrkMast)) { + return false; + } + return false; + } + + return true; + } + + public synchronized void liftOutExecute() { + try { + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() + .in("wrk_sts", WrkStsType.NEW_OUTBOUND.sts, WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts) + .in("sta_no", 1011, 1021) + ); + for (WrkMast wrkMast : wrkMasts) { + boolean step1 = this.liftOutExecuteStep1(wrkMast);//瑙﹀彂鎼繍浠诲姟 + if (!step1) { + return; + } + + boolean step2 = this.liftOutExecuteStep2(wrkMast);//鎻愬崌鏈烘惉杩� + if (!step2) { + return; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + private boolean liftOutExecuteStep1(WrkMast wrkMast) { + Date now = new Date(); + if (wrkMast.getWrkSts() == WrkStsType.NEW_OUTBOUND.sts) { + FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1); + if(devpThread == null) { + return false; + } + + Map<Integer, StaProtocol> station = devpThread.getStation(); + StaProtocol staProtocol = station.get(wrkMast.getStaNo()); + if (staProtocol == null) { + return false; + } + + if (!staProtocol.isAutoing()) { + News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鍦ㄨ嚜鍔ㄧ姸鎬�", wrkMast.getWrkNo(), staProtocol.getSiteId()); + return false; + } + + if (!staProtocol.isOutEnable()) { + News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夊彲鍑轰俊鍙�", wrkMast.getWrkNo(), staProtocol.getSiteId()); + return false; + } + + + boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), "0200301", "TRANSPORT_LIFT"); + if(!dispatchShuttle) { + News.info("{}浠诲姟锛岃皟搴﹀皬杞﹀け璐�", wrkMast.getWrkNo()); + return false; + } + + wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN.sts); + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(now); + if (wrkMastService.updateById(wrkMast)) { + return false; + } + return false; + } + return true; + } + + private boolean liftOutExecuteStep2(WrkMast wrkMast) { + Date now = new Date(); + if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts) { + //鑾峰彇鎻愬崌鏈轰俊鎭� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + if (liftThread == null) { + return false; + } + + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + return false; + } + + if (!liftThread.isIdle()) { + return false; + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満) + WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftProtocol.getLiftNo()); + if (liftWrkMast != null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇� + } + + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞� + if (liftProtocol.getHasCar()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮湁灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false; + } + + //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩� + if (!liftProtocol.getHasTray()) { + News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮棤鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); + return false; + } + + FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1); + if(devpThread == null) { + return false; + } + + Map<Integer, StaProtocol> station = devpThread.getStation(); + StaProtocol staProtocol = station.get(wrkMast.getStaNo()); + if (staProtocol == null) { + return false; + } + + if (!staProtocol.isAutoing()) { + News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鍦ㄨ嚜鍔ㄧ姸鎬�", wrkMast.getWrkNo(), staProtocol.getSiteId()); + return false; + } + + Integer sourceLev = liftThread.getLevToStaNo(Utils.getLev(wrkMast.getSourceLocNo())); + + //鑾峰彇鎻愬崌鏈哄懡浠� + List<LiftCommand> liftCommands = liftThread.getPalletOutCommand(wrkMast.getWrkNo(), sourceLev, wrkMast.getStaNo()); + LiftCommand liftCommand = liftCommands.get(0); + + int deviceWrk = commonService.getWorkNo(8);//鐢熸垚鎻愬崌鏈鸿澶囧伐浣滃彿 + liftCommand.setTaskNo(deviceWrk);//鏇存崲闅忔満浠诲姟鍙� + + ArrayList<LiftCommand> commands = new ArrayList<>(); + commands.add(liftCommand); + + //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔 + LiftAssignCommand assignCommand = new LiftAssignCommand(); + assignCommand.setCommands(commands); + assignCommand.setLiftNo(liftProtocol.getLiftNo().shortValue()); + assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); + assignCommand.setTaskMode(LiftCommandModeType.PALLET_OUT.id.shortValue()); + + wrkMast.setWrkSts(WrkStsType.OUTBOUND_LIFT_RUN.sts); + wrkMast.setLiftNo(liftProtocol.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈� + wrkMast.setSystemMsg("");//娓呯┖娑堟伅 + wrkMast.setModiTime(now); + if (wrkMastService.updateById(wrkMast)) { + //涓嬪彂浠诲姟 + liftAction.assignWork(wrkMast.getLiftNo(), assignCommand); + return false; + } + return false; + } + return true; } @@ -900,7 +1291,7 @@ //灏忚溅绉诲姩鑷崇珯鐐� 501.鐢熸垚绉诲簱浠诲姟 ==> 502.灏忚溅鍙栬揣涓� if (wrkMast.getWrkSts() == WrkStsType.NEW_LOC_MOVE.sts) { if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴� - boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╃偣杩涜鍙栬揣 + boolean result = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), null, wrkMast.getSourceLocNo(), null);//璋冨害灏忚溅鍒拌揣鐗╃偣杩涜鍙栬揣 News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触"); if (result) { diff --git a/src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java index a55af16..30d926f 100644 --- a/src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java @@ -537,8 +537,10 @@ //鑾峰彇鎻愬崌鏈哄緟鏈轰綅 String liftStandByLocNo = liftThread.getLiftStandByLocNo(Utils.getLev(shuttleProtocol.getCurrentLocNo()), false); + //鍘诲緟鏈轰綅 + String locNo = Utils.getLocNo(Utils.getRow(liftStandByLocNo) + 1, Utils.getBay(liftStandByLocNo) - 1, Utils.getLev(liftStandByLocNo)); //鑾峰彇灏忚溅鍒版彁鍗囨満寰呮満琛岃蛋鍛戒护 - List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftStandByLocNo, NavigationMapType.DFX.id, assignCommand, shuttleThread); + List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), locNo, NavigationMapType.DFX.id, assignCommand, shuttleThread); if (commands == null) { News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; diff --git a/src/main/java/com/zy/asrs/task/WrkMastScheduler.java b/src/main/java/com/zy/asrs/task/WrkMastScheduler.java index 5c4a431..b947c3e 100644 --- a/src/main/java/com/zy/asrs/task/WrkMastScheduler.java +++ b/src/main/java/com/zy/asrs/task/WrkMastScheduler.java @@ -203,9 +203,9 @@ WrkMast main = wrkMastService.selectByWorkNo(wrkMast.getMainWrkNo()); if (main != null) { if (main.getIoType() == WrkIoType.IN.id) { - main.setWrkSts(WrkStsType.INBOUND_SHUTTLE_RUN_COMPLETE.sts); + main.setWrkSts(WrkStsType.COMPLETE_INBOUND.sts); } else if (main.getIoType() == WrkIoType.OUT.id) { - main.setWrkSts(WrkStsType.OUTBOUND_LIFT_RUN_COMPLETE.sts); + main.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts); } main.setModiTime(new Date()); if (wrkMastService.updateById(main)) { diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java index 008db5a..467b794 100644 --- a/src/main/java/com/zy/common/service/CommonService.java +++ b/src/main/java/com/zy/common/service/CommonService.java @@ -193,6 +193,7 @@ wrkMast.setSourceStaNo(param.getSourceStaNo());//婧愮珯 wrkMast.setStaNo(param.getStaNo());//鐩爣绔� wrkMast.setWmsWrkNo(param.getTaskNo()); + wrkMast.setBarcode(param.getBarcode()); wrkMast.setAppeTime(now); wrkMast.setModiTime(now); boolean res = wrkMastService.insert(wrkMast); diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java index 084bd25..b83b885 100644 --- a/src/main/java/com/zy/core/MainProcess.java +++ b/src/main/java/com/zy/core/MainProcess.java @@ -44,16 +44,20 @@ //杈撻�佺嚎 // 鍏ュ簱 mainService.generateInboundWrk(); - mainService.generateInboundWrk2(); +// mainService.generateInboundWrk2(); // 鍑哄簱 mainService.stnToOutStn(); //鍒濆鍖栧疄鏃跺湴鍥� mainService.initRealtimeBasMap(); - // 鍏ュ簱 ===>> 鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙� - mainService.shuttleInExecute(); - // 鍑哄簱 ===>> 鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙� - mainService.shuttleOutExecute(); +// // 鍏ュ簱 ===>> 鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙� +// mainService.shuttleInExecute(); +// // 鍑哄簱 ===>> 鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙� +// mainService.shuttleOutExecute(); + //鎻愬崌鏈哄叆搴撲换鍔� + mainService.liftInExecute(); + //鎻愬崌鏈哄嚭搴撲换鍔� + mainService.liftOutExecute(); //鍥涘悜绌挎杞︿换鍔″畬鎴� mainService.shuttleFinished(); //鎵ц绉诲簱浠诲姟 diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java index 5461319..c824e07 100644 --- a/src/main/java/com/zy/core/ServerBootstrap.java +++ b/src/main/java/com/zy/core/ServerBootstrap.java @@ -58,6 +58,10 @@ for (Slave shuttle : slaveProperties.getShuttle()) { MessageQueue.init(SlaveType.Shuttle, shuttle); } + // 鍒濆鍖栬緭閫佺嚎mq + for (Slave devp : slaveProperties.getDevp()) { + MessageQueue.init(SlaveType.Devp, devp); + } } private void initThread() { diff --git a/src/main/java/com/zy/core/action/LiftAction.java b/src/main/java/com/zy/core/action/LiftAction.java index e0b7d2a..d4c177b 100644 --- a/src/main/java/com/zy/core/action/LiftAction.java +++ b/src/main/java/com/zy/core/action/LiftAction.java @@ -132,28 +132,17 @@ command.setComplete(true); } } else if (command.getMode() == LiftCommandModeType.PALLET_IN.id) { -// //鎵樼洏鍏� -// Integer target = liftDispatcher.getLiftLevLogic(liftThread.getDevice().getId().intValue(), command.getTargetLev()); -// if (liftProtocol.getLev() == target) { -// command.setComplete(true); -// } -// -// //鍒ゆ柇鎻愬崌鏈烘墭鐩樻槸鍚﹀瓨鍦� -// if (!liftProtocol.getHasTray()) { -// return false; -// } - + //鍒ゆ柇鎻愬崌鏈烘墭鐩樻槸鍚﹀瓨鍦� + if (!liftProtocol.getHasTray()) { + return false; + } + command.setComplete(true); } else if (command.getMode() == LiftCommandModeType.PALLET_OUT.id) { -// //鎵樼洏鍑� -// Integer target = liftDispatcher.getLiftLevLogic(liftThread.getDevice().getId().intValue(), command.getTargetLev()); -// if (liftProtocol.getLev() == target) { -// command.setComplete(true); -// } -// -// //鍒ゆ柇鎻愬崌鏈烘墭鐩樻槸鍚﹀瓨鍦� -// if (liftProtocol.getHasTray()) { -// return false; -// } + //鍒ゆ柇鎻愬崌鏈烘墭鐩樻槸鍚﹀瓨鍦� + if (liftProtocol.getHasTray()) { + return false; + } + command.setComplete(true); } else if (command.getMode() == LiftCommandModeType.RESET.id) { //澶嶄綅 command.setComplete(true); diff --git a/src/main/java/com/zy/core/cache/MessageQueue.java b/src/main/java/com/zy/core/cache/MessageQueue.java index d5c4d08..0c6cf02 100644 --- a/src/main/java/com/zy/core/cache/MessageQueue.java +++ b/src/main/java/com/zy/core/cache/MessageQueue.java @@ -93,10 +93,6 @@ case Lift: return LIFT_EXCHANGE.get(id).poll(); case Devp: - ConcurrentLinkedQueue<Task> tasks = DEVP_EXCHANGE.get(id); - if (tasks == null) { - return null; - } return DEVP_EXCHANGE.get(id).poll(); case Led: ConcurrentLinkedQueue<Task> task2 = LED_EXCHANGE.get(id); diff --git a/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java b/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java index c5e2346..34dcb90 100644 --- a/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java +++ b/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java @@ -68,7 +68,7 @@ /** * 璋冨害杞﹁締 */ - public boolean dispatchShuttle(Integer wrkNo, String locNo) { + public boolean searchDispatchShuttle(Integer wrkNo, String sourceLocNo, String locNo, String flag) { ArrayList<ShuttleThread> sameLev = new ArrayList<>();//鐩稿悓妤煎眰鐨勭┛姊溅 ArrayList<ShuttleThread> diffLev = new ArrayList<>();//涓嶅悓妤煎眰鐨勭┛姊溅 @@ -128,6 +128,11 @@ Integer shuttleNo = shuttleProtocol.getShuttleNo(); //褰撳墠绌挎杞﹀簱浣嶅彿 String currentLocNo = shuttleProtocol.getCurrentLocNo(); + if (currentLocNo.equals(locNo)) { + sameShuttles.put(-1, shuttleThread); + continue; + } + //褰撳墠绌挎杞︾嚎绋嬪埌鐩爣鍦扮偣璺濈 List<NavigateNode> currentShuttlePath = navigateUtils.calc(currentLocNo, locNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleNo, Utils.getLev(currentLocNo)), null);//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘 if (currentShuttlePath == null) { @@ -143,7 +148,7 @@ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); Integer shuttleNo = shuttleProtocol.getShuttleNo(); //灏濊瘯璋冨害灏忚溅 - boolean result = shuttleMoveGenerate(wrkNo, locNo, shuttleNo); + boolean result = shuttleMoveGenerate(wrkNo, sourceLocNo, locNo, shuttleNo, flag, false); if (result) { return true;//璋冨害鎴愬姛 } @@ -190,7 +195,7 @@ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); Integer shuttleNo = shuttleProtocol.getShuttleNo(); //灏濊瘯璋冨害灏忚溅 - boolean result = shuttleMoveGenerate(wrkNo, locNo, shuttleNo); + boolean result = shuttleMoveGenerate(wrkNo, sourceLocNo, locNo, shuttleNo, flag, false); if (result) { return true;//璋冨害鎴愬姛 } @@ -279,6 +284,11 @@ wrkMast.setAppeTime(now); wrkMast.setModiTime(now); wrkMast.setMainWrkNo(mainWrkMast.getWrkNo()); + + if ("TRANSPORT_LIFT".equals(flag)) { + wrkMast.setMainWrkNo(wrkNo); + } + boolean res = wrkMastService.insert(wrkMast); if (!res) { News.error("灏忚溅杩佺Щ --- 淇濆瓨宸ヤ綔妗eけ璐ワ紒 绌挎杞﹀彿锛�" + shuttleNo); diff --git a/src/main/java/com/zy/core/thread/LiftThread.java b/src/main/java/com/zy/core/thread/LiftThread.java index cdfb73c..23f189c 100644 --- a/src/main/java/com/zy/core/thread/LiftThread.java +++ b/src/main/java/com/zy/core/thread/LiftThread.java @@ -51,6 +51,8 @@ List<NavigateNode> getLiftStaNodes(int lev); + Integer getLevToStaNo(int lev); + //***************鑾峰彇鍛戒护***************** List<LiftCommand> getMoveCommand(Integer taskNo, Integer sourceLev, Integer targetLev, LiftCommandModeType mode);//鎻愬崌鏈虹Щ鍔� diff --git a/src/main/java/com/zy/core/thread/impl/FyDevpThread.java b/src/main/java/com/zy/core/thread/impl/FyDevpThread.java index 6ec89a1..9c4ea1b 100644 --- a/src/main/java/com/zy/core/thread/impl/FyDevpThread.java +++ b/src/main/java/com/zy/core/thread/impl/FyDevpThread.java @@ -227,50 +227,19 @@ index += 1; short[] array = new short[2]; - array[0] = staProtocol.getWorkNo(); - array[1] = staProtocol.getStaNo(); + array[0] = staProtocol.getStaNo(); + array[1] = staProtocol.getWorkNo(); String staNoAddress = "DB83." + (index * 8 + 4); String workNoAddress = "DB83." + (index * 8 + 6); - OperateResult write1 = null; // 宸ヤ綔鍙� - OperateResult write2 = null; // 鐩爣绔� - - //浠诲姟涓嬪彂娆℃暟 - int writeCount = 0; - do { - write1 = siemensS7Net.Write(workNoAddress, array[0]); // 宸ヤ綔鍙� - write2 = siemensS7Net.Write(staNoAddress, array[1]); - if ((write1.IsSuccess && write2.IsSuccess)) { - log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋},{}锛屽啓鍏ユ鏁�={}", staProtocol.getSiteId(), JSON.toJSON(staProtocol.getWorkNo()), JSON.toJSON(staProtocol.getStaNo()), writeCount); -// OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB82.14", (short) (staNos2.indexOf(siteId) * 26)); -// //OperateResultExOne<byte[]> readResult = siemensS7Net.Read(staNoAddress, (short) 8); -// if (readResult.IsSuccess) { -// int workNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2); // 宸ヤ綔鍙� -// int staNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4); // 鐩爣绔� -// // int staNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0); -// //int workNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0); -// if (workNo == workNo2 && staNo == staNo2) { -// //浠诲姟鍛戒护鍐欏叆鎴愬姛 -// log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋},{}锛屽啓鍏ユ鏁�={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount); -// return true; -// } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓 -// writeCount++; -// log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋},{}锛屽啓鍏ユ鏁�={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount); -// } -// } else { -// writeCount++; -// log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},{},鍐欏叆娆℃暟={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount); -// } - } else { - writeCount++; - } - } while (writeCount < 5); -// StaProtocol staProtocol = station.get(siteId); -// if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) { -// staProtocol.setPakMk(true); -// } - OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(array))); - log.error("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(array)); + OperateResult write1 = siemensS7Net.Write(staNoAddress, array); + if (!write1.IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(array))); + log.error("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(array)); + return; + } + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁鎴愬姛銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(array))); + log.info("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(array)); } /** diff --git a/src/main/java/com/zy/core/thread/impl/NyLiftThread.java b/src/main/java/com/zy/core/thread/impl/NyLiftThread.java index 24eac5e..845085e 100644 --- a/src/main/java/com/zy/core/thread/impl/NyLiftThread.java +++ b/src/main/java/com/zy/core/thread/impl/NyLiftThread.java @@ -460,6 +460,11 @@ } @Override + public Integer getLevToStaNo(int lev) { + return liftLevMap.get(lev); + } + + @Override public List<LiftCommand> getMoveCommand(Integer taskNo, Integer sourceLev, Integer targetLev, LiftCommandModeType mode) { /** * 浠诲姟绫诲瀷 diff --git a/src/main/resources/mapper/WrkMastLogMapper.xml b/src/main/resources/mapper/WrkMastLogMapper.xml index cdb4eb7..e6730fa 100644 --- a/src/main/resources/mapper/WrkMastLogMapper.xml +++ b/src/main/resources/mapper/WrkMastLogMapper.xml @@ -27,6 +27,7 @@ <result column="shuttle_no" property="shuttleNo" /> <result column="wms_wrk_no" property="wmsWrkNo" /> <result column="system_msg" property="systemMsg" /> + <result column="main_wrk_no" property="mainWrkNo" /> </resultMap> </mapper> diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml index 4025668..6e38f40 100644 --- a/src/main/resources/mapper/WrkMastMapper.xml +++ b/src/main/resources/mapper/WrkMastMapper.xml @@ -26,6 +26,7 @@ <result column="lift_no" property="liftNo" /> <result column="wms_wrk_no" property="wmsWrkNo" /> <result column="system_msg" property="systemMsg" /> + <result column="main_wrk_no" property="mainWrkNo" /> </resultMap> diff --git a/src/main/resources/sql/20250412151056.nb3 b/src/main/resources/sql/20250412151056.nb3 new file mode 100644 index 0000000..1875780 --- /dev/null +++ b/src/main/resources/sql/20250412151056.nb3 Binary files differ -- Gitblit v1.9.1