new scheme
This commit is contained in:
@@ -41,4 +41,180 @@ workflow -> workflow: Проверяет наличие\nкрупногабар
|
||||
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
|
||||
Reference in New Issue
Block a user