/// <summary> /// 构造函数. /// </summary> public Elevator(int maxFloor, int minFloor) { // 设置最高、最低楼层. MaxFloor = maxFloor; MinFloor = minFloor; // 默认状态 = 待机. RunningStatus = ElevatorRunningStatus.Ready; // 初始情况下, 电梯处于 底楼状态. Status = new ElevatorStatusIsBottom() { ElevatorData = this, }; }
/// <summary> /// 获取 最接近当前楼层的 一个命令. /// </summary> /// <param name="direction"></param> /// <returns></returns> private ElevatorCommand GetNearestCommand(ElevatorRunningStatus status) { if (logger.IsDebugEnabled) { logger.DebugFormat("GetNearestCommand -- 获取最接近当前楼层的一个命令:方向= {0}", status); } if (status == ElevatorRunningStatus.Up || status == ElevatorRunningStatus.Ready) { if (logger.IsDebugEnabled) { logger.DebugFormat("GetNearestCommand --电梯正在向上运行.查询目前还有哪些楼层, 要在向上的过程中,停下来的。"); } // 电梯正在向上运行. // 查询目前还有哪些楼层, 要在向上的过程中,停下来的。 var todoQuery = from data in todoList where // 停靠楼层大于当前楼层. data.StopAtFloorNum >= this.CurrentFloor // 向上停靠. && data.StopWhen == ElevatorRunningStatus.Up // 按楼层从小到大排序. orderby data.StopAtFloorNum select data; ElevatorCommand result = todoQuery.FirstOrDefault(); if (result == null) { if (logger.IsDebugEnabled) { logger.DebugFormat("GetNearestCommand --不存在正在向上停的楼层, 要在向下楼层进行查询。"); } todoQuery = from data in todoList where // 停靠楼层大于当前楼层. data.StopAtFloorNum >= this.CurrentFloor // 向下停靠. && data.StopWhen == ElevatorRunningStatus.Down // 按楼层从大到小排序. orderby data.StopAtFloorNum descending select data; // 也就是要迁移到 最上面那个 按“向下”的按钮. result = todoQuery.FirstOrDefault(); } if (logger.IsDebugEnabled) { logger.DebugFormat("GetNearestCommand -Up-返回结果:{0}", result); } return result; } if (status == ElevatorRunningStatus.Down) { if (logger.IsDebugEnabled) { logger.DebugFormat("GetNearestCommand --电梯正在向下运行.查询目前还有哪些楼层, 要在向下的过程中,停下来的。"); } // 电梯正在向下运行. // 查询目前还有哪些楼层, 要在向下的过程中,停下来的。 var todoQuery = from data in todoList where // 停靠楼层小于当前楼层. data.StopAtFloorNum <= this.CurrentFloor // 向下停靠. && data.StopWhen == ElevatorRunningStatus.Down // 按楼层从大到小排序 orderby data.StopAtFloorNum descending select data; ElevatorCommand result = todoQuery.FirstOrDefault(); if (result == null) { if (logger.IsDebugEnabled) { logger.DebugFormat("GetNearestCommand --不存在正在向下停的楼层, 要在向上楼层进行查询。"); } todoQuery = from data in todoList where // 停靠楼层小于当前楼层. data.StopAtFloorNum <= this.CurrentFloor // 向上停靠. && data.StopWhen == ElevatorRunningStatus.Up // 按楼层从小到大排序 orderby data.StopAtFloorNum select data; // 也就是要迁移到 最下面那个 按“向上”的按钮. result = todoQuery.FirstOrDefault(); } if (logger.IsDebugEnabled) { logger.DebugFormat("GetNearestCommand -Down-返回结果:{0}", result); } return result; } // 其他未知状况下, 简单返回 null return null; }
/// <summary> /// 获取 最接近当前楼层的 一个命令. /// </summary> /// <param name="direction"></param> /// <returns></returns> private ElevatorCommand GetNearestCommand(ElevatorRunningStatus status) { if (logger.IsDebugEnabled) { logger.DebugFormat("GetNearestCommand -- 获取最接近当前楼层的一个命令:方向= {0}", status); } if (status == ElevatorRunningStatus.Up || status == ElevatorRunningStatus.Ready) { if (logger.IsDebugEnabled) { logger.DebugFormat("GetNearestCommand --电梯正在向上运行.查询目前还有哪些楼层, 要在向上的过程中,停下来的。"); } // 电梯正在向上运行. // 查询目前还有哪些楼层, 要在向上的过程中,停下来的。 var todoQuery = from data in todoList where // 停靠楼层大于当前楼层. data.StopAtFloorNum >= this.CurrentFloor // 向上停靠. && data.StopWhen == ElevatorRunningStatus.Up // 按楼层从小到大排序. orderby data.StopAtFloorNum select data; ElevatorCommand result = todoQuery.FirstOrDefault(); if (result == null) { if (logger.IsDebugEnabled) { logger.DebugFormat("GetNearestCommand --不存在正在向上停的楼层, 要在向下楼层进行查询。"); } todoQuery = from data in todoList where // 停靠楼层大于当前楼层. data.StopAtFloorNum >= this.CurrentFloor // 向下停靠. && data.StopWhen == ElevatorRunningStatus.Down // 按楼层从大到小排序. orderby data.StopAtFloorNum descending select data; // 也就是要迁移到 最上面那个 按“向下”的按钮. result = todoQuery.FirstOrDefault(); } if (logger.IsDebugEnabled) { logger.DebugFormat("GetNearestCommand -Up-返回结果:{0}", result); } return(result); } if (status == ElevatorRunningStatus.Down) { if (logger.IsDebugEnabled) { logger.DebugFormat("GetNearestCommand --电梯正在向下运行.查询目前还有哪些楼层, 要在向下的过程中,停下来的。"); } // 电梯正在向下运行. // 查询目前还有哪些楼层, 要在向下的过程中,停下来的。 var todoQuery = from data in todoList where // 停靠楼层小于当前楼层. data.StopAtFloorNum <= this.CurrentFloor // 向下停靠. && data.StopWhen == ElevatorRunningStatus.Down // 按楼层从大到小排序 orderby data.StopAtFloorNum descending select data; ElevatorCommand result = todoQuery.FirstOrDefault(); if (result == null) { if (logger.IsDebugEnabled) { logger.DebugFormat("GetNearestCommand --不存在正在向下停的楼层, 要在向上楼层进行查询。"); } todoQuery = from data in todoList where // 停靠楼层小于当前楼层. data.StopAtFloorNum <= this.CurrentFloor // 向上停靠. && data.StopWhen == ElevatorRunningStatus.Up // 按楼层从小到大排序 orderby data.StopAtFloorNum select data; // 也就是要迁移到 最下面那个 按“向上”的按钮. result = todoQuery.FirstOrDefault(); } if (logger.IsDebugEnabled) { logger.DebugFormat("GetNearestCommand -Down-返回结果:{0}", result); } return(result); } // 其他未知状况下, 简单返回 null return(null); }