388 lines
12 KiB
Markdown
388 lines
12 KiB
Markdown
# Бизнес-единицы (Business Units)
|
||
|
||
Детальное описание типов бизнес-единиц компании.
|
||
|
||
## Обзор
|
||
|
||
Бизнес-единица — операционная единица компании (магазин, фабрика, склад и т.д.).
|
||
|
||
📂 **Код:** [`backend/src/MyBiz.Core/BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs)
|
||
|
||
---
|
||
|
||
## Архитектура
|
||
|
||
```
|
||
┌─────────────────┐
|
||
│ BusinessUnit │
|
||
│ (базовый) │
|
||
└────────┬────────┘
|
||
│
|
||
┌───────────────────┼───────────────────┐
|
||
│ │ │
|
||
▼ ▼ ▼
|
||
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||
│ Shop │ │ Factory │ │ Warehouse │
|
||
│ (магазин) │ │ (фабрика) │ │ (склад) │
|
||
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
||
│ │ │
|
||
▼ ▼
|
||
┌─────────────────┐ ┌─────────────────┐
|
||
│ Office │ │ ResearchLab │
|
||
│ (офис) │ │ (лаборатория) │
|
||
└─────────────────┘ └─────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## BusinessUnit (базовый класс)
|
||
|
||
**Назначение:** Базовый класс для всех бизнес-единиц.
|
||
|
||
📂 **Исходный код:** [`BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L33-L180)
|
||
|
||
### Основные свойства
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `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`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L185-L210)
|
||
|
||
### Свойства
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `SoldProductTypes` | List<string> | Типы продаваемых продуктов |
|
||
| `DailyRevenue` | decimal | Выручка за день |
|
||
| `DailyCustomers` | int | Количество клиентов |
|
||
|
||
### Вычисляемые
|
||
|
||
| Свойство | Формула |
|
||
|----------|---------|
|
||
| `AverageCheck` | `DailyRevenue / DailyCustomers` |
|
||
|
||
### Параметры по умолчанию
|
||
|
||
| Параметр | Значение |
|
||
|----------|----------|
|
||
| `MaxEmployees` | 20 |
|
||
| `BuildCost` | 50 000 |
|
||
| `UpkeepCost` | 1 000 |
|
||
|
||
---
|
||
|
||
## Factory (фабрика)
|
||
|
||
**Назначение:** Производство товаров из сырья/компонентов.
|
||
|
||
📂 **Исходный код:** [`BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L215-L240)
|
||
|
||
### Свойства
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `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`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L245-L295)
|
||
|
||
### Свойства
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `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`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L300-L325)
|
||
|
||
### Свойства
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `ManagementBonus` | int | Бонус к управлению (%) |
|
||
| `ManagedBuildings` | int | Количество управляемых зданий |
|
||
|
||
### Параметры по умолчанию
|
||
|
||
| Параметр | Значение |
|
||
|----------|----------|
|
||
| `MaxEmployees` | 50 |
|
||
| `BuildCost` | 100 000 |
|
||
| `UpkeepCost` | 3 000 |
|
||
| `ManagementBonus` | 5 |
|
||
|
||
---
|
||
|
||
## ResearchLab (научная лаборатория)
|
||
|
||
**Назначение:** Исследование новых технологий.
|
||
|
||
📂 **Исходный код:** [`BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L330-L375)
|
||
|
||
### Свойства
|
||
|
||
| Свойство | Тип | Описание |
|
||
|----------|-----|----------|
|
||
| `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`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L5-L22)
|
||
|
||
---
|
||
|
||
## Примеры использования
|
||
|
||
### Создание магазина
|
||
|
||
```csharp
|
||
var shop = new Shop
|
||
{
|
||
Name = "Центральный магазин",
|
||
CityId = "city_1",
|
||
X = 150,
|
||
Y = 200,
|
||
Employees = 10,
|
||
SoldProductTypes = { "goods_food", "goods_clothing" }
|
||
};
|
||
|
||
shop.HireEmployee(); // +1 сотрудник
|
||
shop.UpdateEfficiency();
|
||
```
|
||
|
||
### Создание фабрики с производством
|
||
|
||
```csharp
|
||
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();
|
||
```
|
||
|
||
### Управление складом
|
||
|
||
```csharp
|
||
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}");
|
||
```
|
||
|
||
### Исследование технологий
|
||
|
||
```csharp
|
||
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`](../../backend/tests/MyBiz.Tests/UserTests.cs)
|
||
|
||
| Класс тестов | Количество | Описание |
|
||
|--------------|------------|----------|
|
||
| `BusinessUnitTests` | 10 | Базовый класс |
|
||
| `ShopTests` | 3 | Магазины |
|
||
| `FactoryTests` | 3 | Фабрики |
|
||
| `WarehouseTests` | 6 | Склады |
|
||
| `ResearchLabTests` | 4 | Лаборатории |
|
||
| `CompanyBusinessUnitTests` | 6 | Компания + единицы |
|
||
|
||
**Всего:** 32 теста
|
||
|
||
---
|
||
|
||
## Связанные документы
|
||
|
||
- [Ядро](core.md) — базовые классы
|
||
- [Управление пользователем](user-management.md) — User, Company
|
||
- [Производство](production.md) — цепочки производства
|
||
- [Здания](buildings.md) — типы зданий
|
||
|
||
---
|
||
|
||
**Последнее обновление:** 21.02.2026
|