Files
plantUML/oms/autoorder/change-ao.puml
2025-12-19 12:45:15 +03:00

220 lines
8.3 KiB
Plaintext
Raw Permalink 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
scale 1500x1500
mainframe Автооформление заказов
actor user as user
participant SITE
queue kafka
participant Gateway
participant workflow
participant wtis
participant CRM
user -> SITE: Оформляет заказ
SITE -> SITE: Сохраняет заказ в БД
SITE --> kafka: Пишет заказ в kafka
Gateway --> kafka: Забирает заказ
Gateway -> workflow: CreateB2CAO
workflow -> workflow: Проверяет условия АО
workflow -> workflow: Проверяет тип доставки
workflow -> wtis: синк заказа во втис через kafka
alt Тип доставки "Курьером"
workflow -> workflow: Устанавливает таймер на N минут
alt Поступила оплата в заказ до истечения срока таймера
workflow -> workflow: Заканчивает автооформление\nУстанавливает дату доставки\nзаказа
workflow -> wtis: Синхронизирует заказ со WTIS
else Не поступила оплата в заказ до истечения срока таймера
workflow -> CRM: Ставится задача с типом 21 в CRM
end
else Тип доставки "Самовывоз"
workflow -> workflow: Проверяет наличие\nкрупногабаритных товаров\nв заказе
alt Крупногабаритных товаров в заказе нет
workflow -> workflow: Заканчивает автооформление\nУстанавливает дату доставки\nзаказа
workflow -> wtis: Синхронизирует заказ со WTIS
else Крупногабаритные товары в заказе есть
workflow -> workflow: Устанавливает таймер на N минут
alt Поступила оплата в заказ до истечения срока таймера
workflow -> workflow: Заканчивает автооформление\nУстанавливает дату доставки\nзаказа
workflow -> wtis: Синхронизирует заказ со WTIS
else Не поступила оплата в заказ до истечения срока таймера
workflow -> CRM: Ставится задача с типом 21 в CRM
end
end
end
@enduml
@startuml Редактирование заказа процесс
skinparam backgroundColor #FFFFFF
skinparam componentStyle rectangle
title Бизнес-процесс редактирования заказа
actor User as U
participant "Frontend ARM" as F
participant "Gateway" as G
participant "Workflow" as W
participant "Order" as OS
participant "History" as H
participant "WTIS" as WTIS
participant "MongoDB" as DB
== Инициация редактирования ==
U -> F: Клик на кнопку "Редактирование заказа"
activate F
F -> G: GET /orders/v1/{orderID}/start-correction
activate G
G -> W: ExecuteWorkflow(B2CGetEditableFieldsWorkflow)
activate W
== Workflow: Получение редактируемых полей ==
W -> OS: gRPC: GetOrder(orderID)
activate OS
OS -> DB: Поиск заказа
DB --> OS: Данные заказа
OS --> W: Order entity
deactivate OS
W -> H: gRPC: IsTransactionExist(orderID)
activate H
H -> H: Transaction Service\nIsTransactionExist()
H -> DB: Поиск открытой транзакции
DB --> H: TransactionID или null
H --> W: TransactionID или uuid.Nil
deactivate H
alt Транзакция не существует
W -> H: gRPC: StartTransaction(orderID, userID)
activate H
H -> H: Transaction Service\nStartTransaction()
H -> H: Создание новой транзакции\n(статус: Opened)
H -> DB: Сохранение транзакции
DB --> H: Подтверждение
H --> W: TransactionID
deactivate H
end
W -> W: Определение редактируемых полей\n(editorder.FieldsDispatcher)
W -> W: Activity: GetEditableFieldsFromWTIS(orderID)
W -> WTIS: API GET GetEditableFieldsFromWTIS(orderID)
activate WTIS
WTIS --> W: Права на редактирование атрибутов
deactivate WTIS
W -> W: Проверка прав пользователя\n(permissions)
W -> W: Формирование ответа\n(CorrectionAnswer)
W --> G: Результат workflow
deactivate W
G --> F: CorrectionAnswer\n(редактируемые поля)
deactivate G
F -> F: Показать уведомление\n"У вас есть 5 минут на редактирование"
F --> U: Интерфейс редактирования активирован
deactivate F
== Мониторинг транзакции ==
loop Каждые 30 секунд
F -> F: checkOrderHasTransaction()
F -> G: GET /orders/v1/{orderID}
G --> F: hasTransaction: boolean
alt hasTransaction = false
F -> F: Показать ошибку\n"Время на редактирование вышло"
F -> F: Перезагрузить страницу
end
end
== Завершение редактирования ==
U -> F: Клик "Сохранить" или "Отменить"
activate F
F -> G: GET /orders/v1/{orderID}/end-correction\n?typeCorrection=...&typeEndCorrection=...
activate G
G -> W: ExecuteWorkflow(B2CEndCorrectionsWorkflow)
activate W
== Workflow: Завершение редактирования ==
W -> W: Lock ресурса (mutex)\n(10 минут блокировка)
W -> OS: gRPC: GetOrder(orderID)
activate OS
OS -> DB: Поиск заказа
DB --> OS: Данные заказа
OS --> W: Order entity
deactivate OS
W -> W: Activity: IsTransactionExist(orderID)
W -> H: gRPC: IsTransactionExist(orderID)
activate H
H -> H: Transaction Service\nIsTransactionExist()
H -> DB: Поиск транзакции
DB --> H: TransactionID
H --> W: TransactionID
deactivate H
alt typeEndCorrection = "reject"
W -> W: Activity: EndTransaction(orderID, userID, true)
W -> H: gRPC: EndTransaction(orderID, userID, true)
activate H
H -> H: Transaction Service\nEndTransaction()
H -> H: Закрытие транзакции\n(статус: Rejected)
H -> DB: Обновление транзакции
DB --> H: Подтверждение
H --> W: Результат
deactivate H
W -> W: Unlock ресурса
W --> G: Успешная отмена
else typeEndCorrection = "success"
W -> W: ManualActionWorkflow.ExecuteAsChild()\n(синхронизация с WTIS)
W -> W: Activity: GetOrderByID(orderID)\n(обновленные данные)
W -> OS: gRPC: GetOrder(orderID)
activate OS
OS -> DB: Поиск заказа
DB --> OS: Обновленные данные заказа
OS --> W: Order entity
deactivate OS
W -> W: Activity: EndTransaction(orderID, userID, false)
W -> H: gRPC: EndTransaction(orderID, userID, false)
activate H
H -> H: Transaction Service\nEndTransaction()
H -> H: Закрытие транзакции\n(статус: Finished)
H -> DB: Обновление транзакции
H -> H: publishEvents()\n(публикация событий)
H --> W: Результат
deactivate H
W -> W: SaveOrderWithShipment()\n(сохранение изменений)
W -> OS: gRPC: UpsertOrderWithShipment(orderID)
activate OS
OS -> H: Transaction Service\nIsTransactionExist()
activate H
H -> DB: Поиск транзакции
DB --> H: TransactionID
H --> OS: TransactionID
deactivate H
OS -> DB: Сохранение заказа
DB --> OS: Подтверждение
OS --> W: Order entity
deactivate OS
W -> W: Unlock ресурса
W --> G: Успешное сохранение
end
deactivate W
G --> F: Результат завершения транзакции
deactivate G
F -> F: Обновление интерфейса
F --> U: Редактирование завершено
deactivate F
@enduml