PHPackages                             bugviktor90/delivery-calculator - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. bugviktor90/delivery-calculator

ActiveLibrary

bugviktor90/delivery-calculator
===============================

Delivery calculator

v1.0.0(5y ago)010PHPPHP &gt;=8.0

Since Feb 23Pushed 5y ago1 watchersCompare

[ Source](https://github.com/bugviktor90/deliveryCalculator)[ Packagist](https://packagist.org/packages/bugviktor90/delivery-calculator)[ RSS](/packages/bugviktor90-delivery-calculator/feed)WikiDiscussions master Synced today

READMEChangelog (1)Dependencies (1)Versions (2)Used By (0)

Калькулятор доставки
====================

[](#калькулятор-доставки)

Задача
------

[](#задача)

Требуется спроектировать модуль расчета доставки для интернет магазина. Модуль должен предоставлять возможность получить информацию о доставке двумя способами:

- одной конкретной службой
- всеми доступными службами

### Исходные данные

[](#исходные-данные)

На момент постановки задачи планируется интеграция с двумя внешними службами доставки.

#### Служба А

[](#служба-а)

API службы доставки принимает на вход следующие параметры:

- адрес отправителя
- адрес получателя
- список элементов (для каждого вес, ШхГхВ)

Возвращает:

- стоимость доставки
- количество дней начиная с сегодняшнего

#### Служба B

[](#служба-b)

API службы доставки принимает на вход следующие параметры:

- адрес отправителя
- адрес получателя
- список элементов (для каждого вес, ШхГхВ, кол-во)

Возвращает:

- коэффициент стоимости. В отличии от Службы А, служба Б имеет Базовую стомость доставки, например 150 руб, и конечная цена доставки рассчитывается как произведение базовой стоимости на коэффициент.
- дата доставки

### Результат

[](#результат)

Результатом выполнения тестового задания должна быть структура классов и интерфейсов, из которой будет понятно следующее:

- как использовать модуль из клиентского кода
- за какую задачу отвечает каждый из элементов модуля
- как элементы модуля взаимосвязаны между собой

Установка
---------

[](#установка)

```
composer require bugviktor90/delivery-calculator

```

Использование готового модуля
-----------------------------

[](#использование-готового-модуля)

### Создание запроса

[](#создание-запроса)

```
$request = new Request(
    'г. Москва, ул. 1905 года, 1',              //адрес отправителя
    'г. Новосибирск, ул. Ленина, 1',            //адрес получателя
    [
        new RequestItem(100, 200, 300, 5.5, 5), //позиция 1. Ширина 100мм, Длина 200мм, Высота 300мм, Вес 5.5кг, 5 штук
        new RequestItem(1000, 500, 400, 20)     //позиция 2. Ширина 1000мм, Длина 500мм, Высота 400мм, Вес 20кг, 1 штука
    ]
);
```

### Настройка калькулятора

[](#настройка-калькулятора)

#### Вариант 1

[](#вариант-1)

```
//создаем калькулятор
$deliveryCalculator = new Calculator();
//добавляем нужные провайдеры по мере необходимости
$deliveryCalculator->addProvider(new AProvider());
//провайдер может принимать нужные настройки
$deliveryCalculator->addProvider(new BProvider(['url' => 'http://someurl.com/api']));
```

#### Вариант 2

[](#вариант-2)

```
//создаем провайдер A
$aProvider = new AProvider([
    'url' => 'http://someurl.com/api',
    'accessKey' => 'someAccessKey',
    'clientId' => 'someClientId'
]);

//создаем провайдер B
$bProvider = new BProvider(['url' => 'http://anotherurl/api/delivery']);
//создаем калькулятор и сразу устанавливаем нужные провайдеры
$deliveryCalculator = new Calculator([$aProvider, $bProvider]);

//решили добавить еще один провайдер
$localProvider = new LocalProvider(['volumeRate' => 3000, 'weightRate' => 10]);
$deliveryCalculator->addProvider($localProvider);

//и удалить ненужный
$deliveryCalculator->removeProvider($bProvider);
```

### Получение результата

[](#получение-результата)

```
//получить результат для всех установленных провайдеров
$result = $deliveryCalculator->calculateAll($request);

//получить результат для конкретного провайдера
$result = $deliveryCalculator->calculate($request, $aProvider);
```

### Обработка результата

[](#обработка-результата)

Результатом работы является объект класса DeliveryCalculator\\Result\\Result

```
//пример возвращаемого объекта, при работе с двумя провайдерами
DeliveryCalculator\Result\Result Object
(
    [items:protected] => Array
        (
            [DeliveryCalculator\Providers\AProvider] => DeliveryCalculator\Result\ResultItem Object
                (
                    [cost:protected] => 850
                    [date:protected] => DateTime Object
                        (
                            [date] => 2021-03-05 08:23:56.283472
                            [timezone_type] => 3
                            [timezone] => UTC
                        )

                )

            [DeliveryCalculator\Providers\BProvider] => DeliveryCalculator\Result\ResultItem Object
                (
                    [cost:protected] => 1400
                    [date:protected] => DateTime Object
                        (
                            [date] => 2021-03-10 00:00:00.000000
                            [timezone_type] => 3
                            [timezone] => UTC
                        )

                )
        )
)

//получение минимальной стоимости доставки
$result->getMinCost();

//получение минимальной даты доставки
$result->getMinDate();
```

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

[](#основные-сущности)

- DeliveryCalculator\\Calculator - Калькулятор доставки
- DeliveryCalculator\\Request\\Request - Запроса на расчет доставки
- DeliveryCalculator\\Request\\Item - Позиция в запросе на расчет доставки
- DeliveryCalculator\\Providers\\Provider - Провайдер для работы со службой доставки
- DeliveryCalculator\\Providers\\Converters\\Converter - Конвертер, преобразующий данные полученные от провайдера
- DeliveryCalculator\\Result\\Result - Результат работы калькулятора доставки
- DeliveryCalculator\\Result\\ResultItem - Результат работы калькулятора по конкретному провайдера

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity5

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity57

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

1901d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/26df45d2e27a49c3b684a99d6aa7df1b4cd3c6a0bd30bf891ab174ef256fddc2?d=identicon)[bugviktor90](/maintainers/bugviktor90)

---

Top Contributors

[![bugviktor90](https://avatars.githubusercontent.com/u/7287181?v=4)](https://github.com/bugviktor90 "bugviktor90 (4 commits)")

### Embed Badge

![Health badge](/badges/bugviktor90-delivery-calculator/health.svg)

```
[![Health](https://phpackages.com/badges/bugviktor90-delivery-calculator/health.svg)](https://phpackages.com/packages/bugviktor90-delivery-calculator)
```

###  Alternatives

[neuron-core/neuron-ai

The PHP Agentic Framework.

1.8k245.3k20](/packages/neuron-core-neuron-ai)[tencentcloud/tencentcloud-sdk-php

TencentCloudApi php sdk

3731.2M42](/packages/tencentcloud-tencentcloud-sdk-php)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

255.2k](/packages/aedart-athenaeum)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
