Ejemplo n.º 1
0
        /// <summary>
        ///     Получаем информацию одного заказа
        /// </summary>
        /// <param name="order">Заказ</param>
        /// <param name="items">Коллекция с частями указанного заказа</param>
        /// <returns></returns>
        private void ResultOneOrder(Order order, IEnumerable <Item> items)
        {
            ResultSpecification resultSpecification =
                new ResultSpecification {
                NumberOrder = order.Name
            };

            //Получили коллекцию негабаритных частей заказа
            IEnumerable <Item> notDimensionEnumerator = items.Where
                                                            (predicate: item => item.Weight >= MaxWeight);

            //Удаляем негабаритные части заказа
            IEnumerable <Item> dimensionEnumerator = notDimensionEnumerator.ToList();

            items = items.Except(second: dimensionEnumerator);

            //Случай, когда товаров для габаритов нет -> items пустой
            if (items.Count() == default)
            {
                resultSpecification.CountNotDimensional = (uint)dimensionEnumerator.Count();
                SetViewTable(resultSpecification: resultSpecification);

                return;
            }

            uint minWeight = items.Min(selector: item => item.Weight); //минимальный вес
            IEnumerable <Item> bigContainer = items.Where
                                                  (predicate: item => item.Weight > MaxWeight - minWeight);

            //Удаляем части с весьма большим весом, который входят только в один контейнер
            items = items.Except(second: bigContainer);

            //Случай, когда все габаритные товары занимаю по одному контейнеру
            if (items.Count() == default)
            {
                resultSpecification.CountNotDimensional = (uint)dimensionEnumerator.Count();
                resultSpecification.CountContainer      = (uint)bigContainer.Count();
                SetViewTable(resultSpecification: resultSpecification);

                return;
            }

            //Записали в контейнер количество не габаритных товаров
            resultSpecification.CountNotDimensional = (uint)dimensionEnumerator.Count();

            //Добавили большие части заказа, но те, которые помещаются в один контейнер
            resultSpecification.CountContainer = (uint)bigContainer.Count();

            //Добавляем остальные контейнеры
            resultSpecification.CountContainer += AlgoritmContainer(items: items);

            SetViewTable(resultSpecification: resultSpecification);
        }
Ejemplo n.º 2
0
        private void SetViewTable(ResultSpecification resultSpecification)
        {
            if (_viewTableDataResult == default)
            {
                _viewTableDataResult = new ViewTableData();
            }

            lock (_viewTableDataResult)
            {
                SetLog(message: "Добавление строчки в результат");
                _viewTableDataResult.ArrayList.Add(value: resultSpecification);
            }
        }