To wracamy do kodu powyżej tylko, że wywołujemy go dla każdego produktu z zamówienia.
internal class Program
{
//Przygotowanie testowych danych
//Te dane sa w bazie danych
public static List<ProductOrResource> ProductsDatabase { get; } = new List<ProductOrResource>()
{
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "1", Code = "1.1" }, //Podprodukt
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "1", Code = "1.2" }, //Podprodukt
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "1", Code = "1.3" }, //Podprodukt
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "1.1", Code = "1.1.1" }, //Podprodukt podproduktu 1.1
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "1.1", Code = "1.1.2" }, //Podprodukt podproduktu 1.1
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "1.1", Code = "1.1.3" }, //Podprodukt podproduktu 1.1
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "1.2", Code = "1.2.1" }, //Podprodukt podproduktu 1.2
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "1.2", Code = "1.2.2" }, //Podprodukt podproduktu 1.2
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "1.3", Code = "1.3.1" }, //Podprodukt podproduktu 1.3
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "1.1.1", Code = "1.1.1.1" }, //Podprodukt podproduktu 1.1.1
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "1.1.1", Code = "1.1.1.2" }, //Podprodukt podproduktu 1.1.1
new() { Entity = ProductOrResource.EntityType.Resource, ParentProductCode = "1.1.1", Code = "1.1.1.3" }, //Surowiec podproduktu 1.1.1
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "2", Code = "2.1" }, //Podprodukt
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "2", Code = "2.2" }, //Podprodukt
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "2", Code = "2.3" }, //Podprodukt
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "2.1", Code = "2.1.1" }, //Podprodukt podproduktu 2.1
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "2.1", Code = "2.1.2" }, //Podprodukt podproduktu 2.1
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "2.1", Code = "2.1.3" }, //Podprodukt podproduktu 2.1
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "2.2", Code = "2.2.1" }, //Podprodukt podproduktu 2.2
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "2.2", Code = "2.2.2" }, //Podprodukt podproduktu 2.2
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "2.3", Code = "2.3.1" }, //Podprodukt podproduktu 2.3
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "2.1.1", Code = "2.1.1.1" }, //Podprodukt podproduktu 2.1.1
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = "2.1.1", Code = "2.1.1.2" }, //Podprodukt podproduktu 2.1.1
new() { Entity = ProductOrResource.EntityType.Resource, ParentProductCode = "2.1.1", Code = "2.1.1.3" } //Surowiec podproduktu 2.1.1
};
static void Main(string[] args)
{
Order order = new();
order.OrderId = 5;
HandleOrder(order);
Console.ReadKey();
}
public static void HandleOrder(Order order)
{
//Zamienić to przypisanie na probranie produktów z bazy danych dla danego zamówienia
Console.WriteLine("Pobieranie produktów dla zamówienia ID: " + order.OrderId);
List<ProductOrResource> products = new()
{
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = null, Code = "1" },
new() { Entity = ProductOrResource.EntityType.Product, ParentProductCode = null, Code = "2" }
};
Console.WriteLine("Produkty zawarte w zamówieniu to: " + string.Join(", ", products.Select(x => x.Code)));
foreach (ProductOrResource product in products)
{
AddProduct(product);
}
}
public static void AddProduct(ProductOrResource product)
{
//Wyciąganie listy podproduktów dla produktu
Console.WriteLine("Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: " + product.Code);
List<ProductOrResource> subproducts = GetSubproductsForProduct(product); //Tu pobrac liste subproduktów i zasobów z bazy
Console.WriteLine("Produkt / surowiec: " + product.Code + " Półprodukty / surowce: " + string.Join(", ", subproducts.Select(x => x.Code)));
foreach (ProductOrResource subproduct in subproducts)
{
AddProduct(subproduct);
}
//Tu stworzyć kartotekę dla produktu / zasobu i zapisać w bazie
Console.WriteLine("Dodanie produktu / surowca " + product.Code +" do bazy");
}
public static List<ProductOrResource> GetSubproductsForProduct(ProductOrResource product)
{
return ProductsDatabase.Where(x => x.ParentProductCode == product.Code).ToList();
}
public class Order
{
public int OrderId { get; set; }
}
public class ProductOrResource
{
public enum EntityType { Product, Resource }
public string Code { get; set; }
public string? ParentProductCode { get; set; }
public EntityType Entity { get; set; }
}
}
Tam gdzie są komentarze trzeba zamienić na pobieranie danych z bazy i powinno śmigać.
Output:
Pobieranie produktów dla zamówienia ID: 5
Produkty zawarte w zamówieniu to: 1, 2
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 1
Produkt / surowiec: 1 Półprodukty / surowce: 1.1, 1.2, 1.3
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 1.1
Produkt / surowiec: 1.1 Półprodukty / surowce: 1.1.1, 1.1.2, 1.1.3
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 1.1.1
Produkt / surowiec: 1.1.1 Półprodukty / surowce: 1.1.1.1, 1.1.1.2, 1.1.1.3
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 1.1.1.1
Produkt / surowiec: 1.1.1.1 Półprodukty / surowce:
Dodanie produktu / surowca 1.1.1.1 do bazy
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 1.1.1.2
Produkt / surowiec: 1.1.1.2 Półprodukty / surowce:
Dodanie produktu / surowca 1.1.1.2 do bazy
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 1.1.1.3
Produkt / surowiec: 1.1.1.3 Półprodukty / surowce:
Dodanie produktu / surowca 1.1.1.3 do bazy
Dodanie produktu / surowca 1.1.1 do bazy
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 1.1.2
Produkt / surowiec: 1.1.2 Półprodukty / surowce:
Dodanie produktu / surowca 1.1.2 do bazy
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 1.1.3
Produkt / surowiec: 1.1.3 Półprodukty / surowce:
Dodanie produktu / surowca 1.1.3 do bazy
Dodanie produktu / surowca 1.1 do bazy
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 1.2
Produkt / surowiec: 1.2 Półprodukty / surowce: 1.2.1, 1.2.2
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 1.2.1
Produkt / surowiec: 1.2.1 Półprodukty / surowce:
Dodanie produktu / surowca 1.2.1 do bazy
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 1.2.2
Produkt / surowiec: 1.2.2 Półprodukty / surowce:
Dodanie produktu / surowca 1.2.2 do bazy
Dodanie produktu / surowca 1.2 do bazy
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 1.3
Produkt / surowiec: 1.3 Półprodukty / surowce: 1.3.1
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 1.3.1
Produkt / surowiec: 1.3.1 Półprodukty / surowce:
Dodanie produktu / surowca 1.3.1 do bazy
Dodanie produktu / surowca 1.3 do bazy
Dodanie produktu / surowca 1 do bazy
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 2
Produkt / surowiec: 2 Półprodukty / surowce: 2.1, 2.2, 2.3
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 2.1
Produkt / surowiec: 2.1 Półprodukty / surowce: 2.1.1, 2.1.2, 2.1.3
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 2.1.1
Produkt / surowiec: 2.1.1 Półprodukty / surowce: 2.1.1.1, 2.1.1.2, 2.1.1.3
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 2.1.1.1
Produkt / surowiec: 2.1.1.1 Półprodukty / surowce:
Dodanie produktu / surowca 2.1.1.1 do bazy
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 2.1.1.2
Produkt / surowiec: 2.1.1.2 Półprodukty / surowce:
Dodanie produktu / surowca 2.1.1.2 do bazy
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 2.1.1.3
Produkt / surowiec: 2.1.1.3 Półprodukty / surowce:
Dodanie produktu / surowca 2.1.1.3 do bazy
Dodanie produktu / surowca 2.1.1 do bazy
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 2.1.2
Produkt / surowiec: 2.1.2 Półprodukty / surowce:
Dodanie produktu / surowca 2.1.2 do bazy
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 2.1.3
Produkt / surowiec: 2.1.3 Półprodukty / surowce:
Dodanie produktu / surowca 2.1.3 do bazy
Dodanie produktu / surowca 2.1 do bazy
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 2.2
Produkt / surowiec: 2.2 Półprodukty / surowce: 2.2.1, 2.2.2
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 2.2.1
Produkt / surowiec: 2.2.1 Półprodukty / surowce:
Dodanie produktu / surowca 2.2.1 do bazy
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 2.2.2
Produkt / surowiec: 2.2.2 Półprodukty / surowce:
Dodanie produktu / surowca 2.2.2 do bazy
Dodanie produktu / surowca 2.2 do bazy
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 2.3
Produkt / surowiec: 2.3 Półprodukty / surowce: 2.3.1
Pobieranie informacji z bazy o półproduktach / surowcach dla produktu: 2.3.1
Produkt / surowiec: 2.3.1 Półprodukty / surowce:
Dodanie produktu / surowca 2.3.1 do bazy
Dodanie produktu / surowca 2.3 do bazy
Dodanie produktu / surowca 2 do bazy