1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
eventswithentityattendeesfind.php
См. документацию.
1<?php
2
3namespace Bitrix\Calendar\Core\Queue\Processor;
4
5use Bitrix\Calendar\Core\Queue\Interfaces;
6use Bitrix\Calendar\Internals\EventTable;
7use Bitrix\Calendar\Watcher\Membership\Handler\Handler;
8use Bitrix\Main\Application;
9
11{
12 const CONVERT_DATA = [
16 ];
17
22 public function process(Interfaces\Message $message): string
23 {
24 $data = $message->getBody();
25
26 if (empty($data['entityType']))
27 {
28 return self::REJECT;
29 }
30
31 $attendeeCode = $this->convertEntityToAttendeeCode($data['entityType'], (int)($data['entityId'] ?? null));
32
33 $helper = Application::getConnection()->getSqlHelper();
34
35 $events = EventTable::getList([
36 'select' => ['ID'],
37 'filter' => \Bitrix\Main\ORM\Query\Query::filter()
38 ->where('DELETED', 'N')
39 ->whereExpr($helper->getRegexpOperator('%s', "'{$attendeeCode}" . "(_|$|,)'"), ['ATTENDEES_CODES'])
40 ->whereColumn('ID', 'PARENT_ID')
41 //do subtract to make sampling more accurate
42 ->where('DATE_TO_TS_UTC', '>=', time() - \CCalendar::GetDayLen())
43 ,
44 'order' => [
45 'ID' => 'ASC',
46 ],
47 ])->fetchAll();
48
49 if (count($events) === 1)
50 {
51 $this->sendMessageToQueue($events[0]['ID']);
52 }
53 else
54 {
55 $this->sendBatchOfMessagesToQueue($events);
56 }
57
58 return self::ACK;
59 }
60
66 protected function convertEntityToAttendeeCode(string $entityType, int $entityId = null): string
67 {
68 $attendeeCodeType = self::CONVERT_DATA[$entityType] ?? null;
69
70 return $attendeeCodeType ? $attendeeCodeType . ($entityId ?: '') : '';
71 }
72
77 protected function sendMessageToQueue(int $eventId): void
78 {
79 $message = (new \Bitrix\Calendar\Core\Queue\Message\Message())
80 ->setBody([
81 'eventId' => $eventId,
82 ])
83 ->setRoutingKey('calendar:update_event_attendees');
84
85 (new \Bitrix\Calendar\Core\Queue\Producer\Producer())->send($message);
86 }
87
92 protected function sendBatchOfMessagesToQueue(array $events): void
93 {
94 $messages = [];
95
96 foreach ($events as $event)
97 {
98 if (!empty($event['ID']))
99 {
100 $messages[] = (new \Bitrix\Calendar\Core\Queue\Message\Message())
101 ->setBody([
102 'eventId' => $event['ID'],
103 ])
104 ->setRoutingKey('calendar:update_event_attendees')
105 ;
106 }
107 }
108
109 (new \Bitrix\Calendar\Core\Queue\Producer\Producer())->sendBatch($messages);
110 }
111}
convertEntityToAttendeeCode(string $entityType, int $entityId=null)
$data['IS_AVAILABLE']
Определения .description.php:13
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
Определения chain.php:3
$entityId
Определения payment.php:4
$message
Определения payment.php:8
$event
Определения prolog_after.php:141
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$messages
Определения template.php:8