public override bool AcceptUnit(ITrackUnit Unit)
        {
            try
            {
                if (Unit.Type != "Product")
                {
                    //LOG.Error(string.Format("错误:托盘{0}放入的不是产品",ID));
                    return(false);
                }

                if (IsNoSpec)
                {
                    //LOG.Error(string.Format("错误:托盘{0}没有规格", ID));
                    return(false);
                }

                if (IsFull)
                {
                    //LOG.Error(string.Format("错误:托盘{0}已满", ID));
                    return(false);
                }

                var product = (Product)Unit;
                return(CouldContainProduct(product));
            }
            catch (Exception ex)
            {
                Log.Error($"托盘{Id}产品{Unit.Id}检查出错{ex}");
                return(false);
            }
        }
 public override bool PutIn(ITrackUnit unit)
 {
     //if (UnitCount < ContainerSize)
     if (IsFull)
     {
         return(false);
     }
     _units.Add((Product)unit);
     return(true);
 }
        public override bool PutIn(ITrackUnit Unit)
        {
            //if (UnitCount < ContainerSize)
            if (!IsFull)
            {
                _units.Enqueue(Unit);
                return(true);
            }

            return(false);
        }
        public override ITrackUnit GetCandidateUnit()
        {
            // 检查头部
            if (_units.Count <= 0)
            {
                return(null);
            }
            ITrackUnit result = _units[0];

            return(result);
        }
        public override bool HasUnit(ITrackUnit unit)
        {
            foreach (var product in _units)
            {
                if (product.Id == unit.Id)
                {
                    return(true);
                }
            }

            return(false);
        }
        public override ITrackUnit TakeOut()
        {
            // 从头部拿掉一个
            if (_units.Count <= 0)
            {
                return(null);
            }
            ITrackUnit result = _units[0];

            _units.RemoveAt(0);
            return(result);
        }
        public override void TakeOut(ITrackUnit unit)
        {
            short removeIndex = 0;

            foreach (var product in _units)
            {
                if (product.Id == unit.Id)
                {
                    break;
                }
                removeIndex++;
            }

            if (removeIndex <= _units.Count)
            {
                _units.RemoveAt(removeIndex);
            }
        }
 public override void TakeOut(ITrackUnit Unit)
 {
     throw new NotImplementedException();
 }
 public override bool HasUnit(ITrackUnit Unit)
 {
     throw new NotImplementedException();
 }
 public abstract void TakeOut(ITrackUnit unit);
 public abstract bool PutIn(ITrackUnit unit);
 public abstract bool HasUnit(ITrackUnit unit);
        public bool IsEmpty => UnitCount == 0;            //是否为空

        public abstract bool AcceptUnit(ITrackUnit unit);