|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.zy.asrs.utils.Utils; | 
|---|
|  |  |  | import com.zy.common.model.NavigateNode; | 
|---|
|  |  |  | import com.zy.common.model.NyShuttleOperaResult; | 
|---|
|  |  |  | import com.zy.common.utils.*; | 
|---|
|  |  |  | import com.zy.core.News; | 
|---|
|  |  |  | import com.zy.core.ThreadHandler; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class); | 
|---|
|  |  |  | List<NyShuttleHttpCommand> commands = redisCommand.getAssignCommand().getCommands(); | 
|---|
|  |  |  | ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand(); | 
|---|
|  |  |  | List<NyShuttleHttpCommand> commands = redisCommand.getAssignCommand().getCommands(); | 
|---|
|  |  |  | //当前步序 | 
|---|
|  |  |  | int commandStep = redisCommand.getCommandStep(); | 
|---|
|  |  |  | if (commands.size() == 0) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //检测路径是否可行走 | 
|---|
|  |  |  | if (!checkPath(command.getNodes(), nextNodes)) { | 
|---|
|  |  |  | if (!checkPath(command.getNodes(), nextNodes, redisCommand)) { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 检测路径是否可行走 | 
|---|
|  |  |  | * 如果路径为目标库位,但不可行走,系统将尝试重新计算路径 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private boolean checkPath(List<NavigateNode> currentNodes, List<NavigateNode> nextNodes) { | 
|---|
|  |  |  | private boolean checkPath(List<NavigateNode> currentNodes, List<NavigateNode> nextNodes, ShuttleRedisCommand redisCommand) { | 
|---|
|  |  |  | //检测路径是否可行走(检查路径锁定状态,检测路径是否有其他小车) | 
|---|
|  |  |  | //检测当前行走路径,和下一步路径 | 
|---|
|  |  |  | boolean checkPathIsAvailable = NavigateUtils.checkPathIsAvailable(currentNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(shuttleProtocol.getCurrentLocNo())); | 
|---|
|  |  |  | 
|---|
|  |  |  | if (checkPathIsAvailable && checkPathIsAvailable2) { | 
|---|
|  |  |  | return true;//可行走 | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand(); | 
|---|
|  |  |  | NavigateNode currentTarget = currentNodes.get(currentNodes.size() - 1); | 
|---|
|  |  |  | String currentLocNo = NavigatePositionConvert.nodeToLocNo(currentTarget); | 
|---|
|  |  |  | NavigateNode nextTarget = nextNodes.get(nextNodes.size() - 1); | 
|---|
|  |  |  | String nextLocNo = NavigatePositionConvert.nodeToLocNo(nextTarget); | 
|---|
|  |  |  | if (assignCommand.getLocNo().equals(currentLocNo) || assignCommand.getLocNo().equals(nextLocNo)) { | 
|---|
|  |  |  | //当前路径最后一个节点是目标库位,进行路径检测,如果不可行走,重新计算路径 | 
|---|
|  |  |  | //不可行走,重新计算路径 | 
|---|
|  |  |  | NyShuttleOperaResult result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getShuttleNo().intValue(), shuttleProtocol.getTaskNo(), shuttleProtocol.getCurrentLocNo(), assignCommand.getLocNo()); | 
|---|
|  |  |  | if (result == null) { | 
|---|
|  |  |  | return false;//路径计算失败,不可行走 | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<NyShuttleHttpCommand> newCommands = result.getCommands();//新路径 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //当前步序 | 
|---|
|  |  |  | int commandStep = redisCommand.getCommandStep(); | 
|---|
|  |  |  | List<NyShuttleHttpCommand> commands = assignCommand.getCommands(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | commands.remove(commandStep);//移除当前步序指令 | 
|---|
|  |  |  | if (assignCommand.getLocNo().equals(currentLocNo)) { | 
|---|
|  |  |  | //当前路径,需要再多移除下一步指令 | 
|---|
|  |  |  | commands.remove(commandStep + 1); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //将新路径添加进指令集合 | 
|---|
|  |  |  | commands.addAll(commandStep, newCommands); | 
|---|
|  |  |  | assignCommand.setCommands(commands); | 
|---|
|  |  |  | redisCommand.setAssignCommand(assignCommand); | 
|---|
|  |  |  | //任务数据保存到redis | 
|---|
|  |  |  | redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand)); | 
|---|
|  |  |  | return false;//当前不可行走,等待下一次执行走新路径 | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return false;//不可行走 | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|