# Производство (Production) Система производственных цепочек и процессов. ## Обзор Производство преобразует сырьё и компоненты в готовые товары через цепочки операций. 📂 **Код:** [`backend/src/MyBiz.Core/ProductionChain.cs`](../../backend/src/MyBiz.Core/ProductionChain.cs) --- ## Архитектура ``` ┌────────────────────────┐ ┌────────────────────────┐ │ ProductionChainConfig │ │ ActiveProductionChain │ │ (конфигурация) │ ──────► │ (активный процесс) │ │ - OutputProductId │ Config │ - CurrentStep │ │ - RequiredBuildingId │ │ - Progress │ │ - Steps[] │ │ - IsActive │ └────────────────────────┘ └────────────────────────┘ │ ▼ ┌────────────────────────┐ │ Building │ │ (где происходит) │ └────────────────────────┘ ``` --- ## ProductionStep **Назначение:** Один шаг производственного процесса. 📂 **Исходный код:** [`ProductionChain.cs`](../../backend/src/MyBiz.Core/ProductionChain.cs#L5-L22) ### Свойства | Свойство | Тип | Описание | |----------|-----|----------| | `InputProductId` | string | ID требуемого продукта | | `InputQuantity` | int | Количество | | `ProductionTime` | int | Время выполнения в тиках | --- ## ProductionChainConfig **Назначение:** Конфигурация производственной цепочки (рецепт). 📂 **Исходный код:** [`ProductionChain.cs`](../../backend/src/MyBiz.Core/ProductionChain.cs#L25-L68) ### Свойства | Свойство | Тип | Описание | |----------|-----|----------| | `Id` | string | Уникальный идентификатор | | `Name` | string | Название цепочки | | `OutputProductId` | string | ID выходного продукта | | `OutputQuantity` | int | Количество выходного продукта | | `RequiredBuildingId` | string | ID требуемого здания | | `Steps` | List | Шаги производства | | `RequiredTechnologies` | List | Требуемые технологии | | `AvailableFromYear` | int | Год доступности | --- ## ActiveProductionChain **Назначение:** Активный процесс производства на здании. 📂 **Исходный код:** [`ProductionChain.cs`](../../backend/src/MyBiz.Core/ProductionChain.cs#L73-L125) ### Свойства | Свойство | Тип | Описание | |----------|-----|----------| | `Config` | ProductionChainConfig | Конфигурация | | `Building` | Building | Здание, где происходит | | `CurrentStep` | int | Текущий шаг (0-based) | | `Progress` | int | Прогресс текущего шага (в тиках) | | `IsActive` | bool | Процесс активен | | `StartedAtTick` | int | Тик запуска | ### Вычисляемые свойства - `IsStepComplete` — завершён ли текущий шаг - `IsComplete` — завершено ли всё производство ### Методы | Метод | Описание | |-------|----------| | `Tick()` | Продвинуть производство на 1 тик | --- ## Примеры производственных цепочек ### 🍞 Продукты питания ``` Сельхозпродукция (100) → [Пищекомбинат] → Продукты питания (80) Время: 5 тиков ``` ### 👕 Одежда ``` Шаг 1: Хлопок (50) → [Текстильная фабрика] → Ткань (40) Время: 10 тиков Шаг 2: Ткань (40) → [Швейная фабрика] → Одежда (30) Время: 8 тиков ``` ### 📱 Электроника ``` Шаг 1: Пластик (30) + Сталь (20) → [Завод компонентов] → Электронные компоненты (25) Время: 15 тиков Шаг 2: Электронные компоненты (25) + Пластик (15) → [Завод электроники] → Электроника (20) Время: 20 тиков ``` ### 🚗 Автомобили ``` Шаг 1: Сталь (100) → [Сталелитейный завод] → Металлоизделия (80) Время: 20 тиков Шаг 2: Металлоизделия (80) + Пластик (40) → [Автозавод] → Автомобили (5) Время: 50 тиков ``` --- ## Примеры использования ### Создание конфигурации цепочки ```csharp var breadChain = new ProductionChainConfig { Id = "chain_bread", Name = "Производство хлеба", OutputProductId = "goods_food", OutputQuantity = 80, RequiredBuildingId = "food_factory", Steps = new List { new ProductionStep { InputProductId = "raw_food", InputQuantity = 100, ProductionTime = 5 } }, AvailableFromYear = 1900 }; ``` ### Запуск производства ```csharp var factory = new Building { TypeConfig = foodFactoryConfig, Workers = 50 }; var production = new ActiveProductionChain { Config = breadChain, Building = factory, IsActive = true, StartedAtTick = 0 }; // Каждый тик: production.Tick(); if (production.IsComplete) { // Производство завершено, забрать продукт var output = production.Config.OutputProductId; var quantity = production.Config.OutputQuantity; } ``` ### Отслеживание прогресса ```csharp if (production.IsStepComplete) { // Шаг завершён, можно забирать промежуточный продукт var step = production.Config.Steps[production.CurrentStep]; // ... } Console.WriteLine( $"Прогресс: {production.CurrentStep + 1}/{production.Config.Steps.Count} " + $"({production.Progress}/{production.Config.Steps[production.CurrentStep].ProductionTime} тиков)" ); ``` --- ## Связанные документы - [Продукты](products.md) — входные и выходные продукты - [Здания](buildings.md) — где происходит производство - [Ядро](core.md) — базовые классы --- **Последнее обновление:** 20.02.2026