3namespace Sale\Handlers\Delivery\YandexTaxi\EventJournal;
6use Bitrix\Sale\Delivery\Services\Manager;
7use Bitrix\Sale\Delivery\Services\Table;
8use Bitrix\Sale\Delivery\Requests\RequestTable;
9use Sale\Handlers\Delivery\YandexTaxi\Api\Api;
10use Sale\Handlers\Delivery\YandexTaxi\Api\ApiResult\Journal\Event;
17final class EventReader
26 public function __construct(Api $api)
36 public function read(
int $deliveryServiceId, $prevCursor): EventCollectionResult
38 $result =
new EventCollectionResult();
45 if (!is_null($cursor))
47 $prevCursor = $cursor;
50 $getJournalRecordsResult = $this->api->getJournalRecords($prevCursor);
51 if (!$getJournalRecordsResult->isSuccess())
53 return $result->addError(
new Error(
'get_journal_records'));
56 $cursor = $getJournalRecordsResult->getCursor();
57 $events = $getJournalRecordsResult->getEvents();
59 foreach ($events as
$event)
63 }
while ($prevCursor != $cursor);
65 if (!is_null($cursor))
67 $this->updateCursor($deliveryServiceId, $cursor);
70 $filteredEvents = $this->filterEvents($deliveryServiceId, $resultEvents);
71 foreach ($filteredEvents as
$event)
84 private function filterEvents(
int $deliveryServiceId,
array $events):
array
86 $deliveryServiceIds = array_column(
90 'filter' => [
'PARENT_ID' => $deliveryServiceId]
95 $deliveryServiceIds[] = $deliveryServiceId;
97 $claimIds = array_column(
98 RequestTable::getList(
101 '=DELIVERY_ID' => $deliveryServiceIds,
102 '=EXTERNAL_ID' => array_map(
105 return $event->getClaimId();
117 function (
$event) use ($claimIds)
119 return in_array(
$event->getClaimId(), $claimIds,
true);
128 private function updateCursor(
int $deliveryServiceId,
string $cursor): void
133 '=ID' => $deliveryServiceId
139 $config[
'MAIN'][
'CURSOR'] = $cursor;
static getList(array $parameters=[])
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)