Files
my-biz/docs/tech/business-units.md

12 KiB
Raw Permalink Blame History

Бизнес-единицы (Business Units)

Детальное описание типов бизнес-единиц компании.

Обзор

Бизнес-единица — операционная единица компании (магазин, фабрика, склад и т.д.).

📂 Код: backend/src/MyBiz.Core/BusinessUnit.cs


Архитектура

                    ┌─────────────────┐
                    │  BusinessUnit   │
                    │   (базовый)     │
                    └────────┬────────┘
                             │
         ┌───────────────────┼───────────────────┐
         │                   │                   │
         ▼                   ▼                   ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│     Shop        │ │    Factory      │ │   Warehouse     │
│  (магазин)      │ │  (фабрика)      │ │   (склад)       │
└─────────────────┘ └─────────────────┘ └─────────────────┘
         │                   │                   │
         ▼                   ▼
┌─────────────────┐ ┌─────────────────┐
│     Office      │ │  ResearchLab    │
│   (офис)        │ │ (лаборатория)   │
└─────────────────┘ └─────────────────┘

BusinessUnit (базовый класс)

Назначение: Базовый класс для всех бизнес-единиц.

📂 Исходный код: BusinessUnit.cs

Основные свойства

Свойство Тип Описание
Id Guid Уникальный ID единицы
Name string Название
Type BusinessUnitType Тип единицы
CompanyId Guid ID компании-владельца
CityId string ID города
X, Y int Координаты на карте
Level int Уровень развития (1-10)
Employees int Количество сотрудников
MaxEmployees int Макс. количество сотрудников
Efficiency int Эффективность (0-100)
BuildCost decimal Стоимость постройки
UpkeepCost decimal Содержание в тик
LastPeriodIncome decimal Доход за период
LastPeriodExpenses decimal Расходы за период
IsActive bool Работает ли единица
Building Building? Ссылка на здание
Inventory Dictionary<string, int> Запасы
ActiveProduction ActiveProductionChain? Производственная цепочка

Вычисляемые свойства

Свойство Формула
PeriodProfit LastPeriodIncome - LastPeriodExpenses
Profitability (PeriodProfit / LastPeriodExpenses) * 100

Методы

Метод Описание
UpdateEfficiency() Пересчитать эффективность
Tick() Обновить состояние (каждый тик)
HireEmployee() Нанять сотрудника
FireEmployee() Уволить сотрудника
Upgrade() Повысить уровень

Формула эффективности

staffRate = Employees / MaxEmployees
Efficiency = 100 * staffRate + (Level - 1) * 5
Efficiency = Clamp(Efficiency, 0, 100)

Пример:

  • MaxEmployees = 10, Employees = 8 → 80%
  • Level = 3 → +10%
  • Итого: 90%

Shop (магазин)

Назначение: Розничная торговля товарами.

📂 Исходный код: BusinessUnit.cs

Свойства

Свойство Тип Описание
SoldProductTypes List Типы продаваемых продуктов
DailyRevenue decimal Выручка за день
DailyCustomers int Количество клиентов

Вычисляемые

Свойство Формула
AverageCheck DailyRevenue / DailyCustomers

Параметры по умолчанию

Параметр Значение
MaxEmployees 20
BuildCost 50 000
UpkeepCost 1 000

Factory (фабрика)

Назначение: Производство товаров из сырья/компонентов.

📂 Исходный код: BusinessUnit.cs

Свойства

Свойство Тип Описание
OutputProductId string? ID производимого продукта
RequiredInputs Dictionary<string, int> Требуемые ресурсы
LastTickOutput int Произведено за тик

Вычисляемые

Свойство Описание
IsIdle ActiveProduction == null || !ActiveProduction.IsActive

Параметры по умолчанию

Параметр Значение
MaxEmployees 100
BuildCost 200 000
UpkeepCost 5 000

Warehouse (склад)

Назначение: Хранение товаров и сырья.

📂 Исходный код: BusinessUnit.cs

Свойства

Свойство Тип Описание
Capacity int Вместимость (единиц)
UsedCapacity int Использовано места
FreeCapacity int Свободно места

