Initial commit

This commit is contained in:
Andrey
2024-04-08 19:15:50 +03:00
commit 072ced2815
51 changed files with 2926 additions and 0 deletions

46
oms/autoorder/FRQ-1.puml Normal file
View File

@@ -0,0 +1,46 @@
@startuml
mainframe "FRQ-1 Заказ.ПолучениеДанных."
Actor USER
participant SITE
participant WTIS
queue Названиеопика_1
queue Названиеопика_2
participant OMS
participant Officer
autonumber 1
USER -> USER: Создает заказ на сайте
USER -> SITE: Сущность "Заказ"\nс набором атрибутов
SITE -> WTIS: Сущность "Заказ"\nс набором атрибутов
WTIS -> WTIS: Проверка условий\nи отбор заказов
WTIS -> Названиеопика_1: Записывает Сущность\n"Заказ" с набором\nатрибутов
OMS -> Названиеопика_1: Читает Сущность\n"Заказ" с набором\nатрибутов
OMS -> OMS: Валидация КА
autonumber 7.1
alt валидация пройдена
OMS -> OMS: Продолжение сценария
else валидация не пройдена
OMS -> Названиеопика_2: Сущность "Заказ"\nс набором атрибутов
end
autonumber 8
OMS <-> Officer: Получение лимитов офиса
OMS -> OMS: Валидация способа получения
alt валидация пройдена
autonumber 9.1
OMS -> OMS: Продолжение сценария
else валидация не пройдена
OMS -> Названиеопика_2: Сущность "Заказ"\nс набором атрибутов
end
autonumber 10
OMS -> OMS: Валидация способа оплаты
alt валидация пройдена
autonumber 10.1
OMS -> OMS: Продолжение сценария
else валидация не пройдена
OMS -> Названиеопика_2: Сущность "Заказ"\nс набором атрибутов
end
autonumber 11
OMS -> OMS: Данные о заказе\nполучены и провалидированы
OMS -> OMS: Переход к бизнес-проверкам
@enduml

55
oms/autoorder/FRQ-2.puml Normal file
View File

@@ -0,0 +1,55 @@
@startuml
mainframe "FRQ-2 Заказ.БизнесПроверки."
queue Названиеопика_2
database ClickHouse
participant OMS
participant DRUZ
participant PDM
autonumber 1
OMS -> PDM: Запрашивает\nGUID производителя товара
OMS -> OMS: Проверка на возможность\nпродажи товара
alt валидация пройдена
autonumber 2.1
OMS -> OMS: Продолжение сценария
else валидация не пройдена
OMS -> ClickHouse: Логирование не\nпройденных проверок
OMS -> Названиеопика_2: Сущность "Заказ"\nс набором атрибутов
end
autonumber 3
OMS -> DRUZ: Запрашивает \nпризнак "Наличие"
OMS -> OMS: Проверка что товары\nиз заказа в наличии
alt валидация пройдена
autonumber 4.1
OMS -> OMS: Продолжение сценария
else валидация не пройдена
OMS -> ClickHouse: Логирование не\nпройденных проверок
OMS -> Названиеопика_2: Сущность "Заказ"\nс набором атрибутов
end
autonumber 5
OMS -> PDM: Запрашивает ВГХ товара
OMS -> OMS: Расчитывает объем и\nобщий вес заказа
OMS -> OMS: Проверка на лимиты\nВГХ ТТ
alt валидация пройдена
autonumber 7.1
OMS -> OMS: Продолжение сценария
else валидация не пройдена
OMS -> ClickHouse: Логирование не\nпройденных проверок
OMS -> Названиеопика_2: Сущность "Заказ"\nс набором атрибутов
end
autonumber 8
OMS -> OMS: Проверка способа\nоплаты на ТТ
alt валидация пройдена
autonumber 8.1
OMS -> OMS: Продолжение сценария
else валидация не пройдена
OMS -> ClickHouse: Логирование не\nпройденных проверок
OMS -> Названиеопика_2: Сущность "Заказ"\nс набором атрибутов
end
@enduml

View File

