|  |  |  | 
|---|
|  |  |  | return false;//没有设置提升机点位坐标 | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //*************尝试解锁目标站路径*************** | 
|---|
|  |  |  | List<NavigateNode> targetNodes = NyLiftUtils.getLiftStaNodes(liftSta.getStaNo()); | 
|---|
|  |  |  | if (targetNodes == null) { | 
|---|
|  |  |  | return false;//未获取到节点 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //尝试解锁目标站路径 | 
|---|
|  |  |  | boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), targetNodes, false);//所使用的路径进行解锁 | 
|---|
|  |  |  | if (!result) { | 
|---|
|  |  |  | return false;//路径解锁失败 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //*************尝试解锁目标站路径*************** | 
|---|
|  |  |  |  | 
|---|
|  |  |  | NavigateNode liftNode = new NavigateNode(basLift.getPoint$().getX(), basLift.getPoint$().getY()); | 
|---|
|  |  |  | liftNode.setZ(liftSta.getLev()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //跨楼层移动任务 | 
|---|
|  |  |  | if (Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(wrkMast.getLocNo())) { | 
|---|
|  |  |  | //获取目标站 | 
|---|
|  |  |  | LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo()); | 
|---|
|  |  |  | if (liftSta == null) { | 
|---|
|  |  |  | return false;//找不到站点 | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //*************尝试解锁目标站路径*************** | 
|---|
|  |  |  | List<NavigateNode> targetNodes = NyLiftUtils.getLiftStaNodes(liftSta.getStaNo()); | 
|---|
|  |  |  | if (targetNodes == null) { | 
|---|
|  |  |  | return false;//未获取到节点 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //尝试解锁目标站路径 | 
|---|
|  |  |  | boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), targetNodes, false);//所使用的路径进行解锁 | 
|---|
|  |  |  | if (!result) { | 
|---|
|  |  |  | return false;//路径解锁失败 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //*************尝试解锁目标站路径*************** | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //            //获取目标站对应的输送站点 | 
|---|
|  |  |  | //            BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getLocNo()), wrkMast.getLiftNo()); | 
|---|
|  |  |  | //            if (targetBasDevp == null) { | 
|---|
|  |  |  | 
|---|
|  |  |  | package com.zy.common.utils; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.core.common.SpringUtils; | 
|---|
|  |  |  | import com.zy.asrs.utils.Utils; | 
|---|
|  |  |  | import com.zy.common.model.NavigateNode; | 
|---|
|  |  |  | import com.zy.common.model.NyShuttleOperaResult; | 
|---|
|  |  |  | 
|---|
|  |  |  | * 获取起点到目标点行走命令 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static NyShuttleOperaResult getStartToTargetCommands(Integer shuttleNo, Integer wrkNo, String startPoint, String targetPoint, Integer mapType) { | 
|---|
|  |  |  | NavigateMapUtils navigateMapUtils = SpringUtils.getBean(NavigateMapUtils.class); | 
|---|
|  |  |  | //计算起点到目标点行走节点 | 
|---|
|  |  |  | List<NavigateNode> calc = NavigateUtils.calc(startPoint, targetPoint, mapType, Utils.getShuttlePoints(shuttleNo, Utils.getLev(startPoint))); | 
|---|
|  |  |  | if (calc == null) { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //命令集合 | 
|---|
|  |  |  | ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>(); | 
|---|
|  |  |  | List<NavigateNode> allNode = new ArrayList<>(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //获取分段路径 | 
|---|
|  |  |  | ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc); | 
|---|
|  |  |  | 
|---|
|  |  |  | NyShuttleHttpCommand moveCommand = NyHttpUtils.getMoveCommand(shuttleNo, wrkNo, startPath, targetPath); | 
|---|
|  |  |  | moveCommand.setNodes(nodes);//将行走节点添加到每一步命令中 | 
|---|
|  |  |  | commands.add(moveCommand); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | allNode.addAll(nodes); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(startPoint), allNode, true);//锁定路径 | 
|---|
|  |  |  | return result(commands, calc); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public boolean dispatchShuttle(Integer wrkNo, String locNo) { | 
|---|
|  |  |  | //检测目标库位组是否存在小车,如存在小车则直接指定该车 | 
|---|
|  |  |  | List<String> groupLoc = Utils.getGroupLoc(locNo); | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectByWorkNo(wrkNo); | 
|---|
|  |  |  | if (wrkMast != null) { | 
|---|
|  |  |  | String targetLocNo = wrkMast.getIoType() < 100 ? wrkMast.getLocNo() : wrkMast.getSourceLocNo(); | 
|---|
|  |  |  | List<String> groupLoc = Utils.getGroupLoc(targetLocNo); | 
|---|
|  |  |  | Integer groupShuttleNo = Utils.checkGroupLocHasShuttle(groupLoc); | 
|---|
|  |  |  | if (groupShuttleNo != null) { | 
|---|
|  |  |  | //存在小车,直接调度该车 | 
|---|
|  |  |  | return shuttleMoveGenerate(wrkNo, locNo, groupShuttleNo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ArrayList<NyShuttleThread> sameLev = new ArrayList<>();//相同楼层的穿梭车 | 
|---|
|  |  |  | 
|---|
|  |  |  | WrkMast wrkMast1 = wrkMastMapper.selectByWorkNo(wrkNo); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (wrkMast1 != null) { | 
|---|
|  |  |  | String locNO=wrkMast1.getIoType()<100?wrkMast1.getLocNo():wrkMast1.getSourceLocNo(); | 
|---|
|  |  |  | int lev = Utils.getLev(locNO);//目标楼层 | 
|---|
|  |  |  | String targetLoc = wrkMast1.getIoType() < 100 ? wrkMast1.getLocNo() : wrkMast1.getSourceLocNo(); | 
|---|
|  |  |  | int lev = Utils.getLev(targetLoc);//目标楼层 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //检测目标楼层车数量是否小于允许的最大数量 | 
|---|
|  |  |  | boolean checkDispatchMaxNum = checkDispatchMaxNum(lev); | 
|---|
|  |  |  | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (command.getRequest().getBody().get("requestType").equals("move")) { | 
|---|
|  |  |  | ArrayList<int[]> whiteList = new ArrayList<>();//设置节点的白名单 | 
|---|
|  |  |  | if (wrkMast != null && ((wrkMast.getIoType() > 100 && wrkMast.getIoType() < 200) || wrkMast.getIoType() == 11)) { | 
|---|
|  |  |  | //出库任务,不检测首节点 | 
|---|
|  |  |  | int[] startArr = NavigatePositionConvert.positionToXY(wrkMast.getSourceLocNo());//开始节点 | 
|---|
|  |  |  | whiteList.add(startArr); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //解锁过路径,只检测下一段路径是否可走(当前路径已经被锁定无需再检测) | 
|---|
|  |  |  | if (isLock) { | 
|---|
|  |  |  | //只检测下一段路径是否可走(当前路径已经被锁定无需再检测) | 
|---|
|  |  |  | //检测路径是否可行走 | 
|---|
|  |  |  | if (!checkPath(nextNodes == null ? command.getNodes() : nextNodes, null, whiteList)) { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | //检测当前路径和下一段路径 | 
|---|
|  |  |  | //检测路径是否可行走 | 
|---|
|  |  |  | if (!checkPath(command.getNodes(), nextNodes, whiteList)) { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //锁定路径,锁定当前路径和下一步路径 | 
|---|
|  |  |  | List<NavigateNode> nodes = command.getNodes(); | 
|---|
|  |  |  | if (nextNodes != null) { | 
|---|
|  |  |  | nodes.addAll(nextNodes); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (nodes != null) { | 
|---|
|  |  |  | boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(shuttleProtocol.getCurrentLocNo()), nodes, true);//所使用的路径进行锁定禁用 | 
|---|
|  |  |  | if (!result) { | 
|---|
|  |  |  | return false;//路径锁定失败 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //        if (command.getRequest().getBody().get("requestType").equals("move")) { | 
|---|
|  |  |  | //            ArrayList<int[]> whiteList = new ArrayList<>();//设置节点的白名单 | 
|---|
|  |  |  | //            if (wrkMast != null && ((wrkMast.getIoType() > 100 && wrkMast.getIoType() < 200) || wrkMast.getIoType() == 11)) { | 
|---|
|  |  |  | //                //出库任务,不检测首节点 | 
|---|
|  |  |  | //                int[] startArr = NavigatePositionConvert.positionToXY(wrkMast.getSourceLocNo());//开始节点 | 
|---|
|  |  |  | //                whiteList.add(startArr); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            //解锁过路径,只检测下一段路径是否可走(当前路径已经被锁定无需再检测) | 
|---|
|  |  |  | //            if (isLock) { | 
|---|
|  |  |  | //                //只检测下一段路径是否可走(当前路径已经被锁定无需再检测) | 
|---|
|  |  |  | //                //检测路径是否可行走 | 
|---|
|  |  |  | //                if (!checkPath(nextNodes == null ? command.getNodes() : nextNodes, null, whiteList)) { | 
|---|
|  |  |  | //                    return false; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            }else { | 
|---|
|  |  |  | //                //检测当前路径和下一段路径 | 
|---|
|  |  |  | //                //检测路径是否可行走 | 
|---|
|  |  |  | //                if (!checkPath(command.getNodes(), nextNodes, whiteList)) { | 
|---|
|  |  |  | //                    return false; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //            //锁定路径,锁定当前路径和下一步路径 | 
|---|
|  |  |  | //            List<NavigateNode> nodes = command.getNodes(); | 
|---|
|  |  |  | //            if (nextNodes != null) { | 
|---|
|  |  |  | //                nodes.addAll(nextNodes); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //            if (nodes != null) { | 
|---|
|  |  |  | //                boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(shuttleProtocol.getCurrentLocNo()), nodes, true);//所使用的路径进行锁定禁用 | 
|---|
|  |  |  | //                if (!result) { | 
|---|
|  |  |  | //                    return false;//路径锁定失败 | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //可执行命令 | 
|---|
|  |  |  | if (!write(command, assignCommand)) { | 
|---|