From b63790fa580ea78777f16bff6bc79373d675dd10 Mon Sep 17 00:00:00 2001 From: Junjie <540245094@qq.com> Date: 星期四, 21 八月 2025 16:50:47 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java | 119 --------- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 164 +++--------- src/main/java/com/zy/core/model/protocol/LiftProtocol.java | 22 + src/main/java/com/zy/core/dispatcher/LiftDispatchUtils.java | 110 +++++++++ src/main/webapp/views/lift.html | 2 src/main/java/com/zy/core/dispatcher/ForkLiftDispatchUtils.java | 127 ++++++++++ src/main/java/com/zy/core/action/LiftAction.java | 40 +++ src/main/java/com/zy/core/enums/LiftDeviceStatusType.java | 42 +++ src/main/java/com/zy/core/enums/WrkIoType.java | 2 src/main/java/com/zy/core/MainProcess.java | 11 src/main/java/com/zy/asrs/service/impl/ForkMainServiceImpl.java | 30 +- src/main/java/com/zy/common/utils/NavigateSolution.java | 4 src/main/java/com/zy/core/thread/impl/NyLiftThread.java | 10 13 files changed, 416 insertions(+), 267 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/ForkMainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/ForkMainServiceImpl.java index c69b0b5..7386072 100644 --- a/src/main/java/com/zy/asrs/service/impl/ForkMainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/ForkMainServiceImpl.java @@ -15,11 +15,13 @@ import com.zy.core.action.ForkLiftAction; import com.zy.core.action.ShuttleAction; import com.zy.core.cache.SlaveConnection; +import com.zy.core.dispatcher.ForkLiftDispatchUtils; import com.zy.core.dispatcher.ShuttleDispatchUtils; import com.zy.core.enums.*; import com.zy.core.model.command.*; import com.zy.core.model.protocol.ForkLiftProtocol; import com.zy.core.model.protocol.ForkLiftStaProtocol; +import com.zy.core.model.protocol.LiftStaProtocol; import com.zy.core.model.protocol.ShuttleProtocol; import com.zy.core.thread.ForkLiftThread; import com.zy.core.thread.ShuttleThread; @@ -35,7 +37,6 @@ /** * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔� - * Created by vincent on 2020/8/6 */ @Slf4j @Service("forkMainService") @@ -62,8 +63,6 @@ @Autowired private ConfigService configService; @Autowired - private NavigateMapUtils navigateMapUtils; - @Autowired private NavigateMapData navigateMapData; @Autowired private NavigateUtils navigateUtils; @@ -79,6 +78,8 @@ private BasShuttleChargeService basShuttleChargeService; @Autowired private DeviceConfigService deviceConfigService; + @Autowired + private ForkLiftDispatchUtils forkLiftDispatchUtils; /** * 鍒濆鍖栧疄鏃跺湴鍥� @@ -897,7 +898,7 @@ News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", forkLiftProtocol.getLiftNo(), forkLiftProtocol.getWrkNo()); } }else { - boolean checkPreviewDispatchForkLift = commonService.checkWorkNoContainMk(forkLiftProtocol.getWrkNo(), WrkIoType.FORKLIFT_MOVE.id); + boolean checkPreviewDispatchForkLift = commonService.checkWorkNoContainMk(forkLiftProtocol.getWrkNo(), WrkIoType.PREVIEW_LIFT_MOVE.id); if (checkPreviewDispatchForkLift) { //灞炰簬鎻愬崌鏈洪璋冨害绉诲姩浠诲姟 //鏃犲伐浣滄。鏀拺锛岀洿鎺ョ‘璁ゅ畬鎴� @@ -1490,24 +1491,25 @@ return false; } - //鑾峰彇婧愯緭閫佺珯 - ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo()); - if (liftSta == null) { - return false;//鎵句笉鍒扮珯鐐� + //鎼滅储鏈�杩戜笖鏃犳晠闅滄彁鍗囨満 + ForkLiftStaProtocol recentLiftStation = forkLiftDispatchUtils.getRecentLiftStation(shuttleProtocol.getShuttleNo(), Utils.getLev(wrkMast.getLocNo())); + if(recentLiftStation == null) { + News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂茶緭閫佺珯鐐�", shuttleProtocol.getShuttleNo(), wrkMast.getLocNo()); + return false; } - if (liftSta.getHasTray()) { + if (recentLiftStation.getHasTray()) { News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾簮绔欏瓨鍦ㄦ墭鐩�", wrkMast.getWrkNo()); return false; } - if (liftSta.getHasCar()) { + if (recentLiftStation.getHasCar()) { News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾簮绔欏瓨鍦ㄥ皬杞�", wrkMast.getWrkNo()); return false; } //鑾峰彇鐩爣杈撻�佺珯 - ForkLiftStaProtocol liftStaTarget = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo()); + ForkLiftStaProtocol liftStaTarget = ForkLiftUtils.getLiftStaByLev(recentLiftStation.getLiftNo(), Utils.getLev(wrkMast.getLocNo())); if (liftStaTarget == null) { return false;//鎵句笉鍒扮珯鐐� } @@ -1529,7 +1531,7 @@ assignCommand.setAuto(true);//鑷姩妯″紡 //璁$畻杩戠偣浣嶇疆 - String endLocation = navigateUtils.calcEndLocation(shuttleProtocol.getCurrentLocNo(), liftSta.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 1); + String endLocation = navigateUtils.calcEndLocation(shuttleProtocol.getCurrentLocNo(), recentLiftStation.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 1); if (endLocation == null) { News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹁繎鐐逛綅缃绠楀け璐�", wrkMast.getWrkNo()); return false; @@ -1554,6 +1556,8 @@ assignCommand.setCommands(commands); wrkMast.setWrkSts(WrkStsType.MOVE_NEARBY.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷宠繎鐐逛腑 + wrkMast.setSourceStaNo(recentLiftStation.getStaNo()); + wrkMast.setStaNo(liftStaTarget.getStaNo()); wrkMast.setModiTime(now); wrkMast.setSystemMsg("");//娓呯┖娑堟伅 if (wrkMastService.updateById(wrkMast)) { @@ -2000,7 +2004,7 @@ } //绉诲姩 - int workNo = commonService.getWorkNo(WrkIoType.FORKLIFT_MOVE.id);//鑾峰彇浠诲姟鍙� + int workNo = commonService.getWorkNo(WrkIoType.PREVIEW_LIFT_MOVE.id);//鑾峰彇浠诲姟鍙� //鑾峰彇鎻愬崌鏈哄懡浠� ForkLiftCommand liftCommand = forkLiftThread.getMoveCommand(workNo, forkLiftProtocol.getLev(), Utils.getLev(wrkMast.getSourceLocNo())); 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 2d0c45f..6bc7288 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.core.action.LiftAction; import com.zy.core.action.ShuttleAction; import com.zy.core.cache.SlaveConnection; +import com.zy.core.dispatcher.LiftDispatchUtils; import com.zy.core.dispatcher.ShuttleDispatchUtils; import com.zy.core.enums.*; import com.zy.core.model.command.*; @@ -57,8 +58,6 @@ @Autowired private ConfigService configService; @Autowired - private NavigateMapUtils navigateMapUtils; - @Autowired private NavigateMapData navigateMapData; @Autowired private NavigateUtils navigateUtils; @@ -74,6 +73,8 @@ private BasShuttleChargeService basShuttleChargeService; @Autowired private DeviceConfigService deviceConfigService; + @Autowired + private LiftDispatchUtils liftDispatchUtils; /** * 鍒濆鍖栧疄鏃跺湴鍥� @@ -568,9 +569,9 @@ } /** - * 璐у弶鎻愬崌鏈轰换鍔� + * 鎻愬崌鏈轰换鍔� */ - public synchronized void forkLiftIoExecute() { + public synchronized void liftIoExecute() { try { //鎼滅储鏄惁鏈夊緟澶勭悊鐨勪换鍔� List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() @@ -844,61 +845,63 @@ } /** - * 璐у弶鎻愬崌鏈轰换鍔″畬鎴� + * 鎻愬崌鏈轰换鍔″畬鎴� */ - public synchronized void forkLiftFinished() { + public synchronized void liftFinished() { try { - List<DeviceConfig> forkliftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() - .eq("device_type", String.valueOf(SlaveType.ForkLift))); - for (DeviceConfig device : forkliftList) { + List<DeviceConfig> liftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() + .eq("device_type", String.valueOf(SlaveType.Lift))); + for (DeviceConfig device : liftList) { //鑾峰彇鎻愬崌鏈轰俊鎭� - ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, device.getDeviceNo()); - if(forkLiftThread == null) { + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, device.getDeviceNo()); + if(liftThread == null) { continue; } - ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); - if (forkLiftProtocol == null) { + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { continue; } //鎻愬崌鏈轰负绛夊緟纭涓旂┖闂� - if (forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.WAITING.id - && forkLiftProtocol.getWrkNo() != 0 + if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WAITING.id + && liftProtocol.getTaskNo() != 0 ) { //灏嗕换鍔℃。鏍囪涓哄畬鎴� - WrkMast wrkMast = wrkMastService.selectByWorkNo(forkLiftProtocol.getWrkNo()); + WrkMast wrkMast = wrkMastService.selectByWorkNo(liftProtocol.getTaskNo()); if (wrkMast != null) { if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN.sts) { //3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴� wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts); wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� - forkLiftThread.setSyncTaskNo(0); + }else if (wrkMast.getWrkSts() == WrkStsType.MOVE_NEARBY_COMPLETE.sts) { + //303.灏忚溅绉诲姩鑷宠繎鐐瑰畬鎴� -- 璋冨害鎻愬崌鏈哄埌灏忚溅灞� } else if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_LIFT_RUN.sts) { - //104.鎻愬崌鏈烘惉杩愪腑 ==> 109.鍑哄簱瀹屾垚 + //304.鎻愬崌鏈烘惉杩愪腑 ==> 109.鍑哄簱瀹屾垚 wrkMast.setWrkSts(WrkStsType.COMPLETE_OUTBOUND.sts); wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈� - forkLiftThread.setSyncTaskNo(0); - redisUtil.set(RedisKeyType.FORK_LIFT_PUT_COMPLETE.key + forkLiftProtocol.getLiftNo(), wrkMast.getWmsWrkNo(), 60 * 3); } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_RUN.sts) { //306.鎻愬崌鏈烘惉杩愪腑 ==> 307.鎻愬崌鏈烘惉杩愬畬鎴� wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts); - forkLiftThread.setSyncTaskNo(0); + } else { + News.error("鎻愬崌鏈虹‘璁ゅけ璐ワ紝鎻愬崌鏈哄彿={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo()); + return; } + wrkMast.setModiTime(new Date()); if (wrkMastService.updateById(wrkMast)) { - forkLiftThread.reset(); - News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", forkLiftProtocol.getLiftNo()); + liftThread.reset(); + News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo()); } else { - News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", forkLiftProtocol.getLiftNo(), forkLiftProtocol.getWrkNo()); + News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo()); } }else { - boolean checkPreviewDispatchForkLift = commonService.checkWorkNoContainMk(forkLiftProtocol.getWrkNo(), WrkIoType.FORKLIFT_MOVE.id); + boolean checkPreviewDispatchForkLift = commonService.checkWorkNoContainMk(liftProtocol.getTaskNo(), WrkIoType.PREVIEW_LIFT_MOVE.id); if (checkPreviewDispatchForkLift) { //灞炰簬鎻愬崌鏈洪璋冨害绉诲姩浠诲姟 //鏃犲伐浣滄。鏀拺锛岀洿鎺ョ‘璁ゅ畬鎴� - forkLiftThread.setSyncTaskNo(0); - forkLiftThread.reset(); - News.info("宸茬‘璁ゆ彁鍗囨満棰勮皟搴︾Щ鍔ㄤ换鍔°�傛彁鍗囨満鍙�={}", forkLiftProtocol.getLiftNo()); + liftThread.setSyncTaskNo(0); + liftThread.reset(); + News.info("宸茬‘璁ゆ彁鍗囨満棰勮皟搴︾Щ鍔ㄤ换鍔°�傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo()); } } } @@ -1485,25 +1488,15 @@ return false; } - //鑾峰彇婧愯緭閫佺珯 - LiftStaProtocol liftSta = LiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo()); - if (liftSta == null) { - return false;//鎵句笉鍒扮珯鐐� - } - - if (liftSta.getHasCar()) { - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾簮绔欏瓨鍦ㄥ皬杞�", wrkMast.getWrkNo()); + //鎼滅储鏈�杩戜笖鏃犳晠闅滄彁鍗囨満 + LiftStaProtocol recentLiftStation = liftDispatchUtils.getRecentLiftStation(shuttleProtocol.getShuttleNo(), Utils.getLev(wrkMast.getLocNo())); + if(recentLiftStation == null) { + News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂茶緭閫佺珯鐐�", shuttleProtocol.getShuttleNo(), wrkMast.getLocNo()); return false; } - //鑾峰彇鐩爣杈撻�佺珯 - LiftStaProtocol liftStaTarget = LiftUtils.getLiftStaByStaNo(wrkMast.getStaNo()); - if (liftStaTarget == null) { - return false;//鎵句笉鍒扮珯鐐� - } - - if (liftStaTarget.getHasCar()) { - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪灏忚溅", wrkMast.getWrkNo()); + LiftStaProtocol targetLiftSta = LiftUtils.getLiftStaByLev(recentLiftStation.getLiftNo(), Utils.getLev(wrkMast.getLocNo())); + if(targetLiftSta == null) { return false; } @@ -1514,7 +1507,7 @@ assignCommand.setAuto(true);//鑷姩妯″紡 //璁$畻杩戠偣浣嶇疆 - String endLocation = navigateUtils.calcEndLocation(shuttleProtocol.getCurrentLocNo(), liftSta.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 1); + String endLocation = navigateUtils.calcEndLocation(shuttleProtocol.getCurrentLocNo(), recentLiftStation.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 1); if (endLocation == null) { News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹁繎鐐逛綅缃绠楀け璐�", wrkMast.getWrkNo()); return false; @@ -1523,6 +1516,8 @@ //灏忚溅宸插湪杩戠偣浣嶇疆鏃犻渶鍓嶅線 if (shuttleProtocol.getCurrentLocNo().equals(endLocation)) { wrkMast.setWrkSts(WrkStsType.MOVE_NEARBY_COMPLETE.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 303.灏忚溅绉诲姩鑷宠繎鐐瑰畬鎴� + wrkMast.setSourceStaNo(recentLiftStation.getStaNo()); + wrkMast.setStaNo(targetLiftSta.getStaNo()); wrkMast.setModiTime(now); wrkMast.setSystemMsg("");//娓呯┖娑堟伅 wrkMastService.updateById(wrkMast); @@ -1539,6 +1534,8 @@ assignCommand.setCommands(commands); wrkMast.setWrkSts(WrkStsType.MOVE_NEARBY.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷宠繎鐐逛腑 + wrkMast.setSourceStaNo(recentLiftStation.getStaNo()); + wrkMast.setStaNo(targetLiftSta.getStaNo()); wrkMast.setModiTime(now); wrkMast.setSystemMsg("");//娓呯┖娑堟伅 if (wrkMastService.updateById(wrkMast)) { @@ -1627,7 +1624,7 @@ return false; } - int targetLev = Utils.getLev(wrkMast.getLocNo()); + int targetLev = Utils.getLev(shuttleProtocol.getCurrentLocNo()); if (liftProtocol.getLev() != targetLev) { //鑾峰彇鎻愬崌鏈哄懡浠� LiftCommand liftCommand = liftThread.getMoveCommand(wrkMast.getWrkNo(), liftProtocol.getLev(), targetLev); @@ -1639,7 +1636,7 @@ assignCommand.setCommands(commands); assignCommand.setLiftNo(wrkMast.getLiftNo()); assignCommand.setTaskNo(wrkMast.getWrkNo()); - assignCommand.setTaskMode(ForkLiftTaskModeType.MOVE.id); + assignCommand.setTaskMode(LiftTaskModeType.MOVE.id); //涓嬪彂浠诲姟 liftAction.assignWork(wrkMast.getLiftNo(), assignCommand); News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満鍦▄}灞傦紝鎻愬崌鏈轰笉鍦ㄥ皬杞﹀眰锛岃皟搴︾Щ鍔ㄤ腑", wrkMast.getWrkNo(), liftProtocol.getLev(), wrkMast.getLiftNo()); @@ -1724,7 +1721,7 @@ assignCommand.setCommands(commands); assignCommand.setLiftNo(wrkMast.getLiftNo()); assignCommand.setTaskNo(wrkMast.getWrkNo()); - assignCommand.setTaskMode(ForkLiftTaskModeType.SHUTTLE_SWITCH.id); + assignCommand.setTaskMode(LiftTaskModeType.SHUTTLE_SWITCH.id); wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 305.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑 wrkMast.setSystemMsg("");//娓呯┖娑堟伅 @@ -1855,77 +1852,6 @@ } } return true; - } - - //鑷姩鍒囨崲鍑哄叆搴撴ā寮� - public void autoSwitchForkLiftIOMode() { -// List<DeviceConfig> forkliftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() -// .eq("device_type", String.valueOf(SlaveType.ForkLift))); -// for (DeviceConfig device : forkliftList) { -// Integer liftNo = device.getDeviceNo(); -// ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); -// if (forkLiftThread == null) { -// continue; -// } -// ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); -// if (forkLiftProtocol == null) { -// continue; -// } -// -// List<Integer> liftAllStaNo = ForkLiftUtils.getLiftAllStaNo(liftNo); -// if (liftAllStaNo.isEmpty()) { -// continue; -// } -// -// List<Integer> conveyorBindLiftAllStaNo = ForkLiftUtils.getConveyorBindLiftAllStaNo(liftNo); -// if (conveyorBindLiftAllStaNo.isEmpty()) { -// continue; -// } -// -// //鑾峰彇鍏ュ簱浠诲姟 -// List<WrkMast> inWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() -// .in("sta_no", liftAllStaNo) -// .in("wrk_sts" -// , WrkStsType.NEW_INBOUND.sts -// , WrkStsType.INBOUND_DEVICE_RUN.sts -// , WrkStsType.INBOUND_LIFT_RUN.sts -// , WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts -// , WrkStsType.INBOUND_SHUTTLE_RUN.sts -// , WrkStsType.INBOUND_SHUTTLE_RUN_COMPLETE.sts -// )); -// -// //鑾峰彇鍑哄簱浠诲姟 -// List<WrkMast> outWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() -// .in("sta_no", conveyorBindLiftAllStaNo) -// .in("wrk_sts" -// , WrkStsType.NEW_OUTBOUND.sts -// , WrkStsType.OUTBOUND_SHUTTLE_RUN.sts -// , WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts -// , WrkStsType.OUTBOUND_LIFT_RUN.sts -// , WrkStsType.OUTBOUND_LIFT_RUN_COMPLETE.sts -// )); -// -// if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.NONE)) { -// //鏈煡妯″紡 -// if (!inWrkMasts.isEmpty()) { -// forkLiftThread.switchIOMode(ForkLiftIoModeType.IN); -// } else if (!outWrkMasts.isEmpty()) { -// forkLiftThread.switchIOMode(ForkLiftIoModeType.OUT); -// }else { -// forkLiftThread.switchIOMode(ForkLiftIoModeType.IN); -// } -// } else if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.IN)) { -// //鍏ュ簱妯″紡 -// if (inWrkMasts.isEmpty() && !outWrkMasts.isEmpty()) { -// forkLiftThread.switchIOMode(ForkLiftIoModeType.OUT); -// } -// } else if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) { -// //鍑哄簱妯″紡 -// if (outWrkMasts.isEmpty() && !inWrkMasts.isEmpty()) { -// forkLiftThread.switchIOMode(ForkLiftIoModeType.IN); -// } -// } -// } } } diff --git a/src/main/java/com/zy/common/utils/NavigateSolution.java b/src/main/java/com/zy/common/utils/NavigateSolution.java index 6910520..681c54d 100644 --- a/src/main/java/com/zy/common/utils/NavigateSolution.java +++ b/src/main/java/com/zy/common/utils/NavigateSolution.java @@ -205,7 +205,7 @@ } } - if (map[x][y] == MapNodeType.NORMAL_PATH.id || map[x][y] == MapNodeType.MAIN_PATH.id || map[x][y] == MapNodeType.CONVEYOR_CAR_GO.id || map[x][y] == MapNodeType.CHARGE.id || map[x][y] == MapNodeType.LIFT.id) { + if (map[x][y] == MapNodeType.NORMAL_PATH.id || map[x][y] == MapNodeType.MAIN_PATH.id || map[x][y] == MapNodeType.CONVEYOR_CAR_GO.id || map[x][y] == MapNodeType.CONVEYOR.id || map[x][y] == MapNodeType.CHARGE.id || map[x][y] == MapNodeType.LIFT.id) { //瀛愯建鍜屾瘝杞ㄣ�佸皬杞﹀彲璧拌緭閫佺嚎銆佸厖鐢垫々銆佹彁鍗囨満鎵嶈兘杩涜宸﹀彸绉诲姩 if (is_valid(x, y + 1)) { NavigateNode node = new NavigateNode(x, y + 1); @@ -233,7 +233,7 @@ } } - if (map[x][y] == MapNodeType.NORMAL_PATH.id || map[x][y] == MapNodeType.MAIN_PATH.id || map[x][y] == MapNodeType.CONVEYOR_CAR_GO.id || map[x][y] == MapNodeType.CHARGE.id || map[x][y] == MapNodeType.LIFT.id) { + if (map[x][y] == MapNodeType.NORMAL_PATH.id || map[x][y] == MapNodeType.MAIN_PATH.id || map[x][y] == MapNodeType.CONVEYOR_CAR_GO.id || map[x][y] == MapNodeType.CONVEYOR.id || map[x][y] == MapNodeType.CHARGE.id || map[x][y] == MapNodeType.LIFT.id) { //瀛愯建鍜屾瘝杞ㄣ�佸皬杞﹀彲璧拌緭閫佺嚎銆佸厖鐢垫々銆佹彁鍗囨満鎵嶈兘杩涜涓婁笅绉诲姩 if (is_valid(x + 1, y)) { NavigateNode node = new NavigateNode(x + 1, y); diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java index e748408..4e7e797 100644 --- a/src/main/java/com/zy/core/MainProcess.java +++ b/src/main/java/com/zy/core/MainProcess.java @@ -66,10 +66,10 @@ // mainService.shuttleFinished(); //鎵ц绉诲簱浠诲姟 mainService.shuttleLocMoveExecute(); - //璐у弶鎻愬崌鏈轰换鍔� - mainService.forkLiftIoExecute(); - //璐у弶鎻愬崌鏈轰换鍔″畬鎴� - mainService.forkLiftFinished(); + //鎻愬崌鏈轰换鍔� + mainService.liftIoExecute(); + //鎻愬崌鏈轰换鍔″畬鎴� + mainService.liftFinished(); //鎵ц灏忚溅绉诲姩浠诲姟 mainService.shuttleMoveExecute(); // 寮傚父淇℃伅璁板綍 @@ -77,9 +77,6 @@ // 绌挎杞� ===>> 灏忚溅鐢甸噺妫�娴嬪厖鐢� mainService.loopShuttleCharge(); mainService.executeShuttleCharge(); - - //鑷姩鍒囨崲鍑哄叆搴撴ā寮� - mainService.autoSwitchForkLiftIOMode(); // 闂撮殧 Thread.sleep(200); diff --git a/src/main/java/com/zy/core/action/LiftAction.java b/src/main/java/com/zy/core/action/LiftAction.java index 1c2f1c4..81a20b7 100644 --- a/src/main/java/com/zy/core/action/LiftAction.java +++ b/src/main/java/com/zy/core/action/LiftAction.java @@ -8,6 +8,7 @@ import com.zy.common.utils.RedisUtil; import com.zy.core.News; import com.zy.core.cache.SlaveConnection; +import com.zy.core.enums.LiftProtocolStatusType; import com.zy.core.enums.LiftTaskModeType; import com.zy.core.enums.RedisKeyType; import com.zy.core.enums.SlaveType; @@ -121,6 +122,45 @@ redisCommand.setCommandStep(commandStep); // 鏇存柊redis鏁版嵁 redisUtil.set(RedisKeyType.LIFT_WORK_FLAG.key + taskNo, JSON.toJSONString(redisCommand)); + }else { + if (!liftThread.isDeviceIdle()) { + return false; + } + + LiftCommand lastCommand = commands.get(commandStep - 1); + if (lastCommand.getMode() == LiftTaskModeType.PICK_PUT.id) { + if (liftProtocol.getLev() == lastCommand.getPut()) { + lastCommand.setComplete(true); + } + } else if (lastCommand.getMode() == LiftTaskModeType.SHUTTLE_SWITCH.id) { + if (liftProtocol.getLev() == lastCommand.getPut()) { + lastCommand.setComplete(true); + } + } else if (lastCommand.getMode() == LiftTaskModeType.MOVE.id) { + if (liftProtocol.getLev() == lastCommand.getPut()) { + lastCommand.setComplete(true); + } + } + + //浠诲姟鏁版嵁淇濆瓨鍒皉edis + redisUtil.set(RedisKeyType.LIFT_WORK_FLAG.key + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand)); + + if (!lastCommand.getComplete()) { + //涓婁竴鏉′换鍔℃湭瀹屾垚锛岀姝笅鍙戝懡浠� + return false; + } + + //鍒ゆ柇鏄惁涓烘渶鍚庝竴鏉″懡浠や笖鍛戒护鎵ц瀹屾垚锛屾姏鍑虹瓑寰呯‘璁ょ姸鎬� + LiftCommand endCommand = commands.get(commands.size() - 1); + if (endCommand.getComplete()) { + //宸叉墽琛屽畬鎴� + //鍒犻櫎redis + redisUtil.del(RedisKeyType.LIFT_WORK_FLAG.key + redisCommand.getWrkNo()); + + //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting + liftThread.setProtocolStatus(LiftProtocolStatusType.WAITING); + News.info("鎻愬崌鏈轰换鍔℃墽琛屼笅鍙戝畬鎴愭墽琛岀粨鏉燂紝鎻愬崌鏈哄彿={}锛屼换鍔℃暟鎹�={}", redisCommand.getLiftNo(), JSON.toJSON(redisCommand)); + } } return true; diff --git a/src/main/java/com/zy/core/dispatcher/ForkLiftDispatchUtils.java b/src/main/java/com/zy/core/dispatcher/ForkLiftDispatchUtils.java new file mode 100644 index 0000000..16ed602 --- /dev/null +++ b/src/main/java/com/zy/core/dispatcher/ForkLiftDispatchUtils.java @@ -0,0 +1,127 @@ +package com.zy.core.dispatcher; + +import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.zy.asrs.entity.DeviceConfig; +import com.zy.asrs.service.DeviceConfigService; +import com.zy.asrs.utils.Utils; +import com.zy.common.model.NavigateNode; +import com.zy.common.model.enums.NavigationMapType; +import com.zy.common.utils.ForkLiftUtils; +import com.zy.common.utils.NavigateUtils; +import com.zy.core.cache.SlaveConnection; +import com.zy.core.enums.SlaveType; +import com.zy.core.model.protocol.ForkLiftProtocol; +import com.zy.core.model.protocol.ForkLiftStaProtocol; +import com.zy.core.model.protocol.ShuttleProtocol; +import com.zy.core.thread.ForkLiftThread; +import com.zy.core.thread.ShuttleThread; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * 鎻愬崌鏈鸿皟搴﹀伐鍏� + */ +@Component +public class ForkLiftDispatchUtils { + + @Autowired + private DeviceConfigService deviceConfigService; + @Autowired + private NavigateUtils navigateUtils; + + /** + * 鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満杈撻�佺珯鐐� + */ + public ForkLiftStaProtocol getRecentLiftStation(Integer shuttleNo, Integer targetLev) { + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo); + if (shuttleThread == null) { + return null; + } + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + return null; + } + + List<DeviceConfig> forkliftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() + .eq("device_type", String.valueOf(SlaveType.ForkLift))); + + //鑾峰彇灏忚溅鍚屼竴妤煎眰鐨勭珯鐐� + ArrayList<ForkLiftStaProtocol> list = new ArrayList<>(); + int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo());//灏忚溅妤煎眰 + for (DeviceConfig device : forkliftList) { + ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, device.getDeviceNo()); + if (forkLiftThread == null) { + continue; + } + ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); + if (forkLiftProtocol == null) { + continue; + } + if (forkLiftProtocol.getErrorCode() > 0) { + continue; + } + + ForkLiftStaProtocol forkLiftStaProtocol = ForkLiftUtils.getLiftStaByLev(device.getDeviceNo(), lev); + if (forkLiftStaProtocol == null) { + continue; + } + + //鍒ゆ柇褰撳墠灞傛槸鍚︽棤鎵樼洏 + if (forkLiftStaProtocol.getHasTray()) { + continue; + } + + if (forkLiftStaProtocol.getHasCar()) { + continue; + } + + //鍒ゆ柇鐩爣妤煎眰绔欑偣鏄惁鏃犳墭鐩� + ForkLiftStaProtocol targetLiftStaProtocol = ForkLiftUtils.getLiftStaByLev(device.getDeviceNo(), targetLev); + if (targetLiftStaProtocol == null) { + continue; + } + + if (targetLiftStaProtocol.getHasTray()) { + continue;//鏈夋墭鐩樿烦杩� + } + + if (targetLiftStaProtocol.getHasCar()) { + continue; + } + + list.add(forkLiftStaProtocol); + } + + if (list.isEmpty()) { + return null; + } + + String currentLocNo = shuttleProtocol.getCurrentLocNo();//灏忚溅浣嶇疆 + Integer recentAllDistance = 9999999; + ForkLiftStaProtocol recentSta = null;//鏈�杩戠珯鐐� + //鎼滅储璺濈灏忚溅鏈�杩戠殑绔欑偣 + for (ForkLiftStaProtocol forkLiftStaProtocol : list) { + Integer staNo = forkLiftStaProtocol.getStaNo();//绔欑偣鍙� + String locNo = forkLiftStaProtocol.getLocNo();//绔欑偣搴撲綅鍙� + + //褰撳墠绌挎杞︾嚎绋嬪埌鐩爣鍦扮偣璺濈 + List<NavigateNode> currentShuttlePath = navigateUtils.calc(currentLocNo, locNo, NavigationMapType.getMapTypes(NavigationMapType.NORMAL), Utils.getShuttlePoints(shuttleNo, Utils.getLev(currentLocNo)), null);//浣跨敤姝e父閫氶亾鍦板浘 + if (currentShuttlePath == null) { + continue; + } + Integer currentAllDistance = navigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� + if (currentAllDistance < recentAllDistance) { + //濡傛灉褰撳墠妤煎眰鐨勮溅璺緞鏇村皬锛屽垯鏇存柊鏈�杩戠珯鐐� + recentSta = forkLiftStaProtocol; + recentAllDistance = currentAllDistance; + } + } + + return recentSta; + } + +} diff --git a/src/main/java/com/zy/core/dispatcher/LiftDispatchUtils.java b/src/main/java/com/zy/core/dispatcher/LiftDispatchUtils.java new file mode 100644 index 0000000..d058729 --- /dev/null +++ b/src/main/java/com/zy/core/dispatcher/LiftDispatchUtils.java @@ -0,0 +1,110 @@ +package com.zy.core.dispatcher; + +import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.zy.asrs.entity.DeviceConfig; +import com.zy.asrs.service.DeviceConfigService; +import com.zy.asrs.utils.Utils; +import com.zy.common.model.NavigateNode; +import com.zy.common.model.enums.NavigationMapType; +import com.zy.common.utils.LiftUtils; +import com.zy.common.utils.NavigateUtils; +import com.zy.core.cache.SlaveConnection; +import com.zy.core.enums.SlaveType; +import com.zy.core.model.protocol.LiftProtocol; +import com.zy.core.model.protocol.LiftStaProtocol; +import com.zy.core.model.protocol.ShuttleProtocol; +import com.zy.core.thread.LiftThread; +import com.zy.core.thread.ShuttleThread; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * 鎻愬崌鏈鸿皟搴﹀伐鍏� + */ +@Component +public class LiftDispatchUtils { + + @Autowired + private DeviceConfigService deviceConfigService; + @Autowired + private NavigateUtils navigateUtils; + + /** + * 鑾峰彇绌挎杞︽渶杩戜笖鏃犳晠闅滄彁鍗囨満杈撻�佺珯鐐� + */ + public LiftStaProtocol getRecentLiftStation(Integer shuttleNo, Integer targetLev) { + //鑾峰彇鍥涘悜绌挎杞︾嚎绋� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo); + if (shuttleThread == null) { + return null; + } + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + return null; + } + + List<DeviceConfig> liftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() + .eq("device_type", String.valueOf(SlaveType.Lift))); + + //鑾峰彇灏忚溅鍚屼竴妤煎眰鐨勭珯鐐� + ArrayList<LiftStaProtocol> list = new ArrayList<>(); + int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo());//灏忚溅妤煎眰 + for (DeviceConfig device : liftList) { + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, device.getDeviceNo()); + if (liftThread == null) { + continue; + } + LiftProtocol liftProtocol = liftThread.getStatus(); + if (liftProtocol == null) { + continue; + } + if (liftProtocol.getErrorCode() > 0) { + continue; + } + + //鍒ゆ柇鐩爣妤煎眰绔欑偣鏄惁鏃犳墭鐩� + LiftStaProtocol targetLiftStaProtocol = LiftUtils.getLiftStaByLev(device.getDeviceNo(), targetLev); + if (targetLiftStaProtocol == null) { + continue; + } + + //鐩爣灞傛湁灏忚溅 + if (targetLiftStaProtocol.getHasCar()) { + continue; + } + + list.add(targetLiftStaProtocol); + } + + if (list.isEmpty()) { + return null; + } + + String currentLocNo = shuttleProtocol.getCurrentLocNo();//灏忚溅浣嶇疆 + Integer recentAllDistance = 9999999; + LiftStaProtocol recentSta = null;//鏈�杩戠珯鐐� + //鎼滅储璺濈灏忚溅鏈�杩戠殑绔欑偣 + for (LiftStaProtocol liftStaProtocol : list) { + Integer staNo = liftStaProtocol.getStaNo();//绔欑偣鍙� + String locNo = liftStaProtocol.getLocNo();//绔欑偣搴撲綅鍙� + + //褰撳墠绌挎杞︾嚎绋嬪埌鐩爣鍦扮偣璺濈 + List<NavigateNode> currentShuttlePath = navigateUtils.calc(currentLocNo, locNo, NavigationMapType.getMapTypes(NavigationMapType.NORMAL), Utils.getShuttlePoints(shuttleNo, Utils.getLev(currentLocNo)), null);//浣跨敤姝e父閫氶亾鍦板浘 + if (currentShuttlePath == null) { + continue; + } + Integer currentAllDistance = navigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� + if (currentAllDistance < recentAllDistance) { + //濡傛灉褰撳墠妤煎眰鐨勮溅璺緞鏇村皬锛屽垯鏇存柊鏈�杩戠珯鐐� + recentSta = liftStaProtocol; + recentAllDistance = currentAllDistance; + } + } + + return recentSta; + } + +} diff --git a/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java b/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java index a62c8e2..18ec992 100644 --- a/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java +++ b/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java @@ -17,17 +17,13 @@ import com.zy.common.model.NavigateNode; import com.zy.common.model.enums.NavigationMapType; import com.zy.common.service.CommonService; -import com.zy.common.utils.ForkLiftUtils; import com.zy.common.utils.NavigateUtils; import com.zy.core.News; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.SlaveType; import com.zy.core.enums.WrkIoType; import com.zy.core.enums.WrkStsType; -import com.zy.core.model.ForkLiftSlave; -import com.zy.core.model.ShuttleSlave; import com.zy.core.model.protocol.*; -import com.zy.core.thread.ForkLiftThread; import com.zy.core.thread.ShuttleThread; import com.zy.system.entity.Config; import com.zy.system.service.ConfigService; @@ -251,27 +247,6 @@ } } - Integer sourceStaNo = null;//灏忚溅鎹㈠眰婧愮珯鐐� - Integer staNo = null;//灏忚溅鎹㈠眰鐩爣绔欑偣 - if (Utils.getLev(locNo) != Utils.getLev(shuttleProtocol.getCurrentLocNo())) { - //鐩爣搴撲綅鍜屽皬杞﹀簱浣嶅浜庝笉鍚屼竴妤煎眰锛岄渶瑕侀�氳繃鎻愬崌鏈鸿皟搴� - //鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満杈撻�佺珯鐐� - ForkLiftStaProtocol liftSta = this.getRecentLiftSta(shuttleNo, Utils.getLev(locNo)); - if (liftSta == null) { - News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂茶緭閫佺珯鐐�", shuttleNo, locNo); - return false;//娌℃湁鍙敤涓旂┖闂茬殑杈撻�佺珯鐐� - } - sourceStaNo = liftSta.getStaNo();//婧愮珯鐐� - - ForkLiftStaProtocol targetLiftSta = ForkLiftUtils.getLiftStaByLev(liftSta.getLiftNo(), Utils.getLev(locNo)); - if (targetLiftSta == null) { - News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夌洰鏍囩珯鐐�", shuttleNo, locNo); - return false;//娌℃湁鎵惧埌鐩爣绔欑偣 - } - //鐩爣绔欑偣 - staNo = targetLiftSta.getStaNo();//鐩爣绔� - } - // 鑾峰彇宸ヤ綔鍙� int workNo = commonService.getWorkNo(WrkIoType.SHUTTLE_MOVE.id); // 淇濆瓨宸ヤ綔妗� @@ -284,8 +259,6 @@ wrkMast.setShuttleNo(shuttleNo);//绌挎杞﹀彿 wrkMast.setSourceLocNo(shuttleProtocol.getCurrentLocNo()); // 婧愬簱浣� => 灏忚溅褰撳墠搴撲綅鍙� wrkMast.setLocNo(locNo); // 鐩爣搴撲綅 - wrkMast.setSourceStaNo(sourceStaNo);//婧愮珯 - wrkMast.setStaNo(staNo);//鐩爣绔� wrkMast.setAppeTime(now); wrkMast.setModiTime(now); boolean res = wrkMastService.insert(wrkMast); @@ -419,98 +392,6 @@ return levCount < Integer.parseInt(config.getValue()); - } - - /** - * 鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満杈撻�佺珯鐐� - */ - public ForkLiftStaProtocol getRecentLiftSta(Integer shuttleNo, Integer targetLev) { - //鑾峰彇鍥涘悜绌挎杞︾嚎绋� - ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo); - if (shuttleThread == null) { - return null; - } - ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); - if (shuttleProtocol == null) { - return null; - } - - List<DeviceConfig> forkliftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() - .eq("device_type", String.valueOf(SlaveType.ForkLift))); - - //鑾峰彇灏忚溅鍚屼竴妤煎眰鐨勭珯鐐� - ArrayList<ForkLiftStaProtocol> list = new ArrayList<>(); - int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo());//灏忚溅妤煎眰 - for (DeviceConfig device : forkliftList) { - ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, device.getDeviceNo()); - if (forkLiftThread == null) { - continue; - } - ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); - if (forkLiftProtocol == null) { - continue; - } - if (!forkLiftThread.isIdle()) { - continue; - } - - ForkLiftStaProtocol forkLiftStaProtocol = ForkLiftUtils.getLiftStaByLev(device.getDeviceNo(), lev); - if (forkLiftStaProtocol == null) { - continue; - } - - //鍒ゆ柇褰撳墠灞傛槸鍚︽棤鎵樼洏 - if (forkLiftStaProtocol.getHasTray()) { - continue; - } - - if (forkLiftStaProtocol.getHasCar()) { - continue; - } - - //鍒ゆ柇鐩爣妤煎眰绔欑偣鏄惁鏃犳墭鐩� - ForkLiftStaProtocol targetLiftStaProtocol = ForkLiftUtils.getLiftStaByLev(device.getDeviceNo(), targetLev); - if (targetLiftStaProtocol == null) { - continue; - } - - if (targetLiftStaProtocol.getHasTray()) { - continue;//鏈夋墭鐩樿烦杩� - } - - if (targetLiftStaProtocol.getHasCar()) { - continue; - } - - list.add(forkLiftStaProtocol); - } - - if (list.isEmpty()) { - return null; - } - - String currentLocNo = shuttleProtocol.getCurrentLocNo();//灏忚溅浣嶇疆 - Integer recentAllDistance = 9999999; - ForkLiftStaProtocol recentSta = null;//鏈�杩戠珯鐐� - //鎼滅储璺濈灏忚溅鏈�杩戠殑绔欑偣 - for (ForkLiftStaProtocol forkLiftStaProtocol : list) { - Integer staNo = forkLiftStaProtocol.getStaNo();//绔欑偣鍙� - String locNo = forkLiftStaProtocol.getLocNo();//绔欑偣搴撲綅鍙� - - //褰撳墠绌挎杞︾嚎绋嬪埌鐩爣鍦扮偣璺濈 - List<NavigateNode> currentShuttlePath = navigateUtils.calc(currentLocNo, locNo, NavigationMapType.getMapTypes(NavigationMapType.NORMAL), Utils.getShuttlePoints(shuttleNo, Utils.getLev(currentLocNo)), null);//浣跨敤姝e父閫氶亾鍦板浘 - if (currentShuttlePath == null) { - continue; - } - Integer currentAllDistance = navigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� - if (currentAllDistance < recentAllDistance) { - //濡傛灉褰撳墠妤煎眰鐨勮溅璺緞鏇村皬锛屽垯鏇存柊鏈�杩戠珯鐐� - recentSta = forkLiftStaProtocol; - recentAllDistance = currentAllDistance; - } - } - - return recentSta; } /** diff --git a/src/main/java/com/zy/core/enums/LiftDeviceStatusType.java b/src/main/java/com/zy/core/enums/LiftDeviceStatusType.java new file mode 100644 index 0000000..8d80cd2 --- /dev/null +++ b/src/main/java/com/zy/core/enums/LiftDeviceStatusType.java @@ -0,0 +1,42 @@ +package com.zy.core.enums; + +public enum LiftDeviceStatusType { + NONE(-1, "绂荤嚎"), + IDLE(0, "绌洪棽"), + BUSY(1, "蹇欑"), + WAITING(98, "绛夊緟纭"), + ERROR(99, "鏁呴殰"), + ; + + public Integer id; + public String desc; + + LiftDeviceStatusType(Integer id, String desc) { + this.id = id; + this.desc = desc; + } + + public static LiftDeviceStatusType get(Integer id) { + if (null == id) { + return NONE; + } + for (LiftDeviceStatusType type : LiftDeviceStatusType.values()) { + if (type.id.equals(id)) { + return type; + } + } + return NONE; + } + + public static LiftDeviceStatusType get(LiftDeviceStatusType type) { + if (null == type) { + return NONE; + } + for (LiftDeviceStatusType type2 : LiftDeviceStatusType.values()) { + if (type2 == type) { + return type2; + } + } + return NONE; + } +} diff --git a/src/main/java/com/zy/core/enums/WrkIoType.java b/src/main/java/com/zy/core/enums/WrkIoType.java index 5926868..70dfeb2 100644 --- a/src/main/java/com/zy/core/enums/WrkIoType.java +++ b/src/main/java/com/zy/core/enums/WrkIoType.java @@ -9,7 +9,7 @@ SHUTTLE_MOVE(200, "灏忚溅绉诲姩"), LOC_MOVE(201, "绉诲簱浠诲姟"), SHUTTLE_CHARGE(300, "灏忚溅鍏呯數"), - FORKLIFT_MOVE(98, "鎻愬崌鏈洪璋冨害绉诲姩浠诲姟"), + PREVIEW_LIFT_MOVE(98, "鎻愬崌鏈洪璋冨害绉诲姩浠诲姟"), MANUAL(99, "鎵嬪姩浠诲姟"), ; diff --git a/src/main/java/com/zy/core/model/protocol/LiftProtocol.java b/src/main/java/com/zy/core/model/protocol/LiftProtocol.java index 2c5ffd1..c5b94b5 100644 --- a/src/main/java/com/zy/core/model/protocol/LiftProtocol.java +++ b/src/main/java/com/zy/core/model/protocol/LiftProtocol.java @@ -39,12 +39,22 @@ /** * 浠诲姟鐘舵�� */ - private Integer protocolStatus = LiftProtocolStatusType.NONE.id; + private Integer protocolStatus = LiftProtocolStatusType.IDLE.id; /** * 浠诲姟鐘舵�佹灇涓� */ - private LiftProtocolStatusType protocolStatusType = LiftProtocolStatusType.NONE; + private LiftProtocolStatusType protocolStatusType = LiftProtocolStatusType.IDLE; + + /** + * 璁惧鐘舵�� + */ + private Integer deviceStatus = LiftDeviceStatusType.NONE.id; + + /** + * 璁惧鐘舵�佹灇涓� + */ + private LiftDeviceStatusType deviceStatusType = LiftDeviceStatusType.NONE; /** * 浠诲姟妯″紡 @@ -222,6 +232,14 @@ return LiftProtocolStatusType.get(this.protocolStatus).desc; } + public String getDeviceStatus$() { + if (this.deviceStatus == null) { + return ""; + } + + return LiftDeviceStatusType.get(this.deviceStatus).desc; + } + public String getTaskMode$() { if (this.taskMode == null) { return ""; 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 e5a01e7..0ff3b77 100644 --- a/src/main/java/com/zy/core/thread/impl/NyLiftThread.java +++ b/src/main/java/com/zy/core/thread/impl/NyLiftThread.java @@ -160,7 +160,7 @@ if (null == liftProtocol) { liftProtocol = new LiftProtocol(); liftProtocol.setLiftNo(device.getDeviceNo()); - liftProtocol.setProtocolStatus(LiftProtocolStatusType.NONE); + liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); InnerLiftExtend innerLiftExtend = new InnerLiftExtend(); liftProtocol.setExtend(innerLiftExtend); @@ -171,8 +171,8 @@ liftProtocol.setModel(data.getInteger("model")); //PLC浠诲姟鍙� liftProtocol.setPlcTaskNo(data.getInteger("plcTaskNo")); - //浠诲姟鐘舵�� - liftProtocol.setProtocolStatus(data.getInteger("protocolStatus")); + //璁惧鐘舵�� + liftProtocol.setDeviceStatus(data.getInteger("deviceStatus")); //浠诲姟妯″紡 liftProtocol.setTaskMode(data.getInteger("taskMode")); //鍙栬揣鏁版嵁 @@ -397,6 +397,8 @@ } this.liftProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿 + this.setSyncTaskNo(0); + this.setProtocolStatus(LiftProtocolStatusType.IDLE); response.setMessage(JSON.toJSONString(result)); response.setResult(true); return response; @@ -422,7 +424,7 @@ InnerLiftExtend extend = (InnerLiftExtend) this.liftProtocol.getExtend(); boolean res = this.liftProtocol.getProtocolStatus() == LiftProtocolStatusType.IDLE.id - && this.liftProtocol.getPlcTaskNo() == 0 +// && this.liftProtocol.getPlcTaskNo() == 0 && this.liftProtocol.getTaskNo() == 0 && this.liftProtocol.getModel() == 2 && this.liftProtocol.getErrorCode() == 0 diff --git a/src/main/webapp/views/lift.html b/src/main/webapp/views/lift.html index a2362b1..1d9253e 100644 --- a/src/main/webapp/views/lift.html +++ b/src/main/webapp/views/lift.html @@ -114,6 +114,7 @@ <th class="py-3 px-4">宸ヤ綔鍙�</th> <th class="py-3 px-4">PLC宸ヤ綔鍙�</th> <th class="py-3 px-4">璁惧妯″紡</th> + <th class="py-3 px-4">璁惧鐘舵��</th> <th class="py-3 px-4">浠诲姟鐘舵��</th> <th class="py-3 px-4">浠诲姟妯″紡</th> <th class="py-3 px-4">鍙栬揣鏁版嵁</th> @@ -132,6 +133,7 @@ <td class="py-3 px-4">{{ item.taskNo }}</td> <td class="py-3 px-4">{{ item.plcTaskNo }}</td> <td class="py-3 px-4">{{ item.model$ }}</td> + <td class="py-3 px-4">{{ item.deviceStatus$ }}</td> <td class="py-3 px-4">{{ item.protocolStatus$ }}</td> <td class="py-3 px-4">{{ item.taskMode$ }}</td> <td class="py-3 px-4">{{ item.pick }}</td> -- Gitblit v1.9.1