@@ -0,0 +1,39 @@
@startuml
scale 1500x1500
mainframe Автооформление заказов
actor user as user
participant SITE
queue kafka
participant Gateway
participant workflow
participant wtis
user -> SITE: Оформляет заказ
SITE -> SITE: Сохраняет заказ в БД
SITE --> kafka: Пишет заказ в kafka
Gateway --> kafka: Забирает заказ
Gateway -> workflow: CreateB2CAO
workflow -> workflow: Проверяет условия АО
workflow -> workflow: Проверяет тип доставки
alt Тип доставки "Курьером"
workflow -> workflow: Устанавливает таймер на N минут
alt Поступила оплата в заказ до истечения срока таймера
workflow -> workflow: Заканчивает автооформление\nУстанавливает дату доставки\nзаказа
else Не поступила оплата в заказ до истечения срока таймера
workflow -> wtis: Заказ передается во WTIS\nМеняется мастер система
end
else Тип доставки "Самовывоз"
workflow -> workflow: Проверяет наличие\nкрупногабаритных товаров\nв заказе
alt Крупногабаритных товаров в заказе нет
workflow -> workflow: Заканчивает автооформление\nУстанавливает дату доставки\nзаказа
else Крупногабаритные товары в заказе есть
workflow -> workflow: Устанавливает таймер на N минут
alt Поступила оплата в заказ до истечения срока таймера
workflow -> workflow: Заканчивает автооформление\nУстанавливает дату доставки\nзаказа
else Не поступила оплата в заказ до истечения срока таймера
workflow -> wtis: Заказ передается во WTIS\nМеняется мастер система
end
end
end
@enduml

View File

@@ -0,0 +1,30 @@
@startuml
scale 1200*1200
mainframe Получение свободных остатков
actor Пользователь as user
participant ARM as ARM
participant OMS as OMS
participant Shcat as Shcat
participant Susanin as Susanin
autonumber
user -> ARM: Нажимает на остатки товара\nв товарной строке заказа
ARM -> OMS: API GET /quantity-list-by-office
activate OMS
OMS -> OMS: валидирует запрос
OMS -> Shcat: POST method rests.get
activate Shcat
return answer API POST
OMS -> Susanin: POST method get_logistic_chains_with_priority
activate Susanin
return answer API POST
OMS -> OMS: Сращивает ответы\nмежду собой
OMS -> OMS: Формирует два массива:\n1. По лог.цепям\n2. Прочие склады
return answer API GET
ARM --> user: Рендерит данные в модальном окне
@enduml

View File

@@ -0,0 +1,24 @@
@startuml
scale 1200*1200
mainframe Получение остатков под резервом
actor Пользователь as user
participant ARM as ARM
participant OMS as OMS
participant Susanin as Susanin
autonumber
user -> ARM: Нажимает на остатки товара\nв товарной строке заказа
ARM -> OMS: API GET /quantity-list-by-office
activate OMS
OMS -> OMS: валидирует запрос
OMS -> Susanin: POST method get_logistic_chains_with_priority
activate Susanin
return answer API POST
OMS -> OMS: запрос в mongodb Order с фильтрами по товару
OMS -> OMS: Формирует два массива:\n1. По лог.цепям\n2. Прочие склады
return answer API GET
ARM --> user: Рендерит данные в модальном окне
@enduml

View File

@@ -0,0 +1,15 @@
@startuml
scale 800*800
mainframe Добавление контакта к КА в заказе
actor Пользователь as user
participant ARM as ARM
participant OMS as OMS
autonumber
user -> ARM: Добавляет контакт КА в кратком блоке КА
activate ARM
ARM -> OMS: API POST /orders/{orderId}/contacts/add
activate OMS
return API POST answer
return ок
@enduml

View File

@@ -0,0 +1,15 @@
@startuml
scale 800*800
mainframe Добавление КА к заказу
actor Пользователь as user
participant ARM as ARM
participant OMS as OMS
autonumber
user -> ARM: Добавляет КА в заказ
activate ARM
ARM -> OMS: API POST /orders/{orderId}/contractors/add
activate OMS
return API POST answer
return ок
@enduml

View File

@@ -0,0 +1,30 @@
@startuml
scale 800*800
mainframe Обновление данных в модели КА
actor Пользователь as user
participant ARM as ARM
participant OMS as OMS
participant MSKB as MSKB
autonumber
user -> ARM: Нажимает кнопку "Сохранить"
ARM -> OMS: API PUT /contractors/{contractorID}
activate OMS
OMS -> OMS: Разделяет модель КА\nна основные поля\n+ контакты
alt Если изменена только основная модель
OMS -> MSKB: API POST api/business/v2/physic/update
activate MSKB
return answer API POST
else Если добавлены контакты
OMS -> MSKB: API POST api/business/v2/contact/create
activate MSKB
return answer API POST
else Если удалены контакты
OMS -> MSKB: Удаление контакта КА:\n API DELETE api/business/v2/contact/delete
activate MSKB
return answer API DELETE
end
return answer API PUT
ARM --> user: Показывает сообщение и\nзакрывает модалку
@enduml

View File

@@ -0,0 +1,19 @@
@startuml
scale 800*800
mainframe Логика "Создание КА"
actor Пользователь as user
participant ARM as ARM
participant OMS as OMS
participant MSKB as MSKB
autonumber
user -> ARM: Нажимает кнопку "Создать контрагента"
ARM -> OMS: API POST /contractors/create
activate OMS
OMS -> MSKB: API POST api/business/v2/physic/create
activate MSKB
return answer API POST
return answer API POST
ARM --> user: Показывает сообщение и\nзакрывает модалку
@enduml

