Files
plantUML/oms/process/correction-wtis.puml
2025-12-19 12:45:15 +03:00

158 lines
6.3 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@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