src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/NoLiftInServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/NoLiftOutServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/task/WrkMastScheduler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/enums/WrkStsType.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/model/protocol/StaProtocol.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -21,7 +21,10 @@ import com.zy.core.cache.SlaveConnection; import com.zy.core.dispatcher.ShuttleDispatchUtils; import com.zy.core.enums.*; import com.zy.core.model.*; 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.ShuttleAssignCommand; import com.zy.core.model.command.ShuttleCommand; import com.zy.core.model.protocol.*; @@ -86,6 +89,8 @@ private ShuttleMoveServiceImpl shuttleMoveService; @Autowired private NoLiftInServiceImpl noLiftInService; @Autowired private NoLiftOutServiceImpl noLiftOutService; private boolean isInEnable(DevpThread devpThread, Integer staNo) { @@ -781,24 +786,48 @@ wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts); 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_IN_NO_Lift_1.sts) { wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_2.sts); } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_1.sts) { wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_2.sts); 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_IN_NO_Lift_3.sts) { wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_4.sts); } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_3.sts) { wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_4.sts); 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_IN_NO_Lift_7.sts) { wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_8.sts); } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_7.sts) { wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_8.sts); 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_IN_NO_Lift_11.sts) { wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_12.sts); } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_11.sts) { wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_12.sts); 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_IN_NO_Lift_13.sts) { wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_14.sts); } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_13.sts) { wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_14.sts); 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_12.sts) { wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_13.sts); 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) { wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_11.sts); 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_8.sts) { wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_9.sts); 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_6.sts) { wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_7.sts); 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_4.sts) { wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_5.sts); 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_2.sts) { wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_3.sts); shuttleThread.setSyncTaskNo(0); notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//触发通知 } @@ -1023,12 +1052,12 @@ } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_TO_SHUTTLE_TRANSPORT_LIFT_OUT.sts) { //提升机至小车层 ==> 提升机至小车层完成 wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_TO_SHUTTLE_COMPLETE_TRANSPORT_LIFT_OUT.sts); }else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_Lift_5.sts) { } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_5.sts) { //提升机至小车层 ==> 提升机至小车层完成 wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_6.sts); }else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_Lift_9.sts) { wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_6.sts); } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_9.sts) { //提升机至小车层 ==> 提升机至小车层完成 wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_10.sts); wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_10.sts); } wrkMast.setModiTime(new Date()); @@ -1531,7 +1560,7 @@ if ("TRANSPORT_LIFT".equals(wrkMast.getMk())) { this.shuttleMoveExecuteTransportLift(wrkMast); } else if ("TRANSPORT_DEVP".equals(wrkMast.getMk())) { noLiftInService.shuttleMoveExecute(wrkMast); this.shuttleMoveExecuteTransportNoLift(wrkMast); } else { shuttleMoveService.shuttleMoveExecuteMove(wrkMast); } @@ -1557,7 +1586,15 @@ } } private void shuttleMoveExecuteTransportNoLift(WrkMast wrkMast) { if (12 == Utils.getRow(wrkMast.getSourceLocNo()) && 3 == Utils.getBay(wrkMast.getSourceLocNo())) { //入库 noLiftInService.shuttleMoveExecute(wrkMast); } else { //出库 noLiftOutService.shuttleMoveExecute(wrkMast); } } } src/main/java/com/zy/asrs/service/impl/NoLiftInServiceImpl.java
@@ -5,7 +5,6 @@ import com.zy.asrs.service.WrkMastService; import com.zy.asrs.utils.NotifyUtils; import com.zy.asrs.utils.Utils; import com.zy.common.model.NavigateNode; import com.zy.common.model.enums.NavigationMapType; import com.zy.common.service.CommonService; import com.zy.common.utils.LiftUtils; @@ -137,7 +136,7 @@ if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { //小车在取货点 wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_1.sts);//小车移动到输送线 301.生成小车移库任务 ==> 呼叫小车至取货点 wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_1.sts);//小车移动到输送线 301.生成小车移库任务 ==> 呼叫小车至取货点 wrkMast.setModiTime(now); wrkMast.setSystemMsg("");//清空消息 wrkMastService.updateById(wrkMast); @@ -150,7 +149,7 @@ return false; } wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_1.sts);//小车移动到输送线 301.生成小车移库任务 ==> 呼叫小车至取货点 wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_1.sts);//小车移动到输送线 301.生成小车移库任务 ==> 呼叫小车至取货点 wrkMast.setModiTime(now); wrkMast.setSystemMsg("");//清空消息 wrkMastService.updateById(wrkMast); @@ -170,7 +169,7 @@ Date now = new Date(); //小车移动至站点 301.生成小车移库任务 ==> 302.小车移动至站点中 if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_Lift_2.sts) { if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_2.sts) { //获取四向穿梭车线程 ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { @@ -223,9 +222,16 @@ commands.addAll(moveCommands); } List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true); if (liftCommand == null) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车获取顶升命令失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } commands.addAll(0, liftCommand); assignCommand.setCommands(commands); wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_3.sts);//小车移动到待机点 wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_3.sts);//小车移动到待机点 wrkMast.setModiTime(now); wrkMast.setSystemMsg("");//清空消息 if (wrkMastService.updateById(wrkMast)) { @@ -250,7 +256,7 @@ //--------------------------------------小车迁入提升机-----------------------------------------// Date now = new Date(); //小车移动到提升机中 小车移动至站点完成 ==> 提升机至小车层 if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_Lift_4.sts) { if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_4.sts) { //获取四向穿梭车线程 ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { @@ -335,7 +341,7 @@ //判断提升机楼层 if (liftProtocol.getLev() == Utils.getLev(shuttleProtocol.getCurrentLocNo())) { //提升机在小车楼层 wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_6.sts);//小车移动到提升机中 小车移动至站点完成 ==> 提升机至小车层完成 wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_6.sts);//小车移动到提升机中 小车移动至站点完成 ==> 提升机至小车层完成 wrkMast.setModiTime(now); wrkMastService.updateById(wrkMast); return false; @@ -359,7 +365,7 @@ assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); assignCommand.setTaskMode(LiftCommandModeType.MOVE.id.shortValue()); wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_5.sts);//小车移动到提升机中 小车移动至站点完成 ==> 提升机至小车层 wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_5.sts);//小车移动到提升机中 小车移动至站点完成 ==> 提升机至小车层 wrkMast.setLiftNo(liftProtocol.getLiftNo());//提前锁定提升机 wrkMast.setSystemMsg("");//清空消息 wrkMast.setModiTime(now); @@ -386,7 +392,7 @@ //--------------------------------------小车迁入提升机-----------------------------------------// Date now = new Date(); //小车移动到提升机中 提升机至小车层完成 ==> 小车迁入提升机中 if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_Lift_6.sts) { if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_6.sts) { //获取四向穿梭车线程 ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { @@ -471,7 +477,7 @@ assignCommand.setCommands(commands); wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_7.sts);//小车移动到提升机中 提升机至小车层完成 ==> 小车迁入提升机中 wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_7.sts);//小车移动到提升机中 提升机至小车层完成 ==> 小车迁入提升机中 wrkMast.setModiTime(now); if (wrkMastService.updateById(wrkMast)) { //下发任务 @@ -496,7 +502,7 @@ //--------------------------------------小车迁入提升机-----------------------------------------// Date now = new Date(); //小车移动到提升机中 小车迁入提升机完成 ==> 提升机至放货层 if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_Lift_8.sts) { if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_8.sts) { if (wrkMast.getLiftNo() == null) { News.info("{}任务未绑定提升机", wrkMast.getWrkNo()); return false; @@ -559,7 +565,7 @@ assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); assignCommand.setTaskMode(LiftCommandModeType.MOVE.id.shortValue()); wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_9.sts);//小车移动到提升机中 小车迁入提升机完成 ==> 提升机至放货层 wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_9.sts);//小车移动到提升机中 小车迁入提升机完成 ==> 提升机至放货层 wrkMast.setLiftNo(liftProtocol.getLiftNo());//提前锁定提升机 wrkMast.setSystemMsg("");//清空消息 wrkMast.setModiTime(now); @@ -586,7 +592,7 @@ //--------------------------------------小车迁入提升机-----------------------------------------// Date now = new Date(); //小车移动到提升机中 提升机至放货层完成 ==> 小车迁出提升机中 if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_Lift_10.sts) { if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_10.sts) { //获取四向穿梭车线程 ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { @@ -691,15 +697,10 @@ return false; } List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true); if (liftCommand == null) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车获取顶升命令失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } commands.addAll(0, liftCommand); assignCommand.setCommands(commands); wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_11.sts);//小车移动到提升机中 提升机至放货层完成 ==> 小车迁出提升机中 wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_11.sts);//小车移动到提升机中 提升机至放货层完成 ==> 小车迁出提升机中 wrkMast.setModiTime(now); if (wrkMastService.updateById(wrkMast)) { //下发任务 @@ -725,7 +726,7 @@ Date now = new Date(); //小车移动到目标库位中 小车迁出提升机完成 ==> 小车放货中 if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_Lift_12.sts) { if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_12.sts) { //获取四向穿梭车线程 ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { @@ -769,7 +770,7 @@ assignCommand.setCommands(commands); wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_13.sts);//小车移动到目标库位中 小车迁出提升机完成 ==> 小车放货中 wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_13.sts);//小车移动到目标库位中 小车迁出提升机完成 ==> 小车放货中 wrkMast.setLiftNo(null);//释放提升机 wrkMast.setSystemMsg("");//清空消息 wrkMast.setModiTime(now); @@ -792,35 +793,8 @@ Date now = new Date(); //小车移动到目标库位中 309.小车迁出提升机完成 ==> 310.小车移动中 if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_Lift_2.sts) { if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_LIFT_1.sts) { List<NavigateNode> targetNodes = null; if (wrkMast.getLiftNo() != null) { //判断提升机是否有其他任务 WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); if (liftWrkMast != null) { if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//提升机任务和当前任务不相同 News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo()); return false;//当前提升机存在未完成任务,等待下一次轮询 } } LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); if (liftThread == null) { News.info("{}任务,{}号提升机,提升机线程不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo()); return false; } //小车目标就是提升机位置,直接认定小车移动任务完成 if (liftThread.getLiftLocNo(Utils.getLev(wrkMast.getLocNo())).equals(wrkMast.getLocNo())) { wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);//311.小车移动完成 wrkMast.setLiftNo(null);//释放提升机 wrkMast.setModiTime(now); wrkMastService.updateById(wrkMast); return false; } } //获取四向穿梭车线程 ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); @@ -838,14 +812,6 @@ return false; } //小车已经在目标库位,直接认定小车移动任务完成 if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) { wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);//311.小车移动完成 wrkMast.setLiftNo(null);//释放提升机 wrkMast.setModiTime(now); wrkMastService.updateById(wrkMast); return false; } ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 四向穿梭车编号 @@ -856,7 +822,6 @@ assignCommand.setLocNo(wrkMast.getLocNo());//目标库位 List<ShuttleCommand> commands = new ArrayList<>(); List<ShuttleCommand> liftCommand = null; Integer mapType = NavigationMapType.NORMAL.id; List<ShuttleCommand> moveCommands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), mapType, assignCommand, shuttleThread); @@ -867,10 +832,22 @@ commands.addAll(moveCommands); List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true); if (liftCommand == null) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车获取顶升命令失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } commands.addAll(0, liftCommand); List<ShuttleCommand> liftCommandDown = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, false); if (liftCommandDown == null) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车获取下降命令失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } commands.addAll(liftCommandDown); assignCommand.setCommands(commands); wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_13.sts);//小车移动到目标库位中 wrkMast.setLiftNo(null);//释放提升机 wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_LIFT_13.sts);//小车移动到目标库位中 wrkMast.setSystemMsg("");//清空消息 wrkMast.setModiTime(now); src/main/java/com/zy/asrs/service/impl/NoLiftOutServiceImpl.java
@@ -1,11 +1,9 @@ package com.zy.asrs.service.impl; import com.zy.asrs.domain.enums.NotifyMsgType; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.WrkMastService; import com.zy.asrs.utils.NotifyUtils; import com.zy.asrs.utils.Utils; import com.zy.common.model.NavigateNode; import com.zy.common.model.enums.NavigationMapType; import com.zy.common.service.CommonService; import com.zy.common.utils.LiftUtils; @@ -62,33 +60,36 @@ /** * 从没有提升机侧入库,有两种情况,一种入库到同层,一种入库到不同层,则需要提升机 * 从没有提升机侧出库,有两种情况,一种1,5库到同层,一种非1,5库到1,5,则需要提升机 * @param wrkMast */ public void shuttleMoveExecute(WrkMast wrkMast) { boolean stepMoveSta = this.shuttleMoveExecuteTransportLiftStepCallShuttle(wrkMast);//小车迁移-呼叫小车至取货点 if (!stepMoveSta) { return; } //判断目标库位是否在1层或5层 if (Utils.getLev(wrkMast.getLocNo()) == 1 || Utils.getLev(wrkMast.getLocNo()) == 5) { //直接入库 boolean stepMoveLoc = this.shuttleMoveExecuteStepMoveLoc(wrkMast);//小车移动到目标库位中 boolean stepMoveSta = this.shuttleMoveExecuteTransportLiftStepCallShuttle2(wrkMast);//呼叫小车至取货点 if (!stepMoveSta) { return; } boolean stepMoveLoc = this.shuttleMoveExecuteTransportLiftStepMoveLoc2(wrkMast);//小车移动到目标库位中 if (!stepMoveLoc) { return; } } else { boolean stepIntoSta = this.shuttleMoveExecuteStepMoveSta(wrkMast);//小车迁移至待机点 if (!stepIntoSta) { boolean stepMoveSta = this.shuttleMoveExecuteTransportLiftStepCallShuttle(wrkMast);//呼叫小车至取货点 if (!stepMoveSta) { return; } boolean stepTransportLiftOutStepMoveSta = this.shuttleMoveExecuteTransportLiftOutStepMoveSta(wrkMast);//小车移动到待机点 if (!stepTransportLiftOutStepMoveSta) { return; } boolean stepLiftToShuttleLev = this.shuttleMoveExecuteTransportLiftStepLiftToShuttleLev(wrkMast);//提升机到小车层 boolean stepLiftToShuttleLev = this.shuttleMoveExecuteTransportLiftOutStepLiftToShuttleLev(wrkMast);//提升机到小车层 if (!stepLiftToShuttleLev) { return; } boolean stepIntoLift = this.shuttleMoveExecuteTransportLiftStepIntoLift(wrkMast);//小车迁入提升机 boolean stepIntoLift = this.shuttleMoveExecuteTransportLiftOutStepIntoLift(wrkMast);//小车迁入提升机 if (!stepIntoLift) { return; } @@ -98,16 +99,16 @@ return; } boolean stepOutLift = this.shuttleMoveExecuteTransportLiftStepOutLift(wrkMast);//小车迁出提升机到待机位 boolean stepOutLift = this.shuttleMoveExecuteTransportLiftOutStepOutLift(wrkMast);//小车移动至输送线处 if (!stepOutLift) { return; } boolean stepMoveLoc = this.shuttleMoveExecuteTransportLiftStepMoveLoc(wrkMast);//小车移动到目标库位中 if (!stepMoveLoc) { return; } } } /** @@ -137,7 +138,7 @@ if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { //小车在取货点 wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_1.sts);//小车移动到输送线 301.生成小车移库任务 ==> 呼叫小车至取货点 wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_2.sts);//小车移动到提升机中 301.生成小车移库任务 ==> 呼叫小车至取货点 wrkMast.setModiTime(now); wrkMast.setSystemMsg("");//清空消息 wrkMastService.updateById(wrkMast); @@ -150,7 +151,7 @@ return false; } wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_1.sts);//小车移动到输送线 301.生成小车移库任务 ==> 呼叫小车至取货点 wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_1.sts);//小车移动到提升机中 301.生成小车移库任务 ==> 呼叫小车至取货点 wrkMast.setModiTime(now); wrkMast.setSystemMsg("");//清空消息 wrkMastService.updateById(wrkMast); @@ -159,18 +160,17 @@ return true; } /** * 小车迁移-小车移动到站点 * 如需主方法执行continue,请返回false * ps:返回值true并不代表该方法执行成功,返回值仅做标记用于主方法是否执行continue */ private boolean shuttleMoveExecuteStepMoveSta(WrkMast wrkMast) { private boolean shuttleMoveExecuteTransportLiftOutStepMoveSta(WrkMast wrkMast) { //--------------------------------------小车移动至站点-----------------------------------------// Date now = new Date(); //小车移动至站点 301.生成小车移库任务 ==> 302.小车移动至站点中 if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_Lift_2.sts) { //小车移动至站点 呼叫小车至取货点 ==> 小车移动至站点中 if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_1.sts) { //获取四向穿梭车线程 ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { @@ -187,6 +187,10 @@ return false; } if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车,未到达取货点", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } //获取穿梭车最近且空闲的提升机 LiftThread liftThread = LiftUtils.getRecentLift(shuttleProtocol.getCurrentLocNo()); @@ -211,28 +215,31 @@ assignCommand.setAuto(true);//自动模式 List<ShuttleCommand> commands = new ArrayList<>(); Integer mapType = NavigationMapType.NORMAL.id; Integer mapType = NavigationMapType.DFX.id; if (!liftStandByLocNo.equals(wrkMast.getSourceLocNo())) { //获取小车到提升机待机位行走命令 List<ShuttleCommand> moveCommands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftStandByLocNo, mapType, assignCommand, shuttleThread); if (moveCommands == null) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车,路径计算失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false;//路径解锁失败 } commands.addAll(moveCommands); //获取小车到提升机待机位行走命令 List<ShuttleCommand> moveCommands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftStandByLocNo, mapType, assignCommand, shuttleThread); if (moveCommands == null) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车,路径计算失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false;//路径解锁失败 } commands.addAll(moveCommands); List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true); if (liftCommand == null) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车获取顶升命令失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } commands.addAll(0, liftCommand); assignCommand.setCommands(commands); wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_3.sts);//小车移动到待机点 wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_2.sts);//小车移动到提升机中 呼叫小车至取货点 ==> 小车移动至站点中 wrkMast.setModiTime(now); wrkMast.setSystemMsg("");//清空消息 if (wrkMastService.updateById(wrkMast)) { //下发任务 shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); //触发通知 notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVING); return false; } return false; @@ -240,17 +247,16 @@ return true; } /** * 小车迁移-提升机到小车层 * 如需主方法执行continue,请返回false * ps:返回值true并不代表该方法执行成功,返回值仅做标记用于主方法是否执行continue */ private boolean shuttleMoveExecuteTransportLiftStepLiftToShuttleLev(WrkMast wrkMast) { private boolean shuttleMoveExecuteTransportLiftOutStepLiftToShuttleLev(WrkMast wrkMast) { //--------------------------------------小车迁入提升机-----------------------------------------// Date now = new Date(); //小车移动到提升机中 小车移动至站点完成 ==> 提升机至小车层 if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_Lift_4.sts) { if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_3.sts) { //获取四向穿梭车线程 ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { @@ -327,15 +333,15 @@ } //判断提升机内是否有托盘 if (!liftProtocol.getHasTray()) { News.info("{}任务,{}号提升机,提升机内无托盘,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); if (liftProtocol.getHasTray()) { News.info("{}任务,{}号提升机,提升机内有托盘,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); return false;//提升机内无小车 } //判断提升机楼层 if (liftProtocol.getLev() == Utils.getLev(shuttleProtocol.getCurrentLocNo())) { //提升机在小车楼层 wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_6.sts);//小车移动到提升机中 小车移动至站点完成 ==> 提升机至小车层完成 wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_5.sts);//小车移动到提升机中 小车移动至站点完成 ==> 提升机至小车层完成 wrkMast.setModiTime(now); wrkMastService.updateById(wrkMast); return false; @@ -359,15 +365,13 @@ assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); assignCommand.setTaskMode(LiftCommandModeType.MOVE.id.shortValue()); wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_5.sts);//小车移动到提升机中 小车移动至站点完成 ==> 提升机至小车层 wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_4.sts);//小车移动到提升机中 小车移动至站点完成 ==> 提升机至小车层 wrkMast.setLiftNo(liftProtocol.getLiftNo());//提前锁定提升机 wrkMast.setSystemMsg("");//清空消息 wrkMast.setModiTime(now); if (wrkMastService.updateById(wrkMast)) { //下发任务 liftAction.assignWork(wrkMast.getLiftNo(), assignCommand); // //触发通知 // notifyUtils.notify(String.valueOf(SlaveType.Lift), liftProtocol.getLiftNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVING_IN_LIFT); return false; } return false; @@ -376,17 +380,16 @@ return true; } /** * 小车迁移-小车迁入提升机 * 如需主方法执行continue,请返回false * ps:返回值true并不代表该方法执行成功,返回值仅做标记用于主方法是否执行continue */ private boolean shuttleMoveExecuteTransportLiftStepIntoLift(WrkMast wrkMast) { private boolean shuttleMoveExecuteTransportLiftOutStepIntoLift(WrkMast wrkMast) { //--------------------------------------小车迁入提升机-----------------------------------------// Date now = new Date(); //小车移动到提升机中 提升机至小车层完成 ==> 小车迁入提升机中 if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_Lift_6.sts) { if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_5.sts) { //获取四向穿梭车线程 ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { @@ -444,8 +447,8 @@ } //判断提升机内是否有托盘 if (!liftProtocol.getHasTray()) { News.info("{}任务,{}号提升机,提升机内无托盘,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); if (liftProtocol.getHasTray()) { News.info("{}任务,{}号提升机,提升机内有托盘,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); return false;//提升机内无小车 } @@ -471,13 +474,11 @@ assignCommand.setCommands(commands); wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_7.sts);//小车移动到提升机中 提升机至小车层完成 ==> 小车迁入提升机中 wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_6.sts);//小车移动到提升机中 提升机至小车层完成 ==> 小车迁入提升机中 wrkMast.setModiTime(now); if (wrkMastService.updateById(wrkMast)) { //下发任务 shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); // //触发通知 // notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVING_IN_LIFT); return false; } return false; @@ -496,7 +497,7 @@ //--------------------------------------小车迁入提升机-----------------------------------------// Date now = new Date(); //小车移动到提升机中 小车迁入提升机完成 ==> 提升机至放货层 if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_Lift_8.sts) { if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_7.sts) { if (wrkMast.getLiftNo() == null) { News.info("{}任务未绑定提升机", wrkMast.getWrkNo()); return false; @@ -559,7 +560,7 @@ assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); assignCommand.setTaskMode(LiftCommandModeType.MOVE.id.shortValue()); wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_9.sts);//小车移动到提升机中 小车迁入提升机完成 ==> 提升机至放货层 wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_8.sts);//小车移动到提升机中 小车迁入提升机完成 ==> 提升机至放货层 wrkMast.setLiftNo(liftProtocol.getLiftNo());//提前锁定提升机 wrkMast.setSystemMsg("");//清空消息 wrkMast.setModiTime(now); @@ -582,11 +583,11 @@ * 如需主方法执行continue,请返回false * ps:返回值true并不代表该方法执行成功,返回值仅做标记用于主方法是否执行continue */ private boolean shuttleMoveExecuteTransportLiftStepOutLift(WrkMast wrkMast) { private boolean shuttleMoveExecuteTransportLiftOutStepOutLift(WrkMast wrkMast) { //--------------------------------------小车迁入提升机-----------------------------------------// Date now = new Date(); //小车移动到提升机中 提升机至放货层完成 ==> 小车迁出提升机中 if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_Lift_10.sts) { //小车移动到提升机中 小车迁入提升机完成 ==> 小车迁出提升机中 if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_9.sts) { //获取四向穿梭车线程 ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { @@ -649,32 +650,6 @@ return false;//提升机内无小车 } //判断提升机楼层 if (liftProtocol.getLev() != Utils.getLev(wrkMast.getLocNo())) { //提升机不在放货层 News.info("{}任务,{}号提升机,不在放货层,禁止派发", wrkMast.getWrkNo(), liftProtocol.getLiftNo()); return false; } if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(wrkMast.getLocNo())) { ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 四向穿梭车编号 assignCommand.setTaskMode(ShuttleTaskModeType.UPDATE_LOCATION.id);//更新坐标 assignCommand.setTaskNo(wrkMast.getWrkNo());//任务号 assignCommand.setAuto(true);//自动模式 assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//源库位 assignCommand.setLocNo(wrkMast.getLocNo());//目标库位 //更新小车坐标 ShuttleCommand command = shuttleThread.getUpdateLocationCommand(wrkMast.getWrkNo(), wrkMast.getLocNo()); ArrayList<ShuttleCommand> commands = new ArrayList<>(); commands.add(command); assignCommand.setCommands(commands); shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); return false; } ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 四向穿梭车编号 assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//小车移库任务 @@ -691,21 +666,14 @@ return false; } List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true); if (liftCommand == null) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车获取顶升命令失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } commands.addAll(0, liftCommand); assignCommand.setCommands(commands); wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_11.sts);//小车移动到提升机中 提升机至放货层完成 ==> 小车迁出提升机中 wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_10.sts);//小车移动到提升机中 提升机至放货层完成 ==> 小车迁出提升机中 wrkMast.setModiTime(now); if (wrkMastService.updateById(wrkMast)) { //下发任务 shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); // //触发通知 // notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVING_IN_LIFT); return false; } return false; @@ -713,7 +681,6 @@ return true; } /** * 小车迁移-小车移动到目标库位中 @@ -725,7 +692,7 @@ Date now = new Date(); //小车移动到目标库位中 小车迁出提升机完成 ==> 小车放货中 if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_Lift_12.sts) { if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_11.sts) { //获取四向穿梭车线程 ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { @@ -769,7 +736,7 @@ assignCommand.setCommands(commands); wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_13.sts);//小车移动到目标库位中 小车迁出提升机完成 ==> 小车放货中 wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_12.sts);//小车移动到目标库位中 小车迁出提升机完成 ==> 小车放货中 wrkMast.setLiftNo(null);//释放提升机 wrkMast.setSystemMsg("");//清空消息 wrkMast.setModiTime(now); @@ -783,45 +750,66 @@ /** * 小车迁移-呼叫小车至取货点 * 如需主方法执行continue,请返回false * ps:返回值true并不代表该方法执行成功,返回值仅做标记用于主方法是否执行continue */ private boolean shuttleMoveExecuteTransportLiftStepCallShuttle2(WrkMast wrkMast) { Date now = new Date(); //小车移动至站点 301.生成小车移库任务 ==> 呼叫小车至取货点 if (wrkMast.getWrkSts() == WrkStsType.NEW_MOVE.sts) { //获取四向穿梭车线程 ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { return false; } ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); if (shuttleProtocol == null) { return false; } //小车处于空闲状态 if (!shuttleThread.isIdle()) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车,小车忙碌中", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { //小车在取货点 wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_1.sts);//小车移动到提升机中 301.生成小车移库任务 ==> 呼叫小车至取货点 wrkMast.setModiTime(now); wrkMast.setSystemMsg("");//清空消息 wrkMastService.updateById(wrkMast); return false; } boolean dispatchShuttle = shuttleDispatchUtils.shuttleMoveGenerate(wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo(), null, true); if (!dispatchShuttle) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车,调度至取货点失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_1.sts);//小车移动到提升机中 301.生成小车移库任务 ==> 呼叫小车至取货点 wrkMast.setModiTime(now); wrkMast.setSystemMsg("");//清空消息 wrkMastService.updateById(wrkMast); return false; } return true; } /** * 小车迁移-小车移动到目标库位中 * 如需主方法执行continue,请返回false * ps:返回值true并不代表该方法执行成功,返回值仅做标记用于主方法是否执行continue */ private boolean shuttleMoveExecuteStepMoveLoc(WrkMast wrkMast) { private boolean shuttleMoveExecuteTransportLiftStepMoveLoc2(WrkMast wrkMast) { //--------------------------------------小车移动到目标库位中-----------------------------------------// Date now = new Date(); //小车移动到目标库位中 309.小车迁出提升机完成 ==> 310.小车移动中 if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_NO_Lift_2.sts) { List<NavigateNode> targetNodes = null; if (wrkMast.getLiftNo() != null) { //判断提升机是否有其他任务 WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo()); if (liftWrkMast != null) { if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//提升机任务和当前任务不相同 News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo()); return false;//当前提升机存在未完成任务,等待下一次轮询 } } LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); if (liftThread == null) { News.info("{}任务,{}号提升机,提升机线程不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo()); return false; } //小车目标就是提升机位置,直接认定小车移动任务完成 if (liftThread.getLiftLocNo(Utils.getLev(wrkMast.getLocNo())).equals(wrkMast.getLocNo())) { wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);//311.小车移动完成 wrkMast.setLiftNo(null);//释放提升机 wrkMast.setModiTime(now); wrkMastService.updateById(wrkMast); return false; } } //小车移动到目标库位中 小车迁出提升机完成 ==> 小车放货中 if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_NO_LIFT_1.sts) { //获取四向穿梭车线程 ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { @@ -838,15 +826,6 @@ return false; } //小车已经在目标库位,直接认定小车移动任务完成 if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) { wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);//311.小车移动完成 wrkMast.setLiftNo(null);//释放提升机 wrkMast.setModiTime(now); wrkMastService.updateById(wrkMast); return false; } ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 四向穿梭车编号 assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//小车移库任务 @@ -856,24 +835,36 @@ assignCommand.setLocNo(wrkMast.getLocNo());//目标库位 List<ShuttleCommand> commands = new ArrayList<>(); List<ShuttleCommand> liftCommand = null; Integer mapType = NavigationMapType.NORMAL.id; Integer mapType = NavigationMapType.DFX.id; List<ShuttleCommand> moveCommands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), mapType, assignCommand, shuttleThread); if (moveCommands == null) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车,路径计算失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false;//路径计算失败 } commands.addAll(moveCommands); List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true); if (liftCommand == null) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车获取顶升命令失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } commands.addAll(0, liftCommand); List<ShuttleCommand> liftCommandDown = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, false); if (liftCommandDown == null) { News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车获取fangxia命令失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; } commands.addAll(liftCommandDown); assignCommand.setCommands(commands); wrkMast.setWrkSts(WrkStsType.MOVE_IN_NO_Lift_13.sts);//小车移动到目标库位中 wrkMast.setWrkSts(WrkStsType.MOVE_OUT_NO_LIFT_12.sts);//小车移动到目标库位中 小车迁出提升机完成 ==> 小车放货中 wrkMast.setLiftNo(null);//释放提升机 wrkMast.setSystemMsg("");//清空消息 wrkMast.setModiTime(now); if (wrkMastService.updateById(wrkMast)) { //下发任务 shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); @@ -881,5 +872,4 @@ } return true; } } src/main/java/com/zy/asrs/task/WrkMastScheduler.java
@@ -197,7 +197,8 @@ , WrkStsType.COMPLETE_MOVE.sts , WrkStsType.COMPLETE_MOVE_TRANSPORT_LIFT.sts , WrkStsType.COMPLETE_MOVE_TRANSPORT_LIFT_OUT.sts , WrkStsType.MOVE_IN_NO_Lift_13.sts , WrkStsType.MOVE_IN_NO_LIFT_14.sts , WrkStsType.MOVE_OUT_NO_LIFT_13.sts )); if (wrkMasts.isEmpty()) { return; src/main/java/com/zy/core/enums/WrkStsType.java
@@ -65,35 +65,35 @@ COMPLETE_MOVE_TRANSPORT_LIFT_OUT(360, "小车放货完成"), //无提升机入库 MOVE_IN_NO_Lift_1(371, "呼叫小车移动至输送线"), MOVE_IN_NO_Lift_2(374, "小车移动至输送线完成"), MOVE_IN_NO_Lift_3(372, "小车移动至待机点"), MOVE_IN_NO_Lift_4(373, "小车移动至待机点完成"), MOVE_IN_NO_Lift_5(375, "提升机至小车层"), MOVE_IN_NO_Lift_6(376, "提升机至小车层完成"), MOVE_IN_NO_Lift_7(377, "小车迁入提升机中"), MOVE_IN_NO_Lift_8(378, "小车迁入提升机完成"), MOVE_IN_NO_Lift_9(379, "提升机至放货层"), MOVE_IN_NO_Lift_10(380, "提升机至放货层完成"), MOVE_IN_NO_Lift_11(381, "小车迁出提升机中"), MOVE_IN_NO_Lift_12(382, "小车迁出提升机完成"), MOVE_IN_NO_Lift_13(383, "小车放货中"), MOVE_IN_NO_Lift_14(384, "小车放货完成"), MOVE_IN_NO_LIFT_1(371, "呼叫小车移动至输送线"), MOVE_IN_NO_LIFT_2(372, "小车移动至输送线完成"), MOVE_IN_NO_LIFT_3(373, "小车移动至待机点"), MOVE_IN_NO_LIFT_4(374, "小车移动至待机点完成"), MOVE_IN_NO_LIFT_5(375, "提升机至小车层"), MOVE_IN_NO_LIFT_6(376, "提升机至小车层完成"), MOVE_IN_NO_LIFT_7(377, "小车迁入提升机中"), MOVE_IN_NO_LIFT_8(378, "小车迁入提升机完成"), MOVE_IN_NO_LIFT_9(379, "提升机至放货层"), MOVE_IN_NO_LIFT_10(380, "提升机至放货层完成"), MOVE_IN_NO_LIFT_11(381, "小车迁出提升机中"), MOVE_IN_NO_LIFT_12(382, "小车迁出提升机完成"), MOVE_IN_NO_LIFT_13(383, "小车放货中"), MOVE_IN_NO_LIFT_14(384, "小车放货完成"), //无提升机出库 MOVE_OUT_NO_LIFT_1(371, "呼叫小车移动取货点"), MOVE_OUT_NO_Lift_3(372, "小车移动至待机点"), MOVE_OUT_NO_Lift_4(373, "小车移动至待机点完成"), MOVE_OUT_NO_Lift_5(375, "提升机至小车层"), MOVE_OUT_NO_Lift_6(376, "提升机至小车层完成"), MOVE_OUT_NO_Lift_7(377, "小车迁入提升机中"), MOVE_OUT_NO_Lift_8(378, "小车迁入提升机完成"), MOVE_OUT_NO_Lift_9(379, "提升机至放货层"), MOVE_OUT_NO_Lift_10(380, "提升机至放货层完成"), MOVE_OUT_NO_Lift_11(381, "小车迁出提升机中"), MOVE_OUT_NO_Lift_12(382, "小车迁出提升机完成"), MOVE_OUT_NO_Lift_13(383, "小车放货中"), MOVE_OUT_NO_Lift_14(384, "小车放货完成"), MOVE_OUT_NO_LIFT_1(391, "呼叫小车移动至取货点"), MOVE_OUT_NO_LIFT_2(392, "小车移动至待机点"), MOVE_OUT_NO_LIFT_3(393, "小车移动至待机点完成"), MOVE_OUT_NO_LIFT_4(394, "提升机至小车层"), MOVE_OUT_NO_LIFT_5(395, "提升机至小车层完成"), MOVE_OUT_NO_LIFT_6(396, "小车迁入提升机中"), MOVE_OUT_NO_LIFT_7(397, "小车迁入提升机完成"), MOVE_OUT_NO_LIFT_8(398, "提升机至放货层"), MOVE_OUT_NO_LIFT_9(399, "提升机至放货层完成"), MOVE_OUT_NO_LIFT_10(400, "小车迁出提升机中"), MOVE_OUT_NO_LIFT_11(401, "小车迁出提升机完成"), MOVE_OUT_NO_LIFT_12(402, "小车放货中"), MOVE_OUT_NO_LIFT_13(403, "小车放货完成"), NEW_LOC_MOVE(501, "生成移库任务"), src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -21,7 +21,7 @@ private Short staNo; // 完结工作号 private Short finishWorkNo; private Short finishWorkNo; // ---------------------------------------------------------------- // 自动 @@ -31,11 +31,11 @@ private boolean idle; // 条码 private String barcode; private String barcode; //重量 private Integer weight; private Integer weight = 0; // 有物 private boolean loading; @@ -99,16 +99,16 @@ //高低信号 0:无 1:低 2:中 3:高 private Short locType1; public BasDevp toSqlModel(){ public BasDevp toSqlModel() { BasDevp basDevp = new BasDevp(); basDevp.setDevNo(siteId); basDevp.setWrkNo(workNo.intValue()); basDevp.setAutoing(autoing?"Y":"N"); basDevp.setLoading(loading?"Y":"N"); basDevp.setInEnable(inEnable?"Y":"N"); basDevp.setAutoing(autoing ? "Y" : "N"); basDevp.setLoading(loading ? "Y" : "N"); basDevp.setInEnable(inEnable ? "Y" : "N"); if (siteId == 105 || siteId == 205 || siteId == 346) { basDevp.setOutEnable(outInModel == 2 ? "Y" : "N"); }else { } else { basDevp.setOutEnable(outEnable ? "Y" : "N"); } basDevp.setLocType1((short) 0); // 高低类型{0:未知,1:低库位,2:高库位}