| Numéro du ticket | Titre du ticket | |------------------|-----------------| | #203 | Réceptions — Parcours de pesée multi-étapes | ## Description de la PR [#203] Réceptions — Parcours de pesée multi-étapes ## Modification du .env ## Check list - [x] Pas de régression - [x] TU/TI/TF rédigée - [x] TU/TI/TF OK - [x] CHANGELOG modifié Reviewed-on: #3 Reviewed-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr> Co-authored-by: AUTIN Tristan <tristan@yuno.malio.fr> Co-committed-by: AUTIN Tristan <tristan@yuno.malio.fr>
52 lines
1.8 KiB
PHP
52 lines
1.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Service;
|
|
|
|
use App\Dto\PontBasculeReading;
|
|
use App\Exception\PontBasculeException;
|
|
use DateTimeImmutable;
|
|
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
|
|
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
|
|
|
final class PontBasculeService
|
|
{
|
|
public function __construct(
|
|
private readonly HttpClientInterface $httpClient,
|
|
private readonly PontBasculePayloadDecoder $payloadDecoder,
|
|
private readonly string $endpoint,
|
|
private readonly bool $bypass,
|
|
) {}
|
|
|
|
/**
|
|
* @TODO Voir pour que le pont-bascule retourne la date
|
|
*/
|
|
public function fetch(): PontBasculeReading
|
|
{
|
|
if ($this->bypass) {
|
|
$body = $this->getBypassPayload();
|
|
} else {
|
|
try {
|
|
$response = $this->httpClient->request('POST', $this->endpoint);
|
|
$body = $response->getContent(false);
|
|
} catch (TransportExceptionInterface $exception) {
|
|
throw PontBasculeException::transportFailure($exception->getMessage());
|
|
}
|
|
}
|
|
|
|
$reading = $this->payloadDecoder->decode($body);
|
|
|
|
return new PontBasculeReading(
|
|
$reading->getDsd(),
|
|
$reading->getWeight(),
|
|
new DateTimeImmutable(),
|
|
);
|
|
}
|
|
|
|
private function getBypassPayload(): string
|
|
{
|
|
return '{"ok":true,"busy":false,"mode":"serial","port":"/dev/ttyUSB0","baudrate":9600,"request_hex":"01 10 39 39 4D 0D 0A","response_hex":"01 02 30 34 30 32 30 30 02 30 31 30 30 31 34 32 30 2E 6B 67 20 02 30 32 30 30 30 30 30 30 2E 6B 67 20 02 30 33 30 30 31 34 32 30 2E 6B 67 20 02 39 39 30 30 31 32 31 0D 0A","response_ascii":"\u0001\u0002040200\u000201001420.kg \u000202000000.kg \u000203001420.kg \u00029900121"}';
|
|
}
|
|
}
|