1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
eventreader.php
См. документацию.
1<?php
2
3namespace Sale\Handlers\Delivery\YandexTaxi\EventJournal;
4
5use Bitrix\Main\Error;
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;
11
17final class EventReader
18{
20 protected $api;
21
26 public function __construct(Api $api)
27 {
28 $this->api = $api;
29 }
30
36 public function read(int $deliveryServiceId, $prevCursor): EventCollectionResult
37 {
38 $result = new EventCollectionResult();
39 $resultEvents = [];
40
41 $cursor = null;
42
43 do
44 {
45 if (!is_null($cursor))
46 {
47 $prevCursor = $cursor;
48 }
49
50 $getJournalRecordsResult = $this->api->getJournalRecords($prevCursor);
51 if (!$getJournalRecordsResult->isSuccess())
52 {
53 return $result->addError(new Error('get_journal_records'));
54 }
55
56 $cursor = $getJournalRecordsResult->getCursor();
57 $events = $getJournalRecordsResult->getEvents();
58
59 foreach ($events as $event)
60 {
61 $resultEvents[] = $event;
62 }
63 } while ($prevCursor != $cursor);
64
65 if (!is_null($cursor))
66 {
67 $this->updateCursor($deliveryServiceId, $cursor);
68 }
69
70 $filteredEvents = $this->filterEvents($deliveryServiceId, $resultEvents);
71 foreach ($filteredEvents as $event)
72 {
73 $result->addEvent($event);
74 }
75
76 return $result;
77 }
78
84 private function filterEvents(int $deliveryServiceId, array $events): array
85 {
86 $deliveryServiceIds = array_column(
88 [
89 'select' => ['ID'],
90 'filter' => ['PARENT_ID' => $deliveryServiceId]
91 ]
92 )->fetchAll(),
93 'ID'
94 );
95 $deliveryServiceIds[] = $deliveryServiceId;
96
97 $claimIds = array_column(
98 RequestTable::getList(
99 [
100 'filter' => [
101 '=DELIVERY_ID' => $deliveryServiceIds,
102 '=EXTERNAL_ID' => array_map(
103 function ($event)
104 {
105 return $event->getClaimId();
106 },
107 $events
108 ),
109 ],
110 ]
111 )->fetchAll(),
112 'EXTERNAL_ID'
113 );
114
115 return array_filter(
116 $events,
117 function ($event) use ($claimIds)
118 {
119 return in_array($event->getClaimId(), $claimIds, true);
120 }
121 );
122 }
123
128 private function updateCursor(int $deliveryServiceId, string $cursor): void
129 {
130 $service = Table::getList(
131 [
132 'filter' => [
133 '=ID' => $deliveryServiceId
134 ]
135 ]
136 )->fetch();
137
138 $config = $service['CONFIG'];
139 $config['MAIN']['CURSOR'] = $cursor;
140
141 Manager::update($service['ID'], ['CONFIG' => $config]);
142 }
143}
static getList(array $parameters=[])
Определения manager.php:135
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
trait Error
Определения error.php:11
$service
Определения payment.php:18
$event
Определения prolog_after.php:141
$config
Определения quickway.php:69