Files
plantUML/oms/process/ordering.puml
2024-05-27 11:13:41 +03:00

119 lines
9.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@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