View File

@@ -0,0 +1,19 @@
@startuml
scale 800*800
mainframe Получение данных для полной карточки КА
actor Пользователь as user
participant ARM as ARM
participant OMS as OMS
participant MSKB as MSKB
autonumber
user -> ARM: Открывает карточку контрагента
ARM -> OMS: API GET /contractors/{contractorID}
activate OMS
OMS -> MSKB: GraphQL contractorPhysic
activate MSKB
return answer API GET
return answer get_short_info_contact
ARM --> user: Рендерит карточку контрагента
@enduml

View File

@@ -0,0 +1,21 @@
@startuml
scale 800*800
mainframe Логика подблока "Информация о контрагенте"
actor Пользователь as user
participant ARM as ARM
participant OMS as OMS
participant WTIS as WTIS
autonumber
user -> ARM: Нажимает кнопку раскрытия блока
activate ARM
ARM -> OMS: API GET\n/contractors/{contractorID}/orderInfo
activate OMS
OMS -> WTIS: API GET\napi/order/oms_export/contragent_info_oms/{guid}
activate WTIS
WTIS -> WTIS: prepare data
return API GET answer
return API GET answer
return Рендерит блок
@enduml

View File

@@ -0,0 +1,38 @@
@startuml
scale 800*800
mainframe Логика блока "Поиск КА"
actor Пользователь as user
participant ARM as ARM
participant OMS as OMS
participant MSKB as MSKB
autonumber
user -> ARM: Нажимает кнопку "Поиск КА"
return рендерит шаблон модального окна
alt Если ищем только по номеру телефона
user -> ARM: Заполняет номер телефона полностью
else Если ищем только по email
user -> ARM: Заполняет email полностью
else Если ищем по номеру телефона И email
user -> ARM: Заполняет номер телефона И email полностью
end
ARM -> ARM: валидирует поля
alt Валидация не успешна
ARM -> user: Информирует пользователя об ошибках
else Валидация успешно пройдена
ARM -> OMS: /contractors/search
activate OMS
end
OMS -> MSKB: API POST /api/business/v2/physic/search
activate MSKB
MSKB -> MSKB: prepare_data
return answer API POST
return success
ARM -> user: Отображает результаты поиска
@enduml

View File

@@ -0,0 +1,20 @@
@startuml
scale 1000*1000
mainframe Получение данных (Реализации, оплаты) от WTIS MVP
participant WTIS as WTIS
queue kafka
participant workflow as workflow
collections Redis as redis
autonumber
hnote over WTIS: После MVP WTIS изменится\nна сервис баланса
loop Всегда
WTIS -> kafka: Пишет все инфо\nо документах по заказу
workflow -> kafka: Получает документы\nк заказу из очереди
alt данных нет в кэше по ключу
workflow -> redis: Сохраняет в кэш\nКраткую форму на 7 дней\nПолную форму на 3 дня
else данные есть в кэше по ключу
workflow -> redis: Удаляет запись по ключу
workflow -> redis: Сохраняет в кэш\nКраткую форму на 7 дней\nПолную форму на 3 дня
end
@enduml

View File

@@ -0,0 +1,19 @@
@startuml
scale 1000*1000
mainframe Получение данных безналичная оплата / оплата по счету из kafka
participant paykeeper
participant 1C
queue kafka
participant workflow as workflow
collections PaymentsDb as PaymentsDb
autonumber
loop Всегда
paykeeper -> kafka: Пишет все инфо\nо документах по заказу
1C -> kafka: Пишет все инфо\nо документах по заказу
workflow -> kafka: Получает документы\nк заказу из очереди
workflow -> workflow: Преобразовывает данные
workflow -> PaymentsDb: Записывает в коллекцию
end
@enduml

View File

@@ -0,0 +1,46 @@
@startuml
scale 1000*1000
mainframe Получение данных для отрисовки таблицы оплат MVP
participant WTIS as WTIS
collections Redis as redis
participant payments as payments
participant workflow as workflow
participant gateway as gateway
participant ARM as ARM
actor user as user
autonumber
hnote over WTIS: После MVP WTIS изменится\nна сервис баланса
autonumber 1
user -> ARM: Открывает заказ
ARM -> gateway: Запрашивает\nдокументы к заказу
activate gateway
== Получение данных о наличной оплате ==
gateway -> redis: Проверяет наличие\nданных в кэше
alt данные есть в кэше
redis --> gateway: Возвращает\nдокументы\n к заказу
else данных нет в кэше
redis --> gateway: Возвращает\nпустой ответ
gateway -> workflow: Триггерит на\nобновление данных
activate workflow
workflow -> WTIS: API GET order_doc_info()
activate WTIS
WTIS --> workflow: answer
deactivate WTIS
workflow -> redis: Сохраняет в кэш\nКраткую форму на 7 дней\nПолную форму на 3 дня (спорно)
redis --> workflow: Сообщение об успешном сохранении
workflow --> gateway: Возвращает\nдокументы\n к заказу
end
== Получение данных о других типах оплаты ==
workflow -> payments: Запрашивает данные\nоб онлайн оплате И\nпо счету
activate payments
payments --> workflow: answer
deactivate payments
workflow -> workflow: Агрегирует данные\nс источников
workflow --> gateway: answer
deactivate workflow
gateway --> ARM: возвращает\nданные об оплатах
deactivate gateway
ARM --> user: Рендерит блок\nдокументов
@enduml

