158 lines
6.3 KiB
Plaintext
158 lines
6.3 KiB
Plaintext
@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 |