12 KiB
Бизнес-единицы (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 теста
Связанные документы
- Ядро — базовые классы
- Управление пользователем — User, Company
- Производство — цепочки производства
- Здания — типы зданий
Последнее обновление: 21.02.2026