Skip to content

exsilet/ProductionDataAnalyticsAPI

Repository files navigation

🏭 Production Data Analytics API

.NET ASP.NET Core PostgreSQL SQL Server Docker Swagger

Веб-API для сбора, хранения и анализа технологических данных на промышленных предприятиях. Система имитирует работу с производственными линиями, датчиками и заказами в реальных условиях.

📋 Оглавление

✨ Особенности

  • Двойная БД стратегия: PostgreSQL для сырых данных + SQL Server для агрегированных отчетов
  • Промышленная аналитика: Расчет OEE (Overall Equipment Effectiveness), выявление аномалий, тренды
  • Масштабируемость: Поддержка миллионов показаний датчиков с оптимизированными индексами
  • Готовность к Production: Docker-контейнеры, миграции, полная документация
  • Гибкая архитектура: Clean Architecture с четким разделением ответственности

🏗️ Архитектура

graph TB
    subgraph "Презентационный слой"
        API[ASP.NET Core 8 Web API]
        SW[Swagger UI]
    end
    
    subgraph "Бизнес-логика"
        App[Application Layer<br/>Сервисы, DTO, Валидация]
    end
    
    subgraph "Инфраструктура"
        Infra[Infrastructure Layer<br/>Репозитории, Контексты БД]
        EF[EF Core + PostgreSQL]
        Dapper[Dapper + SQL Server]
    end
    
    subgraph "Доменная модель"
        Domain[Domain Layer<br/>Сущности, Интерфейсы]
    end
    
    subgraph "Базы данных"
        Postgres[(PostgreSQL<br/>Сырые данные)]
        MSSQL[(SQL Server<br/>Агрегированные данные)]
    end
    
    API --> App
    App --> Domain
    App --> Infra
    Infra --> EF
    Infra --> Dapper
    EF --> Postgres
    Dapper --> MSSQL
    API --> SW
Loading

🛠️ Технологический стек

Компонент Технология Назначение
Backend ASP.NET Core 8 Web API Основной фреймворк
Основная БД PostgreSQL 16 + EF Core Хранение сущностей и сырых данных
Аналитическая БД SQL Server 2022 + Dapper Агрегированные данные и отчеты
Архитектура Clean Architecture / Onion Разделение ответственности
ORM Entity Framework Core 8 Работа с PostgreSQL (Code-First)
Микро-ORM Dapper Высокопроизводительные запросы к SQL Server
Контейнеризация Docker + Docker Compose Развертывание БД
Документация Swagger/OpenAPI 3.0 Документация API
Валидация FluentValidation Валидация DTO
Маппинг AutoMapper Преобразование объектов
Логирование Serilog Структурированное логирование

📁 Структура проекта

ProductionDataAnalyticsAPI/
├── src/
│   ├── ProductionDataAnalyticsAPI.API/
│   │   ├── Controllers/
│   │   ├── Program.cs
│   │   └── appsettings.json
│   ├── ProductionDataAnalyticsAPI.Application/
│   │   ├── Services/
│   │   ├── Interfaces/
│   │   ├── Validators/
│   │   └── Mappings/
│   ├── ProductionDataAnalyticsAPI.Domain/
│   │   ├── Entities/
│   │   ├── Interfaces/
│   │   ├── Enums/
│   │   └── Common/
│   └── ProductionDataAnalyticsAPI.Infrastructure/
│       ├── Data/
│       ├── Repositories/
│       └── Migrations/
├── tests/
├── docker/
│   ├── docker-compose.yml
│   ├── postgres/
│   └── mssql/
├── scripts/
│   └── sql/
├── .gitignore
└── README.md

🚀 Быстрый старт

Предварительные требования

Запуск через Docker Compose

  1. Клонируйте репозиторий:
git clone https://github.com/exsilet/ProductionDataAnalyticsAPI.git
cd ProductionDataAnalyticsAPI
  1. Запустите базы данных:
docker-compose up -d
  1. Примените миграции PostgreSQL:
cd src/ProductionDataAnalyticsAPI.Infrastructure
dotnet ef database update --startup-project ../ProductionDataAnalyticsAPI.API
  1. Примените миграции PostgreSQL:
cd ../ProductionDataAnalyticsAPI.API
dotnet run
  1. Примените миграции PostgreSQL:
http://localhost:5191/swagger

🏭 Production Data Analytics API

📡 API Документация

Основные сущности

Сущность Описание БД
Factory Производственный завод PostgreSQL
ProductionLine Производственная линия PostgreSQL
Sensor Датчик (температура, давление и т.д.) PostgreSQL
SensorReading Показание датчика PostgreSQL
ProductionOrder Производственный заказ SQL Server

Ключевые эндпоинты

