/// <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); }
private void SetViewTable(ResultSpecification resultSpecification) { if (_viewTableDataResult == default) { _viewTableDataResult = new ViewTableData(); } lock (_viewTableDataResult) { SetLog(message: "Добавление строчки в результат"); _viewTableDataResult.ArrayList.Add(value: resultSpecification); } }