|  |  |  | 
|---|
|  |  |  | 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.model.protocol.ForkLiftStaProtocol; | 
|---|
|  |  |  | import com.zy.core.model.protocol.LiftProtocol; | 
|---|
|  |  |  | import com.zy.core.model.protocol.ShuttleProtocol; | 
|---|
|  |  |  | import com.zy.core.model.protocol.StaProtocol; | 
|---|
|  |  |  | import com.zy.core.properties.SlaveProperties; | 
|---|
|  |  |  | import com.zy.core.thread.DevpThread; | 
|---|
|  |  |  | import com.zy.core.thread.ForkLiftThread; | 
|---|
|  |  |  | import com.zy.core.thread.LiftThread; | 
|---|
|  |  |  | import com.zy.core.thread.ShuttleThread; | 
|---|
|  |  |  | import com.zy.core.thread.impl.FyDevpThread; | 
|---|
|  |  |  | import com.zy.system.entity.Config; | 
|---|
|  |  |  | import com.zy.system.service.ConfigService; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | 
|---|
|  |  |  | if (!dispatchShuttle) { | 
|---|
|  |  |  | News.info("{}任务,调度小车失败", wrkMast.getWrkNo()); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | News.info("{}任务,无提升机处调度小车成功", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN.sts); | 
|---|
|  |  |  | 
|---|
|  |  |  | * 出库到出库口 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void stnToOutStn() { | 
|---|
|  |  |  | ShuttleThread shuttleThread1 = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, 1); | 
|---|
|  |  |  | ShuttleThread shuttleThread2 = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, 2); | 
|---|
|  |  |  | ShuttleProtocol status1 = shuttleThread1.getStatus(); | 
|---|
|  |  |  | ShuttleProtocol status2 = shuttleThread2.getStatus(); | 
|---|
|  |  |  | List<String> loc = new ArrayList<>(); | 
|---|
|  |  |  | loc.add(status1.getCurrentLocNo()); | 
|---|
|  |  |  | loc.add(status2.getCurrentLocNo()); | 
|---|
|  |  |  | DevpSlave devpSlave = slaveProperties.getDevp().get(0); | 
|---|
|  |  |  | // 遍历堆垛机出库站 | 
|---|
|  |  |  | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpSlave.getId()); | 
|---|
|  |  |  | 
|---|
|  |  |  | if (wrkMast == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //                        boolean dispatchShuttle = shuttleDispatchUtils.shuttleMoveGenerate(wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo(), null, true); | 
|---|
|  |  |  | //                        if (!dispatchShuttle) { | 
|---|
|  |  |  | //                            News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车,调度至取货点失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); | 
|---|
|  |  |  | //                            continue; | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String sourceLocNo = "1200305"; | 
|---|
|  |  |  | String locNo = "1100105"; | 
|---|
|  |  |  | if (wrkMast.getStaNo() == 1013) { | 
|---|
|  |  |  | sourceLocNo = "1200301"; | 
|---|
|  |  |  | locNo = "1100101"; | 
|---|
|  |  |  | if (loc.contains(locNo)) { | 
|---|
|  |  |  | locNo = "1000101"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | if (loc.contains(locNo)) { | 
|---|
|  |  |  | locNo = "1000105"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | boolean dispatchShuttle = shuttleDispatchUtils.shuttleMoveGenerate(wrkMast.getWrkNo(), sourceLocNo, locNo, wrkMast.getShuttleNo(), null, false); | 
|---|
|  |  |  | if (!dispatchShuttle) { | 
|---|
|  |  |  | News.taskInfo(wrkMast.getWrkNo(), "{}小车,挪车调度至取货点失败", wrkMast.getShuttleNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | staProtocol.setWorkNo(Short.parseShort(String.valueOf(wrkMast.getWrkNo()))); | 
|---|
|  |  |  | staProtocol.setStaNo(Short.parseShort(String.valueOf(wrkMast.getStaNo()))); | 
|---|
|  |  |  | 
|---|
|  |  |  | News.info("输送线入库命令下发,任务数据={}", JSON.toJSON(wrkMast)); | 
|---|
|  |  |  | wrkMast.setWrkSts(WrkStsType.OUTBOUND_DEVP_RUN.sts); | 
|---|
|  |  |  | wrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | wrkMast.setShuttleNo(null); | 
|---|
|  |  |  | wrkMastService.updateById(wrkMast); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 出库  ===>>  四向穿梭车出库作业下发 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void shuttleOutExecute() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", WrkStsType.NEW_OUTBOUND.sts)); | 
|---|
|  |  |  | for (WrkMast wrkMast : wrkMasts) { | 
|---|
|  |  |  | boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//小车搬出库中 | 
|---|
|  |  |  | if (!step1) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //    public synchronized void shuttleOutExecute() { | 
|---|
|  |  |  | //        try { | 
|---|
|  |  |  | //            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", WrkStsType.NEW_OUTBOUND.sts)); | 
|---|
|  |  |  | //            for (WrkMast wrkMast : wrkMasts) { | 
|---|
|  |  |  | //                boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//小车搬出库中 | 
|---|
|  |  |  | //                if (!step1) { | 
|---|
|  |  |  | //                    continue; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //        } catch (Exception e) { | 
|---|
|  |  |  | //            e.printStackTrace(); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 出库-小车搬出库中 | 
|---|
|  |  |  | * 如需主方法执行continue,请返回false | 
|---|
|  |  |  | * ps:返回值true并不代表该方法执行成功,返回值仅做标记用于主方法是否执行continue | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public boolean shuttleOutExecuteStep1(WrkMast wrkMast) { | 
|---|
|  |  |  | //101.生成出库任务 => 102.小车搬运中 | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == WrkStsType.NEW_OUTBOUND.sts) { | 
|---|
|  |  |  | Integer liftNo = wrkMast.getLiftNo(); | 
|---|
|  |  |  | if (liftNo == null) { | 
|---|
|  |  |  | //通过输送线站号获取提升机号 | 
|---|
|  |  |  | liftNo = ForkLiftUtils.getConveyorBindLiftNo(wrkMast.getStaNo()); | 
|---|
|  |  |  | if (liftNo == null) { | 
|---|
|  |  |  | News.taskInfo(wrkMast.getWrkNo(), "{}任务,未找到匹配的提升机", wrkMast.getWrkNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //判断提升机是否有其他任务 | 
|---|
|  |  |  | WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftNo); | 
|---|
|  |  |  | if (liftWrkMast != null) { | 
|---|
|  |  |  | if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//提升机任务和当前任务不相同 | 
|---|
|  |  |  | News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), liftNo); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wrkMast.setLiftNo(liftNo); | 
|---|
|  |  |  | wrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | wrkMastService.updateById(wrkMast); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); | 
|---|
|  |  |  | if (forkLiftThread == null) { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); | 
|---|
|  |  |  | if (forkLiftProtocol == null) { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //判断提升机是否处于出库模式 | 
|---|
|  |  |  | if (!forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) { | 
|---|
|  |  |  | News.taskInfo(wrkMast.getWrkNo(), "{}任务,提升机不处于出库模式,禁止出库", wrkMast.getWrkNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //获取源站 | 
|---|
|  |  |  | ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByLev(liftNo, Utils.getLev(wrkMast.getSourceLocNo())); | 
|---|
|  |  |  | if (liftSta == null) { | 
|---|
|  |  |  | News.taskInfo(wrkMast.getWrkNo(), "{}任务,缺少站点信息,禁止派发", wrkMast.getWrkNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (liftSta.getHasCar()) { | 
|---|
|  |  |  | News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}站点存在小车,禁止派发", wrkMast.getWrkNo(), liftSta.getStaNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (liftSta.getHasTray()) { | 
|---|
|  |  |  | News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}站点有托盘,禁止派发", wrkMast.getWrkNo(), liftSta.getStaNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (wrkMast.getShuttleNo() == null) {//没有绑定小车,进行调度 | 
|---|
|  |  |  | //强制预留一台小车给入库任务 | 
|---|
|  |  |  | int lev = Utils.getLev(wrkMast.getSourceLocNo()); | 
|---|
|  |  |  | //获取当前楼层有几台可用小车 | 
|---|
|  |  |  | int shuttleCount = shuttleDispatchUtils.getShuttleCountByLev(lev); | 
|---|
|  |  |  | if (shuttleCount >= 2) {//只有可用小车数量大于2,才进行入库任务预留小车 | 
|---|
|  |  |  | int shuttleWrkInObligateCount = 1;//预留小车数量 | 
|---|
|  |  |  | Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "shuttleWrkInObligateCount").eq("status", 1)); | 
|---|
|  |  |  | if (config != null) { | 
|---|
|  |  |  | shuttleWrkInObligateCount = Integer.parseInt(config.getValue()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //可用出库小车数量(给入库任务预留一台车) | 
|---|
|  |  |  | int useShuttleCount = shuttleCount - shuttleWrkInObligateCount; | 
|---|
|  |  |  | //查询楼层已分配车辆的出库任务数量 | 
|---|
|  |  |  | List<WrkMast> wrkMasts = wrkMastService.selectShuttleOutWrkByLev(lev); | 
|---|
|  |  |  | if (wrkMasts.size() >= useShuttleCount) { | 
|---|
|  |  |  | News.taskInfo(wrkMast.getWrkNo(), "{}任务,当前楼层可用小车{}台,出库任务已分配{}台,系统等待中。", wrkMast.getWrkNo(), useShuttleCount, wrkMasts.size()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | boolean result = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), null, wrkMast.getSourceLocNo(), null);//调度小车到货物所在库位进行取货 | 
|---|
|  |  |  | News.taskInfo(wrkMast.getWrkNo(), "{}任务,调度小车{}系统等待中。", wrkMast.getWrkNo(), result ? "成功" : "失败"); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //获取四向穿梭车线程 | 
|---|
|  |  |  | 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())) { | 
|---|
|  |  |  | //小车不在输送站点位置 | 
|---|
|  |  |  | shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//调度小车到货物所在库位进行取货 | 
|---|
|  |  |  | News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车,未到达输送站点,系统等待中", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); | 
|---|
|  |  |  | assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 四向穿梭车编号 | 
|---|
|  |  |  | assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//小车移库任务 | 
|---|
|  |  |  | assignCommand.setTaskNo(wrkMast.getWrkNo());//任务号 | 
|---|
|  |  |  | assignCommand.setAuto(true);//自动模式 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //获取小车到输送站点行走命令 | 
|---|
|  |  |  | List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(wrkMast.getSourceLocNo(), liftSta.getLocNo(), NavigationMapType.DFX.id, assignCommand, shuttleThread); | 
|---|
|  |  |  | if (commands == null) { | 
|---|
|  |  |  | News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车,路径计算失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true); | 
|---|
|  |  |  | if (liftCommand == null) { | 
|---|
|  |  |  | News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车获取顶升命令失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<ShuttleCommand> liftCommand2 = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, false); | 
|---|
|  |  |  | if (liftCommand2 == null) { | 
|---|
|  |  |  | News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车获取下降命令失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | commands.add(0, liftCommand.get(0)); | 
|---|
|  |  |  | commands.add(liftCommand2.get(0)); | 
|---|
|  |  |  | assignCommand.setCommands(commands); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN.sts);//小车搬运中  101.生成出库任务 ==> 102.小车搬运中 | 
|---|
|  |  |  | wrkMast.setSourceStaNo(liftSta.getStaNo()); | 
|---|
|  |  |  | wrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | 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_TRANSPORT); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //    public boolean shuttleOutExecuteStep1(WrkMast wrkMast) { | 
|---|
|  |  |  | //        //101.生成出库任务 => 102.小车搬运中 | 
|---|
|  |  |  | //        if (wrkMast.getWrkSts() == WrkStsType.NEW_OUTBOUND.sts) { | 
|---|
|  |  |  | //            Integer liftNo = wrkMast.getLiftNo(); | 
|---|
|  |  |  | //            if (liftNo == null) { | 
|---|
|  |  |  | //                //通过输送线站号获取提升机号 | 
|---|
|  |  |  | //                liftNo = ForkLiftUtils.getConveyorBindLiftNo(wrkMast.getStaNo()); | 
|---|
|  |  |  | //                if (liftNo == null) { | 
|---|
|  |  |  | //                    News.taskInfo(wrkMast.getWrkNo(), "{}任务,未找到匹配的提升机", wrkMast.getWrkNo()); | 
|---|
|  |  |  | //                    return false; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                //判断提升机是否有其他任务 | 
|---|
|  |  |  | //                WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftNo); | 
|---|
|  |  |  | //                if (liftWrkMast != null) { | 
|---|
|  |  |  | //                    if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//提升机任务和当前任务不相同 | 
|---|
|  |  |  | //                        News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), liftNo); | 
|---|
|  |  |  | //                        return false; | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                wrkMast.setLiftNo(liftNo); | 
|---|
|  |  |  | //                wrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | //                wrkMastService.updateById(wrkMast); | 
|---|
|  |  |  | //                return false; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); | 
|---|
|  |  |  | //            if (forkLiftThread == null) { | 
|---|
|  |  |  | //                return false; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); | 
|---|
|  |  |  | //            if (forkLiftProtocol == null) { | 
|---|
|  |  |  | //                return false; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            //判断提升机是否处于出库模式 | 
|---|
|  |  |  | //            if (!forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) { | 
|---|
|  |  |  | //                News.taskInfo(wrkMast.getWrkNo(), "{}任务,提升机不处于出库模式,禁止出库", wrkMast.getWrkNo()); | 
|---|
|  |  |  | //                return false; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            //获取源站 | 
|---|
|  |  |  | //            ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByLev(liftNo, Utils.getLev(wrkMast.getSourceLocNo())); | 
|---|
|  |  |  | //            if (liftSta == null) { | 
|---|
|  |  |  | //                News.taskInfo(wrkMast.getWrkNo(), "{}任务,缺少站点信息,禁止派发", wrkMast.getWrkNo()); | 
|---|
|  |  |  | //                return false; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            if (liftSta.getHasCar()) { | 
|---|
|  |  |  | //                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}站点存在小车,禁止派发", wrkMast.getWrkNo(), liftSta.getStaNo()); | 
|---|
|  |  |  | //                return false; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            if (liftSta.getHasTray()) { | 
|---|
|  |  |  | //                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}站点有托盘,禁止派发", wrkMast.getWrkNo(), liftSta.getStaNo()); | 
|---|
|  |  |  | //                return false; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            if (wrkMast.getShuttleNo() == null) {//没有绑定小车,进行调度 | 
|---|
|  |  |  | //                //强制预留一台小车给入库任务 | 
|---|
|  |  |  | //                int lev = Utils.getLev(wrkMast.getSourceLocNo()); | 
|---|
|  |  |  | //                //获取当前楼层有几台可用小车 | 
|---|
|  |  |  | //                int shuttleCount = shuttleDispatchUtils.getShuttleCountByLev(lev); | 
|---|
|  |  |  | //                if (shuttleCount >= 2) {//只有可用小车数量大于2,才进行入库任务预留小车 | 
|---|
|  |  |  | //                    int shuttleWrkInObligateCount = 1;//预留小车数量 | 
|---|
|  |  |  | //                    Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "shuttleWrkInObligateCount").eq("status", 1)); | 
|---|
|  |  |  | //                    if (config != null) { | 
|---|
|  |  |  | //                        shuttleWrkInObligateCount = Integer.parseInt(config.getValue()); | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                    //可用出库小车数量(给入库任务预留一台车) | 
|---|
|  |  |  | //                    int useShuttleCount = shuttleCount - shuttleWrkInObligateCount; | 
|---|
|  |  |  | //                    //查询楼层已分配车辆的出库任务数量 | 
|---|
|  |  |  | //                    List<WrkMast> wrkMasts = wrkMastService.selectShuttleOutWrkByLev(lev); | 
|---|
|  |  |  | //                    if (wrkMasts.size() >= useShuttleCount) { | 
|---|
|  |  |  | //                        News.taskInfo(wrkMast.getWrkNo(), "{}任务,当前楼层可用小车{}台,出库任务已分配{}台,系统等待中。", wrkMast.getWrkNo(), useShuttleCount, wrkMasts.size()); | 
|---|
|  |  |  | //                        return false; | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //                boolean result = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), null, wrkMast.getSourceLocNo(), null);//调度小车到货物所在库位进行取货 | 
|---|
|  |  |  | //                News.taskInfo(wrkMast.getWrkNo(), "{}任务,调度小车{}系统等待中。", wrkMast.getWrkNo(), result ? "成功" : "失败"); | 
|---|
|  |  |  | //                return false; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            //获取四向穿梭车线程 | 
|---|
|  |  |  | //            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())) { | 
|---|
|  |  |  | //                //小车不在输送站点位置 | 
|---|
|  |  |  | //                shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//调度小车到货物所在库位进行取货 | 
|---|
|  |  |  | //                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车,未到达输送站点,系统等待中", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); | 
|---|
|  |  |  | //                return false; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); | 
|---|
|  |  |  | //            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 四向穿梭车编号 | 
|---|
|  |  |  | //            assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//小车移库任务 | 
|---|
|  |  |  | //            assignCommand.setTaskNo(wrkMast.getWrkNo());//任务号 | 
|---|
|  |  |  | //            assignCommand.setAuto(true);//自动模式 | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            //获取小车到输送站点行走命令 | 
|---|
|  |  |  | //            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(wrkMast.getSourceLocNo(), liftSta.getLocNo(), NavigationMapType.DFX.id, assignCommand, shuttleThread); | 
|---|
|  |  |  | //            if (commands == null) { | 
|---|
|  |  |  | //                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车,路径计算失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); | 
|---|
|  |  |  | //                return false; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true); | 
|---|
|  |  |  | //            if (liftCommand == null) { | 
|---|
|  |  |  | //                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车获取顶升命令失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); | 
|---|
|  |  |  | //                return false; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            List<ShuttleCommand> liftCommand2 = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, false); | 
|---|
|  |  |  | //            if (liftCommand2 == null) { | 
|---|
|  |  |  | //                News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}小车获取下降命令失败", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); | 
|---|
|  |  |  | //                return false; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            commands.add(0, liftCommand.get(0)); | 
|---|
|  |  |  | //            commands.add(liftCommand2.get(0)); | 
|---|
|  |  |  | //            assignCommand.setCommands(commands); | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN.sts);//小车搬运中  101.生成出库任务 ==> 102.小车搬运中 | 
|---|
|  |  |  | //            wrkMast.setSourceStaNo(liftSta.getStaNo()); | 
|---|
|  |  |  | //            wrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | //            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_TRANSPORT); | 
|---|
|  |  |  | //                return false; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            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)); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wrkMast.setWrkSts(WrkStsType.INBOUND_SHUTTLE_RUN.sts); | 
|---|
|  |  |  | wrkMast.setLiftNo(null); | 
|---|
|  |  |  | // TODO 测试中发现不能解禁,因为提升机里存在托盘,就不能解禁,不然另一辆小车可能会近提升机 | 
|---|
|  |  |  | //wrkMast.setLiftNo(null); | 
|---|
|  |  |  | wrkMast.setSystemMsg("");//清空消息 | 
|---|
|  |  |  | wrkMast.setModiTime(now); | 
|---|
|  |  |  | if (wrkMastService.updateById(wrkMast)) { | 
|---|
|  |  |  | 
|---|
|  |  |  | if (!dispatchShuttle) { | 
|---|
|  |  |  | News.info("{}任务,调度小车失败", wrkMast.getWrkNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | News.info("{}任务,无提升机处调度小车成功", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN.sts); | 
|---|