View File

@@ -0,0 +1,36 @@
@startuml
scale 1000*1000
mainframe Получение данных для отрисовки модалки Реализации или оплаты наличными
participant WTIS as WTIS
collections Redis as redis
participant workflow as workflow
participant gateway as gateway
participant ARM as ARM
actor user as user
autonumber
hnote over WTIS: После MVP WTIS изменится\nна сервис баланса
user -> ARM: Открывает заказ
ARM -> gateway: Запрашивает\nдокументы к заказу
activate gateway
gateway -> redis: Проверяет наличие\nданных в кэше
alt данные есть в кэше
redis --> gateway: Возвращает\nдокументы\n к заказу
else данных нет в кэше
redis --> gateway: Возвращает\nпустой ответ
gateway -> workflow: Триггерит на\nобновление данных
activate workflow
workflow -> WTIS: API GET order_doc_info()
activate WTIS
return answer
deactivate WTIS
workflow -> redis: Сохраняет в кэш\nКраткую форму на 7 дней\nПолную форму на 3 дня (спорно)
redis --> workflow: Сообщение об успешном сохранении
workflow --> gateway: Возвращает\nдокументы\n к заказу
deactivate workflow
end
gateway --> ARM: данные по документу
ARM -> user: рендерит модальное\nокно с инфо\nо документе
@enduml

View File

@@ -0,0 +1,38 @@
@startuml
scale 1000*1000
mainframe Получение данных для отрисовки таблицы реализаций MVP
participant WTIS as WTIS
collections Redis as redis
participant workflow as workflow
participant gateway as gateway
participant ARM as ARM
actor user as user
autonumber
hnote over WTIS: После MVP WTIS изменится\nна сервис баланса
autonumber 1
user -> ARM: Открывает заказ
ARM -> gateway: Запрашивает\nдокументы к заказу
activate gateway
gateway -> redis: Проверяет наличие\nданных в кэше
alt данные есть в кэше
redis --> gateway: Возвращает\nдокументы\n к заказу
else данных нет в кэше
redis --> gateway: Возвращает\nпустой ответ
gateway -> workflow: Триггерит на\nобновление данных
activate workflow
workflow -> WTIS: API GET order_doc_info()
activate WTIS
return answer
deactivate WTIS
workflow -> redis: Сохраняет в кэш\nКраткую форму на 7 дней\nПолную форму на 3 дня (спорно)
redis --> workflow: Сообщение об успешном сохранении
workflow --> gateway: Возвращает\nдокументы\n к заказу
deactivate workflow
end
gateway --> ARM: возвращает\nданные о заказе
deactivate gateway
ARM --> user: Рендерит блок\nдокументов
@enduml

View File

@@ -0,0 +1,41 @@
@startuml
scale 800*800
mainframe Получение списка регионов от Officer
actor Пользователь as user
participant ARM as ARM
participant gateway as gateway
collections redis as redis
participant workflow as workflow
participant officer as officer
autonumber
user -> ARM: Открывает форму\nзаказа
activate ARM
ARM -> gateway: REST API GET\n инфо о регионах
activate gateway
gateway -> redis: Запрашивает\nсписок\nрегионов
opt Данные о регионах есть в кэше
redis --> gateway: answer
else Данные необходимо обновить в кэше
gateway -> workflow: триггерит обновление
activate workflow
workflow -> officer: GraphQL method\noffices
activate officer
officer --> workflow: GraphQL answer
workflow -> officer: GraphQL method\nlocalities
officer --> workflow: GraphQL answer
deactivate officer
workflow -> workflow: Обработка\nданных
workflow -> redis: Записывает регионы\nи параметры в экш
workflow --> gateway: answer
deactivate workflow
end
gateway --> ARM: REST API GET\nanswer
deactivate gateway
ARM --> user: Рендерит данные
deactivate ARM
@enduml

View File

