add new schemes
This commit is contained in:
@@ -1,33 +1,33 @@
|
||||
@startuml
|
||||
scale 1200*1200
|
||||
mainframe Получение свободных остатков
|
||||
actor Пользователь as user
|
||||
participant ARM as ARM
|
||||
participant OMS as OMS
|
||||
collections Cache as cache
|
||||
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 -> cache: Забрать все офисы из кэша
|
||||
activate cache
|
||||
return answer
|
||||
|
||||
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: Формирует два массива:\n1. По лог.цепям\n2. Прочие склады
|
||||
|
||||
return answer API GET
|
||||
ARM --> user: Рендерит данные в модальном окне
|
||||
@startuml
|
||||
scale 1200*1200
|
||||
mainframe Получение свободных остатков
|
||||
actor Пользователь as user
|
||||
participant ARM as ARM
|
||||
participant OMS as OMS
|
||||
collections Cache as cache
|
||||
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 -> cache: Забрать все офисы из кэша
|
||||
activate cache
|
||||
return answer
|
||||
|
||||
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: Формирует два массива:\n1. По лог.цепям\n2. Прочие склады
|
||||
|
||||
return answer API GET
|
||||
ARM --> user: Рендерит данные в модальном окне
|
||||
@enduml
|
||||
@@ -1,24 +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: Рендерит данные в модальном окне
|
||||
@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
|
||||
52
oms/interface-arm/journals/order-journal/filters.puml
Normal file
52
oms/interface-arm/journals/order-journal/filters.puml
Normal file
@@ -0,0 +1,52 @@
|
||||
@startuml
|
||||
mainframe Получение заказов для отображения фильтров
|
||||
autonumber
|
||||
actor user
|
||||
participant ARM
|
||||
participant OMS
|
||||
collections Redis
|
||||
participant MSKB
|
||||
database Database
|
||||
|
||||
user -> ARM: Устанавливает фильтры
|
||||
alt устанавливает фильтр по ПВЗ
|
||||
user -> ARM: Начинает вводить наименование ПВЗ
|
||||
ARM -> OMS: Запрашивает список подходящих ПВЗ
|
||||
OMS -> Redis: Запрашивает список ПВЗ
|
||||
Redis --> OMS: Возвращает список ПВЗ
|
||||
OMS --> ARM: Возвращает список ПВЗ
|
||||
user -> ARM: Выбирает необходимый ПВЗ
|
||||
ARM -> ARM: Запоминает идентификатор ПВЗ
|
||||
else устанавливает фильтр по менеджеру
|
||||
user -> ARM: Начинает вводить ФИО менеджера
|
||||
ARM -> OMS: Запрашивает список подходящих менеджеров
|
||||
OMS -> Redis: Запрашивает список менеджеров
|
||||
Redis --> OMS: Возвращает список менеджеров
|
||||
OMS --> ARM: Возвращает список менеджеров
|
||||
user -> ARM: Выбирает необходимого менеджера
|
||||
ARM -> ARM: Запоминает идентификатор менеджера
|
||||
else устанавливает фильтр по КА
|
||||
user -> ARM: Нажимает на фильтр по КА
|
||||
ARM --> user: Открывает модальное окно "Поиск КА"
|
||||
user -> ARM: Ищет необходимого КА
|
||||
ARM -> OMS: Запрашивает список подходящих КА
|
||||
OMS -> MSKB: Запрашивает список КА
|
||||
MSKB --> OMS: Возвращает список КА
|
||||
OMS --> ARM: Возвращает список КА
|
||||
user -> ARM: Выбирает необходимого КА
|
||||
ARM -> ARM: Запоминает идентификатор КА
|
||||
end
|
||||
|
||||
alt Необходимы сортировки
|
||||
user -> ARM: Выбирает необходимую сортировку
|
||||
ARM -> ARM: Запоминает выбор пользователя
|
||||
else Не устанавливаются сортировки
|
||||
end
|
||||
user -> ARM: Нажимает кнопку Enter или "Обновить"
|
||||
ARM -> ARM: Формирует запрос на bf
|
||||
ARM -> OMS: Отправляет запрос
|
||||
OMS -> Database: Запрашивает список заказов\nс установленными фильтрами
|
||||
Database --> OMS: Ответ
|
||||
OMS --> ARM: Ответ
|
||||
ARM --> user: Отображает журнал заказов
|
||||
@enduml
|
||||
29
oms/interface-arm/journals/order-journal/search.puml
Normal file
29
oms/interface-arm/journals/order-journal/search.puml
Normal file
@@ -0,0 +1,29 @@
|
||||
@startuml
|
||||
mainframe Получение заказов для отображения фильтров
|
||||
autonumber
|
||||
actor user
|
||||
participant ARM
|
||||
participant OMS
|
||||
database Database
|
||||
|
||||
user -> ARM: Вводит один или несколько номеров заказов
|
||||
ARM -> ARM: Делит строку по пробелам
|
||||
alt Необходимы сортировки
|
||||
user -> ARM: Выбирает необходимую сортировку
|
||||
ARM -> ARM: Запоминает выбор пользователя
|
||||
else Не устанавливаются сортировки
|
||||
end
|
||||
user -> ARM: Нажимает кнопку Enter или "Обновить"
|
||||
ARM -> ARM: Формирует запрос
|
||||
ARM -> OMS: Отправляет запрос на bf
|
||||
OMS -> OMS: Проверяет есть ли объекты длиной 5 символов
|
||||
alt Если такие объекты есть
|
||||
OMS -> OMS: Формирует запрос с регулярным выражением,\nгде поиск осуществляется\nпо последним 5 символам строки
|
||||
else Если таких объектов нет
|
||||
OMS -> OMS: Формирует стандартный запрос в БД
|
||||
end
|
||||
OMS -> Database: Запрашивает список заказов по выбранным параметрам
|
||||
Database --> OMS: Ответ
|
||||
OMS --> ARM: Ответ
|
||||
ARM --> user: Отображает журнал заказов
|
||||
@enduml
|
||||
@@ -1,23 +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
|
||||
@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
|
||||
@@ -1,23 +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
|
||||
@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
|
||||
@@ -1,17 +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: Рендерит информационные блоки
|
||||
@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
|
||||
@@ -1,16 +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: Рендерит текст в блоке заметок
|
||||
@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
|
||||
85
oms/interface-arm/personal-cabinet/personal-cabinet.puml
Normal file
85
oms/interface-arm/personal-cabinet/personal-cabinet.puml
Normal file
@@ -0,0 +1,85 @@
|
||||
@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
|
||||
|
||||
|
||||
@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
|
||||
|
||||
|
||||
@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
|
||||
|
||||
|
||||
@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
|
||||
58
oms/interface-arm/products/add-promotion.puml
Normal file
58
oms/interface-arm/products/add-promotion.puml
Normal 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
|
||||
251
oms/order mongoDB.puml
Normal file
251
oms/order mongoDB.puml
Normal file
@@ -0,0 +1,251 @@
|
||||
@startjson
|
||||
|
||||
<style>
|
||||
' Общий стиль схемы задан здесь
|
||||
jsonDiagram {
|
||||
node {
|
||||
LineColor #000
|
||||
FontName Helvetica
|
||||
FontColor black
|
||||
FontSize 18
|
||||
FontStyle bold
|
||||
}
|
||||
arrow {
|
||||
LineColor #000
|
||||
LineThickness 3
|
||||
LineStyle 2
|
||||
}
|
||||
highlight {
|
||||
BackGroundColor #e5e5e5
|
||||
FontColor black
|
||||
}
|
||||
}
|
||||
' Здесь находятся расцветки изменений. Необходимо создать новый объект по образу .firstChange
|
||||
.firstChange {
|
||||
FontColor blue
|
||||
}
|
||||
</style>
|
||||
|
||||
' Здесь указываем какие атрибуты нужно подсвечивать в схеме
|
||||
#highlight "order" / "Recipient" / "ID" <<firstChange>>
|
||||
#highlight "order" / "Recipient" / "RecipientAddress" <<firstChange>>
|
||||
#highlight "order" / "Recipient" / "RecipientPhone" <<firstChange>>
|
||||
#highlight "order" / "Recipient" / "RecipientName" <<firstChange>>
|
||||
|
||||
{
|
||||
"order": {
|
||||
"orderID": "uuid || Номер заказа",
|
||||
"managerInfo": {
|
||||
"CreatedBy": "uuid || Идентификатор автора заказа из AD",
|
||||
"CreatedFullName": "string || ФИО автора заказа",
|
||||
"UpdatedBy": "uuid || Идентификатор последнего обновлявшего заказ",
|
||||
"UpdatedFullName": "string || ФИО последнего обновлявшего заказ",
|
||||
"ManagerGroup": "int || Идентификатор группы менеджера",
|
||||
"ManagerPhoneNumber": "string || Номер телефона менеджера",
|
||||
"ManagerExtensionNumber": "string || Добавочный номер телефона менеджера"
|
||||
},
|
||||
"RootOrder": "uuid || UUID корневого заказа",
|
||||
"Number": "string || Номер заказа в формате ****-******-*****",
|
||||
"OrderStatus": "int || Идентификатор статуса заказа (от 0 до 7)",
|
||||
"Contractor": {
|
||||
"Type": "int || Тип контрагента.",
|
||||
"B2CContractor": {
|
||||
"Person": {
|
||||
"ID": "uuid || Идентификатор (UUID) контрагента",
|
||||
"FullName": "string || Полное ФИО КА",
|
||||
"Phone": "string || Номер телефона КА",
|
||||
"Email": "string || Email адрес КА"
|
||||
}
|
||||
},
|
||||
"B2BContractor": {
|
||||
"ID": "uuid || Идентификатор (UUID) контрагента",
|
||||
"Name": "string || Полное наименование КА",
|
||||
"TIN": "string || Номер ИНН",
|
||||
"ContactPersons (array)": {
|
||||
"Person": {
|
||||
"ID": "uuid || Идентификатор (UUID) контрагента",
|
||||
"FullName": "string || Полное ФИО КА",
|
||||
"Phone": "string || Номер телефона КА",
|
||||
"Email": "string || Email адрес КА"
|
||||
},
|
||||
"SmsPhoneNumber": "string || Номер телефона для СМС"
|
||||
},
|
||||
"CurrentContactPersonID": "uuid || ID выбранного КЛ для заказа",
|
||||
"Curator": {
|
||||
"ID": "uuid || Идентификатор куратора",
|
||||
"FullName": "string || ФИО куратора"
|
||||
},
|
||||
"Contract": {
|
||||
"ID": "uuid || Идентификатор договора",
|
||||
"Number": "string || Номер договора",
|
||||
"Kind": "int || Тип договора"
|
||||
},
|
||||
"BaseDocumentSettings": {
|
||||
"GovernmentContractID": "string || Идентификатор государственного контракта",
|
||||
"InvoiceTransferBasis": "string || Основание передачи в счете на оплату",
|
||||
"ShippingDocuments": {
|
||||
"TransferBasisDocument": "string || документ-основание передачи(сдачи)/получения(приемки)",
|
||||
"TransferBasisAdditionalDetails": "string || Дополнительные сведения основания передачи",
|
||||
"OtherInformation": "string || Иные сведения"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Recipient": {
|
||||
"ID": "uuid || Идентификатор (UUID) грузополучателя",
|
||||
"RecipientName": "string || Имя грузополучателя заказа",
|
||||
"RecipientPhone": "string || Номер телефона грузополучателя",
|
||||
"RecipientAddress": "string || Адрес грузополучателя"
|
||||
},
|
||||
"Properties": {
|
||||
"BasicTimestamps": {
|
||||
"CreatedAt": "date-time || Дата и время создания заказа",
|
||||
"UpdatedAt": "date-time || Дата и время последнего обновления заказа"
|
||||
},
|
||||
"OriginID": "int || Идентификатор источника заказа",
|
||||
"SiteOrderDate": "date-time || Дата и время заказа выбранное на сайте",
|
||||
"OrderComment": "string || Комментарий к заказу. Во wtis: primSklad",
|
||||
"TtnNumber": "string || Номер ТТН",
|
||||
"TtnDate": "string || Дата ТТН",
|
||||
"IsPartialShipmentFromSite": "bool || Признак ЧО с сайта",
|
||||
"PaymentAmount": "float || Сумма внесенной оплаты",
|
||||
"BookingEndDates": "array || Массив с датами истечения бронирования заказа",
|
||||
"IsPrepaymentRequired": "bool || Признак Необходима предоплата",
|
||||
"RegionGUID": "uuid || Идентификатор (UUID) региона",
|
||||
"RegionName": "string || Наименование региона",
|
||||
"TypeOrderFromSite": "string || Тип заказа с сайта. normal / fast",
|
||||
"Firma": "GUID фирмы отгружающей товар."
|
||||
},
|
||||
"Artifacts": {
|
||||
"PartialShipment": "bool || Признак Частичная отгрузка",
|
||||
"OrderMasterSystem": "string || Признак мастер-система по заказу",
|
||||
"KkmDate": "string || Дата ККМ",
|
||||
"KkmAmount": "float || Сумма оплаты через ККМ",
|
||||
"PaymentKkm": "bool || Признак оплата через ККМ",
|
||||
"PaymentCb": "bool || Признак оплата по счету",
|
||||
"PaymentCard": "bool || Признак картой",
|
||||
"IsEwalletPayment": "bool || Признак оплата с сайта",
|
||||
"OrderStateWtis": "int || Состояние заказа из WTIS",
|
||||
"AttbOplata": "int || Статус оплаты (0 - Не оплачено, 1 - Частичная оплата, 2 - Оплачено). || deprecated",
|
||||
"OrderStatusWtis": "int || Статус заказа из WTIS",
|
||||
"IsPromoEnabled": "bool || Признак, что сайт взаимодействует с МС Promo и берет распродажную инфу оттуда.",
|
||||
"IsYandexEnabled": "bool || Признак, что адрес передается в новом формате для курьерки."
|
||||
},
|
||||
"Supplies (array)": {
|
||||
"ID": "uuid || Идентификатор поставки",
|
||||
"ShipmentID": "uuid || Идентификатор шипмента",
|
||||
"ProductID": "uuid || Идентификатор номенклатуры",
|
||||
"SourceOffice": "uuid || Идентификатор склада на котором находится товар",
|
||||
"ReserveTo": "date-time || Дата резерв до",
|
||||
"PurchaseIDs": "array || Массив идентификаторов закупки",
|
||||
"UnreserveDate": "date-time || Дата фактического снятия с резерва товара",
|
||||
"Quantity": "int || Количество товара в доставке. Суммарное количество должно быть равно quantity в items",
|
||||
"StatusItem": "int || Идентификатор статуса товара",
|
||||
"Artifacts": {
|
||||
"StatusItemWtis": "int || Клиентский статус товара из WTIS",
|
||||
"Attb": "Состоние товара из WTIS",
|
||||
"FlagReturn": "bool || Признак Возврат товара. 1 - товар с вкладки Возвраты, 0 - для товаров с вкладки Товары.",
|
||||
"FlagReturnedToSklad": "bool || Принят на склад",
|
||||
"AppendUser": "uuid || ID пользователя кто добавил поставку",
|
||||
"ChangeUser": "uuid || ID пользователя кто последний изменил поставку"
|
||||
},
|
||||
"DateCanDeliver": "date-time || Дата 'Сможем доставить'.",
|
||||
"CreatedAt": "date-time || Дата создания поставки",
|
||||
"UpdatedAt": "date-time || Дата последнего обновления поставки",
|
||||
"Prices": {
|
||||
"DiscountPrice": "float || Сумма скидки",
|
||||
"DiscountCategory": "string || Категория скидки",
|
||||
"DiscountReason": "string || Причина скидки",
|
||||
"InitialPrice": "float || Начальная цена",
|
||||
"PurchasePrice": "float || Цена закупки",
|
||||
"Price": "float || Цена товара",
|
||||
"Discount": "float || Процент скидки",
|
||||
"ClearanceSaleID": "uuid || Идентификатор распродажи",
|
||||
"IsPromoCodeUsed": "bool || Флаг использования промокода",
|
||||
"PromotionID": "int || Идентификатор акции из МС Promo",
|
||||
"ExtraCost": "float || Цена доставки на единицу товара"
|
||||
},
|
||||
"IsRestored": "bool || Признак восстановления поставки.",
|
||||
"DeliveryDate": "date-time || Дата доставки"
|
||||
},
|
||||
"Shipment": {
|
||||
"Meta": {
|
||||
"ID": "uuid || Идентификатор shipment",
|
||||
"OrderID": "uuid || Идентификатор заказа",
|
||||
"MethodID": "int || Идентификатор шипмента",
|
||||
"Status": "int || Статус доставки",
|
||||
"DeliveryDate": "date-time || Дата доставки",
|
||||
"Services": {
|
||||
"Settings": {
|
||||
"SpreadExtraCost": "bool || Размазать стоимость доставки по товарам связанным с доставкой"
|
||||
}
|
||||
},
|
||||
"CreatedAt": "date-time || Дата создания доставки",
|
||||
"UpdatedAt": "date-time || Дата последнего обновления доставки"
|
||||
},
|
||||
"ShipmentPickup": {
|
||||
"OfficeGUID": "uuid || Идентификатор офиса"
|
||||
},
|
||||
"ShipmentCourier": {
|
||||
"FactDeliveryBoy": "uuid || Идентификатор курьера который отдал заказ",
|
||||
"FreeReason": "int || Причина бесплатной доставки",
|
||||
"FiasID": "uuid || FIAS идентификатор адреса доставки",
|
||||
"IntervalGUID": "uuid || Идентификатор интервала курьерской доставки",
|
||||
"DeliveryAregGUID": "uuid || Идентификатор AREG адреса доставки",
|
||||
"AddressTail": {
|
||||
"AddressTailID": "uuid || Идентификатор хвоста адреса",
|
||||
"Flat": "int || Номер квартиры",
|
||||
"Entrance": "int || Подъезд",
|
||||
"Floor": "int || Этаж",
|
||||
"AddressComment": "string || Комментарий к адресу",
|
||||
"ContactNumber": "string || Контактный номер в адресе доставки"
|
||||
},
|
||||
"IntervalValue": "string || Значение интервала доставки",
|
||||
"Latitude": "string || Широта адреса доставки",
|
||||
"Longitude": "string || Долгота адреса доставки",
|
||||
"CourierGUID": "uuid || Идентификатор курьера в заказе",
|
||||
"DeliveryBoyName": "string || ФИО курьера в заказе",
|
||||
"AddrDostav": "string || Адрес доставки",
|
||||
"CourierDeliveryCost": "int || Стоимость доставки",
|
||||
"CourierComment": "string || Комментарий для курьера"
|
||||
},
|
||||
"ShipmentTKPickup": {
|
||||
"TransportCompanyID": "uuid || Идентификатор транспортной компании",
|
||||
"TransportCompanyCityID": "uuid || Идентификатор города ТК",
|
||||
"TransportCompanyCityName": "string || Название города ТК",
|
||||
"TransportCompanyExternalCode": "string || Внешний код офиса ТК в системе CDEK",
|
||||
"TransportCompanyTariffID": "uuid || Идентификатор тарифа ТК",
|
||||
"TransportCompanyTariffName": "string || Наименование тарифа",
|
||||
"CourierDeliveryCost": "int || Стоимость доставки",
|
||||
"CourierComment": "string || Комментарий для курьера"
|
||||
},
|
||||
"shipmentTKCourier": {
|
||||
"TransportCompanyID": "uuid || Идентификатор транспортной компании",
|
||||
"TransportCompanyCityID": "uuid || Идентификатор города ТК",
|
||||
"TransportCompanyCityName": "string || Название города ТК",
|
||||
"TransportCompanyExternalCode": "string || Внешний код офиса ТК в системе CDEK",
|
||||
"TransportCompanyTariffID": "uuid || Идентификатор тарифа ТК",
|
||||
"TransportCompanyTariffName": "string || Наименование тарифа",
|
||||
"IntervalValue": "string || Значение интервала доставки",
|
||||
"Latitude": "string || Широта адреса доставки",
|
||||
"Longitude": "string || Долгота адреса доставки",
|
||||
"AddrDostav": "string || Адрес доставки",
|
||||
"FiasID": "uuid || FIAS идентификатор адреса доставки",
|
||||
"IntervalGUID": "uuid || Идентификатор интервала курьерской доставки",
|
||||
"DeliveryAregGUID": "uuid || Идентификатор AREG адреса доставки",
|
||||
"AddressTail": {
|
||||
"AddressTailID": "uuid || Идентификатор хвоста адреса",
|
||||
"Flat": "int || Номер квартиры",
|
||||
"Entrance": "int || Подъезд",
|
||||
"Floor": "int || Этаж",
|
||||
"AddressComment": "string || Комментарий к адресу",
|
||||
"ContactNumber": "string || Контактный номер в адресе доставки"
|
||||
},
|
||||
"CourierDeliveryCost": "int || Стоимость доставки",
|
||||
"DeliveryWay": "int || Тип доставки, через транспортную компанию",
|
||||
"CourierComment": "string || Комментарий для курьера"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@endjson
|
||||
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