Управление активами

  • GET /api/factories - Получить список заводов
  • POST /api/factories - Создать новый завод
  • GET /api/production-lines/{id}/current-status - Текущий статус линии

Сбор данных

  • POST /api/sensor-readings/bulk - Прием пачки показаний (эмуляция промышленного шлюза)
  • GET /api/sensors/{id}/readings - История показаний с пагинацией

Аналитика и отчетность

  • GET /api/analytics/line-performance/{lineId} - Расчет OEE для линии
  • GET /api/reports/daily-production - Сводный отчет за день
  • GET /api/sensorreadings/{sensorId}/aggregated-stats - Агрегированная статистика

Управление заказами (MSSQL)

  • GET /api/productionorders - Все производственные заказы
  • POST /api/productionorders - Создать новый заказ
  • GET /api/productionorders/status/{status} - Заказы по статусу

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

Сценарий 1: Создание производственной цепочки

# 1. Создание завода
curl -X POST "http://localhost:5191/api/factories" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Мини-завод напитков",
    "location": "Москва",
    "code": "BEV001"
  }'

# 2. Создание производственной линии
curl -X POST "http://localhost:5191/api/production-lines" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Линия розлива",
    "code": "BOTTLING-01",
    "factoryId": 1,
    "productType": "Газированные напитки",
    "targetSpeed": 150
  }'

# 3. Создание датчиков
curl -X POST "http://localhost:5191/api/sensors" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Температура печи",
    "code": "TEMP-001",
    "type": 1,
    "unit": "°C",
    "minValue": 0,
    "maxValue": 1000,
    "productionLineId": 1
  }'

Сценарий 2: Аналитика и отчеты

# Расчет OEE (Overall Equipment Effectiveness)
curl "http://localhost:5191/api/analytics/line-performance/1?date=2026-01-26"

# Сводный отчет за день
curl "http://localhost:5191/api/reports/daily-production?date=2026-01-26"

# Статистика по датчику
curl "http://localhost:5191/api/sensorreadings/1/aggregated-stats?startDate=2026-01-26T00:00:00&endDate=2026-01-26T23:59:59"

Сценарий 3: Работа с заказами (MSSQL)

# Создание производственного заказа
curl -X POST "http://localhost:5191/api/productionorders" \
  -H "Content-Type: application/json" \
  -d '{
    "orderNumber": "ORD-2026-001",
    "productName": "Кола 0.5л",
    "targetQuantity": 10000,
    "productionLineId": 1,
    "factoryId": 1
  }'

# Получение заказов по статусу
curl "http://localhost:5191/api/productionorders/status/Pending"

🐳 Развертывание

Docker Compose (полное развертывание)

Создайте файл docker-compose.yml:

version: '3.8'

services:
  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: ProductionData
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - production-network

  mssql:
    image: mcr.microsoft.com/mssql/server:2022-latest
    environment:
      ACCEPT_EULA: "Y"
      SA_PASSWORD: ${MSSQL_PASSWORD}
      MSSQL_PID: "Developer"
    volumes:
      - mssql_data:/var/opt/mssql
    networks:
      - production-network

  api:
    build: .
    ports:
      - "8080:8080"
    environment:
      ConnectionStrings__PostgreSQL: "Host=postgres;Port=5432;Database=ProductionData;Username=${DB_USER};Password=${DB_PASSWORD}"
      ConnectionStrings__MSSQLConnection: "Server=mssql,1433;Database=ProductionAnalytics;User Id=sa;Password=${MSSQL_PASSWORD};TrustServerCertificate=true"
    depends_on:
      - postgres
      - mssql
    networks:
      - production-network

networks:
  production-network:
    driver: bridge

volumes:
  postgres_data:
  mssql_data:

🔧 Разработка

Настройка среды разработки

  1. Восстановите зависимости:
dotnet restore
  1. Создайте миграции:
cd src/ProductionDataAnalyticsAPI.Infrastructure
dotnet ef migrations add InitialCreate --startup-project ../ProductionDataAnalyticsAPI.API --output-dir Migrations
  1. Запустите тесты::
dotnet test

Принципы разработки

  • Clean Architecture: Строгое разделение слоев
  • Dependency Injection: Внедрение зависимостей через конструкторы
  • Асинхронное программирование: Все эндпоинты используют async/await
  • Валидация: FluentValidation для входных данных
  • Маппинг: AutoMapper для преобразования DTO ↔ Entity

Тестирование

# Запуск всех тестов
dotnet test

# Запуск специфичных тестов
dotnet test --filter "Category=Unit"
dotnet test --filter "Category=Integration"

📄 Лицензия

Этот проект распространяется под лицензией MIT.

About

Web API для сбора и анализа технологических данных на промышленных предприятиях. ASP.NET Core 8, PostgreSQL, MSSQL, EF Core, Dapper.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors