add new schemes
This commit is contained in:
119
oms/process/ordering.puml
Normal file
119
oms/process/ordering.puml
Normal file
@@ -0,0 +1,119 @@
|
||||
@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
|
||||
Reference in New Issue
Block a user