Eliseev E.E. LabWork02_Hard #7

Closed
ElEgEv wants to merge 23 commits from LabWork02_Hard into LabWork01_Hard
6 changed files with 91 additions and 16 deletions
Showing only changes of commit d377511cba - Show all commits

View File

@ -20,10 +20,16 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
private readonly IOrderStorage _orderStorage;
public OrderLogic(ILogger<OrderLogic> logger, IOrderStorage orderStorage)
private readonly IShopLogic _shopLogic;
private readonly IManufactureStorage _manufactureStorage;
public OrderLogic(ILogger<OrderLogic> logger, IOrderStorage orderStorage, IShopLogic shopLogic, IManufactureStorage manufactureStorage)
{
_logger = logger;
_orderStorage = orderStorage;
_shopLogic = shopLogic;
_manufactureStorage = manufactureStorage;
}
//вывод отфильтрованного списка компонентов
@ -122,7 +128,7 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
throw new InvalidOperationException("Дата создания должна быть более ранней, нежели дата завершения");
}
_logger.LogInformation("Order. OrderId:{Id}. Sun:{Sum}. ManufactureId:{Id}", model.Id, model.Sum, model.ManufactureId);
_logger.LogInformation("Order. OrderId:{Id}. Sun:{Sum}. ManufactureId:{Id}. Sum:{Sum}", model.Id, model.Sum, model.ManufactureId, model.Sum);
}
//обновление статуса заказа
@ -146,9 +152,21 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
model.Status = newOrderStatus;
//проверка на выдачу
if (model.Status == OrderStatus.Выдан)
if (model.Status == OrderStatus.Готов)
{
model.DateImplement = DateTime.Now;
var manufacture = _manufactureStorage.GetElement(new() { Id = viewModel.ManufactureId });
if (manufacture == null)
{
throw new ArgumentNullException(nameof(manufacture));
}
if (!_shopLogic.AddManufactures(manufacture, viewModel.Count))
{
throw new Exception($"AddManufactures operation failed. Shop is full.");
}
}
else
{

View File

@ -72,10 +72,10 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
if (count <= 0)
{
throw new ArgumentNullException("Количество добавляемого мороженого должно быть больше 0", nameof(count));
throw new ArgumentNullException("Количество добавляемых изделий должно быть больше 0", nameof(count));
}
_logger.LogInformation("AddIceCream. ShopName:{ShopName}. Id: {Id}", model?.ShopName, model?.Id);
_logger.LogInformation("AddManufacture. ShopName:{ShopName}. Id: {Id}", model?.ShopName, model?.Id);
var shop = _shopStorage.GetElement(model);
if (shop == null)
@ -99,6 +99,7 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
ShopName = shop.ShopName,
Address = shop.Address,
DateOpen = shop.DateOpen,
MaxCountManufactures = shop.MaxCountManufactures,
Manufactures = shop.Manufactures
});
@ -181,5 +182,61 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
throw new InvalidOperationException("Магазин с таким названием уже есть");
}
}
public bool AddManufactures(IManufactureModel model, int count)
{
if (count <= 0)
{
throw new ArgumentNullException("Количество добавляемых изделий должно быть больше 0", nameof(count));
}
_logger.LogInformation("AddManufactures. Manufacture: {Manufacture}. Count: {Count}", model?.ManufactureName, count);
var capacity = _shopStorage.GetFullList().Select(x => x.MaxCountManufactures - x.Manufactures.Select(x => x.Value.Item2).Sum()).Sum() - count;
if (capacity < 0)
{
_logger.LogWarning("AddManufactures operation failed. Sell {count} Manufactures ", -capacity);
return false;
}
foreach (var shop in _shopStorage.GetFullList())
{
if (shop.MaxCountManufactures - shop.Manufactures.Select(x => x.Value.Item2).Sum() < count)
{
if (!AddManufacture(new() { Id = shop.Id }, model, shop.MaxCountManufactures - shop.Manufactures.Select(x => x.Value.Item2).Sum()))
{
_logger.LogWarning("AddManufactures operation failed.");
return false;
}
count -= shop.MaxCountManufactures - shop.Manufactures.Select(x => x.Value.Item2).Sum();
}
else
{
if (!AddManufacture(new() { Id = shop.Id }, model, count))
{
_logger.LogWarning("AddManufactures operation failed.");
return false;
}
count -= count;
}
if (count == 0)
{
return true;
}
}
return true;
}
public bool SellManufatures(IManufactureModel model, int count)
{
return _shopStorage.SellManufactures(model, count);
}
}
}

View File

@ -24,6 +24,6 @@ namespace BlacksmithWorkshopContracts.StoragesContracts
ShopViewModel? Delete(ShopBindingModel model);
bool SellManufactures(IManufactureModel, int count);
bool SellManufactures(IManufactureModel model, int count);
}
}

View File

@ -26,7 +26,7 @@ namespace BlacksmithWorkshopFileImplement
public List<Manufacture> Manufactures { get; private set; }
public List<Manufacture> Shops { get; private set; }
public List<Shop> Shops { get; private set; }
public static DataFileSingleton GetInstance()
{

View File

@ -96,25 +96,25 @@ namespace BlacksmithWorkshopFileImplement.Implements
return null;
}
public bool SellIceCreams(IIceCreamModel model, int count)
public bool SellManufactures(IManufactureModel model, int count)
{
if (_source.Shops.Select(x => x.IceCreams.FirstOrDefault(x => x.Key == model.Id).Value.Item2).Sum() < count)
if (_source.Shops.Select(x => x.Manufactures.FirstOrDefault(x => x.Key == model.Id).Value.Item2).Sum() < count)
{
return false;
}
var list = _source.Shops.Where(x => x.IceCreams.ContainsKey(model.Id));
var list = _source.Shops.Where(x => x.Manufactures.ContainsKey(model.Id));
foreach (var shop in list)
{
if (shop.IceCreams[model.Id].Item2 < count)
if (shop.Manufactures[model.Id].Item2 < count)
{
count -= shop.IceCreams[model.Id].Item2;
shop.IceCreams[model.Id] = (shop.IceCreams[model.Id].Item1, 0);
count -= shop.Manufactures[model.Id].Item2;
shop.Manufactures[model.Id] = (shop.Manufactures[model.Id].Item1, 0);
}
else
{
shop.IceCreams[model.Id] = (shop.IceCreams[model.Id].Item1, shop.IceCreams[model.Id].Item2 - count);
shop.Manufactures[model.Id] = (shop.Manufactures[model.Id].Item1, shop.Manufactures[model.Id].Item2 - count);
count -= count;
}
@ -123,7 +123,7 @@ namespace BlacksmithWorkshopFileImplement.Implements
ShopName = shop.ShopName,
Address = shop.Address,
DateOpen = shop.DateOpen,
MaxCountManufactures = shop.MaxCountManufacturess,
MaxCountManufactures = shop.MaxCountManufactures,
Manufactures = shop.Manufactures
});

View File

@ -103,7 +103,7 @@ namespace BlacksmithWorkshopFileImplement.Models
new XElement("Address", Address),
new XElement("DateOpen", DateOpen.ToString()),
new XElement("MaxCountManufactures", MaxCountManufactures.ToString()),
new XElement("Manufactures", countManufature.Select(x => new XElement("Manufactures",
new XElement("Manufactures", countManufacture.Select(x => new XElement("Manufactures",
new XElement("Key", x.Key),
new XElement("Value", x.Value))).ToArray()));
}