new scheme
This commit is contained in:
83
oms/process/commodity-process-logic.puml
Normal file
83
oms/process/commodity-process-logic.puml
Normal file
@@ -0,0 +1,83 @@
|
||||
@startuml
|
||||
!theme plain
|
||||
title Обработка товарных позиций при корректировке
|
||||
|
||||
start
|
||||
|
||||
:Получена корректировка заказа;
|
||||
|
||||
:Сравнить товары OMS и WTIS;
|
||||
|
||||
partition "Определить операции с товарами" {
|
||||
:Товары для добавления;
|
||||
note right: Есть в OMS, нет в WTIS
|
||||
|
||||
:Товары для удаления;
|
||||
note right: Есть в WTIS, нет в OMS
|
||||
|
||||
:Товары для изменения;
|
||||
note right: Есть в обоих, но с отличиями
|
||||
}
|
||||
|
||||
partition "Обработать изменения товаров" {
|
||||
if (Есть товары для изменения?) then (да)
|
||||
:Для каждого товара проверить изменения;
|
||||
|
||||
if (Изменилось количество?) then (да)
|
||||
if (Товар в резерве?) then (да)
|
||||
:Создать копию с новым количеством;
|
||||
:Удалить избыточную часть;
|
||||
note right: Сложная логика split
|
||||
else (нет)
|
||||
:Изменить количество напрямую;
|
||||
endif
|
||||
endif
|
||||
|
||||
if (Изменилась цена?) then (да)
|
||||
:Обновить цену и скидку;
|
||||
endif
|
||||
|
||||
if (Изменился резерв?) then (да)
|
||||
:Обновить дату резерва;
|
||||
endif
|
||||
endif
|
||||
}
|
||||
|
||||
partition "Применить операции" {
|
||||
if (Есть товары для добавления?) then (да)
|
||||
:Создать новые товарные позиции;
|
||||
endif
|
||||
|
||||
if (Есть товары для изменения?) then (да)
|
||||
:Обновить существующие позиции;
|
||||
endif
|
||||
|
||||
if (Есть товары для удаления?) then (да)
|
||||
:Снять резерв с товаров;
|
||||
:Установить статус "Удален";
|
||||
:Удалить из заказа;
|
||||
endif
|
||||
}
|
||||
|
||||
partition "Обработать резервирование" {
|
||||
if (Смена региона или ПВЗ?) then (да)
|
||||
:Снять резерв со всех товаров;
|
||||
note right: При смене региона/ПВЗ
|
||||
endif
|
||||
|
||||
if (Есть товары для резервирования?) then (да)
|
||||
:Зарезервировать товары;
|
||||
note right: Из массива reserve
|
||||
endif
|
||||
|
||||
if (Есть товары для снятия резерва?) then (да)
|
||||
:Снять резерв с товаров;
|
||||
note right: Из массива unreserve
|
||||
endif
|
||||
}
|
||||
|
||||
:Завершить обработку;
|
||||
|
||||
stop
|
||||
|
||||
@enduml
|
||||
158
oms/process/correction-wtis.puml
Normal file
158
oms/process/correction-wtis.puml
Normal file
@@ -0,0 +1,158 @@
|
||||
@startuml
|
||||
!theme plain
|
||||
title Обработка корректировки заказа на WTIS
|
||||
|
||||
participant "Kafka" as Kafka
|
||||
participant "Обработчик" as Handler
|
||||
participant "Сервис синхронизации" as Service
|
||||
participant "Сравнитель заказов" as Differ
|
||||
participant "Создатель заказов" as Creator
|
||||
participant "Резервирование" as Reserve
|
||||
participant "База данных" as DB
|
||||
|
||||
== Получение корректировки ==
|
||||
Kafka -> Handler: Сообщение корректировки
|
||||
Handler -> Service: Обработать корректировку
|
||||
|
||||
== Поиск заказа ==
|
||||
Service -> DB: Найти заказ по GUID
|
||||
alt Заказ не найден
|
||||
Service -> Creator: Создать новый заказ
|
||||
else Заказ существует
|
||||
Service -> Differ: Сравнить заказы OMS и WTIS
|
||||
|
||||
== Анализ изменений ==
|
||||
Differ -> Differ: Сравнить поля заказа
|
||||
note right: регион, ПВЗ, способ доставки,\nконтрагент, адрес, дата доставки
|
||||
Differ -> Differ: Сравнить товарные позиции
|
||||
note right: количество, цены, резерв
|
||||
Differ --> Service: Список изменений
|
||||
|
||||
== Специальная обработка смены региона/ПВЗ ==
|
||||
alt Смена региона или ПВЗ
|
||||
Service -> Reserve: Снять резерв со всех товаров
|
||||
note right: При смене региона/ПВЗ\nснимается весь резерв
|
||||
end
|
||||
|
||||
== Применение изменений ==
|
||||
Service -> Differ: Применить изменения к заказу
|
||||
Service -> Creator: Сохранить заказ
|
||||
|
||||
== Обработка товаров ==
|
||||
note over Service: **ДЕТАЛЬНАЯ СХЕМА:**\n"Обработка товарных позиций"
|
||||
Service -> Service: Определить операции с товарами
|
||||
note right: Товары для добавления,\nизменения, удаления
|
||||
|
||||
alt Есть товары для добавления
|
||||
Service -> Creator: Добавить новые товары
|
||||
end
|
||||
|
||||
alt Есть товары для изменения
|
||||
Service -> Service: Обновить существующие товары
|
||||
note right: **См. детальную схему:**\n- Изменение количества (split)\n- Изменение цен\n- Изменение резерва
|
||||
end
|
||||
|
||||
alt Есть товары для удаления
|
||||
Service -> Reserve: Снять резерв
|
||||
Service -> Service: Удалить товары
|
||||
note right: **См. детальную схему:**\nУстановка статуса "Удален"
|
||||
end
|
||||
end
|
||||
|
||||
== Резервирование товаров ==
|
||||
note over Service: **ДЕТАЛЬНАЯ СХЕМА:**\n"Обработка товарных позиций"\n(блок "Резервирование")
|
||||
alt Есть товары для резервирования
|
||||
Service -> Reserve: Зарезервировать товары
|
||||
note right: Из массива reserve
|
||||
end
|
||||
|
||||
alt Есть товары для снятия резерва
|
||||
Service -> Reserve: Снять резерв
|
||||
note right: Из массива unreserve
|
||||
end
|
||||
|
||||
== Завершение ==
|
||||
Service -> Service: Обновить сайтовый заказ
|
||||
Service -> Service: Отправить SMS клиенту
|
||||
Service -> Service: Экспортировать в OMS
|
||||
Service --> Handler: Результат обработки
|
||||
Handler --> Kafka: Подтверждение
|
||||
|
||||
@enduml
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@startuml
|
||||
!theme plain
|
||||
title Обработка корректировки заказа на WTIS
|
||||
|
||||
start
|
||||
:Получение сообщения корректировки из Kafka oms.order.sync;
|
||||
|
||||
if (Заказ найден в БД?) then (нет)
|
||||
:Создать новый заказ;
|
||||
else (да)
|
||||
:Сравнить заказы OMS и WTIS по атрибутам;
|
||||
|
||||
if (Смена региона или ПВЗ И есть товары для резерва?) then (да)
|
||||
:Снять резерв с товаров из массива reserve;
|
||||
else (нет)
|
||||
endif
|
||||
|
||||
:Применить изменения к заказу;
|
||||
:Сохранить заказ в БД;
|
||||
|
||||
:Определить операции с товарами;
|
||||
|
||||
if (Есть товары для добавления?) then (да)
|
||||
:Добавить новые товары в заказ;
|
||||
else (нет)
|
||||
endif
|
||||
|
||||
if (Есть товары для изменения?) then (да)
|
||||
:Обновить существующие товары;
|
||||
if (Есть товары с уменьшением количества в резерве?) then (да)
|
||||
:Создать копию товара с новым количеством;
|
||||
:Удалить избыточную часть;
|
||||
else (нет)
|
||||
endif
|
||||
else (нет)
|
||||
endif
|
||||
|
||||
if (Есть товары для удаления?) then (да)
|
||||
:Снять резерв с товаров;
|
||||
:Установить статус "Удален";
|
||||
:Удалить товары из заказа;
|
||||
else (нет)
|
||||
endif
|
||||
|
||||
:Установить скидки, контакты, адреса;
|
||||
:Обновить дополнительные свойства заказа;
|
||||
|
||||
if (Есть товары для резервирования И не сайтовый заказ?) then (да)
|
||||
:Зарезервировать товары из массива reserve;
|
||||
else (нет)
|
||||
endif
|
||||
|
||||
if (Есть товары для снятия резерва И не отмена заказа?) then (да)
|
||||
:Снять резерв с товаров из массива unreserve;
|
||||
else (нет)
|
||||
endif
|
||||
|
||||
:Обновить заказ во wtis_doc_zayavki;
|
||||
:Обновить заказ во wtis_doc_zayavki_site;
|
||||
|
||||
if (Не сайтовый заказ И активный И подтвержденный?) then (да)
|
||||
:Отправить SMS клиенту с задержкой 10 минут;
|
||||
else (нет)
|
||||
endif
|
||||
|
||||
:Экспортировать данные обратно в OMS;
|
||||
endif
|
||||
|
||||
:Подтверждение обработки в Kafka;
|
||||
stop
|
||||
|
||||
@enduml
|
||||
48
oms/process/create-order.puml
Normal file
48
oms/process/create-order.puml
Normal file
@@ -0,0 +1,48 @@
|
||||
@startuml Процесс создания и жизненный цикл заказа
|
||||
|
||||
state "Заказ не создан" as start
|
||||
|
||||
state "НОВЫЙ" as new_order
|
||||
|
||||
state "ЗАБРОНИРОВАН" as booked {
|
||||
state "Таймер брони (3 дня)" as reserve_timer
|
||||
}
|
||||
|
||||
state "Оформление..." as processing_payment
|
||||
state "В РАБОТЕ" as in_progress
|
||||
state "ОТМЕНЕН" as cancelled
|
||||
|
||||
state "Товар в закупке" as purchasing
|
||||
|
||||
start --> new_order : Создать заказ
|
||||
|
||||
new_order --> cancelled : Кнопка "Отменить заказ"\n(Ручная отмена)
|
||||
|
||||
new_order --> booked : Кнопка "Забронировать"\n(Синхронный запрос во Втис)
|
||||
|
||||
booked --> booked : **Успех:** Товары зарезервированы
|
||||
|
||||
booked --> new_order : Кнопка "Отменить бронирование"\n(Таймер брони продолжает идти)"
|
||||
|
||||
reserve_timer --> cancelled : Истек 3 дня\n(Автоотмена брони)
|
||||
|
||||
booked --> cancelled : Кнопка "Отменить заказ"\n(Ручная отмена)
|
||||
|
||||
new_order --> processing_payment : Кнопка "Оформить"
|
||||
booked --> processing_payment : Кнопка "Оформить"
|
||||
|
||||
processing_payment --> in_progress : **Успех:** Товары доступны\nЗаказ передан в системы товародвижения
|
||||
|
||||
processing_payment --> purchasing : **Неудача:** Товара нет в наличии\n(Запуск процесса закупки)
|
||||
purchasing --> in_progress : Товар закуплен
|
||||
|
||||
state in_progress {
|
||||
state "Заказ выполняется" as active
|
||||
state "Резерв продлен" as extended
|
||||
active --> extended : Кнопка "Продлить резерв"\n(Правила: 1 раз если не оплачен,\n∞ раз (Ст. менеджер) если оплачен)
|
||||
extended --> active
|
||||
}
|
||||
|
||||
in_progress --> cancelled : Кнопка "Отменить заказ"
|
||||
|
||||
@enduml
|
||||
Reference in New Issue
Block a user