@@ -0,0 +1,23 @@
@startuml
mainframe Добавление/удаление заметки пользователя в ЛК
scale 1500x1500
actor user as user
participant ARM
participant Gateway
participant personalCabinet
autonumber
user -> ARM: Нажимает кнопку "Главная"
alt Пользователь ввел текст и снял фокус с поля
ARM -> Gateway: Отправляет запрос на\nPUT personal-cabinet/v1/note
else Пользователь нажал кнопку "Очистить"
ARM -> Gateway: Отправляет запрос на\nDELETE personal-cabinet/v1/note
end
ARM -> Gateway: Отправляет запрос на GET personal-cabinet/v1/note
Gateway -> personalCabinet: Вызывает методы для\nизменения заметок по пользователю
personalCabinet --> Gateway: answer
Gateway --> ARM: answer
ARM --> user: answer
@enduml

View File

@@ -0,0 +1,23 @@
@startuml
mainframe Взаимодействие с избранным
scale 1500x1500
actor user as user
participant ARM
participant Gateway
participant Order
autonumber
user -> ARM: Нажимает иконку\nсердечка в любом заказе
alt Поле было предварительно выделено (активное состояние)
ARM -> Gateway: Отправляет запрос на\nDELETE orders/v1/{orderID}/favorite
else Поле было предварительно не выделено (не активное состояние)
ARM -> Gateway: Отправляет запрос на\nPOST orders/v1/{orderID}/favorite
end
Gateway -> Order: Вызывает метод\nвзаимодействия с заказом
Order -> Order: Обновляет модель order\n(Либо добавляет uuid юзера\nлибо удаляет)
Order --> Gateway: answer
Gateway --> ARM: answer
ARM --> user: answer
@enduml

View File

@@ -0,0 +1,17 @@
@startuml
mainframe Получение данных о заказах для ЛК пользователя
scale 1500x1500
actor user as user
participant ARM
participant Gateway
participant Order
autonumber
user -> ARM: Нажимает кнопку "Главная"
user -> ARM: Нажимает кнопку "Статистика по заказам"
ARM -> Gateway: Отправляет запрос на GET personal-cabinet/v1/stats
Gateway -> Order: Вызывает методы для получения всех необходимых срезов по заказам
Order --> Gateway: answer
Gateway --> ARM: answer
ARM --> user: Рендерит информационные блоки
@enduml

View File

@@ -0,0 +1,16 @@
@startuml
mainframe Получение заметки пользователя для ЛК
scale 1500x1500
actor user as user
participant ARM
participant Gateway
participant personalCabinet
autonumber
user -> ARM: Нажимает кнопку "Главная"
ARM -> Gateway: Отправляет запрос на GET personal-cabinet/v1/note
Gateway -> personalCabinet: Вызывает методы для получения заметок по пользователю
personalCabinet --> Gateway: answer
Gateway --> ARM: answer
ARM --> user: Рендерит текст в блоке заметок
@enduml

58
oms/process/action.puml Normal file
View File

@@ -0,0 +1,58 @@
@startuml
mainframe TO BE применение акций и скидок в заказе B2C
scale 1500x1500
actor user as user
participant ARM
participant Sherlock
participant Gateway
participant Order
participant PDM
participant Druz
participant SCROOGE
participant Promo
autonumber
user -> ARM: Нажимает кнопку "Применить скидки"
ARM -> ARM: Рендерит модальное окно
ARM -> ARM: Акции сайта - чекбокс активен
ARM -> ARM: Скидки, выбрано: Без скидки
autonumber 5.1
alt Выбирает только скидки уровня ОПТ
user -> ARM: Выбирает тип ОПТа для клиента
user -> ARM: Снимает чекбокс "Акции сайта"
user -> ARM: Нажимает кнопку "Применить"
ARM -> Gateway: Передает запрос
Gateway -> Gateway: Получает название региона из кэша
Gateway -> SCROOGE: Запрашивает цены из SCROOGE согласно уровню ОПТа
SCROOGE --> Gateway: answer
autonumber 6.1
else Выбирает только акции сайта
user -> ARM: Оставляет чекбокс "Акции сайта"
user -> ARM: Оставляет скидку с типом "Без скидки"
user -> ARM: Нажимает кнопку "Применить"
ARM -> Gateway: Передает запрос
Gateway -> Gateway: Получает название региона из кэша
Gateway -> Gateway: Готовит запрос в promo
Gateway -> Promo: Запрашивает акции и цены по товарам из Promo
Promo --> Gateway: answer
autonumber 7.1
else Выбирает акции и скидки ОПТ
user -> ARM: Выбирает тип ОПТа для клиента
user -> ARM: Оставляет чекбокс "Акции сайта"
user -> ARM: Нажимает кнопку "Применить"
ARM -> Gateway: Передает запрос
Gateway -> Gateway: Получает название региона из кэша
Gateway -> Gateway: Готовит запрос в promo
Gateway -> Promo: Запрашивает акции и цены по товарам из Promo
Promo --> Gateway: answer
Gateway -> SCROOGE: Запрашивает цены из SCROOGE согласно уровню ОПТа
SCROOGE --> Gateway: answer
Gateway -> Gateway: Применяет наименьшие цены\nк каждому из товаров
end
autonumber 8
Gateway -> Order: Записывает изменения в модель
Order --> Gateway: Изменения успешно применены
Gateway -> Gateway: Собирает ответ для frontend
Gateway --> ARM: Answer
ARM -> user: Отображает примененные акции
@enduml

