new scheme

This commit is contained in:
2025-12-19 12:45:15 +03:00
parent 7343edec51
commit 91ff1642dc
13 changed files with 1243 additions and 176 deletions

View 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

View 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

View 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