Методы

Метод Описание
AddToInventory(productId, quantity) Добавить товар
RemoveFromInventory(productId, quantity) Взять товар

Параметры по умолчанию

Параметр Значение
MaxEmployees 10
BuildCost 30 000
UpkeepCost 500
Capacity 10 000

Office (офис)

Назначение: Управление компанией, бонусы к эффективности.

📂 Исходный код: BusinessUnit.cs

Свойства

Свойство Тип Описание
ManagementBonus int Бонус к управлению (%)
ManagedBuildings int Количество управляемых зданий

Параметры по умолчанию

Параметр Значение
MaxEmployees 50
BuildCost 100 000
UpkeepCost 3 000
ManagementBonus 5

ResearchLab (научная лаборатория)

Назначение: Исследование новых технологий.

📂 Исходный код: BusinessUnit.cs

Свойства

Свойство Тип Описание
CurrentResearch string? Текущее исследование
ResearchProgress int Прогресс (0-100%)

Вычисляемые

Свойство Формула
SciencePerTick Employees * 10 * Efficiency / 100

Методы

Метод Описание
StartResearch(technologyId) Начать исследование
Tick() Обновление прогресса

Параметры по умолчанию

Параметр Значение
MaxEmployees 30
BuildCost 150 000
UpkeepCost 4 000

Перечисления

BusinessUnitType

Значение Описание
Shop Магазин (розничная торговля)
Factory Фабрика (производство)
Warehouse Склад (хранение)
Office Офис (управление)
ResearchLab Научная лаборатория

📂 Исходный код: BusinessUnit.cs


Примеры использования

Создание магазина

var shop = new Shop
{
    Name = "Центральный магазин",
    CityId = "city_1",
    X = 150,
    Y = 200,
    Employees = 10,
    SoldProductTypes = { "goods_food", "goods_clothing" }
};

shop.HireEmployee();  // +1 сотрудник
shop.UpdateEfficiency();

Создание фабрики с производством

var factory = new Factory
{
    Name = "Текстильная фабрика",
    CityId = "city_1",
    OutputProductId = "comp_fabric",
    RequiredInputs = { ["raw_cotton"] = 50 },
    Employees = 50
};

// Запуск производства
var config = new ProductionChainConfig
{
    Id = "chain_fabric",
    OutputProductId = "comp_fabric",
    OutputQuantity = 40,
    RequiredBuildingId = "textile_factory",
    Steps = new List<ProductionStep>
    {
        new() { InputProductId = "raw_cotton", InputQuantity = 50, ProductionTime = 10 }
    }
};

factory.ActiveProduction = new ActiveProductionChain
{
    Config = config,
    Building = new Building(),
    IsActive = true
};

// Каждый тик:
factory.Tick();

Управление складом

var warehouse = new Warehouse { Capacity = 5000 };

// Добавить товары
warehouse.AddToInventory("raw_cotton", 1000);
warehouse.AddToInventory("raw_steel", 500);

Console.WriteLine($"Заполнено: {warehouse.UsedCapacity}/{warehouse.Capacity}");

// Взять товары
var taken = warehouse.RemoveFromInventory("raw_cotton", 300);
Console.WriteLine($"Взято: {taken}");

Исследование технологий

var lab = new ResearchLab
{
    Employees = 20,
    Efficiency = 100
};

lab.StartResearch("tech_advanced_production");

// Каждый тик:
lab.Tick();

if (lab.ResearchProgress >= 100)
{
    Console.WriteLine("Технология изучена!");
    // Добавить технологию в компанию
}

Тесты

📂 Код: backend/tests/MyBiz.Tests/UserTests.cs

Класс тестов Количество Описание
BusinessUnitTests 10 Базовый класс
ShopTests 3 Магазины
FactoryTests 3 Фабрики
WarehouseTests 6 Склады
ResearchLabTests 4 Лаборатории
CompanyBusinessUnitTests 6 Компания + единицы

Всего: 32 теста


Связанные документы


Последнее обновление: 21.02.2026