View File

@@ -0,0 +1,26 @@
@startuml
scale 800x800
actor user as user
participant ARM
participant Gateway
participant SITE
autonumber
user -> ARM: Вводит номер корзины
ARM -> Gateway: Запрос на info/cart
Gateway -> SITE: Запрос на api/v1/json/user-cart/
SITE --> Gateway: answer
Gateway -> Gateway: Получает название региона из кэша
Gateway -> Gateway: Запрашивает цены из SCROOGE
Gateway -> Gateway: Запрашивает инфо о товаре из PDM
Gateway -> Gateway: Собирает ответ для frontend
Gateway --> ARM: answer
ARM -> ARM: Проверяет регионы\nв запросе и в заказе
alt Регион корзины == регион заказа
ARM --> user: answer
else Регион корзины <> регион заказа
ARM -> user: Запрашивает\nподтверждение\nо смене региона
end
@enduml

77
oms/process/booking.puml Normal file
View File

@@ -0,0 +1,77 @@
@startuml
scale 2000x2000
mainframe Внесение изменения в заказ в статусе "В работе"
Actor USER
participant ARM
participant Gateway
participant Workflow
participant History
participant WTIS
'-------------------------------------------action-------------------
autonumber
USER -> ARM: Открывает заказ
USER -> ARM: Нажимает кнопку\n"Редактировать заказ"
ARM -> Gateway: Запрос с номером заказа
Gateway -> Workflow: Инициирует запуск workflow
Workflow -> History: Открывает транзакцию\nrpc StartTransaction(StartTransactionRequest)
History --> Workflow: Подтверждает открытие транзакции\nreturn StartTransactionResponse
Workflow --> Gateway: Возвращает поля доступные\nдля редактирования
Gateway --> ARM: Возвращает ответ что транзакция открыта
ARM --> USER: Разблокирует все элементы в\nинтерфейсе для редактирования
loop Внесение корректировок пользователем и наполнение транзакции
USER -> ARM: Вносит корректировки
ARM -> Gateway: Использует стандартные\nendpoint заказа
Gateway -> Workflow: Передает запрос в workflow
Workflow -> Workflow: Проверяет что транзакция открыта:\n<b>В ТЗ: Проверка наличия открытой транзакции
autonumber 14.1.1
alt Транзакция закрыта
Workflow -> Gateway: Возвращает ошибку
Gateway -> ARM: answer
ARM -> USER: Выводит сообщение:\n"Транзакция была закрыта,\nнеобходимо заново открыть\nзаказ на корректировку"
autonumber 14.2.1
else Транзакция открыта
Workflow -> History: Отправляет GRPC сигнал\nс корректировками в History\nrpc CreateEvent(CreateEventRequest)
History -> History: Сохраняет\nкорректировки
History --> Workflow: return CreateEventResponse
Workflow --> Gateway: answer
Gateway --> ARM: answer
end 'Это end alt
autonumber 15
end 'Это end loop
USER -> ARM: Нажимает кнопку\n"Сохранить изменения"\nИЛИ "Отменить изменения"
ARM -> Gateway: Отправляет запрос на\n/orders/end-correction/orderID={orderGUID}
Gateway -> Workflow: Вызывает wf
Workflow -> History: Запрашивает актуальное\nсостояние заказа\nrpc GetLastState(GetLastStateRequest)
History --> Workflow: Возвращает Модель заказа\nс примененными корректировками\nreturn GetLastStateResponse
Workflow -> Workflow: Закрывает транзакцию,\nсохраняет актуальный\nзаказ в Order/shipment
Workflow -> WTIS: Отправляет модель заказа через топик kafka:\n<b>В ТЗ: Функциональные изменения - "На стороне Gateway" - п.2
WTIS -> WTIS: Обновляет сущность заказа
autonumber 22.1.1
alt Изменения успешно проведены
WTIS --> Workflow: Возвращает ответ success
Workflow -> History: Отправляет GRPC сигнал о закрытии\nтранзакции\nrpc EndTransaction(EndTransactionRequest)
History --> Workflow: Подтверждает закрытие\nтранзакции\nreturn EndTransactionResponse
Workflow --> Gateway: answer
Gateway --> ARM: answer
ARM --> USER: Отображает модальное\nокно "Изменения\nуспешно сохранены"
autonumber 22.2.1
else Изменения не проведены
WTIS --> Workflow: Возвращает ответ failed
Workflow -> History: Отправляет GRPC сигнал\nоб удалении транзакции
History --> Workflow: Отправляет GRPC сигнал\nчто транзакция удалена
Workflow -> Workflow: Откатывает изменения,\nудаляет корректировки
Workflow --> Gateway: answer
Gateway --> ARM: answer
ARM --> USER: Отображает модальное\nокно "Не удалось\nприменить изменения"
end
@enduml

