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

388 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Бизнес-единицы (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