|  |  |  | 
|---|
|  |  |  | if (wrkMast.getStaNo() == 1026) { | 
|---|
|  |  |  | locNo = "1200305"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleS(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_DEVP"); | 
|---|
|  |  |  | boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleNoLift(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_DEVP"); | 
|---|
|  |  |  | if (!dispatchShuttle) { | 
|---|
|  |  |  | News.info("{}任务,调度小车失败", wrkMast.getWrkNo()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | 
|---|
|  |  |  | if (wrkMast.getStaNo() == 1024) { | 
|---|
|  |  |  | locNo = "1200305"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleS(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), locNo, "TRANSPORT_DEVP"); | 
|---|
|  |  |  | boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleNoLift(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), locNo, "TRANSPORT_DEVP"); | 
|---|
|  |  |  | if (!dispatchShuttle) { | 
|---|
|  |  |  | News.info("{}任务,调度小车失败", wrkMast.getWrkNo()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | WrkMast wrkMast1 = wrkMastService.selectByMainWrkNo(wrkMast.getWrkNo()); | 
|---|
|  |  |  | if (wrkMast1 == null) { | 
|---|
|  |  |  | News.info("{}任务,调度小车失败,终于发现了", wrkMast.getWrkNo()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | News.info("{}任务,无提升机处调度小车成功", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN.sts); | 
|---|
|  |  |  | 
|---|
|  |  |  | short staNo = 1012; | 
|---|
|  |  |  | if (wrkMast.getSourceStaNo() == 1022) { | 
|---|
|  |  |  | staNo = 1023; | 
|---|
|  |  |  | } else if (wrkMast.getSourceStaNo() == 1031 || wrkMast.getSourceStaNo() == 1032) { | 
|---|
|  |  |  | } else if ( wrkMast.getSourceStaNo() == 1032) { | 
|---|
|  |  |  | staNo = 1032; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | News.info("{}任务,{}站点,任务号不一致", wrkMast.getWrkNo(), staProtocol.getSiteId()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!station.get(1022).getBarcode().equals(wrkMast.getBarcode())) { | 
|---|
|  |  |  | News.info("{}任务,{}站点,托盘码不匹配,站点托盘码:{},任务托盘码:{}", wrkMast.getWrkNo(), staProtocol.getSiteId(), staProtocol.getBarcode(), wrkMast.getBarcode()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else if (sourceStaNo == 1012) { | 
|---|
|  |  |  | if (staProtocol.getWorkNo().intValue() != wrkMast.getWrkNo()) { | 
|---|
|  |  |  | News.info("{}任务,{}站点,任务号不一致", wrkMast.getWrkNo(), staProtocol.getSiteId()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!staProtocol.getBarcode().equals(wrkMast.getBarcode())) { | 
|---|
|  |  |  | News.info("{}任务,{}站点,托盘码不匹配,站点托盘码:{},任务托盘码:{}", wrkMast.getWrkNo(), staProtocol.getSiteId(), staProtocol.getBarcode(), wrkMast.getBarcode()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else if (sourceStaNo == 1032 || sourceStaNo == 1031) { | 
|---|
|  |  |  | } else if (sourceStaNo == 1032 ) { | 
|---|
|  |  |  | if (staProtocol.getWorkNo().intValue() != wrkMast.getWrkNo()) { | 
|---|
|  |  |  | News.info("{}任务,{}站点,任务号不一致", wrkMast.getWrkNo(), staProtocol.getSiteId()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!staProtocol.getBarcode().equals(wrkMast.getBarcode())) { | 
|---|
|  |  |  | News.info("{}任务,{}站点,托盘码不匹配,站点托盘码:{},任务托盘码:{}", wrkMast.getWrkNo(), staProtocol.getSiteId(), staProtocol.getBarcode(), wrkMast.getBarcode()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | String locNo = "0200305"; | 
|---|
|  |  |  | if (wrkMast.getSourceStaNo() == 1012) { | 
|---|
|  |  |  | locNo = "0200301"; | 
|---|
|  |  |  | } else if (wrkMast.getSourceStaNo() == 1032 || wrkMast.getSourceStaNo() == 1031) { | 
|---|
|  |  |  | } else if (wrkMast.getSourceStaNo() == 1032 ) { | 
|---|
|  |  |  | locNo = "0200308"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleS(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_LIFT"); | 
|---|
|  |  |  | 
|---|
|  |  |  | //TODO | 
|---|
|  |  |  | // lev = 105; | 
|---|
|  |  |  | lev = 1021; | 
|---|
|  |  |  | } else if (wrkMast.getSourceStaNo() == 1032 || wrkMast.getSourceStaNo() == 1031) { | 
|---|
|  |  |  | } else if ( wrkMast.getSourceStaNo() == 1031) { | 
|---|
|  |  |  | lev = 1031; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //获取提升机命令 | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public synchronized void liftOutExecute() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", WrkStsType.NEW_OUTBOUND.sts, WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts).in("sta_no", 1011, 1021)); | 
|---|
|  |  |  | List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", WrkStsType.NEW_OUTBOUND.sts, WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts).in("sta_no", 1011, 1021, 1031)); | 
|---|
|  |  |  | for (WrkMast wrkMast : wrkMasts) { | 
|---|
|  |  |  | boolean step1 = this.liftOutExecuteStep1(wrkMast);//触发搬运任务 | 
|---|
|  |  |  | if (!step1) { | 
|---|
|  |  |  | 
|---|
|  |  |  | String locNo = "0200305"; | 
|---|
|  |  |  | if (wrkMast.getStaNo() == 1011) { | 
|---|
|  |  |  | locNo = "0200301"; | 
|---|
|  |  |  | } else if (wrkMast.getStaNo() == 1032) { | 
|---|
|  |  |  | } else if (wrkMast.getStaNo() == 1031) { | 
|---|
|  |  |  | locNo = "0200308"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleS(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), locNo, "TRANSPORT_LIFT"); | 
|---|
|  |  |  | 
|---|
|  |  |  | WrkMast mainWrk = wrkMastService.selectByWorkNo(wrkMast.getMainWrkNo()); | 
|---|
|  |  |  | if (mainWrk != null && mainWrk.getIoType() == 1) { | 
|---|
|  |  |  | //入库 | 
|---|
|  |  |  | noLiftInService.shuttleMoveExecute(wrkMast, mainWrk.getStaNo()); | 
|---|
|  |  |  | noLiftInService.shuttleMoveExecute(wrkMast, mainWrk.getStaNo(), Utils.getLev(mainWrk.getLocNo())); | 
|---|
|  |  |  | } else if (mainWrk != null && mainWrk.getIoType() == 101) { | 
|---|
|  |  |  | //出库 | 
|---|
|  |  |  | noLiftOutService.shuttleMoveExecute(wrkMast); | 
|---|
|  |  |  | noLiftOutService.shuttleMoveExecute(wrkMast, mainWrk.getStaNo(), Utils.getLev(mainWrk.getSourceLocNo())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | * 从没有提升机侧入库,有两种情况,一种入库到同层,一种入库到不同层,则需要提升机 | 
|---|
|  |  |  | * @param wrkMast | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public void shuttleMoveExecute(WrkMast wrkMast, Integer staNo) { | 
|---|
|  |  |  | public void shuttleMoveExecute(WrkMast wrkMast, Integer staNo, Integer lev) { | 
|---|
|  |  |  | boolean stepMoveSta = this.shuttleMoveExecuteTransportLiftStepCallShuttle(wrkMast);//小车迁移-呼叫小车至取货点 | 
|---|
|  |  |  | if (!stepMoveSta) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //判断目标库位是否在1层或5层 | 
|---|
|  |  |  | if ((Utils.getLev(wrkMast.getSourceLocNo()) == 1 && staNo == 1015) || (Utils.getLev(wrkMast.getSourceLocNo()) == 5 && staNo == 1026)) { | 
|---|
|  |  |  | if ((lev == 1 && staNo == 1015) || (lev == 5 && staNo == 1026)) { | 
|---|
|  |  |  | //直接入库 | 
|---|
|  |  |  | boolean stepMoveLoc = this.shuttleMoveExecuteStepMoveLoc(wrkMast);//小车移动到目标库位中 | 
|---|
|  |  |  | if (!stepMoveLoc) { | 
|---|
|  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private LiftAction liftAction; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private MainServiceImpl mainService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 从没有提升机侧出库,有两种情况,一种1,5库到同层,一种非1,5库到1,5,则需要提升机 | 
|---|
|  |  |  | * @param wrkMast | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public void shuttleMoveExecute(WrkMast wrkMast) { | 
|---|
|  |  |  | public void shuttleMoveExecute(WrkMast wrkMast, Integer staNo, Integer lev) { | 
|---|
|  |  |  | //判断目标库位是否在1层或5层 | 
|---|
|  |  |  | if (Utils.getLev(wrkMast.getSourceLocNo()) == 1 || Utils.getLev(wrkMast.getSourceLocNo()) == 5) { | 
|---|
|  |  |  | if ((lev == 1 & staNo == 1013) || (lev == 5 && staNo == 1024)) { | 
|---|
|  |  |  | boolean stepMoveSta = this.shuttleMoveExecuteTransportLiftStepCallShuttle2(wrkMast);//呼叫小车至取货点 | 
|---|
|  |  |  | if (!stepMoveSta) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | WrkMast wrkMast1 = wrkMastService.selectByWorkNo(wrkMast.getMainWrkNo()); | 
|---|
|  |  |  | if (wrkMast1 != null) { | 
|---|
|  |  |  | StaProtocol staProtocol2 = devpThread.getStation().get(wrkMast1.getStaNo()); | 
|---|
|  |  |  | if (!staProtocol2.isOutEnable()) { | 
|---|
|  |  |  | if (!mainService.isOutEnable(devpThread, wrkMast1.getStaNo())) { | 
|---|
|  |  |  | News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号输送线不可出111", wrkMast.getWrkNo(), wrkMast1.getStaNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(wrkMast1.getStaNo() + 1); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(wrkMast1.getStaNo() + 2); | 
|---|
|  |  |  | if (staProtocol.isLoading()) { | 
|---|
|  |  |  | News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号输送线有物111", wrkMast.getWrkNo(), wrkMast1.getStaNo() + 1); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | 
|---|
|  |  |  | //获取四向穿梭车线程 | 
|---|
|  |  |  | ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); | 
|---|
|  |  |  | if (shuttleThread == null) { | 
|---|
|  |  |  | News.info("{}任务,{}号小车,小车线程不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo()); | 
|---|
|  |  |  | News.info("{}任务,{}号小车,小车线程不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getShuttleNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); | 
|---|
|  |  |  | if (shuttleProtocol == null) { | 
|---|
|  |  |  | News.info("{}任务,{}号小车,小车对象不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo()); | 
|---|
|  |  |  | News.info("{}任务,{}号小车,小车对象不存在,禁止派发", wrkMast.getWrkNo(), wrkMast.getShuttleNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (wrkMast.getLiftNo() == null) { | 
|---|
|  |  |  | News.info("{}任务,未绑定提升机,禁止派发", wrkMast.getWrkNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo()); | 
|---|
|  |  |  | if (liftThread == null) { | 
|---|
|  |  |  | News.info("{}号提升机不存在", wrkMast.getLiftNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); | 
|---|
|  |  |  | LiftProtocol liftProtocol = liftThread.getStatus(); | 
|---|
|  |  |  | if (liftProtocol == null) { | 
|---|
|  |  |  | News.info("{}号提升机对象不存在", wrkMast.getLiftNo()); | 
|---|
|  |  |  | News.info("{}号提升机对象不存在", 1); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //判断提升机是否有其他任务 | 
|---|
|  |  |  | WrkMast liftWrkMast = wrkMastService.selectLiftWrkMastAndWrkNo(wrkMast.getLiftNo(), wrkMast.getWrkNo(), wrkMast.getMainWrkNo()); | 
|---|
|  |  |  | if (liftWrkMast != null) { | 
|---|
|  |  |  | News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo()); | 
|---|
|  |  |  | News.info("{}任务,{}号提升机,提升机存在未完成任务,禁止派发", wrkMast.getWrkNo(), 1); | 
|---|
|  |  |  | return false;//当前提升机存在未完成任务,等待下一次轮询 | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!liftThread.isIdle()) { | 
|---|
|  |  |  | News.info("{}任务,{}号提升机,提升机忙碌中,禁止派发", wrkMast.getWrkNo(), wrkMast.getLiftNo()); | 
|---|
|  |  |  | News.info("{}任务,{}号提升机,提升机忙碌中,禁止派发", wrkMast.getWrkNo(), 1); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | WrkMast wrkMast1 = wrkMastService.selectByWorkNo(wrkMast.getMainWrkNo()); | 
|---|
|  |  |  | if (wrkMast1 != null) { | 
|---|
|  |  |  | StaProtocol staProtocol2 = devpThread.getStation().get(wrkMast1.getStaNo()); | 
|---|
|  |  |  | if (!staProtocol2.isOutEnable()) { | 
|---|
|  |  |  | if (!mainService.isOutEnable(devpThread, wrkMast1.getStaNo())) { | 
|---|
|  |  |  | News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号输送线不可出222", wrkMast.getWrkNo(), wrkMast1.getStaNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(wrkMast1.getStaNo() + 1); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(wrkMast1.getStaNo() + 2); | 
|---|
|  |  |  | if (staProtocol.isLoading()) { | 
|---|
|  |  |  | News.taskInfo(wrkMast.getWrkNo(), "{}任务,{}号输送线有物222", wrkMast.getWrkNo(), wrkMast1.getStaNo()); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | 
|---|
|  |  |  | main.setShuttleNo(wrkMast.getShuttleNo()); | 
|---|
|  |  |  | main.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts); | 
|---|
|  |  |  | //那时候托盘在提升机里,则需要锁住 | 
|---|
|  |  |  | if (!(main.getStaNo() != 1013 && main.getStaNo() != 1024)) { | 
|---|
|  |  |  | if (!(main.getStaNo() == 1013 || main.getStaNo() == 1024)) { | 
|---|
|  |  |  | main.setLiftNo(1); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | sameShuttles.put(-1, shuttleThread); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //TODO | 
|---|
|  |  |  | List<NavigateNode> currentShuttlePath; | 
|---|
|  |  |  | if (Utils.getLev(currentLocNo) != Utils.getLev(locNo)) { | 
|---|
|  |  |  | //当前穿梭车线程到目标地点距离 | 
|---|
|  |  |  | currentShuttlePath = navigateUtils.calc(currentLocNo, sourceLocNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleNo, Utils.getLev(currentLocNo)), null);//搜索空闲穿梭车,使用正常通道地图 | 
|---|
|  |  |  | if (currentShuttlePath == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | //当前穿梭车线程到目标地点距离 | 
|---|
|  |  |  | currentShuttlePath = navigateUtils.calc(currentLocNo, locNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleNo, Utils.getLev(currentLocNo)), null);//搜索空闲穿梭车,使用正常通道地图 | 
|---|
|  |  |  | if (currentShuttlePath == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //当前穿梭车线程到目标地点距离 | 
|---|
|  |  |  | List<NavigateNode> currentShuttlePath = navigateUtils.calc(currentLocNo, locNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleNo, Utils.getLev(currentLocNo)), null);//搜索空闲穿梭车,使用正常通道地图 | 
|---|
|  |  |  | if (currentShuttlePath == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Integer currentAllDistance = navigateUtils.getOriginPathAllDistance(currentShuttlePath);//计算当前路径行走总距离 | 
|---|
|  |  |  | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 调度车辆 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public boolean searchDispatchShuttleNoLift(Integer wrkNo, String sourceLocNo, String locNo, String flag) { | 
|---|
|  |  |  | ArrayList<ShuttleThread> diffLev = new ArrayList<>();//不同楼层的穿梭车 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for (ShuttleSlave shuttle : slaveProperties.getShuttle()) { | 
|---|
|  |  |  | //获取四向穿梭车线程 | 
|---|
|  |  |  | ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId()); | 
|---|
|  |  |  | ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); | 
|---|
|  |  |  | if (shuttleProtocol == null || shuttleProtocol.getShuttleNo() == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (checkChargeWrk(shuttle.getId())) { | 
|---|
|  |  |  | continue;//存在充电任务,过滤小车 | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!shuttleThread.isIdle()) { | 
|---|
|  |  |  | continue;//小车忙碌中 | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | BasShuttle basShuttle = basShuttleService.selectOne(new EntityWrapper<BasShuttle>().eq("shuttle_no", shuttle.getId())); | 
|---|
|  |  |  | if (basShuttle != null) { | 
|---|
|  |  |  | if (basShuttle.getStatus() == 0) { | 
|---|
|  |  |  | continue;//小车被禁用 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | diffLev.add(shuttleThread); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //寻找离任务楼层最近的穿梭车(不考虑跨楼层小车移动距离) | 
|---|
|  |  |  | if (!diffLev.isEmpty()) { | 
|---|
|  |  |  | Map<Integer, ShuttleThread> diffShuttles = new TreeMap<>();//自然排序小车Map | 
|---|
|  |  |  | //获取任务 | 
|---|
|  |  |  | WrkMast wrkMast1 = wrkMastService.selectByWorkNo(wrkNo); | 
|---|
|  |  |  | if (wrkMast1 != null) { | 
|---|
|  |  |  | int lev = 1; | 
|---|
|  |  |  | boolean b = wrkMast1.getIoType() < 100; | 
|---|
|  |  |  | if (b) { | 
|---|
|  |  |  | //ruku | 
|---|
|  |  |  | if (wrkMast1.getStaNo() == 1015) { | 
|---|
|  |  |  | lev = 1; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | lev = 5; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | lev = Utils.getLev(wrkMast1.getSourceLocNo());//目标楼层 | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //检测目标楼层车数量是否小于允许的最大数量 | 
|---|
|  |  |  | boolean checkDispatchMaxNum = checkDispatchMaxNum(lev); | 
|---|
|  |  |  | if (!checkDispatchMaxNum) { | 
|---|
|  |  |  | News.info("{}任务,{}层,已经达到当前楼层调度车辆最大值", wrkMast1.getWrkNo(), lev); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for (ShuttleThread shuttleThread : diffLev) { | 
|---|
|  |  |  | ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); | 
|---|
|  |  |  | //当前穿梭车库位号 | 
|---|
|  |  |  | String currentLocNo = shuttleProtocol.getCurrentLocNo(); | 
|---|
|  |  |  | int currentLev = Utils.getLev(currentLocNo); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (wrkMast1.getIoType() == 101 && currentLocNo.equals(locNo)) { | 
|---|
|  |  |  | //车辆当前位置已经是目标库位,调度该车 | 
|---|
|  |  |  | //给工作档绑定小车号 | 
|---|
|  |  |  | diffShuttles.put(-1, shuttleThread); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | //ABS(目标楼层 - 当前楼层) 得到差距,取最小差值 | 
|---|
|  |  |  | int currentValue = Math.abs(lev - currentLev); | 
|---|
|  |  |  | if (diffShuttles.get(currentValue) != null) { | 
|---|
|  |  |  | diffShuttles.put(currentValue + 1, shuttleThread); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | diffShuttles.put(currentValue, shuttleThread); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //尝试调度跨楼层小车 | 
|---|
|  |  |  | for (Map.Entry<Integer, ShuttleThread> entry : diffShuttles.entrySet()) { | 
|---|
|  |  |  | ShuttleThread shuttleThread = entry.getValue(); | 
|---|
|  |  |  | ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); | 
|---|
|  |  |  | Integer shuttleNo = shuttleProtocol.getShuttleNo(); | 
|---|
|  |  |  | //尝试调度小车 | 
|---|
|  |  |  | boolean result = shuttleMoveGenerate(wrkNo, sourceLocNo, locNo, shuttleNo, flag, false); | 
|---|
|  |  |  | if (result) { | 
|---|
|  |  |  | return true;//调度成功 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | News.info("{}目标库位没有搜索到可用穿梭车", locNo); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 小车迁移任务生成 | 
|---|
|  |  |  | 
|---|
|  |  |  | if (null == staProtocol) { | 
|---|
|  |  |  | staProtocol = new StaProtocol(); | 
|---|
|  |  |  | staProtocol.setSiteId(siteId); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (siteId == 1015) { | 
|---|
|  |  |  | staProtocol.setLocNo("1200301"); | 
|---|
|  |  |  | } else if (siteId == 1026) { | 
|---|
|  |  |  | staProtocol.setLocNo("1200305"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | station.put(siteId, staProtocol); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Thread.sleep(300); | 
|---|
|  |  |  | 
|---|
|  |  |  | staProtocol.setBackErr(status[5]); | 
|---|
|  |  |  | staProtocol.setLeftErr(status[6]); | 
|---|
|  |  |  | staProtocol.setRightErr(status[7]); | 
|---|
|  |  |  | staProtocol.setHighErr(status[8]); | 
|---|
|  |  |  | staProtocol.setWeightErr(status[9]); | 
|---|
|  |  |  | staProtocol.setLow(status[10]); | 
|---|
|  |  |  | staProtocol.setHigh(status[11]); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | boolean[] status2 = siemensS7Net.getByteTransform().TransBool(result.Content, i * 26 + 1, 2); | 
|---|
|  |  |  | staProtocol.setHighErr(status2[0]); | 
|---|
|  |  |  | staProtocol.setWeightErr(status2[1]); | 
|---|
|  |  |  | staProtocol.setLow(status2[2]); | 
|---|
|  |  |  | staProtocol.setHigh(status2[3]); | 
|---|
|  |  |  | //                staProtocol.setInEnable(status[13]); // 可入 | 
|---|
|  |  |  | //                staProtocol.setOutEnable(status[14]);// 可出 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 26 + 2));     // 工作号 | 
|---|
|  |  |  | staProtocol.setStaNo((short) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 26 + 4));   // 目标站 | 
|---|
|  |  |  | staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 26 + 4));   // 目标站 | 
|---|
|  |  |  | staProtocol.setFinishWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 26 + 6)); //已完成工作号 | 
|---|
|  |  |  | staProtocol.setBarcode(siemensS7Net.getByteTransform().TransString(result.Content, i * 26 + 10, 12, "UTF-8").trim()); //条码 | 
|---|
|  |  |  | staProtocol.setWeight(siemensS7Net.getByteTransform().TransInt32(result.Content, i * 26 + 22)); //重量 | 
|---|
|  |  |  | 
|---|
|  |  |  | <th>有物</th> | 
|---|
|  |  |  | <th>可入</th> | 
|---|
|  |  |  | <th>可出</th> | 
|---|
|  |  |  | <!--                        <th>出入库模式</th>--> | 
|---|
|  |  |  | <th>出入库模式</th> | 
|---|
|  |  |  | <th>完结工作号</th> | 
|---|
|  |  |  | <th>目标站</th> | 
|---|
|  |  |  | <th>提升机到位信号</th> | 
|---|
|  |  |  | <!--                        <th>提升机到位信号</th>--> | 
|---|
|  |  |  | <!--                        <th>高低信号</th>--> | 
|---|
|  |  |  | </tr> | 
|---|
|  |  |  | </thead> | 
|---|
|  |  |  | 
|---|
|  |  |  | setVal(tr.children("td").eq(6), table[i-1].outInModel); | 
|---|
|  |  |  | setVal(tr.children("td").eq(7), table[i-1].finishWorkNo); | 
|---|
|  |  |  | setVal(tr.children("td").eq(8), table[i-1].staNo); | 
|---|
|  |  |  | setVal(tr.children("td").eq(9), table[i-1].liftArrival); | 
|---|
|  |  |  | // setVal(tr.children("td").eq(9), table[i-1].liftArrival); | 
|---|
|  |  |  | //setVal(tr.children("td").eq(10), table[i-1].locType1); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else if (res.code === 403){ | 
|---|