View File

@@ -0,0 +1,79 @@
@startuml
scale 2000x2000
mainframe Внесение изменения в заказ в статусе "В работе"
Actor USER
participant ARM
participant Gateway
participant Workflow
participant History
participant WTIS
'-------------------------------------------action-------------------
autonumber
USER -> ARM: Открывает заказ
USER -> ARM: Нажимает кнопку\n"Редактировать заказ"
ARM -> Gateway: Запрос с номером заказа
Gateway -> Workflow: Инициирует запуск workflow
Workflow -> History: Открывает транзакцию\nrpc StartTransaction(StartTransactionRequest)
History --> Workflow: Подтверждает открытие транзакции\nreturn StartTransactionResponse
Workflow -> Workflow: Запускает workflow с бизнес-логикой:\n<b>В ТЗ: Функциональные изменения\n<b>-На стороне Workflow\n<b>-"Получение доступных типов корректировок"
Workflow -> WTIS: Запрашивает признак доступности корректировки для атрибутов
WTIS -> Workflow: Возвращает доступные для редактирования атрибуты
Workflow --> Gateway: Возвращает поля доступные\nдля редактирования
Gateway --> ARM: Возвращает атрибуты\nдоступные для редактирования
ARM --> USER: Дизейблит недоступные для\nредактирования элементы\n<b>В ТЗ: Функциональные изменения\n<b>"На стороне ARM"
loop Внесение корректировок пользоваелем и наполнение транзакции
USER -> ARM: Вносит корректировки
ARM -> Gateway: Использует стандартные\nendpoint заказа
Gateway -> Workflow: Передает запрос в workflow
Workflow -> Workflow: Проверяет что транзакция открыта:\n<b>В ТЗ: Проверка наличия открытой транзакции
autonumber 14.1.1
alt Транзакция закрыта
Workflow -> Gateway: Возвращает ошибку
Gateway -> ARM: answer
ARM -> USER: Выводит сообщение:\n"Транзакция была закрыта,\nнеобходимо заново открыть\nзаказ на корректировку"
autonumber 14.2.1
else Транзакция открыта
Workflow -> History: Отправляет GRPC сигнал\nс корректировками в History\nrpc CreateEvent(CreateEventRequest)
History -> History: Сохраняет\nкорректировки
History --> Workflow: return CreateEventResponse
Workflow --> Gateway: answer
Gateway --> ARM: answer
end 'Это end alt
autonumber 15
end 'Это end loop
USER -> ARM: Нажимает кнопку\n"Сохранить изменения"\nИЛИ "Отменить изменения"
ARM -> Gateway: Отправляет запрос на\n/orders/end-correction/orderID={orderGUID}
Gateway -> Workflow: Вызывает wf
Workflow -> History: Запрашивает актуальное\nсостояние заказа\nrpc GetLastState(GetLastStateRequest)
History --> Workflow: Возвращает Модель заказа\nс примененнеными корректировками\nreturn GetLastStateResponse
Workflow -> Workflow: Закрывает транзакцию,\nсохраняет актуальный\nзаказ в Order/shipment
Workflow -> WTIS: Отправляет модель заказа через топик kafka: <b>oms.order.sync</b>\n<b>В ТЗ: Функциональные изменения - "На стороне Gateway" - п.2
WTIS -> WTIS: Пытается применить\nвсе изменения в заказе
autonumber 22.1.1
alt Изменения успешно проведены
WTIS --> Workflow: Возвращает сигнал в temporal success
Workflow -> History: Отправляет GRPC сигнал о закрытии\nтранзакции\nrpc EndTransaction(EndTransactionRequest)
History --> Workflow: Подтверждает закрытие\nтранзакции\nreturn EndTransactionResponse
Workflow --> Gateway: answer
Gateway --> ARM: answer
ARM --> USER: Отображает модальное\nокно "Изменения\nуспешно сохранены"
autonumber 22.2.1
else Изменения не проведены
WTIS --> Workflow: Возвращает сигнал в temporal failed
Workflow -> History: Отправляет GRPC сигнал\nоб удалении транзакции
History --> Workflow: Отправляет GRPC сигнал\nчто транзакция удалена
Workflow -> Workflow: Откатывает изменения,\nудаляет корректировки
Workflow --> Gateway: answer
Gateway --> ARM: answer
ARM --> USER: Отображает модальное\nокно "Не удалось\nприменить изменения"
end
@enduml

