Eliseev E.E. LabWork06_Hard #12

Closed
ElEgEv wants to merge 26 commits from LabWork06_Hard into LabWork05_Hard
7 changed files with 107 additions and 40 deletions
Showing only changes of commit 4faa4cd16b - Show all commits

View File

@ -40,7 +40,7 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
//list хранит весь список в случае, если model пришло со значением null на вход метода
var list = model == null ? _orderStorage.GetFullList() : _orderStorage.GetFilteredList(model);
if(list == null)
if (list == null)
{
_logger.LogWarning("ReadList return null list");
@ -90,8 +90,8 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
if(_orderStorage.Insert(model) == null)
{
model.Status = OrderStatus.Неизвестен;
_logger.LogWarning("Insert operation failed");
return false;
}
@ -171,7 +171,7 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
}
//проверка на возможность обновления статуса на следующий
if (viewModel.Status + 1 != newOrderStatus)
if (viewModel.Status + 1 != newOrderStatus && viewModel.Status != OrderStatus.Ожидание)
{
_logger.LogWarning("Status update operation failed. New status " + newOrderStatus.ToString() + " incorrect");
return false;
@ -186,10 +186,8 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
}
//проверка на выдачу
if (model.Status == OrderStatus.Выдан)
{
model.DateImplement = DateTime.Now;
if (model.Status == OrderStatus.Готов || viewModel.Status == OrderStatus.Ожидание)
{
var manufacture = _manufactureStorage.GetElement(new() { Id = viewModel.ManufactureId });
if (manufacture == null)
@ -199,7 +197,13 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
if (!_shopLogic.AddManufactures(manufacture, viewModel.Count))
{
model.Status = OrderStatus.Ожидание;
throw new Exception($"AddManufactures operation failed. Shop is full.");
}
else
{
model.DateImplement = DateTime.Now;
}
}
else
@ -212,8 +216,6 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
//финальная проверка на возможность обновления
if (_orderStorage.Update(model) == null)
{
model.Status--;
_logger.LogWarning("Update operation failed");
return false;

View File

@ -78,6 +78,7 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
}
_logger.LogInformation("AddManufacture. ShopName:{ShopName}. Id: {Id}", model?.ShopName, model?.Id);
var shop = _shopStorage.GetElement(model);
if (shop == null)

View File

@ -64,7 +64,45 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
return;
}
await RunOrderInWork(implementer);
await Task.Run(() =>
{
try
{
var runOrder = _orderLogic.ReadElement(new OrderSearchModel
{
ImplementerId = implementer.Id,
Status = OrderStatus.Ожидание
});
if (runOrder == null)
{
return;
}
_logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, runOrder.Id);
_orderLogic.FinishOrder(new OrderBindingModel
{
Id = runOrder.Id
});
// отдыхаем
Thread.Sleep(implementer.Qualification * _rnd.Next(10, 100));
}
// заказа может не быть, просто игнорируем ошибку
catch (InvalidOperationException ex)
{
_logger.LogWarning(ex, "Error try get work");
}
// а может возникнуть иная ошибка, тогда просто заканчиваем выполнение имитации
catch (Exception ex)
{
_logger.LogError(ex, "Error while do work");
throw;
}
});
await RunOrderInWork(implementer);
await Task.Run(() =>
{
@ -157,5 +195,5 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
throw;
}
}
}
}
}

View File

@ -150,11 +150,7 @@ namespace BlacksmithWorkshopDatabaseImplement.Implements
{
using var context = new BlacksmithWorkshopDatabase();
var order = context.Orders
.Include(x => x.Manufacture)
.Include(x => x.Client)
.Include(x => x.Implementer)
.FirstOrDefault(x => x.Id == model.Id);
var order = context.Orders.FirstOrDefault(x => x.Id == model.Id);
if (order == null)
{

View File

@ -36,8 +36,21 @@ namespace BlacksmithWorkshopDatabaseImplement.Models
{
if (_shopManufactures == null)
{
_shopManufactures = Manufactures.ToDictionary(recSI => recSI.ManufactureId, recSI => (recSI.Manufacture as IManufactureModel, recSI.Count));
_shopManufactures = new();
Manufactures.ForEach(x =>
{
if (_shopManufactures.ContainsKey(x.ManufactureId))
{
_shopManufactures[x.ManufactureId] = (x.Manufacture as IManufactureModel, _shopManufactures[x.ManufactureId].Item2 + x.Count);
}
else
{
_shopManufactures[x.ManufactureId] = (x.Manufacture as IManufactureModel, x.Count);
}
});
}
return _shopManufactures;
}
}

View File

@ -34,13 +34,6 @@ namespace BlacksmithWorkshopFileImplement.Implements
.Select(x => GetViewModel(x))
.ToList();
}
else if (model.Id.HasValue)
{
return source.Orders
.Where(x => x.Id == model.Id)
.Select(x => GetViewModel(x))
.ToList();
}
else if (model.ClientId.HasValue)
{
return source.Orders
@ -56,11 +49,28 @@ namespace BlacksmithWorkshopFileImplement.Implements
.ToList();
}
return new();
return source.Orders
.Where(x => x.Id == model.Id)
.Select(x => GetViewModel(x))
.ToList();
}
public OrderViewModel? GetElement(OrderSearchModel model)
{
if (model.ImplementerId.HasValue && model.Status.HasValue)
{
return source.Orders
.FirstOrDefault(x => x.ImplementerId == model.ImplementerId && x.Status == model.Status)
?.GetViewModel;
}
if (model.ImplementerId.HasValue)
{
return source.Orders
.FirstOrDefault(x => x.ImplementerId == model.ImplementerId)
?.GetViewModel;
}
if (!model.Id.HasValue)
{
return null;

View File

@ -39,10 +39,10 @@ namespace BlacksmithWorkshopListImplement.Implements
//получение отфильтрованного списка заказов
public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
{
var result = new List<OrderViewModel>();
if (!model.Id.HasValue && model.DateFrom.HasValue && model.DateTo.HasValue)
{
var result = new List<OrderViewModel>();
foreach (var order in _source.Orders)
{
if (order.DateCreate >= model.DateFrom && order.DateCreate <= model.DateTo)
@ -53,20 +53,8 @@ namespace BlacksmithWorkshopListImplement.Implements
return result;
}
else if (model.Id.HasValue)
{
foreach (var order in _source.Orders)
{
if (order.Id == model.Id)
{
return new() { GetViewModel(order) };
}
}
}
else if (model.ClientId.HasValue)
{
var result = new List<OrderViewModel>();
foreach (var order in _source.Orders)
{
if (order.ClientId == model.ClientId)
@ -77,8 +65,27 @@ namespace BlacksmithWorkshopListImplement.Implements
return result;
}
else if (model.Status.HasValue)
{
foreach (var order in _source.Orders)
{
if (order.Status == model.Status)
{
result.Add(GetViewModel(order));
}
}
return result;
}
return new();
foreach (var order in _source.Orders)
{
if (order.Id == model.Id)
{
result.Add(GetViewModel(order));
}
}
return result;
}
//получение элемента из списка заказов