119 lines
9.0 KiB
Plaintext
119 lines
9.0 KiB
Plaintext
@startuml
|
||
title Проверка лимитов заказа
|
||
autonumber
|
||
actor User
|
||
participant ARM as ARM
|
||
participant Gateway as Gateway
|
||
participant Workflow as Workflow
|
||
participant Temporal as Temporal
|
||
|
||
User -> ARM: Нажатие кнопки "Оформить заказ"
|
||
ARM -> Gateway: Отправляет запрос на /orders/{orderID}/validate
|
||
Gateway -> Temporal: Отправка данных на\nоформление заказа и его проверку
|
||
Temporal --> Workflow: Получение сообщения
|
||
Workflow -> Workflow: Проверка лимитов ПВЗ и размеров товаров
|
||
Workflow -> Workflow: Завершает выполнение workflow
|
||
Workflow -> Temporal: Отдает результат проверки в Temporal.
|
||
Gateway --> Temporal: Слушает temporal и получает результат проверки
|
||
Gateway --> ARM: Ответ в виде кодов ответа с /orders/{orderID}/validate
|
||
|
||
alt Проверки пройдены
|
||
ARM -> ARM: Проверки пройдены успешно
|
||
ARM -> Gateway: Вызывает метод bf orders/{orderID}/ordering оформления заказа\nи отправляет идентификатор orderId для оформления заказа в Gateway
|
||
else Проверки не пройдены
|
||
ARM -> User: Показывает Пользователю модальное\nокно с лимитами ПВЗ и выбором\nдальнейших действий - продолжить\nоформление или отменить.
|
||
alt Отмена оформления
|
||
User -> ARM: Нажимает кнопку "Отменить оформление"
|
||
ARM -> ARM: Закрывает модальное окно и ждет следующего действия от менеджера (Конец процесса)
|
||
else Продолжение оформления
|
||
User -> ARM: Нажимает кнопку "Продолжить оформление"
|
||
ARM -> Gateway: Вызывает метод bf orders/{orderID}/ordering оформления заказа\nи отправляет идентификатор orderId для оформления заказа в Gateway
|
||
end
|
||
end
|
||
note across: Продолжение описания алгоритма начинается с Workflow оформления заказа
|
||
@enduml
|
||
|
||
|
||
@startuml
|
||
title Оформление заказа
|
||
autonumber
|
||
participant User
|
||
participant ARM
|
||
participant Gateway
|
||
participant Temporal
|
||
participant Workflow
|
||
queue Kafka
|
||
participant Wtis
|
||
participant Order
|
||
|
||
ARM -> Gateway: Вызов метода bf orders/{orderID}/ordering
|
||
ARM -> User: Блокирует заказ на изменение\nи выводит оповещения: "Оформление заказа",
|
||
Gateway -> Temporal: Отправляет данные\nна оформление заказа
|
||
Workflow --> Temporal: Получает сообщения о заказе
|
||
Workflow -> Workflow: Создает WorkflowOrdering
|
||
Workflow -> Temporal: Отправляет workflowID и runID
|
||
Temporal -> Gateway: Получает workflowID и runID
|
||
Gateway -> ARM: Отправка workflowID и runID\nв ответ на метод bf orders/{orderID}/ordering
|
||
ARM -> ARM: Сохранение workflowID и runID в куки на 5 минут
|
||
loop Раз в 5 секунд
|
||
ARM -> Gateway: Периодическая проверка состояния workflow\nзапросом на orders/{orderID}/workflow/{workflowID}
|
||
Gateway -> Temporal: Отправляет запрос на\nпроверку состояния workflow
|
||
Workflow -> Temporal: Слушает и получает запрос\nна состояние workflow
|
||
Workflow -> Temporal: Уточнение состояния workflow\n(в работе или завершен успешно\nили завершен с ошибкой)\n WorkflowOrdering
|
||
Gateway -> Temporal: Слушает и получает состояния\nworkflow
|
||
Gateway -> ARM: Получает ответ
|
||
end
|
||
alt До тех пор пока workflow не завершен
|
||
ARM -> User: ARM блокирует интерфейс пользователю
|
||
else workflow завершен успешно
|
||
ARM -> User: АРМ снимает блокировку и показывает оповещение\n"Заказ оформлен". И обновляет все данные\nсодержащие статусы, подробнее описано ниже.
|
||
else workflow завершен с ошибкой "Втис не доступен"
|
||
ARM -> User: АРМ снимает блокировку и показывает оповещение\n"Заказ не оформлен"
|
||
else workflow завершен с ошибкой "Не удалось взять в резерв товары"
|
||
ARM -> User: АРМ снимает блокировку и показывает\nоповещение "Не удалось товары взять в резерв".\nИ обновляет все данных содержащие статусы,\nподробнее описано ниже.
|
||
end
|
||
|
||
Workflow -> Order: Забирает структуру заказа
|
||
Workflow -> Workflow: Конвертирует структуру заказа\nв нужную для Wtis
|
||
Workflow -> Workflow: Создает таймер ответа\nна запрос и ждет ответ от Wtis\nTBD: Сколько таймер?
|
||
Workflow -> Kafka: Записывает данные в топик\nKafka oms.orders.sync
|
||
alt Успешный сценарий
|
||
Wtis -> Kafka: Читает данные по заказу
|
||
Wtis -> Wtis: Создает заказ или сопоставляет\nс тем что уже есть и апдейтит\nего в БД
|
||
Wtis -> Wtis: При необходимости резервирует\nтовары через "Умный резерв"
|
||
Wtis -> Temporal: Отправляет сигнал что закончил свои флоу
|
||
|
||
else WTIS не доступен
|
||
Wtis -> Kafka: Не забрал данные по заказу
|
||
Temporal -> Temporal: по таймауту понимает что\nвтис не ответил\nTBD: Где таймер?\nНа воркфлоу или на темпорал?
|
||
Workflow -> Temporal: Слушает Temporal и\nполучает информацию об ошибке
|
||
Workflow -> Order: Ничего не обновляет в БД Order
|
||
else WTIS частично взял товары в резерв
|
||
Wtis -> Kafka: Читает данные по заказу
|
||
Wtis -> Wtis: Создает заказ или сопоставляет\nс тем что уже есть и апдейтит\nего в БД
|
||
Wtis -> Wtis: При необходимости резервирует\nтовары через "Умный резерв"\n(частичный резерв)
|
||
Wtis -> Temporal: Отправляет сигнал что закончил\nсвои флоу частично
|
||
Workflow -> Temporal: Слушает Temporal и получает\nинформацию о проведенном резерв
|
||
Workflow -> Order: Обновляет ту часть товаров что была зарезервирована
|
||
Workflow -> Workflow: Меняет мастер систему\nв заказе на WTIS
|
||
Workflow -> Gateway: Возвращает ответ
|
||
Gateway -> ARM: Возвращает ответ
|
||
ARM -> User: Пишет сообщение пользователю:\n"Заказ не оформлен товары не зарезервировались"
|
||
end
|
||
Wtis -> Kafka: Записывает обновленные\nданные заказа
|
||
Temporal -> Kafka: Слушает топик wtis.orders.sync и получает структуру даных
|
||
Workflow -> Order: Маппит структуру и сохранет ее в Order, обновляя статусы заказов и товаров
|
||
Workflow -> Workflow: Запускает дочерний\nworkflow SendSMSMessage
|
||
Workflow -> Workflow: Завершает wf WorkflowOrdering
|
||
Workflow -> Temporal: Сообщает о завершении workflow
|
||
Gateway -> Temporal: Слушает Temporal и\nполучает сигнал что wf завершен
|
||
Gateway --> ARM: Возвращает ответ на bf orders/{orderID}/ordering
|
||
ARM -> User: Разблокирует интерфейс, меняет управляющие кнопки заказа
|
||
ARM -> Gateway: Вызывает метод bf /orders/{orderID}/products\nтоварного блока обновляет статусы товаров.
|
||
Gateway -> ARM: answer
|
||
ARM -> Gateway: Вызывает метод bf /orders/{orderID}\nзаказа обновляет статус заказа.
|
||
Gateway -> ARM: answer
|
||
ARM -> Gateway: Вызывает метод bf /orders/{orderID}/deliveries\nобновляет статус доставки.
|
||
Gateway -> ARM: answer
|
||
|
||
@enduml |