View File

@@ -0,0 +1,59 @@
@startuml
scale 1300x1300
mainframe AS IS обмен по созданию заказа на сайте
Actor USER
participant SITE
database SITE_database
queue kafka_1
participant WTIS
database WTIS_database
queue kafka_2
participant OMS
database OMS_database
'-------------------------------------------action-------------------
autonumber
USER -> SITE: Нажимает кнопку оформить заказ
SITE -> SITE_database: Проводит внутренние проверки\nи сохраняет в БД
SITE_database -> SITE: Заказ успешно сохранен
autonumber 4.1
alt Тип доставки в заказе: Самовывоз
SITE -> kafka_1: Записывает заказ в топик kafka: site.order.pickup.created
else Тип доставки в заказе: Курьером
SITE -> kafka_1: Записывает заказ в топик kafka: site.order.courier.created
else Тип доставки в заказе: ТК
SITE -> kafka_1: Записывает заказ в топик kafka: site.order.transport_company.created
end
autonumber 5
WTIS -> kafka_1: Читает сообщения из топика
WTIS -> WTIS_database: Сохраняет заказ
WTIS_database -> WTIS: Заказ успешно сохранен
WTIS -> WTIS: Проверяет условия для MVP\nсогласно настроек в wtis_settings
autonumber 9.1
alt Заказ подходит под условия OMS
WTIS -> kafka_2: Записывает заказ в топик: wtis.order_oms.created
else Заказ не подходит под условия OMS
WTIS -> WTIS: Продолжает процедуру автооформления\nзаказа и обогащения данными
WTIS -> WTIS: Конец процесса
end
autonumber 10
OMS -> kafka_2: Читает событие из топика
OMS -> OMS_database: Сохраняет заказ в БД
OMS_database -> OMS: Заказ успешно сохранен
OMS -> OMS: Проводит бизнес проверки
OMS -> WTIS: Резервирует товары
autonumber 15.1
alt Успешно зарезервировано
WTIS -> OMS: Товары в заказе успешно зарезервированы
else Не успешно зарезервировано
WTIS -> WTIS: Ставит задачу на менеджера, меняет мастер-систему
WTIS -> WTIS: Конец процесса
end
@enduml

View File

@@ -0,0 +1,66 @@
@startuml
scale 1300x1300
mainframe TO BE обмен по созданию заказа на сайте
Actor USER
participant SITE
database SITE_database
participant WTIS
database WTIS_database
queue kafka_1
queue kafka_2
participant OMS
database OMS_database
'-------------------------------------------action-------------------
autonumber
USER -> SITE: Нажимает кнопку оформить заказ
SITE -> SITE_database: Проводит внутренние проверки\nи сохраняет в БД
SITE_database -> SITE: Заказ успешно сохранен
autonumber 4.1
alt Тип доставки в заказе: Самовывоз
SITE -> kafka_1: Записывает заказ в топик kafka: site.order.pickup.created
else Тип доставки в заказе: Курьером
SITE -> kafka_1: Записывает заказ в топик kafka: site.order.courier.created
else Тип доставки в заказе: ТК
SITE -> kafka_1: Записывает заказ в топик kafka: site.order.transport_company.created
end
autonumber 5
OMS -> kafka_1: Читает сообщения из топиков
OMS -> OMS: Проверяет условия для MVP
WTIS -> kafka_1: Читает сообщения из топиков
WTIS -> WTIS: Проверяет условия для MVP
autonumber 9.1
alt Подходит под условия OMS
WTIS -> WTIS: Не обрабатывает такой заказ
OMS -> OMS_database: Сохраняет заказ
OMS -> kafka_2: Записывает заказ в топик: oms.orders.sync
OMS_database -> OMS: Заказ успешно сохранен
WTIS -> kafka_2: Читает топик
WTIS -> WTIS: Создает заказ
WTIS -> OMS: Возвращает модель заказа через workflow
OMS -> OMS: Проводит автооформление
OMS -> WTIS: Резервирует товары
autonumber 9.9.1
alt Успешно зарезервировано
WTIS -> OMS: Товары в заказе успешно зарезервированы
WTIS -> WTIS: Конец процесса
else Не успешно зарезервировано
WTIS -> WTIS: Ставит задачу на менеджера, меняет мастер-систему
WTIS -> WTIS: Конец процесса
end
else Не подходит под условия OMS
autonumber 10.1
OMS -> OMS: Не обрабатывает такой заказ
WTIS -> WTIS_database: Сохраняет заказ
WTIS_database -> WTIS: Заказ успешно сохранен
WTIS -> WTIS: Конец процесса
end
@enduml