bugviktor90 / delivery-calculator
该软件包最新版本(v1.0.0)没有提供许可证信息。
配送计算器
v1.0.0
2021-02-23 09:24 UTC
Requires
- php: >=8.0
- guzzlehttp/guzzle: ^7.0
This package is not auto-updated.
Last update: 2024-10-03 01:20:42 UTC
README
任务
需要设计一个在线商店的配送计算模块。该模块应提供两种方式获取配送信息:
- 使用一个特定的配送服务
- 使用所有可用的配送服务
原始数据
在设定任务时,计划与两个外部配送服务进行集成。
服务A
配送服务API接收以下参数作为输入:
- 寄件人地址
- 收件人地址
- 元素列表(对于每个元素:重量,长x宽x高)
返回:
- 配送成本
- 从今天开始的天数
服务B
配送服务API接收以下参数作为输入:
- 寄件人地址
- 收件人地址
- 元素列表(对于每个元素:重量,长x宽x高,数量)
返回:
- 成本系数。与服务A不同,服务B有一个基础配送成本,例如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
//создаем калькулятор $deliveryCalculator = new Calculator(); //добавляем нужные провайдеры по мере необходимости $deliveryCalculator->addProvider(new AProvider()); //провайдер может принимать нужные настройки $deliveryCalculator->addProvider(new BProvider(['url' => 'http://someurl.com/api']));
选项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 - 特定提供商的配送计算结果