Initial commit
This commit is contained in:
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/plantUML.iml" filepath="$PROJECT_DIR$/.idea/plantUML.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
19
.idea/php.xml
generated
Normal file
19
.idea/php.xml
generated
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="MessDetectorOptionsConfiguration">
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PHPCSFixerOptionsConfiguration">
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PHPCodeSnifferOptionsConfiguration">
|
||||||
|
<option name="highlightLevel" value="WARNING" />
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PhpStanOptionsConfiguration">
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PsalmOptionsConfiguration">
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
8
.idea/plantUML.iml
generated
Normal file
8
.idea/plantUML.iml
generated
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="WEB_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
255
example.proto
Normal file
255
example.proto
Normal file
@@ -0,0 +1,255 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package promo;
|
||||||
|
|
||||||
|
option go_package = "./;pb";
|
||||||
|
option php_namespace = "GRPC";
|
||||||
|
option php_metadata_namespace = "GRPC\\GPBMetadata";
|
||||||
|
|
||||||
|
import "google/api/annotations.proto";
|
||||||
|
|
||||||
|
service PromoService {
|
||||||
|
// ListProductsPromotion проверяет наличие акционных цен по товарам
|
||||||
|
rpc ListProductsPromotion(ListProductsPromotionRequest) returns (ListProductsPromotionResponse) {
|
||||||
|
option (google.api.http) = {
|
||||||
|
post: "/ListProductsPromotion"
|
||||||
|
body: "*"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPromotionsDetails возвращает общую информацию по акциям
|
||||||
|
rpc GetPromotionsDetails(GetPromotionsDetailsRequest) returns (GetPromotionsDetailsResponse) {
|
||||||
|
option (google.api.http) = {
|
||||||
|
post: "/GetPromotionsDetails"
|
||||||
|
body: "*"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListPromotionsV0 список активных акций
|
||||||
|
// возвращает список активных акций в порядке приоритета
|
||||||
|
// для кажого типа акции может вернуться максимум 2 акции среди которых нужно выбрать первую,
|
||||||
|
// которая подходит для текущего типа пользователя.
|
||||||
|
// Метод сделан для переходного периода, пока сайт не может получать тип пользователя
|
||||||
|
rpc ListPromotionsV0(ListPromotionsV0Request) returns (ListPromotionsV0Response) {
|
||||||
|
option deprecated = true;
|
||||||
|
option (google.api.http) = {
|
||||||
|
post: "/ListPromotionsV0"
|
||||||
|
body: "*"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListPromotionsV1 список активных акций
|
||||||
|
// возвращает по одной самой приоритетной акции каждого типа в порядке приоритета
|
||||||
|
rpc ListPromotionsV1(ListPromotionsV1Request) returns (ListPromotionsV1Response) {
|
||||||
|
option (google.api.http) = {
|
||||||
|
post: "/ListPromotionsV1"
|
||||||
|
body: "*"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPromotionDetails получает общую информацию об акции
|
||||||
|
rpc GetPromotionDetails(GetPromotionDetailsRequest) returns (GetPromotionDetailsResponse) {
|
||||||
|
option (google.api.http) = {
|
||||||
|
post: "/GetPromotionDetails"
|
||||||
|
body: "*"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPromotionRubrics возвращает список рубрик, в которых есть акционные товары
|
||||||
|
rpc GetPromotionRubrics(GetPromotionRubricsRequest) returns (GetPromotionRubricsResponse) {
|
||||||
|
option (google.api.http) = {
|
||||||
|
post: "/GetPromotionRubrics"
|
||||||
|
body: "*"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPromotionID возвращает ID акции по ее UUID
|
||||||
|
rpc GetPromotionID(GetPromotionIDRequest) returns (GetPromotionIDResponse) {
|
||||||
|
option (google.api.http) = {
|
||||||
|
post: "/GetPromotionID"
|
||||||
|
body: "*"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListPromotion листинг акции
|
||||||
|
rpc ListPromotion(ListPromotionRequest) returns (ListPromotionResponse) {
|
||||||
|
option (google.api.http) = {
|
||||||
|
post: "/ListPromotion"
|
||||||
|
body: "*"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
message Product {
|
||||||
|
string id = 1;
|
||||||
|
Price promotion_price = 2;
|
||||||
|
// availability_quantity - минимальное из 2х значений:
|
||||||
|
// "лимит в заказе" или "максимальное количество товара которое может быть продано по акционной цене"
|
||||||
|
float availability_quantity = 3;
|
||||||
|
// order_limit - максимальное количество товара в заказе
|
||||||
|
int32 order_limit = 4;
|
||||||
|
// is_upload_to_feed - выгружать ли товар в фиды
|
||||||
|
bool is_upload_to_feed = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Price {
|
||||||
|
int64 rubles = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum OrderBy {
|
||||||
|
ORDER_BY_UNSPECIFIED = 0;
|
||||||
|
ORDER_BY_PROMO_PRICE = 1;
|
||||||
|
ORDER_BY_DISCOUNT = 2;
|
||||||
|
ORDER_BY_POPULARITY = 3;
|
||||||
|
ORDER_BY_RATING = 4;
|
||||||
|
ORDER_BY_REVIEWS = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum OrderDirection {
|
||||||
|
ORDER_DIRECTION_UNSPECIFIED = 0;
|
||||||
|
ORDER_DIRECTION_ASC = 1;
|
||||||
|
ORDER_DIRECTION_DESC = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListProductsPromotionRequest {
|
||||||
|
repeated string product_ids = 1;
|
||||||
|
string locality_id = 2;
|
||||||
|
UserType user_type = 3;
|
||||||
|
bool disable_cache = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListProductsPromotionResponse {
|
||||||
|
repeated PromotionProducts promotion_products = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message PromotionProducts {
|
||||||
|
repeated Product products = 1;
|
||||||
|
PromotionDetails promotion_details = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Nameplate {
|
||||||
|
string title = 1;
|
||||||
|
string hint_description = 2;
|
||||||
|
string color = 3;
|
||||||
|
string text_color = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Meta {
|
||||||
|
string title = 1;
|
||||||
|
string description = 2;
|
||||||
|
string keywords = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum PromotionType {
|
||||||
|
PROMOTION_TYPE_UNSPECIFIED = 0;
|
||||||
|
PROMOTION_TYPE_BLACK_FRIDAY = 1;
|
||||||
|
PROMOTION_TYPE_PRODUCT_OF_THE_MONTH = 2;
|
||||||
|
PROMOTION_TYPE_SALE_IN_THE_STORE = 3;
|
||||||
|
PROMOTION_TYPE_SUPER_PRICE = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetPromotionsDetailsRequest {
|
||||||
|
repeated int32 promotion_ids = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetPromotionsDetailsResponse {
|
||||||
|
repeated PromotionDetails promotion_details = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message PromotionDetails {
|
||||||
|
int32 id = 1;
|
||||||
|
string uuid = 2;
|
||||||
|
string slug = 3;
|
||||||
|
PromotionClientType client_type = 4;
|
||||||
|
string name = 5;
|
||||||
|
string title = 6;
|
||||||
|
Nameplate nameplate = 7;
|
||||||
|
Meta meta = 8;
|
||||||
|
PromotionType type = 100;
|
||||||
|
string description = 9;
|
||||||
|
string frameColor = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PromotionClientType свойство акции определяющие контрагентов для которых действует акция
|
||||||
|
// PROMOTION_CLIENT_TYPE_ALL - акция подходит для любого клиента
|
||||||
|
// PROMOTION_CLIENT_TYPE_B2C - акция подходит только для b2c
|
||||||
|
// PROMOTION_CLIENT_TYPE_B2B - акция подходит только для b2b
|
||||||
|
enum PromotionClientType {
|
||||||
|
PROMOTION_CLIENT_TYPE_UNSPECIFIED = 0;
|
||||||
|
PROMOTION_CLIENT_TYPE_ALL = 1;
|
||||||
|
PROMOTION_CLIENT_TYPE_B2C = 2;
|
||||||
|
PROMOTION_CLIENT_TYPE_B2B = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListPromotionsV0Request {
|
||||||
|
string locality_id = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListPromotionsV0Response {
|
||||||
|
repeated PromotionDetails promotion_details = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListPromotionsV1Request {
|
||||||
|
string locality_id = 1;
|
||||||
|
UserType user_type = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListPromotionsV1Response {
|
||||||
|
repeated PromotionDetails promotion_details = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// UserType тип пользователя который делает запрос
|
||||||
|
enum UserType {
|
||||||
|
USER_TYPE_UNSPECIFIED = 0;
|
||||||
|
USER_TYPE_B2C = 1;
|
||||||
|
USER_TYPE_B2B = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetPromotionDetailsRequest {
|
||||||
|
string locality_id = 1;
|
||||||
|
UserType user_type = 2;
|
||||||
|
string promotion_slug = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetPromotionDetailsResponse {
|
||||||
|
PromotionDetails promotion_details = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetPromotionRubricsRequest {
|
||||||
|
string promotion_slug = 1;
|
||||||
|
string locality_id = 2;
|
||||||
|
UserType user_type = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetPromotionRubricsResponse {
|
||||||
|
repeated string rubric_ids = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetPromotionIDRequest {
|
||||||
|
string uuid = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetPromotionIDResponse {
|
||||||
|
int32 promotion_id = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListPromotionRequest {
|
||||||
|
string locality_id = 1;
|
||||||
|
UserType user_type = 2;
|
||||||
|
string promotion_slug = 3;
|
||||||
|
|
||||||
|
string rubric_id = 4;
|
||||||
|
OrderBy order_by = 7;
|
||||||
|
OrderDirection order_direction = 8;
|
||||||
|
|
||||||
|
int64 page_number = 9;
|
||||||
|
|
||||||
|
bool disable_cache = 10;
|
||||||
|
|
||||||
|
int32 limit = 11;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListPromotionResponse {
|
||||||
|
repeated Product products = 1;
|
||||||
|
int64 total_products = 2;
|
||||||
|
}
|
||||||
46
oms/autoorder/FRQ-1.puml
Normal file
46
oms/autoorder/FRQ-1.puml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
@startuml
|
||||||
|
mainframe "FRQ-1 Заказ.ПолучениеДанных."
|
||||||
|
Actor USER
|
||||||
|
participant SITE
|
||||||
|
participant WTIS
|
||||||
|
queue Название_топика_1
|
||||||
|
queue Название_топика_2
|
||||||
|
participant OMS
|
||||||
|
participant Officer
|
||||||
|
|
||||||
|
|
||||||
|
autonumber 1
|
||||||
|
USER -> USER: Создает заказ на сайте
|
||||||
|
USER -> SITE: Сущность "Заказ"\nс набором атрибутов
|
||||||
|
SITE -> WTIS: Сущность "Заказ"\nс набором атрибутов
|
||||||
|
WTIS -> WTIS: Проверка условий\nи отбор заказов
|
||||||
|
WTIS -> Название_топика_1: Записывает Сущность\n"Заказ" с набором\nатрибутов
|
||||||
|
OMS -> Название_топика_1: Читает Сущность\n"Заказ" с набором\nатрибутов
|
||||||
|
OMS -> OMS: Валидация КА
|
||||||
|
autonumber 7.1
|
||||||
|
alt валидация пройдена
|
||||||
|
OMS -> OMS: Продолжение сценария
|
||||||
|
else валидация не пройдена
|
||||||
|
OMS -> Название_топика_2: Сущность "Заказ"\nс набором атрибутов
|
||||||
|
end
|
||||||
|
autonumber 8
|
||||||
|
OMS <-> Officer: Получение лимитов офиса
|
||||||
|
OMS -> OMS: Валидация способа получения
|
||||||
|
alt валидация пройдена
|
||||||
|
autonumber 9.1
|
||||||
|
OMS -> OMS: Продолжение сценария
|
||||||
|
else валидация не пройдена
|
||||||
|
OMS -> Название_топика_2: Сущность "Заказ"\nс набором атрибутов
|
||||||
|
end
|
||||||
|
autonumber 10
|
||||||
|
OMS -> OMS: Валидация способа оплаты
|
||||||
|
alt валидация пройдена
|
||||||
|
autonumber 10.1
|
||||||
|
OMS -> OMS: Продолжение сценария
|
||||||
|
else валидация не пройдена
|
||||||
|
OMS -> Название_топика_2: Сущность "Заказ"\nс набором атрибутов
|
||||||
|
end
|
||||||
|
autonumber 11
|
||||||
|
OMS -> OMS: Данные о заказе\nполучены и провалидированы
|
||||||
|
OMS -> OMS: Переход к бизнес-проверкам
|
||||||
|
@enduml
|
||||||
55
oms/autoorder/FRQ-2.puml
Normal file
55
oms/autoorder/FRQ-2.puml
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
@startuml
|
||||||
|
mainframe "FRQ-2 Заказ.БизнесПроверки."
|
||||||
|
|
||||||
|
queue Название_топика_2
|
||||||
|
database ClickHouse
|
||||||
|
participant OMS
|
||||||
|
participant DRUZ
|
||||||
|
participant PDM
|
||||||
|
|
||||||
|
|
||||||
|
autonumber 1
|
||||||
|
OMS -> PDM: Запрашивает\nGUID производителя товара
|
||||||
|
OMS -> OMS: Проверка на возможность\nпродажи товара
|
||||||
|
|
||||||
|
alt валидация пройдена
|
||||||
|
autonumber 2.1
|
||||||
|
OMS -> OMS: Продолжение сценария
|
||||||
|
else валидация не пройдена
|
||||||
|
OMS -> ClickHouse: Логирование не\nпройденных проверок
|
||||||
|
OMS -> Название_топика_2: Сущность "Заказ"\nс набором атрибутов
|
||||||
|
end
|
||||||
|
autonumber 3
|
||||||
|
|
||||||
|
OMS -> DRUZ: Запрашивает \nпризнак "Наличие"
|
||||||
|
OMS -> OMS: Проверка что товары\nиз заказа в наличии
|
||||||
|
alt валидация пройдена
|
||||||
|
autonumber 4.1
|
||||||
|
OMS -> OMS: Продолжение сценария
|
||||||
|
else валидация не пройдена
|
||||||
|
OMS -> ClickHouse: Логирование не\nпройденных проверок
|
||||||
|
OMS -> Название_топика_2: Сущность "Заказ"\nс набором атрибутов
|
||||||
|
end
|
||||||
|
autonumber 5
|
||||||
|
OMS -> PDM: Запрашивает ВГХ товара
|
||||||
|
OMS -> OMS: Расчитывает объем и\nобщий вес заказа
|
||||||
|
OMS -> OMS: Проверка на лимиты\nВГХ ТТ
|
||||||
|
alt валидация пройдена
|
||||||
|
autonumber 7.1
|
||||||
|
OMS -> OMS: Продолжение сценария
|
||||||
|
else валидация не пройдена
|
||||||
|
OMS -> ClickHouse: Логирование не\nпройденных проверок
|
||||||
|
OMS -> Название_топика_2: Сущность "Заказ"\nс набором атрибутов
|
||||||
|
end
|
||||||
|
autonumber 8
|
||||||
|
OMS -> OMS: Проверка способа\nоплаты на ТТ
|
||||||
|
alt валидация пройдена
|
||||||
|
autonumber 8.1
|
||||||
|
OMS -> OMS: Продолжение сценария
|
||||||
|
else валидация не пройдена
|
||||||
|
OMS -> ClickHouse: Логирование не\nпройденных проверок
|
||||||
|
OMS -> Название_топика_2: Сущность "Заказ"\nс набором атрибутов
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@enduml
|
||||||
39
oms/autoorder/change-ao.puml
Normal file
39
oms/autoorder/change-ao.puml
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
@startuml
|
||||||
|
scale 1500x1500
|
||||||
|
mainframe Автооформление заказов
|
||||||
|
actor user as user
|
||||||
|
participant SITE
|
||||||
|
queue kafka
|
||||||
|
participant Gateway
|
||||||
|
participant workflow
|
||||||
|
participant wtis
|
||||||
|
|
||||||
|
user -> SITE: Оформляет заказ
|
||||||
|
SITE -> SITE: Сохраняет заказ в БД
|
||||||
|
SITE --> kafka: Пишет заказ в kafka
|
||||||
|
Gateway --> kafka: Забирает заказ
|
||||||
|
|
||||||
|
Gateway -> workflow: CreateB2CAO
|
||||||
|
workflow -> workflow: Проверяет условия АО
|
||||||
|
workflow -> workflow: Проверяет тип доставки
|
||||||
|
alt Тип доставки "Курьером"
|
||||||
|
workflow -> workflow: Устанавливает таймер на N минут
|
||||||
|
alt Поступила оплата в заказ до истечения срока таймера
|
||||||
|
workflow -> workflow: Заканчивает автооформление\nУстанавливает дату доставки\nзаказа
|
||||||
|
else Не поступила оплата в заказ до истечения срока таймера
|
||||||
|
workflow -> wtis: Заказ передается во WTIS\nМеняется мастер система
|
||||||
|
end
|
||||||
|
else Тип доставки "Самовывоз"
|
||||||
|
workflow -> workflow: Проверяет наличие\nкрупногабаритных товаров\nв заказе
|
||||||
|
alt Крупногабаритных товаров в заказе нет
|
||||||
|
workflow -> workflow: Заканчивает автооформление\nУстанавливает дату доставки\nзаказа
|
||||||
|
else Крупногабаритные товары в заказе есть
|
||||||
|
workflow -> workflow: Устанавливает таймер на N минут
|
||||||
|
alt Поступила оплата в заказ до истечения срока таймера
|
||||||
|
workflow -> workflow: Заканчивает автооформление\nУстанавливает дату доставки\nзаказа
|
||||||
|
else Не поступила оплата в заказ до истечения срока таймера
|
||||||
|
workflow -> wtis: Заказ передается во WTIS\nМеняется мастер система
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@enduml
|
||||||
30
oms/free-rest-and-reserve-journal/free-rest.puml
Normal file
30
oms/free-rest-and-reserve-journal/free-rest.puml
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
@startuml
|
||||||
|
scale 1200*1200
|
||||||
|
mainframe Получение свободных остатков
|
||||||
|
actor Пользователь as user
|
||||||
|
participant ARM as ARM
|
||||||
|
participant OMS as OMS
|
||||||
|
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 -> 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: Сращивает ответы\nмежду собой
|
||||||
|
OMS -> OMS: Формирует два массива:\n1. По лог.цепям\n2. Прочие склады
|
||||||
|
|
||||||
|
return answer API GET
|
||||||
|
ARM --> user: Рендерит данные в модальном окне
|
||||||
|
@enduml
|
||||||
24
oms/free-rest-and-reserve-journal/reserve-rest.puml
Normal file
24
oms/free-rest-and-reserve-journal/reserve-rest.puml
Normal file
@@ -0,0 +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: Рендерит данные в модальном окне
|
||||||
|
@enduml
|
||||||
15
oms/interface-arm/contragent/add-contact.puml
Normal file
15
oms/interface-arm/contragent/add-contact.puml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
@startuml
|
||||||
|
scale 800*800
|
||||||
|
mainframe Добавление контакта к КА в заказе
|
||||||
|
actor Пользователь as user
|
||||||
|
participant ARM as ARM
|
||||||
|
participant OMS as OMS
|
||||||
|
autonumber
|
||||||
|
|
||||||
|
user -> ARM: Добавляет контакт КА в кратком блоке КА
|
||||||
|
activate ARM
|
||||||
|
ARM -> OMS: API POST /orders/{orderId}/contacts/add
|
||||||
|
activate OMS
|
||||||
|
return API POST answer
|
||||||
|
return ок
|
||||||
|
@enduml
|
||||||
15
oms/interface-arm/contragent/add-contragent-to-order.puml
Normal file
15
oms/interface-arm/contragent/add-contragent-to-order.puml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
@startuml
|
||||||
|
scale 800*800
|
||||||
|
mainframe Добавление КА к заказу
|
||||||
|
actor Пользователь as user
|
||||||
|
participant ARM as ARM
|
||||||
|
participant OMS as OMS
|
||||||
|
autonumber
|
||||||
|
|
||||||
|
user -> ARM: Добавляет КА в заказ
|
||||||
|
activate ARM
|
||||||
|
ARM -> OMS: API POST /orders/{orderId}/contractors/add
|
||||||
|
activate OMS
|
||||||
|
return API POST answer
|
||||||
|
return ок
|
||||||
|
@enduml
|
||||||
30
oms/interface-arm/contragent/change-contractor.puml
Normal file
30
oms/interface-arm/contragent/change-contractor.puml
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
@startuml
|
||||||
|
scale 800*800
|
||||||
|
mainframe Обновление данных в модели КА
|
||||||
|
actor Пользователь as user
|
||||||
|
participant ARM as ARM
|
||||||
|
participant OMS as OMS
|
||||||
|
participant MSKB as MSKB
|
||||||
|
autonumber
|
||||||
|
|
||||||
|
user -> ARM: Нажимает кнопку "Сохранить"
|
||||||
|
ARM -> OMS: API PUT /contractors/{contractorID}
|
||||||
|
activate OMS
|
||||||
|
OMS -> OMS: Разделяет модель КА\nна основные поля\n+ контакты
|
||||||
|
alt Если изменена только основная модель
|
||||||
|
OMS -> MSKB: API POST api/business/v2/physic/update
|
||||||
|
activate MSKB
|
||||||
|
return answer API POST
|
||||||
|
else Если добавлены контакты
|
||||||
|
OMS -> MSKB: API POST api/business/v2/contact/create
|
||||||
|
activate MSKB
|
||||||
|
return answer API POST
|
||||||
|
else Если удалены контакты
|
||||||
|
OMS -> MSKB: Удаление контакта КА:\n API DELETE api/business/v2/contact/delete
|
||||||
|
activate MSKB
|
||||||
|
return answer API DELETE
|
||||||
|
end
|
||||||
|
|
||||||
|
return answer API PUT
|
||||||
|
ARM --> user: Показывает сообщение и\nзакрывает модалку
|
||||||
|
@enduml
|
||||||
19
oms/interface-arm/contragent/create-contractor.puml
Normal file
19
oms/interface-arm/contragent/create-contractor.puml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
@startuml
|
||||||
|
scale 800*800
|
||||||
|
mainframe Логика "Создание КА"
|
||||||
|
actor Пользователь as user
|
||||||
|
participant ARM as ARM
|
||||||
|
participant OMS as OMS
|
||||||
|
participant MSKB as MSKB
|
||||||
|
autonumber
|
||||||
|
|
||||||
|
user -> ARM: Нажимает кнопку "Создать контрагента"
|
||||||
|
ARM -> OMS: API POST /contractors/create
|
||||||
|
activate OMS
|
||||||
|
OMS -> MSKB: API POST api/business/v2/physic/create
|
||||||
|
activate MSKB
|
||||||
|
return answer API POST
|
||||||
|
|
||||||
|
return answer API POST
|
||||||
|
ARM --> user: Показывает сообщение и\nзакрывает модалку
|
||||||
|
@enduml
|
||||||
19
oms/interface-arm/contragent/get-contractor-info.puml
Normal file
19
oms/interface-arm/contragent/get-contractor-info.puml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
@startuml
|
||||||
|
scale 800*800
|
||||||
|
mainframe Получение данных для полной карточки КА
|
||||||
|
actor Пользователь as user
|
||||||
|
participant ARM as ARM
|
||||||
|
participant OMS as OMS
|
||||||
|
participant MSKB as MSKB
|
||||||
|
autonumber
|
||||||
|
|
||||||
|
user -> ARM: Открывает карточку контрагента
|
||||||
|
ARM -> OMS: API GET /contractors/{contractorID}
|
||||||
|
activate OMS
|
||||||
|
OMS -> MSKB: GraphQL contractorPhysic
|
||||||
|
activate MSKB
|
||||||
|
return answer API GET
|
||||||
|
|
||||||
|
return answer get_short_info_contact
|
||||||
|
ARM --> user: Рендерит карточку контрагента
|
||||||
|
@enduml
|
||||||
21
oms/interface-arm/contragent/get-contragent-info.puml
Normal file
21
oms/interface-arm/contragent/get-contragent-info.puml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
@startuml
|
||||||
|
scale 800*800
|
||||||
|
mainframe Логика подблока "Информация о контрагенте"
|
||||||
|
actor Пользователь as user
|
||||||
|
participant ARM as ARM
|
||||||
|
participant OMS as OMS
|
||||||
|
participant WTIS as WTIS
|
||||||
|
autonumber
|
||||||
|
|
||||||
|
user -> ARM: Нажимает кнопку раскрытия блока
|
||||||
|
activate ARM
|
||||||
|
ARM -> OMS: API GET\n/contractors/{contractorID}/orderInfo
|
||||||
|
activate OMS
|
||||||
|
OMS -> WTIS: API GET\napi/order/oms_export/contragent_info_oms/{guid}
|
||||||
|
activate WTIS
|
||||||
|
WTIS -> WTIS: prepare data
|
||||||
|
return API GET answer
|
||||||
|
return API GET answer
|
||||||
|
|
||||||
|
return Рендерит блок
|
||||||
|
@enduml
|
||||||
38
oms/interface-arm/contragent/search-contractor.puml
Normal file
38
oms/interface-arm/contragent/search-contractor.puml
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
@startuml
|
||||||
|
scale 800*800
|
||||||
|
mainframe Логика блока "Поиск КА"
|
||||||
|
actor Пользователь as user
|
||||||
|
participant ARM as ARM
|
||||||
|
participant OMS as OMS
|
||||||
|
participant MSKB as MSKB
|
||||||
|
autonumber
|
||||||
|
|
||||||
|
user -> ARM: Нажимает кнопку "Поиск КА"
|
||||||
|
|
||||||
|
return рендерит шаблон модального окна
|
||||||
|
|
||||||
|
alt Если ищем только по номеру телефона
|
||||||
|
user -> ARM: Заполняет номер телефона полностью
|
||||||
|
else Если ищем только по email
|
||||||
|
user -> ARM: Заполняет email полностью
|
||||||
|
else Если ищем по номеру телефона И email
|
||||||
|
user -> ARM: Заполняет номер телефона И email полностью
|
||||||
|
end
|
||||||
|
ARM -> ARM: валидирует поля
|
||||||
|
alt Валидация не успешна
|
||||||
|
ARM -> user: Информирует пользователя об ошибках
|
||||||
|
|
||||||
|
else Валидация успешно пройдена
|
||||||
|
ARM -> OMS: /contractors/search
|
||||||
|
activate OMS
|
||||||
|
end
|
||||||
|
|
||||||
|
OMS -> MSKB: API POST /api/business/v2/physic/search
|
||||||
|
activate MSKB
|
||||||
|
MSKB -> MSKB: prepare_data
|
||||||
|
return answer API POST
|
||||||
|
|
||||||
|
return success
|
||||||
|
|
||||||
|
ARM -> user: Отображает результаты поиска
|
||||||
|
@enduml
|
||||||
20
oms/interface-arm/docs/get realizations MVP.puml
Normal file
20
oms/interface-arm/docs/get realizations MVP.puml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
@startuml
|
||||||
|
scale 1000*1000
|
||||||
|
mainframe Получение данных (Реализации, оплаты) от WTIS MVP
|
||||||
|
participant WTIS as WTIS
|
||||||
|
queue kafka
|
||||||
|
participant workflow as workflow
|
||||||
|
collections Redis as redis
|
||||||
|
autonumber
|
||||||
|
hnote over WTIS: После MVP WTIS изменится\nна сервис баланса
|
||||||
|
|
||||||
|
loop Всегда
|
||||||
|
WTIS -> kafka: Пишет все инфо\nо документах по заказу
|
||||||
|
workflow -> kafka: Получает документы\nк заказу из очереди
|
||||||
|
alt данных нет в кэше по ключу
|
||||||
|
workflow -> redis: Сохраняет в кэш\nКраткую форму на 7 дней\nПолную форму на 3 дня
|
||||||
|
else данные есть в кэше по ключу
|
||||||
|
workflow -> redis: Удаляет запись по ключу
|
||||||
|
workflow -> redis: Сохраняет в кэш\nКраткую форму на 7 дней\nПолную форму на 3 дня
|
||||||
|
end
|
||||||
|
@enduml
|
||||||
19
oms/interface-arm/docs/payment-with-kafka.puml
Normal file
19
oms/interface-arm/docs/payment-with-kafka.puml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
@startuml
|
||||||
|
scale 1000*1000
|
||||||
|
mainframe Получение данных безналичная оплата / оплата по счету из kafka
|
||||||
|
participant paykeeper
|
||||||
|
participant 1C
|
||||||
|
queue kafka
|
||||||
|
participant workflow as workflow
|
||||||
|
collections PaymentsDb as PaymentsDb
|
||||||
|
autonumber
|
||||||
|
|
||||||
|
loop Всегда
|
||||||
|
paykeeper -> kafka: Пишет все инфо\nо документах по заказу
|
||||||
|
1C -> kafka: Пишет все инфо\nо документах по заказу
|
||||||
|
workflow -> kafka: Получает документы\nк заказу из очереди
|
||||||
|
workflow -> workflow: Преобразовывает данные
|
||||||
|
workflow -> PaymentsDb: Записывает в коллекцию
|
||||||
|
end
|
||||||
|
|
||||||
|
@enduml
|
||||||
46
oms/interface-arm/docs/payment.puml
Normal file
46
oms/interface-arm/docs/payment.puml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
@startuml
|
||||||
|
scale 1000*1000
|
||||||
|
mainframe Получение данных для отрисовки таблицы оплат MVP
|
||||||
|
participant WTIS as WTIS
|
||||||
|
collections Redis as redis
|
||||||
|
participant payments as payments
|
||||||
|
participant workflow as workflow
|
||||||
|
participant gateway as gateway
|
||||||
|
participant ARM as ARM
|
||||||
|
actor user as user
|
||||||
|
autonumber
|
||||||
|
hnote over WTIS: После MVP WTIS изменится\nна сервис баланса
|
||||||
|
|
||||||
|
autonumber 1
|
||||||
|
user -> ARM: Открывает заказ
|
||||||
|
ARM -> gateway: Запрашивает\nдокументы к заказу
|
||||||
|
activate gateway
|
||||||
|
== Получение данных о наличной оплате ==
|
||||||
|
gateway -> redis: Проверяет наличие\nданных в кэше
|
||||||
|
alt данные есть в кэше
|
||||||
|
redis --> gateway: Возвращает\nдокументы\n к заказу
|
||||||
|
else данных нет в кэше
|
||||||
|
redis --> gateway: Возвращает\nпустой ответ
|
||||||
|
gateway -> workflow: Триггерит на\nобновление данных
|
||||||
|
activate workflow
|
||||||
|
workflow -> WTIS: API GET order_doc_info()
|
||||||
|
activate WTIS
|
||||||
|
WTIS --> workflow: answer
|
||||||
|
deactivate WTIS
|
||||||
|
workflow -> redis: Сохраняет в кэш\nКраткую форму на 7 дней\nПолную форму на 3 дня (спорно)
|
||||||
|
redis --> workflow: Сообщение об успешном сохранении
|
||||||
|
workflow --> gateway: Возвращает\nдокументы\n к заказу
|
||||||
|
end
|
||||||
|
== Получение данных о других типах оплаты ==
|
||||||
|
workflow -> payments: Запрашивает данные\nоб онлайн оплате И\nпо счету
|
||||||
|
activate payments
|
||||||
|
payments --> workflow: answer
|
||||||
|
deactivate payments
|
||||||
|
workflow -> workflow: Агрегирует данные\nс источников
|
||||||
|
workflow --> gateway: answer
|
||||||
|
deactivate workflow
|
||||||
|
gateway --> ARM: возвращает\nданные об оплатах
|
||||||
|
deactivate gateway
|
||||||
|
ARM --> user: Рендерит блок\nдокументов
|
||||||
|
|
||||||
|
@enduml
|
||||||
36
oms/interface-arm/docs/realizations-or-payment.puml
Normal file
36
oms/interface-arm/docs/realizations-or-payment.puml
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
@startuml
|
||||||
|
scale 1000*1000
|
||||||
|
mainframe Получение данных для отрисовки модалки Реализации или оплаты наличными
|
||||||
|
participant WTIS as WTIS
|
||||||
|
collections Redis as redis
|
||||||
|
participant workflow as workflow
|
||||||
|
participant gateway as gateway
|
||||||
|
participant ARM as ARM
|
||||||
|
actor user as user
|
||||||
|
|
||||||
|
autonumber
|
||||||
|
hnote over WTIS: После MVP WTIS изменится\nна сервис баланса
|
||||||
|
|
||||||
|
user -> ARM: Открывает заказ
|
||||||
|
ARM -> gateway: Запрашивает\nдокументы к заказу
|
||||||
|
activate gateway
|
||||||
|
gateway -> redis: Проверяет наличие\nданных в кэше
|
||||||
|
alt данные есть в кэше
|
||||||
|
redis --> gateway: Возвращает\nдокументы\n к заказу
|
||||||
|
else данных нет в кэше
|
||||||
|
redis --> gateway: Возвращает\nпустой ответ
|
||||||
|
gateway -> workflow: Триггерит на\nобновление данных
|
||||||
|
activate workflow
|
||||||
|
workflow -> WTIS: API GET order_doc_info()
|
||||||
|
activate WTIS
|
||||||
|
return answer
|
||||||
|
deactivate WTIS
|
||||||
|
workflow -> redis: Сохраняет в кэш\nКраткую форму на 7 дней\nПолную форму на 3 дня (спорно)
|
||||||
|
redis --> workflow: Сообщение об успешном сохранении
|
||||||
|
workflow --> gateway: Возвращает\nдокументы\n к заказу
|
||||||
|
deactivate workflow
|
||||||
|
end
|
||||||
|
gateway --> ARM: данные по документу
|
||||||
|
ARM -> user: рендерит модальное\nокно с инфо\nо документе
|
||||||
|
|
||||||
|
@enduml
|
||||||
38
oms/interface-arm/docs/realizations.puml
Normal file
38
oms/interface-arm/docs/realizations.puml
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
@startuml
|
||||||
|
scale 1000*1000
|
||||||
|
mainframe Получение данных для отрисовки таблицы реализаций MVP
|
||||||
|
participant WTIS as WTIS
|
||||||
|
collections Redis as redis
|
||||||
|
participant workflow as workflow
|
||||||
|
participant gateway as gateway
|
||||||
|
participant ARM as ARM
|
||||||
|
actor user as user
|
||||||
|
autonumber
|
||||||
|
hnote over WTIS: После MVP WTIS изменится\nна сервис баланса
|
||||||
|
|
||||||
|
autonumber 1
|
||||||
|
user -> ARM: Открывает заказ
|
||||||
|
ARM -> gateway: Запрашивает\nдокументы к заказу
|
||||||
|
activate gateway
|
||||||
|
gateway -> redis: Проверяет наличие\nданных в кэше
|
||||||
|
alt данные есть в кэше
|
||||||
|
redis --> gateway: Возвращает\nдокументы\n к заказу
|
||||||
|
else данных нет в кэше
|
||||||
|
redis --> gateway: Возвращает\nпустой ответ
|
||||||
|
gateway -> workflow: Триггерит на\nобновление данных
|
||||||
|
activate workflow
|
||||||
|
workflow -> WTIS: API GET order_doc_info()
|
||||||
|
activate WTIS
|
||||||
|
return answer
|
||||||
|
deactivate WTIS
|
||||||
|
workflow -> redis: Сохраняет в кэш\nКраткую форму на 7 дней\nПолную форму на 3 дня (спорно)
|
||||||
|
redis --> workflow: Сообщение об успешном сохранении
|
||||||
|
workflow --> gateway: Возвращает\nдокументы\n к заказу
|
||||||
|
deactivate workflow
|
||||||
|
end
|
||||||
|
|
||||||
|
gateway --> ARM: возвращает\nданные о заказе
|
||||||
|
deactivate gateway
|
||||||
|
ARM --> user: Рендерит блок\nдокументов
|
||||||
|
|
||||||
|
@enduml
|
||||||
41
oms/interface-arm/order/get-region.puml
Normal file
41
oms/interface-arm/order/get-region.puml
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
@startuml
|
||||||
|
scale 800*800
|
||||||
|
mainframe Получение списка регионов от Officer
|
||||||
|
actor Пользователь as user
|
||||||
|
participant ARM as ARM
|
||||||
|
participant gateway as gateway
|
||||||
|
collections redis as redis
|
||||||
|
participant workflow as workflow
|
||||||
|
participant officer as officer
|
||||||
|
autonumber
|
||||||
|
|
||||||
|
user -> ARM: Открывает форму\nзаказа
|
||||||
|
activate ARM
|
||||||
|
ARM -> gateway: REST API GET\n инфо о регионах
|
||||||
|
activate gateway
|
||||||
|
gateway -> redis: Запрашивает\nсписок\nрегионов
|
||||||
|
|
||||||
|
opt Данные о регионах есть в кэше
|
||||||
|
redis --> gateway: answer
|
||||||
|
else Данные необходимо обновить в кэше
|
||||||
|
gateway -> workflow: триггерит обновление
|
||||||
|
activate workflow
|
||||||
|
workflow -> officer: GraphQL method\noffices
|
||||||
|
activate officer
|
||||||
|
officer --> workflow: GraphQL answer
|
||||||
|
workflow -> officer: GraphQL method\nlocalities
|
||||||
|
officer --> workflow: GraphQL answer
|
||||||
|
deactivate officer
|
||||||
|
workflow -> workflow: Обработка\nданных
|
||||||
|
workflow -> redis: Записывает регионы\nи параметры в экш
|
||||||
|
workflow --> gateway: answer
|
||||||
|
deactivate workflow
|
||||||
|
end
|
||||||
|
|
||||||
|
gateway --> ARM: REST API GET\nanswer
|
||||||
|
deactivate gateway
|
||||||
|
ARM --> user: Рендерит данные
|
||||||
|
deactivate ARM
|
||||||
|
@enduml
|
||||||
|
|
||||||
|
|
||||||
23
oms/personal-cabinet/change note.puml
Normal file
23
oms/personal-cabinet/change note.puml
Normal file
@@ -0,0 +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
|
||||||
|
@enduml
|
||||||
23
oms/personal-cabinet/favorites.puml
Normal file
23
oms/personal-cabinet/favorites.puml
Normal file
@@ -0,0 +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
|
||||||
|
@enduml
|
||||||
17
oms/personal-cabinet/get-info-order.puml
Normal file
17
oms/personal-cabinet/get-info-order.puml
Normal file
@@ -0,0 +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: Рендерит информационные блоки
|
||||||
|
@enduml
|
||||||
16
oms/personal-cabinet/get-note.puml
Normal file
16
oms/personal-cabinet/get-note.puml
Normal file
@@ -0,0 +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: Рендерит текст в блоке заметок
|
||||||
|
@enduml
|
||||||
58
oms/process/action.puml
Normal file
58
oms/process/action.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
|
||||||
26
oms/process/basket-import.puml
Normal file
26
oms/process/basket-import.puml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
@startuml
|
||||||
|
scale 800x800
|
||||||
|
actor user as user
|
||||||
|
participant ARM
|
||||||
|
participant Gateway
|
||||||
|
participant SITE
|
||||||
|
|
||||||
|
autonumber
|
||||||
|
user -> ARM: Вводит номер корзины
|
||||||
|
ARM -> Gateway: Запрос на info/cart
|
||||||
|
Gateway -> SITE: Запрос на api/v1/json/user-cart/
|
||||||
|
SITE --> Gateway: answer
|
||||||
|
Gateway -> Gateway: Получает название региона из кэша
|
||||||
|
Gateway -> Gateway: Запрашивает цены из SCROOGE
|
||||||
|
Gateway -> Gateway: Запрашивает инфо о товаре из PDM
|
||||||
|
Gateway -> Gateway: Собирает ответ для frontend
|
||||||
|
Gateway --> ARM: answer
|
||||||
|
ARM -> ARM: Проверяет регионы\nв запросе и в заказе
|
||||||
|
|
||||||
|
alt Регион корзины == регион заказа
|
||||||
|
ARM --> user: answer
|
||||||
|
else Регион корзины <> регион заказа
|
||||||
|
ARM -> user: Запрашивает\nподтверждение\nо смене региона
|
||||||
|
end
|
||||||
|
|
||||||
|
@enduml
|
||||||
77
oms/process/booking.puml
Normal file
77
oms/process/booking.puml
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
@startuml
|
||||||
|
scale 2000x2000
|
||||||
|
mainframe Внесение изменения в заказ в статусе "В работе"
|
||||||
|
Actor USER
|
||||||
|
participant ARM
|
||||||
|
participant Gateway
|
||||||
|
participant Workflow
|
||||||
|
participant History
|
||||||
|
participant WTIS
|
||||||
|
|
||||||
|
'-------------------------------------------action-------------------
|
||||||
|
autonumber
|
||||||
|
|
||||||
|
USER -> ARM: Открывает заказ
|
||||||
|
USER -> ARM: Нажимает кнопку\n"Редактировать заказ"
|
||||||
|
ARM -> Gateway: Запрос с номером заказа
|
||||||
|
Gateway -> Workflow: Инициирует запуск workflow
|
||||||
|
Workflow -> History: Открывает транзакцию\nrpc StartTransaction(StartTransactionRequest)
|
||||||
|
History --> Workflow: Подтверждает открытие транзакции\nreturn StartTransactionResponse
|
||||||
|
Workflow --> Gateway: Возвращает поля доступные\nдля редактирования
|
||||||
|
Gateway --> ARM: Возвращает ответ что транзакция открыта
|
||||||
|
ARM --> USER: Разблокирует все элементы в\nинтерфейсе для редактирования
|
||||||
|
|
||||||
|
loop Внесение корректировок пользователем и наполнение транзакции
|
||||||
|
USER -> ARM: Вносит корректировки
|
||||||
|
ARM -> Gateway: Использует стандартные\nendpoint заказа
|
||||||
|
Gateway -> Workflow: Передает запрос в workflow
|
||||||
|
Workflow -> Workflow: Проверяет что транзакция открыта:\n<b>В ТЗ: Проверка наличия открытой транзакции
|
||||||
|
autonumber 14.1.1
|
||||||
|
alt Транзакция закрыта
|
||||||
|
Workflow -> Gateway: Возвращает ошибку
|
||||||
|
Gateway -> ARM: answer
|
||||||
|
ARM -> USER: Выводит сообщение:\n"Транзакция была закрыта,\nнеобходимо заново открыть\nзаказ на корректировку"
|
||||||
|
|
||||||
|
autonumber 14.2.1
|
||||||
|
else Транзакция открыта
|
||||||
|
Workflow -> History: Отправляет GRPC сигнал\nс корректировками в History\nrpc CreateEvent(CreateEventRequest)
|
||||||
|
History -> History: Сохраняет\nкорректировки
|
||||||
|
History --> Workflow: return CreateEventResponse
|
||||||
|
Workflow --> Gateway: answer
|
||||||
|
Gateway --> ARM: answer
|
||||||
|
end 'Это end alt
|
||||||
|
autonumber 15
|
||||||
|
|
||||||
|
end 'Это end loop
|
||||||
|
|
||||||
|
USER -> ARM: Нажимает кнопку\n"Сохранить изменения"\nИЛИ "Отменить изменения"
|
||||||
|
ARM -> Gateway: Отправляет запрос на\n/orders/end-correction/orderID={orderGUID}
|
||||||
|
Gateway -> Workflow: Вызывает wf
|
||||||
|
Workflow -> History: Запрашивает актуальное\nсостояние заказа\nrpc GetLastState(GetLastStateRequest)
|
||||||
|
History --> Workflow: Возвращает Модель заказа\nс примененными корректировками\nreturn GetLastStateResponse
|
||||||
|
Workflow -> Workflow: Закрывает транзакцию,\nсохраняет актуальный\nзаказ в Order/shipment
|
||||||
|
Workflow -> WTIS: Отправляет модель заказа через топик kafka:\n<b>В ТЗ: Функциональные изменения - "На стороне Gateway" - п.2
|
||||||
|
WTIS -> WTIS: Обновляет сущность заказа
|
||||||
|
|
||||||
|
autonumber 22.1.1
|
||||||
|
alt Изменения успешно проведены
|
||||||
|
WTIS --> Workflow: Возвращает ответ success
|
||||||
|
Workflow -> History: Отправляет GRPC сигнал о закрытии\nтранзакции\nrpc EndTransaction(EndTransactionRequest)
|
||||||
|
History --> Workflow: Подтверждает закрытие\nтранзакции\nreturn EndTransactionResponse
|
||||||
|
Workflow --> Gateway: answer
|
||||||
|
Gateway --> ARM: answer
|
||||||
|
ARM --> USER: Отображает модальное\nокно "Изменения\nуспешно сохранены"
|
||||||
|
|
||||||
|
autonumber 22.2.1
|
||||||
|
else Изменения не проведены
|
||||||
|
WTIS --> Workflow: Возвращает ответ failed
|
||||||
|
Workflow -> History: Отправляет GRPC сигнал\nоб удалении транзакции
|
||||||
|
History --> Workflow: Отправляет GRPC сигнал\nчто транзакция удалена
|
||||||
|
Workflow -> Workflow: Откатывает изменения,\nудаляет корректировки
|
||||||
|
Workflow --> Gateway: answer
|
||||||
|
Gateway --> ARM: answer
|
||||||
|
ARM --> USER: Отображает модальное\nокно "Не удалось\nприменить изменения"
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@enduml
|
||||||
79
oms/process/correction.puml
Normal file
79
oms/process/correction.puml
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
@startuml
|
||||||
|
scale 2000x2000
|
||||||
|
mainframe Внесение изменения в заказ в статусе "В работе"
|
||||||
|
Actor USER
|
||||||
|
participant ARM
|
||||||
|
participant Gateway
|
||||||
|
participant Workflow
|
||||||
|
participant History
|
||||||
|
participant WTIS
|
||||||
|
|
||||||
|
'-------------------------------------------action-------------------
|
||||||
|
autonumber
|
||||||
|
|
||||||
|
USER -> ARM: Открывает заказ
|
||||||
|
USER -> ARM: Нажимает кнопку\n"Редактировать заказ"
|
||||||
|
ARM -> Gateway: Запрос с номером заказа
|
||||||
|
Gateway -> Workflow: Инициирует запуск workflow
|
||||||
|
Workflow -> History: Открывает транзакцию\nrpc StartTransaction(StartTransactionRequest)
|
||||||
|
History --> Workflow: Подтверждает открытие транзакции\nreturn StartTransactionResponse
|
||||||
|
Workflow -> Workflow: Запускает workflow с бизнес-логикой:\n<b>В ТЗ: Функциональные изменения\n<b>-На стороне Workflow\n<b>-"Получение доступных типов корректировок"
|
||||||
|
Workflow -> WTIS: Запрашивает признак доступности корректировки для атрибутов
|
||||||
|
WTIS -> Workflow: Возвращает доступные для редактирования атрибуты
|
||||||
|
Workflow --> Gateway: Возвращает поля доступные\nдля редактирования
|
||||||
|
Gateway --> ARM: Возвращает атрибуты\nдоступные для редактирования
|
||||||
|
ARM --> USER: Дизейблит недоступные для\nредактирования элементы\n<b>В ТЗ: Функциональные изменения\n<b>"На стороне ARM"
|
||||||
|
|
||||||
|
loop Внесение корректировок пользоваелем и наполнение транзакции
|
||||||
|
USER -> ARM: Вносит корректировки
|
||||||
|
ARM -> Gateway: Использует стандартные\nendpoint заказа
|
||||||
|
Gateway -> Workflow: Передает запрос в workflow
|
||||||
|
Workflow -> Workflow: Проверяет что транзакция открыта:\n<b>В ТЗ: Проверка наличия открытой транзакции
|
||||||
|
autonumber 14.1.1
|
||||||
|
alt Транзакция закрыта
|
||||||
|
Workflow -> Gateway: Возвращает ошибку
|
||||||
|
Gateway -> ARM: answer
|
||||||
|
ARM -> USER: Выводит сообщение:\n"Транзакция была закрыта,\nнеобходимо заново открыть\nзаказ на корректировку"
|
||||||
|
|
||||||
|
autonumber 14.2.1
|
||||||
|
else Транзакция открыта
|
||||||
|
Workflow -> History: Отправляет GRPC сигнал\nс корректировками в History\nrpc CreateEvent(CreateEventRequest)
|
||||||
|
History -> History: Сохраняет\nкорректировки
|
||||||
|
History --> Workflow: return CreateEventResponse
|
||||||
|
Workflow --> Gateway: answer
|
||||||
|
Gateway --> ARM: answer
|
||||||
|
end 'Это end alt
|
||||||
|
autonumber 15
|
||||||
|
|
||||||
|
end 'Это end loop
|
||||||
|
|
||||||
|
USER -> ARM: Нажимает кнопку\n"Сохранить изменения"\nИЛИ "Отменить изменения"
|
||||||
|
ARM -> Gateway: Отправляет запрос на\n/orders/end-correction/orderID={orderGUID}
|
||||||
|
Gateway -> Workflow: Вызывает wf
|
||||||
|
Workflow -> History: Запрашивает актуальное\nсостояние заказа\nrpc GetLastState(GetLastStateRequest)
|
||||||
|
History --> Workflow: Возвращает Модель заказа\nс примененнеными корректировками\nreturn GetLastStateResponse
|
||||||
|
Workflow -> Workflow: Закрывает транзакцию,\nсохраняет актуальный\nзаказ в Order/shipment
|
||||||
|
Workflow -> WTIS: Отправляет модель заказа через топик kafka: <b>oms.order.sync</b>\n<b>В ТЗ: Функциональные изменения - "На стороне Gateway" - п.2
|
||||||
|
WTIS -> WTIS: Пытается применить\nвсе изменения в заказе
|
||||||
|
|
||||||
|
autonumber 22.1.1
|
||||||
|
alt Изменения успешно проведены
|
||||||
|
WTIS --> Workflow: Возвращает сигнал в temporal success
|
||||||
|
Workflow -> History: Отправляет GRPC сигнал о закрытии\nтранзакции\nrpc EndTransaction(EndTransactionRequest)
|
||||||
|
History --> Workflow: Подтверждает закрытие\nтранзакции\nreturn EndTransactionResponse
|
||||||
|
Workflow --> Gateway: answer
|
||||||
|
Gateway --> ARM: answer
|
||||||
|
ARM --> USER: Отображает модальное\nокно "Изменения\nуспешно сохранены"
|
||||||
|
|
||||||
|
autonumber 22.2.1
|
||||||
|
else Изменения не проведены
|
||||||
|
WTIS --> Workflow: Возвращает сигнал в temporal failed
|
||||||
|
Workflow -> History: Отправляет GRPC сигнал\nоб удалении транзакции
|
||||||
|
History --> Workflow: Отправляет GRPC сигнал\nчто транзакция удалена
|
||||||
|
Workflow -> Workflow: Откатывает изменения,\nудаляет корректировки
|
||||||
|
Workflow --> Gateway: answer
|
||||||
|
Gateway --> ARM: answer
|
||||||
|
ARM --> USER: Отображает модальное\nокно "Не удалось\nприменить изменения"
|
||||||
|
end
|
||||||
|
|
||||||
|
@enduml
|
||||||
59
oms/site-integration/AS IS.puml
Normal file
59
oms/site-integration/AS IS.puml
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
@startuml
|
||||||
|
scale 1300x1300
|
||||||
|
mainframe AS IS обмен по созданию заказа на сайте
|
||||||
|
Actor USER
|
||||||
|
participant SITE
|
||||||
|
database SITE_database
|
||||||
|
queue kafka_1
|
||||||
|
participant WTIS
|
||||||
|
database WTIS_database
|
||||||
|
queue kafka_2
|
||||||
|
participant OMS
|
||||||
|
database OMS_database
|
||||||
|
'-------------------------------------------action-------------------
|
||||||
|
autonumber
|
||||||
|
|
||||||
|
USER -> SITE: Нажимает кнопку оформить заказ
|
||||||
|
SITE -> SITE_database: Проводит внутренние проверки\nи сохраняет в БД
|
||||||
|
SITE_database -> SITE: Заказ успешно сохранен
|
||||||
|
|
||||||
|
autonumber 4.1
|
||||||
|
alt Тип доставки в заказе: Самовывоз
|
||||||
|
SITE -> kafka_1: Записывает заказ в топик kafka: site.order.pickup.created
|
||||||
|
else Тип доставки в заказе: Курьером
|
||||||
|
SITE -> kafka_1: Записывает заказ в топик kafka: site.order.courier.created
|
||||||
|
else Тип доставки в заказе: ТК
|
||||||
|
SITE -> kafka_1: Записывает заказ в топик kafka: site.order.transport_company.created
|
||||||
|
end
|
||||||
|
|
||||||
|
autonumber 5
|
||||||
|
WTIS -> kafka_1: Читает сообщения из топика
|
||||||
|
WTIS -> WTIS_database: Сохраняет заказ
|
||||||
|
WTIS_database -> WTIS: Заказ успешно сохранен
|
||||||
|
WTIS -> WTIS: Проверяет условия для MVP\nсогласно настроек в wtis_settings
|
||||||
|
|
||||||
|
autonumber 9.1
|
||||||
|
alt Заказ подходит под условия OMS
|
||||||
|
WTIS -> kafka_2: Записывает заказ в топик: wtis.order_oms.created
|
||||||
|
else Заказ не подходит под условия OMS
|
||||||
|
WTIS -> WTIS: Продолжает процедуру автооформления\nзаказа и обогащения данными
|
||||||
|
WTIS -> WTIS: Конец процесса
|
||||||
|
end
|
||||||
|
|
||||||
|
autonumber 10
|
||||||
|
OMS -> kafka_2: Читает событие из топика
|
||||||
|
OMS -> OMS_database: Сохраняет заказ в БД
|
||||||
|
OMS_database -> OMS: Заказ успешно сохранен
|
||||||
|
|
||||||
|
OMS -> OMS: Проводит бизнес проверки
|
||||||
|
OMS -> WTIS: Резервирует товары
|
||||||
|
|
||||||
|
autonumber 15.1
|
||||||
|
alt Успешно зарезервировано
|
||||||
|
WTIS -> OMS: Товары в заказе успешно зарезервированы
|
||||||
|
else Не успешно зарезервировано
|
||||||
|
WTIS -> WTIS: Ставит задачу на менеджера, меняет мастер-систему
|
||||||
|
WTIS -> WTIS: Конец процесса
|
||||||
|
end
|
||||||
|
|
||||||
|
@enduml
|
||||||
66
oms/site-integration/TO BE.puml
Normal file
66
oms/site-integration/TO BE.puml
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
@startuml
|
||||||
|
scale 1300x1300
|
||||||
|
mainframe TO BE обмен по созданию заказа на сайте
|
||||||
|
Actor USER
|
||||||
|
participant SITE
|
||||||
|
database SITE_database
|
||||||
|
participant WTIS
|
||||||
|
database WTIS_database
|
||||||
|
queue kafka_1
|
||||||
|
queue kafka_2
|
||||||
|
participant OMS
|
||||||
|
database OMS_database
|
||||||
|
'-------------------------------------------action-------------------
|
||||||
|
autonumber
|
||||||
|
|
||||||
|
USER -> SITE: Нажимает кнопку оформить заказ
|
||||||
|
SITE -> SITE_database: Проводит внутренние проверки\nи сохраняет в БД
|
||||||
|
SITE_database -> SITE: Заказ успешно сохранен
|
||||||
|
|
||||||
|
autonumber 4.1
|
||||||
|
alt Тип доставки в заказе: Самовывоз
|
||||||
|
SITE -> kafka_1: Записывает заказ в топик kafka: site.order.pickup.created
|
||||||
|
else Тип доставки в заказе: Курьером
|
||||||
|
SITE -> kafka_1: Записывает заказ в топик kafka: site.order.courier.created
|
||||||
|
else Тип доставки в заказе: ТК
|
||||||
|
SITE -> kafka_1: Записывает заказ в топик kafka: site.order.transport_company.created
|
||||||
|
end
|
||||||
|
|
||||||
|
autonumber 5
|
||||||
|
OMS -> kafka_1: Читает сообщения из топиков
|
||||||
|
OMS -> OMS: Проверяет условия для MVP
|
||||||
|
WTIS -> kafka_1: Читает сообщения из топиков
|
||||||
|
WTIS -> WTIS: Проверяет условия для MVP
|
||||||
|
|
||||||
|
autonumber 9.1
|
||||||
|
alt Подходит под условия OMS
|
||||||
|
WTIS -> WTIS: Не обрабатывает такой заказ
|
||||||
|
OMS -> OMS_database: Сохраняет заказ
|
||||||
|
OMS -> kafka_2: Записывает заказ в топик: oms.orders.sync
|
||||||
|
OMS_database -> OMS: Заказ успешно сохранен
|
||||||
|
WTIS -> kafka_2: Читает топик
|
||||||
|
WTIS -> WTIS: Создает заказ
|
||||||
|
WTIS -> OMS: Возвращает модель заказа через workflow
|
||||||
|
OMS -> OMS: Проводит автооформление
|
||||||
|
OMS -> WTIS: Резервирует товары
|
||||||
|
|
||||||
|
autonumber 9.9.1
|
||||||
|
alt Успешно зарезервировано
|
||||||
|
WTIS -> OMS: Товары в заказе успешно зарезервированы
|
||||||
|
WTIS -> WTIS: Конец процесса
|
||||||
|
|
||||||
|
else Не успешно зарезервировано
|
||||||
|
WTIS -> WTIS: Ставит задачу на менеджера, меняет мастер-систему
|
||||||
|
WTIS -> WTIS: Конец процесса
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
else Не подходит под условия OMS
|
||||||
|
autonumber 10.1
|
||||||
|
OMS -> OMS: Не обрабатывает такой заказ
|
||||||
|
WTIS -> WTIS_database: Сохраняет заказ
|
||||||
|
WTIS_database -> WTIS: Заказ успешно сохранен
|
||||||
|
WTIS -> WTIS: Конец процесса
|
||||||
|
end
|
||||||
|
|
||||||
|
@enduml
|
||||||
119
ordering.puml
Normal file
119
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
|
||||||
85
personal-cabinet.puml
Normal file
85
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
|
||||||
2
search/Architecture Scheme Search.drawio.xml
Normal file
2
search/Architecture Scheme Search.drawio.xml
Normal file
File diff suppressed because one or more lines are too long
37
search/Mycroft.puml
Normal file
37
search/Mycroft.puml
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
@startuml
|
||||||
|
'Параметры для интерфейсов
|
||||||
|
skinparam interface {
|
||||||
|
backgroundColor #1a2eff
|
||||||
|
borderColor black
|
||||||
|
}
|
||||||
|
|
||||||
|
'Параметры для компонентов
|
||||||
|
skinparam component {
|
||||||
|
FontSize 13
|
||||||
|
ArrowFontStyle Bold
|
||||||
|
FontName Times New Roman
|
||||||
|
BorderColor black
|
||||||
|
BackgroundColor #e6ffef
|
||||||
|
ArrowFontName Courier
|
||||||
|
ArrowColor #111111
|
||||||
|
ArrowFontColor #111111
|
||||||
|
}
|
||||||
|
|
||||||
|
frame Mycroft_scheme #ededed {
|
||||||
|
|
||||||
|
database MySql #turquoise {
|
||||||
|
[Sphinx]
|
||||||
|
}
|
||||||
|
|
||||||
|
database ElasticSearch #turquoise {
|
||||||
|
[Sherlock]
|
||||||
|
}
|
||||||
|
|
||||||
|
[request] --> [Sherlock]
|
||||||
|
[request] --> [Sphinx]
|
||||||
|
[Sherlock] --> [aggregate]
|
||||||
|
[Sphinx] --> [aggregate]
|
||||||
|
[aggregate] --> [csv_files]: save
|
||||||
|
|
||||||
|
}
|
||||||
|
@enduml
|
||||||
38
search/Sherlock scheme.puml
Normal file
38
search/Sherlock scheme.puml
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
@startuml
|
||||||
|
'Параметры для интерфейсов
|
||||||
|
skinparam interface {
|
||||||
|
backgroundColor #1a2eff
|
||||||
|
borderColor black
|
||||||
|
}
|
||||||
|
|
||||||
|
'Параметры для компонентов
|
||||||
|
skinparam component {
|
||||||
|
FontSize 13
|
||||||
|
ArrowFontStyle Bold
|
||||||
|
FontName Times New Roman
|
||||||
|
BorderColor black
|
||||||
|
BackgroundColor #e6ffef
|
||||||
|
ArrowFontName Courier
|
||||||
|
ArrowColor #111111
|
||||||
|
ArrowFontColor #111111
|
||||||
|
}
|
||||||
|
|
||||||
|
frame Sherlock_scheme #ededed {
|
||||||
|
|
||||||
|
database "Elasticsearch" #turquoise {
|
||||||
|
[database]
|
||||||
|
}
|
||||||
|
[user_request] -u-> http_request_autocomplete
|
||||||
|
[user_request] -u-> http_request_full_text
|
||||||
|
http_request_autocomplete -u-> [database]
|
||||||
|
http_request_full_text -u-> [database]
|
||||||
|
|
||||||
|
note top of http_request_full_text: POST /api/v1/product
|
||||||
|
note top of http_request_autocomplete: POST /api/v1/autocomplete
|
||||||
|
|
||||||
|
[database] -u-> [filtering, sorting]
|
||||||
|
[filtering, sorting] -u-> [response_for_user]
|
||||||
|
|
||||||
|
[response_for_user] -u-> http_response
|
||||||
|
}
|
||||||
|
@enduml
|
||||||
4
search/Watson.drawio.svg
Normal file
4
search/Watson.drawio.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 17 KiB |
2
search/Watson.drawio.xml
Normal file
2
search/Watson.drawio.xml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<mxfile host="app.diagrams.net" modified="2022-05-23T07:54:23.579Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36" etag="67KJ1o47IpnP2dD_l4sc" version="18.1.1" type="google"><diagram id="Akut9kj0bVuIZsBiPKg9" name="Dataflow">5ZpZb9s4EIB/jYHdhwYSdfrRZxug3Q3gBdo+MhZtqZFMg6Zju79+KZGUhqZiuLXjA82DQg7v4fCbIZOONyi2Hxlepl9oQvIOcpJtxxt2kPiJkfhVSnZS4iI/lJI5yxIlawST7CdRQkdJ11lCVkZFTmnOs6UpnNLFgky5IcOM0Y1ZbUZzc9QlnhNLMJni3JZ+zRKeSmmMokb+iWTzVI/shl1ZUmBdWa1kleKEboDIG3W8AaOUy1SxHZC81J7Wi2w3fqO0nhgjC35Mgx/0xf/nCTnjYjN6zdPnx0mSfHA9NTm+0ysmiVCAylLGUzqnC5yPGmmf0fUiIWW3jsg1dT5TuhRCVwh/EM53ajfxmlMhSnmRq1IxY7b7BjPfy84eAp0dblXnMrdTOXvJSgsrumZTcmidynQwmxN+oJ7a1lIHYACl0I+EFkTMR1RgJMc8ezWNBCtbm9f1mu0QCbUjv7I7vuz4FedrNVRHKKInv4Eo6QgVxlW2P6q+Mi3ljkqjQVVTpHugVNYMqq+ne6hbxeor26IwF1rrPzORmpepqnQM6o9AqwjMRMp9Xbo3bl+P4oDE4RWJb7/VZj/jZwEfw85wns0XIj0V9kKYELwSxjNxuHuqoMiSRJo0WWU/8XPVX2lpS5oteLWdQb8TDFtt7+CBUjxSXTYUKGdAtgdtS5V+cB6cMFK0VPjUdny0+anen8rlNF2bnXqO2Z7OZitxSPaNt57hCfZsmfPT8Iu1mSZeNmnGyWSJq+O9EV7G3OI3kXC8osPQMfSBIpXfNMB39f6lAPah87biTzv36BpU/n26ovuka3CArvtglCCq4CNLFalczSvA2/I7BMQLNbUGupUDmOa+wVIf9BZCGrMFLkRI1M7kCLSCk+9bRO2ZyD1uIQaof8OhdIEzqnuQKoJOpx7FXmOtsR5o4psrqocYgYlFYPuQuSO2/utRBmY/0Ac5lsJ7IK3l1RArQoGeoWbq6cWWASCjzxt2eeiMLi8Mwsh0ef5ZXJ5/KR+HLKhMHv8b/VXtbqRPSL3TgbKVlrhnDOy7OasvePaC/766z/SiW/OZ8Z9xkfHu09WG1ql4HGqCDiyXBQkaAy+kuQi8UI+R+ePwhukYnwuOzoMbd+PTYPj++POsjf53NsumQtnXRtZ+mB/F10aW61pKuSSzAKa+w7KzM8u/T2ZF7dcD3wz4Kq+NYKzsGE8bjd+X6bEZm7rA78MYoNcGPGTeH2CoHYP6Q31FuVkoass/BxVR4ARmxIjOEjHqbnSE410qgrQf/SbpFPOrA3Q/5rsBgLZfiy4G0EsFfcF9AjRuB2gI4DU0L9N7D8AxuJr3dZHZ/IYZ55yRcWHkGWfvxEvx+0PMflt7YiIMHFNW3EAs2L01knX/DJCF9wmybivIujFAmG89eA5ATBe2B4DHho3wUbQOBo+/Nss53HI82D0XKss/mvmeGQ+eGA6+Pyvtx5FPuMgJ/9YS31yZlNd/57NvZV8xX9HF1TW1Hx4H/vupSmSbfxyRZtj8/403+h8=</diagram></mxfile>
|
||||||
82
search/Watson.puml
Normal file
82
search/Watson.puml
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
@startuml
|
||||||
|
scale 0.8
|
||||||
|
'Параметры для интерфейсов
|
||||||
|
skinparam interface {
|
||||||
|
backgroundColor #1a2eff
|
||||||
|
borderColor black
|
||||||
|
}
|
||||||
|
'Прямые стрелки
|
||||||
|
skinparam linetype ortho
|
||||||
|
'Параметры для компонентов
|
||||||
|
skinparam component {
|
||||||
|
FontSize 13
|
||||||
|
ArrowFontStyle Bold
|
||||||
|
FontName Times New Roman
|
||||||
|
BorderColor black
|
||||||
|
BackgroundColor #e6ffef
|
||||||
|
ArrowFontName Courier
|
||||||
|
ArrowColor #111111
|
||||||
|
ArrowFontColor #111111
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
frame Watson_scheme #ededed {
|
||||||
|
|
||||||
|
package "Site" #lightblue {
|
||||||
|
[Акции и скидки] -l-> kafka
|
||||||
|
[rnames] --> kafka
|
||||||
|
[Распродажи] --> kafka
|
||||||
|
[Теговые страницы] --> kafka
|
||||||
|
[Скрытие категорий \nпроизводителей] -l-> kafka
|
||||||
|
[Заголовоки страниц\n категорий] -l-> kafka
|
||||||
|
[Отзывы, просмотры,\n заказы и seo сортировка] --> kafka
|
||||||
|
}
|
||||||
|
|
||||||
|
package "PDM" #lightblue {
|
||||||
|
[Товары] --> http_pdm : Каждые 10 минут
|
||||||
|
[Производители] --> http_pdm: Каждые 10 минут
|
||||||
|
[Категории] --> http_pdm: Каждые 2 часа
|
||||||
|
[Технические характеристики] --> http_pdm: Каждую минуту
|
||||||
|
}
|
||||||
|
|
||||||
|
package "PriceFormer" #lightblue {
|
||||||
|
[Цены] -up-> http_price_former
|
||||||
|
[Типы цен] -up-> http_price_former
|
||||||
|
}
|
||||||
|
|
||||||
|
package "HamletX10" #lightblue {
|
||||||
|
[Информация о наличии в магазинах] -> http_hamlet
|
||||||
|
}
|
||||||
|
|
||||||
|
package "Shcat" #lightblue {
|
||||||
|
[Факт наличия \nостатков в регионе] -up-> http_shcat
|
||||||
|
}
|
||||||
|
|
||||||
|
package "Officer" #lightblue {
|
||||||
|
[ID магазинов] -up-> http_officer
|
||||||
|
[AregID] -up-> http_officer
|
||||||
|
}
|
||||||
|
|
||||||
|
database "MySql" #turquoise {
|
||||||
|
[database]
|
||||||
|
}
|
||||||
|
|
||||||
|
'Site
|
||||||
|
kafka --> [database]: Чтение топиков из kafka
|
||||||
|
|
||||||
|
'PDM
|
||||||
|
http_pdm --> [database]
|
||||||
|
|
||||||
|
'HamletX10
|
||||||
|
http_hamlet -up--> [database]: Каждый день
|
||||||
|
|
||||||
|
'Officer
|
||||||
|
http_officer -up--> [database]: Каждую неделю
|
||||||
|
|
||||||
|
'Shcat
|
||||||
|
http_shcat -up--> [database]: Запускается вручную
|
||||||
|
|
||||||
|
'PriceFormer
|
||||||
|
http_price_former -up--> [database]: Каждую минуту
|
||||||
|
}
|
||||||
|
@enduml
|
||||||
404
search/WatsonScheme.puml
Normal file
404
search/WatsonScheme.puml
Normal file
@@ -0,0 +1,404 @@
|
|||||||
|
@startuml
|
||||||
|
frame AS_IS_ALL_SCHEME {
|
||||||
|
skinparam linetype ortho
|
||||||
|
scale 2500*1700
|
||||||
|
|
||||||
|
entity "search_availability_flag_{guid_office}" as availability {
|
||||||
|
* id : int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*product : char(36)
|
||||||
|
*is_availability : tinyint(1)
|
||||||
|
*create_at : timestamp
|
||||||
|
*update_at : timestamp
|
||||||
|
--
|
||||||
|
unique (product)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_remaining_{guid_office}" as remaining {
|
||||||
|
* id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*product: char(36)
|
||||||
|
*remaining: int
|
||||||
|
*create_at: timestamp
|
||||||
|
*update_at: timestamp
|
||||||
|
--
|
||||||
|
unique (product)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_check" as search_check {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*locality: char(36)
|
||||||
|
*product: char(36)
|
||||||
|
*update_at: timestamp
|
||||||
|
--
|
||||||
|
unique(locality, product)
|
||||||
|
}
|
||||||
|
entity "search_localities_offices" as localities_offices {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*locality_guid: char(36)
|
||||||
|
*office_guid: char(36)
|
||||||
|
*is_active: tinyint(1)
|
||||||
|
--
|
||||||
|
unique (office_guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
entity "search_countries" as countries {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*code varchar(3)
|
||||||
|
*name: varchar(256)
|
||||||
|
*full_name: varchar(256)
|
||||||
|
*alpha_2: varchar(2)
|
||||||
|
*alpha_3: varchar(3)
|
||||||
|
--
|
||||||
|
unique (code)
|
||||||
|
}
|
||||||
|
entity "search_prices_types_localities" as prices_types_localities {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*locality_guid: char(36)
|
||||||
|
*price_type_guid: char(36)
|
||||||
|
*type: varchar(128)
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_prices_types_products" as prices_types_products {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*price_type_guid: char(36)
|
||||||
|
*price: decimal(10, 2)
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_products_relevancy_counts" as products_relevancy_counts {
|
||||||
|
*id: bigint: auto_increment "PK"
|
||||||
|
--
|
||||||
|
*product_guid: char(36)
|
||||||
|
*orders: int(11)
|
||||||
|
*views: int(11)
|
||||||
|
*reviews: int(11)
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (product_guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_products_relevancy_data_items" as relevancy_data_items {
|
||||||
|
*id: bigint: auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*manufacter_guid: char(36)
|
||||||
|
*seo_position: int
|
||||||
|
*koef_sort: float
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_products_sort_rating" as products_sort_rating {
|
||||||
|
*id: bigint: auto_increment "PK"
|
||||||
|
--
|
||||||
|
*product_guid: char(36)
|
||||||
|
*rating: float
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (product_guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_manufacturers_settings" as manufacturers_settings {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*manufacturer_guid: char(36)
|
||||||
|
*locality_guid: char(36)
|
||||||
|
*is_hide: tinyint(1)
|
||||||
|
*updated_at: timestamp
|
||||||
|
*created_at: timestamp
|
||||||
|
--
|
||||||
|
unique (manufacturer_guid, locality_guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_manufacturers" as manufacturers {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*guid: char(36)
|
||||||
|
*name: varchar(256)
|
||||||
|
*is_our: tinyint(1)
|
||||||
|
*description: varchar(256)
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_products" as products {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*is_consumable: tinyint(1)
|
||||||
|
*is_on_site: tinyint(1)
|
||||||
|
*is_visible: tinyint(1)
|
||||||
|
*status: smallint
|
||||||
|
*is_discountinued: tinyint(1)
|
||||||
|
*is_for_order: tinyint(1)
|
||||||
|
*sku: int
|
||||||
|
*height: float
|
||||||
|
*lenght: float
|
||||||
|
*width: float
|
||||||
|
*guid: char(36)
|
||||||
|
*manufacter_guid: char(36)
|
||||||
|
*name_site: varchar(256)
|
||||||
|
*category: char(36)
|
||||||
|
*name_pdm: varchar(256)
|
||||||
|
*name_wtis: varchar(256)
|
||||||
|
*name_contractor: varchar(256)
|
||||||
|
*keywords: varchar(256)
|
||||||
|
*lights: varchar(20)
|
||||||
|
*country_code: varchar(3)
|
||||||
|
*uri: text
|
||||||
|
*advantages: text
|
||||||
|
*description: text
|
||||||
|
*equipment: text
|
||||||
|
*features: text
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_products_categories" as products_categories {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*category_guid: char(36)
|
||||||
|
*is_enabled: tinyint(1)
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_categories_settings" as categories_settings {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*category_guid: char(36)
|
||||||
|
*locality_guid: char(36)
|
||||||
|
*is_hide: tinyint(1)
|
||||||
|
*updated_at: timestamp
|
||||||
|
*created_at: timestamp
|
||||||
|
--
|
||||||
|
unique (category_guid, locality_guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_categories_relationship" as categories_relationship {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*parent: char(36)
|
||||||
|
*child: char(36)
|
||||||
|
*main: tinyint(1)
|
||||||
|
*level: int
|
||||||
|
*line: int
|
||||||
|
*created_at: timestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_categories" as categories {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*guid: char(36)
|
||||||
|
name: varchar(256)
|
||||||
|
type: varchar(256)
|
||||||
|
parent_guid: char(36)
|
||||||
|
is_active: tinyint(1)
|
||||||
|
is_enable: tinyint(1)
|
||||||
|
up_caption: varchar(256)
|
||||||
|
updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_products_sale" as product_sale {
|
||||||
|
*id: bigint: auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*guid: char(36)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*locality_guid: char(36)
|
||||||
|
remaining: int
|
||||||
|
price: float
|
||||||
|
updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_promotions" as promotions {
|
||||||
|
*id: int: auto_increment "PK"
|
||||||
|
--
|
||||||
|
*product_guid: char(36)
|
||||||
|
*locality_guid char(36)
|
||||||
|
*name: varchar(256)
|
||||||
|
*updated_at: timestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_specifications_bool" as specifications_bool {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*guid: char(36)
|
||||||
|
*name: varchar(256)
|
||||||
|
*unit: varchar(256)
|
||||||
|
*description: text
|
||||||
|
*value: tinyint(1)
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_specifications_collection" as specifications_collection {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*guid: char(36)
|
||||||
|
*name: varchar(256)
|
||||||
|
*unit: varchar(256)
|
||||||
|
*description: text
|
||||||
|
*value: varchar(256)
|
||||||
|
*value_guid: char(36)
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_specifications_float" as specifications_float {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*guid: char(36)
|
||||||
|
*name: varchar(256)
|
||||||
|
*unit: varchar(256)
|
||||||
|
*description: text
|
||||||
|
*value: float
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_specifications_int" as specifications_int {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*guid: char(36)
|
||||||
|
*name: varchar(256)
|
||||||
|
*unit: varchar(256)
|
||||||
|
*description: text
|
||||||
|
*value: int
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_specifications_range" as specifications_range {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*guid: char(36)
|
||||||
|
*name: varchar(256)
|
||||||
|
*unit: varchar(256)
|
||||||
|
*description: text
|
||||||
|
*value_gte: float
|
||||||
|
*value_lte: float
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_specifications_text" as specifications_text {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*guid: char(36)
|
||||||
|
*name: varchar(256)
|
||||||
|
*unit: varchar(256)
|
||||||
|
*description: text
|
||||||
|
*value: varchar(256)
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
entity "search_locality" as locality {
|
||||||
|
*id: mediumint(9) auto_increment "PK"
|
||||||
|
--
|
||||||
|
*name: char(50)
|
||||||
|
*english_name: varchar(255)
|
||||||
|
*areg_id: char(36)
|
||||||
|
*is_enabled: tinyint(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_dates_sync" as dates_sync {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*is_successful tinyint(1)
|
||||||
|
*'system': text
|
||||||
|
*message: text
|
||||||
|
*date: datetime
|
||||||
|
}
|
||||||
|
|
||||||
|
'Связи
|
||||||
|
products -d----> specifications_bool
|
||||||
|
specifications_bool -r-> specifications_range
|
||||||
|
specifications_bool -r-> specifications_text
|
||||||
|
specifications_bool -r-> specifications_collection
|
||||||
|
specifications_bool -r-> specifications_int
|
||||||
|
specifications_bool -r-> specifications_float
|
||||||
|
'products -d---> specifications_range
|
||||||
|
'products -d---> specifications_text
|
||||||
|
'products -d---> specifications_collection
|
||||||
|
'products -d---> specifications_int
|
||||||
|
'products -d---> specifications_float
|
||||||
|
|
||||||
|
note left of specifications_bool: Все таблицы с тх связаны с \nтаблицей товаров по product_guid
|
||||||
|
products -l--> manufacturers
|
||||||
|
manufacturers -l-> manufacturers_settings
|
||||||
|
|
||||||
|
prices_types_localities -> localities_offices
|
||||||
|
prices_types_products -> prices_types_localities
|
||||||
|
|
||||||
|
products -d--> promotions
|
||||||
|
products -d--> availability
|
||||||
|
products -d--> search_check
|
||||||
|
products --> remaining
|
||||||
|
|
||||||
|
|
||||||
|
products -r--> relevancy_data_items
|
||||||
|
product_sale -> localities_offices
|
||||||
|
promotions -> localities_offices
|
||||||
|
|
||||||
|
products -l--> prices_types_products
|
||||||
|
|
||||||
|
products -u-> categories
|
||||||
|
products -> products_relevancy_counts
|
||||||
|
products -> product_sale
|
||||||
|
products -> products_sort_rating
|
||||||
|
|
||||||
|
|
||||||
|
categories -> categories_relationship
|
||||||
|
categories -> categories_settings
|
||||||
|
|
||||||
|
products_categories -> products
|
||||||
|
products_categories -> categories
|
||||||
|
|
||||||
|
}
|
||||||
|
@enduml
|
||||||
142
search/WatsonWithMicroservices.puml
Normal file
142
search/WatsonWithMicroservices.puml
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
@startuml
|
||||||
|
skinparam linetype ortho
|
||||||
|
'============================================================================================
|
||||||
|
'===========================================Микросервисы=====================================
|
||||||
|
'============================================================================================
|
||||||
|
package Microservices <<cloud>> {
|
||||||
|
abstract "Shcat" as shcat {
|
||||||
|
+request: POST
|
||||||
|
+endpoint: http://shcat.vseinstrumenti.ru/rpc
|
||||||
|
--
|
||||||
|
*Method: rests.get
|
||||||
|
*nomenclature - guid товара
|
||||||
|
*source - guid магазина
|
||||||
|
--
|
||||||
|
+response
|
||||||
|
--
|
||||||
|
*nomenclature - guid товара
|
||||||
|
*source - guid офиса
|
||||||
|
*quntity - количество остатков
|
||||||
|
*quality - качество, по умолчанию 1
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract "HamletX10" as hamlet {
|
||||||
|
+request: POST
|
||||||
|
+enpoint: http://hamlet-v2.vseinstrumenti.ru/rpc
|
||||||
|
--
|
||||||
|
*Method: availability.chain
|
||||||
|
*store - guid офиса
|
||||||
|
*nomenclature - guid товара
|
||||||
|
*filter_zero_chain - скрывать или нет ЛЦ по которым нет наличия
|
||||||
|
--
|
||||||
|
+response
|
||||||
|
--
|
||||||
|
*available - Признак наличия
|
||||||
|
*store - guid офиса
|
||||||
|
*free - количество остатков
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract "Officer" as officer {
|
||||||
|
+request: POST
|
||||||
|
+endpoint: https://officer2go.vseinstrumenti.ru/query
|
||||||
|
--
|
||||||
|
*Method: availability.get_offices
|
||||||
|
*locality_areg_id - areg_id города
|
||||||
|
--
|
||||||
|
+response
|
||||||
|
--
|
||||||
|
*id - guid офиса
|
||||||
|
*created_at - Дата создания
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract "Scrooge_sync" as scrooge {
|
||||||
|
+request: GET
|
||||||
|
+endpoint: http://exporter.scrooge-v2.vseinstrumenti.ru/file/price?after-id=
|
||||||
|
--
|
||||||
|
+response
|
||||||
|
--
|
||||||
|
*price
|
||||||
|
*price_type
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract "Scrooge_graphQL" as Scrooge_graphQL {
|
||||||
|
+request: POST
|
||||||
|
+endpoint: http://exporter.scrooge-v2.vseinstrumenti.ru/query
|
||||||
|
--
|
||||||
|
*method: priceTypeBinding
|
||||||
|
--
|
||||||
|
+response
|
||||||
|
--
|
||||||
|
*priceTypeId
|
||||||
|
*priceCategory
|
||||||
|
*localityID
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
package MySql <<database>> {
|
||||||
|
entity "search_availability_flag_{guid_office}" as availability {
|
||||||
|
* id : int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*product : char(36)
|
||||||
|
*is_availability : tinyint(1)
|
||||||
|
*create_at : timestamp
|
||||||
|
*update_at : timestamp
|
||||||
|
--
|
||||||
|
unique (product)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
entity "search_remaining_{guid_office}" as remaining {
|
||||||
|
* id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*product: char(36)
|
||||||
|
*remaining: int
|
||||||
|
*create_at: timestamp
|
||||||
|
*update_at: timestamp
|
||||||
|
--
|
||||||
|
unique (product)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_localities_offices" as localities_offices {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*locality_guid: char(36)
|
||||||
|
*office_guid: char(36)
|
||||||
|
*is_active: tinyint(1)
|
||||||
|
--
|
||||||
|
unique (office_guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_prices_types_localities_2" as prices_types_localities {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*locality_guid: char(36)
|
||||||
|
*price_type_guid: char(36)
|
||||||
|
*type: varchar(128)
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
entity "search_prices_types_products_2" as prices_types_products {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*price_type_guid: char(36)
|
||||||
|
*price: decimal(10, 2)
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
shcat -d-----> remaining
|
||||||
|
hamlet -d-----> availability
|
||||||
|
officer -d-----> localities_offices
|
||||||
|
scrooge -d-----> prices_types_products
|
||||||
|
Scrooge_graphQL -d--> prices_types_localities
|
||||||
|
|
||||||
|
@enduml
|
||||||
266
search/WatsonWithPDM.puml
Normal file
266
search/WatsonWithPDM.puml
Normal file
@@ -0,0 +1,266 @@
|
|||||||
|
@startuml
|
||||||
|
skinparam linetype ortho
|
||||||
|
'===============================================================================
|
||||||
|
'===================================PDM=========================================
|
||||||
|
'===============================================================================
|
||||||
|
package PDM <<Cloud>> {
|
||||||
|
abstract ProductModuleName {
|
||||||
|
+request: GET
|
||||||
|
+endpoint: http://api.pdm.vseinstrumenti.ru/api/v1/products/<date>*
|
||||||
|
+headers: Accept:application/json
|
||||||
|
Authorization:Bearer m1iXCmdwRlbqTU7gBCIe4Xpk8fIjVBGD
|
||||||
|
--
|
||||||
|
*response: guid товара
|
||||||
|
--
|
||||||
|
*<date> - 2019-08-16 17:00:00
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract CategoryModuleName {
|
||||||
|
+request: GET
|
||||||
|
+endpoint: http://api.pdm.vseinstrumenti.ru/api/v1/rubrics/<date>*
|
||||||
|
+headers: Accept:application/json
|
||||||
|
Authorization:Bearer m1iXCmdwRlbqTU7gBCIe4Xpk8fIjVBGD
|
||||||
|
--
|
||||||
|
*response: guid категории
|
||||||
|
--
|
||||||
|
*<date> - 2019-08-16 17:00:00
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract ManufacturerModuleName {
|
||||||
|
+request: GET
|
||||||
|
+endpoint: http://api.pdm.vseinstrumenti.ru/api/v1/manufacturers/<date>*
|
||||||
|
+headers: Accept:application/json
|
||||||
|
Authorization:Bearer m1iXCmdwRlbqTU7gBCIe4Xpk8fIjVBGD
|
||||||
|
--
|
||||||
|
*response: guid производителя
|
||||||
|
--
|
||||||
|
*<date> - 2019-08-16 17:00:00
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract SpecificationModuleName {
|
||||||
|
+request: GET
|
||||||
|
+endpoint: http://api.pdm.vseinstrumenti.ru/api/v1/tech_param/<date>*
|
||||||
|
+headers: Accept:application/json
|
||||||
|
Authorization:Bearer m1iXCmdwRlbqTU7gBCIe4Xpk8fIjVBGD
|
||||||
|
--
|
||||||
|
*response: guid изменившихся ТХ
|
||||||
|
--
|
||||||
|
*<date> - 2019-08-16 17:00:00
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Package MySql <<database>> {
|
||||||
|
package "Manufacter_MySql" <<Folder>> {
|
||||||
|
entity "search_manufacturers_settings" as manufacturers_settings {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*manufacturer_guid: char(36)
|
||||||
|
*locality_guid: char(36)
|
||||||
|
*is_hide: tinyint(1)
|
||||||
|
*updated_at: timestamp
|
||||||
|
*created_at: timestamp
|
||||||
|
--
|
||||||
|
unique (manufacturer_guid, locality_guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_manufacturers" as manufacturers {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*guid: char(36)
|
||||||
|
*name: varchar(256)
|
||||||
|
*is_our: tinyint(1)
|
||||||
|
*description: varchar(256)
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (guid)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
package "Products_MySql" <<Folder>> {
|
||||||
|
entity "search_products" as products {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*is_consumable: tinyint(1)
|
||||||
|
*is_on_site: tinyint(1)
|
||||||
|
*is_visible: tinyint(1)
|
||||||
|
*status: smallint
|
||||||
|
*is_discountinued: tinyint(1)
|
||||||
|
*is_for_order: tinyint(1)
|
||||||
|
*sku: int
|
||||||
|
*height: float
|
||||||
|
*lenght: float
|
||||||
|
*width: float
|
||||||
|
*guid: char(36)
|
||||||
|
*manufacter_guid: char(36)
|
||||||
|
*name_site: varchar(256)
|
||||||
|
*category: char(36)
|
||||||
|
*name_pdm: varchar(256)
|
||||||
|
*name_wtis: varchar(256)
|
||||||
|
*name_contractor: varchar(256)
|
||||||
|
*keywords: varchar(256)
|
||||||
|
*lights: varchar(20)
|
||||||
|
*country_code: varchar(3)
|
||||||
|
*uri: text
|
||||||
|
*advantages: text
|
||||||
|
*description: text
|
||||||
|
*equipment: text
|
||||||
|
*features: text
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_products_categories" as products_categories {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*category_guid: char(36)
|
||||||
|
*is_enabled: tinyint(1)
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
package "Categories_MySql" <<Folder>> {
|
||||||
|
entity "search_categories_settings" as categories_settings {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*category_guid: char(36)
|
||||||
|
*locality_guid: char(36)
|
||||||
|
*is_hide: tinyint(1)
|
||||||
|
*updated_at: timestamp
|
||||||
|
*created_at: timestamp
|
||||||
|
--
|
||||||
|
unique (category_guid, locality_guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_categories_relationship" as categories_relationship {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*parent: char(36)
|
||||||
|
*child: char(36)
|
||||||
|
*main: tinyint(1)
|
||||||
|
*level: int
|
||||||
|
*line: int
|
||||||
|
*created_at: timestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_categories" as categories {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*guid: char(36)
|
||||||
|
name: varchar(256)
|
||||||
|
type: varchar(256)
|
||||||
|
parent_guid: char(36)
|
||||||
|
is_active: tinyint(1)
|
||||||
|
is_enable: tinyint(1)
|
||||||
|
up_caption: varchar(256)
|
||||||
|
updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (guid)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
package PDM_Specifications <<Folder>> {
|
||||||
|
entity "search_specifications_bool" as specifications_bool {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*guid: char(36)
|
||||||
|
*name: varchar(256)
|
||||||
|
*unit: varchar(256)
|
||||||
|
*description: text
|
||||||
|
*value: tinyint(1)
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_specifications_collection" as specifications_collection {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*guid: char(36)
|
||||||
|
*name: varchar(256)
|
||||||
|
*unit: varchar(256)
|
||||||
|
*description: text
|
||||||
|
*value: varchar(256)
|
||||||
|
*value_guid: char(36)
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_specifications_float" as specifications_float {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*guid: char(36)
|
||||||
|
*name: varchar(256)
|
||||||
|
*unit: varchar(256)
|
||||||
|
*description: text
|
||||||
|
*value: float
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_specifications_int" as specifications_int {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*guid: char(36)
|
||||||
|
*name: varchar(256)
|
||||||
|
*unit: varchar(256)
|
||||||
|
*description: text
|
||||||
|
*value: int
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_specifications_range" as specifications_range {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*guid: char(36)
|
||||||
|
*name: varchar(256)
|
||||||
|
*unit: varchar(256)
|
||||||
|
*description: text
|
||||||
|
*value_gte: float
|
||||||
|
*value_lte: float
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_specifications_text" as specifications_text {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*guid: char(36)
|
||||||
|
*name: varchar(256)
|
||||||
|
*unit: varchar(256)
|
||||||
|
*description: text
|
||||||
|
*value: varchar(256)
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SpecificationModuleName -up----> PDM_Specifications
|
||||||
|
ProductModuleName -up---> "Products_MySql"
|
||||||
|
CategoryModuleName -up----> "Categories_MySql"
|
||||||
|
ManufacturerModuleName -up---> "Manufacter_MySql"
|
||||||
|
|
||||||
|
@enduml
|
||||||
227
search/WatsonWithSite.puml
Normal file
227
search/WatsonWithSite.puml
Normal file
@@ -0,0 +1,227 @@
|
|||||||
|
@startuml
|
||||||
|
skinparam linetype ortho
|
||||||
|
|
||||||
|
'===============================================================================
|
||||||
|
'=====================================Kafka=====================================
|
||||||
|
'===============================================================================
|
||||||
|
package Site_kafka <<Cloud>> {
|
||||||
|
abstract promotions_kafka {
|
||||||
|
+Topics site.products.promotions
|
||||||
|
--
|
||||||
|
*product_guid
|
||||||
|
*locality_guid
|
||||||
|
*promotions array[string]
|
||||||
|
}
|
||||||
|
abstract rnames_kafka {
|
||||||
|
+ topics site.products.rname
|
||||||
|
--
|
||||||
|
*url
|
||||||
|
*guid
|
||||||
|
}
|
||||||
|
abstract sale_kafka {
|
||||||
|
+ site.products.sale
|
||||||
|
--
|
||||||
|
*nomenclature_guid
|
||||||
|
*main_region_guid
|
||||||
|
*price
|
||||||
|
*clearance_sale_guid
|
||||||
|
*quantity_left
|
||||||
|
*status
|
||||||
|
}
|
||||||
|
abstract tagpage_delete_kafka {
|
||||||
|
+ topics site.tagpage.delete
|
||||||
|
--
|
||||||
|
*id
|
||||||
|
}
|
||||||
|
abstract tagpage_status_kafka {
|
||||||
|
+ topics site.tagpage.status
|
||||||
|
--
|
||||||
|
*id
|
||||||
|
*name
|
||||||
|
*is_active
|
||||||
|
*is_enable
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract makes_visibility_kafka {
|
||||||
|
+ topics site.make.visibility
|
||||||
|
--
|
||||||
|
*visibility
|
||||||
|
*makeGuid
|
||||||
|
*localities
|
||||||
|
}
|
||||||
|
abstract categories_visibility_kafka {
|
||||||
|
+ topics site.categories.visibility
|
||||||
|
--
|
||||||
|
*visibility
|
||||||
|
*values map[string]
|
||||||
|
*items array[string]
|
||||||
|
}
|
||||||
|
abstract up_caption_kafka {
|
||||||
|
+ topics site.categories.up_caption
|
||||||
|
--
|
||||||
|
*guid
|
||||||
|
*up_caption
|
||||||
|
}
|
||||||
|
abstract relevancy_kafka {
|
||||||
|
+ topics site.products.relevancy
|
||||||
|
--
|
||||||
|
*guid
|
||||||
|
*orders
|
||||||
|
*views
|
||||||
|
*rating
|
||||||
|
*reviews
|
||||||
|
*data [array] - массив данных
|
||||||
|
*[array].category
|
||||||
|
*[array].manufacturer
|
||||||
|
*[array].seo_position
|
||||||
|
*[array].koef_sort
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
package "MySql" <<database>> {
|
||||||
|
entity "search_products" as products {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*is_consumable: tinyint(1)
|
||||||
|
*is_on_site: tinyint(1)
|
||||||
|
*is_visible: tinyint(1)
|
||||||
|
*status: smallint
|
||||||
|
*is_discountinued: tinyint(1)
|
||||||
|
*is_for_order: tinyint(1)
|
||||||
|
*sku: int
|
||||||
|
*height: float
|
||||||
|
*lenght: float
|
||||||
|
*width: float
|
||||||
|
*guid: char(36)
|
||||||
|
*manufacter_guid: char(36)
|
||||||
|
*name_site: varchar(256)
|
||||||
|
*category: char(36)
|
||||||
|
*name_pdm: varchar(256)
|
||||||
|
*name_wtis: varchar(256)
|
||||||
|
*name_contractor: varchar(256)
|
||||||
|
*keywords: varchar(256)
|
||||||
|
*lights: varchar(20)
|
||||||
|
*country_code: varchar(3)
|
||||||
|
*uri: text
|
||||||
|
*advantages: text
|
||||||
|
*description: text
|
||||||
|
*equipment: text
|
||||||
|
*features: text
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_manufacturers_settings" as manufacturers_settings {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*manufacturer_guid: char(36)
|
||||||
|
*locality_guid: char(36)
|
||||||
|
*is_hide: tinyint(1)
|
||||||
|
*updated_at: timestamp
|
||||||
|
*created_at: timestamp
|
||||||
|
--
|
||||||
|
unique (manufacturer_guid, locality_guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_categories_settings" as categories_settings {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*category_guid: char(36)
|
||||||
|
*locality_guid: char(36)
|
||||||
|
*is_hide: tinyint(1)
|
||||||
|
*updated_at: timestamp
|
||||||
|
*created_at: timestamp
|
||||||
|
--
|
||||||
|
unique (category_guid, locality_guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_categories" as categories {
|
||||||
|
*id: int auto_increment "PK"
|
||||||
|
--
|
||||||
|
*guid: char(36)
|
||||||
|
name: varchar(256)
|
||||||
|
type: varchar(256)
|
||||||
|
parent_guid: char(36)
|
||||||
|
is_active: tinyint(1)
|
||||||
|
is_enable: tinyint(1)
|
||||||
|
up_caption: varchar(256)
|
||||||
|
updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_products_relevancy_counts" as products_relevancy_counts {
|
||||||
|
*id: bigint: auto_increment "PK"
|
||||||
|
--
|
||||||
|
*product_guid: char(36)
|
||||||
|
*orders: int(11)
|
||||||
|
*views: int(11)
|
||||||
|
*reviews: int(11)
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (product_guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_products_relevancy_data_items" as relevancy_data_items {
|
||||||
|
*id: bigint: auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*manufacter_guid: char(36)
|
||||||
|
*seo_position: int
|
||||||
|
*koef_sort: float
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_products_sort_rating" as products_sort_rating {
|
||||||
|
*id: bigint: auto_increment "PK"
|
||||||
|
--
|
||||||
|
*product_guid: char(36)
|
||||||
|
*rating: float
|
||||||
|
*updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (product_guid)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
entity "search_products_sale" as product_sale {
|
||||||
|
*id: bigint: auto_increment "PK"
|
||||||
|
--
|
||||||
|
*hash: char(40)
|
||||||
|
*guid: char(36)
|
||||||
|
*product_guid: char(36)
|
||||||
|
*locality_guid: char(36)
|
||||||
|
remaining: int
|
||||||
|
price: float
|
||||||
|
updated_at: timestamp
|
||||||
|
--
|
||||||
|
unique (hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "search_promotions" as promotions {
|
||||||
|
*id: int: auto_increment "PK"
|
||||||
|
--
|
||||||
|
*product_guid: char(36)
|
||||||
|
*locality_guid char(36)
|
||||||
|
*name: varchar(256)
|
||||||
|
*updated_at: timestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
relevancy_kafka -d--> products_relevancy_counts
|
||||||
|
relevancy_kafka -d--> relevancy_data_items: data [array]
|
||||||
|
relevancy_kafka -d--> products_sort_rating: rating
|
||||||
|
rnames_kafka -d----> products
|
||||||
|
sale_kafka -d--> product_sale
|
||||||
|
promotions_kafka -d--> promotions
|
||||||
|
tagpage_status_kafka -d--> categories
|
||||||
|
tagpage_delete_kafka -d--> categories
|
||||||
|
makes_visibility_kafka -d--> manufacturers_settings
|
||||||
|
categories_visibility_kafka -d--> categories_settings
|
||||||
|
up_caption_kafka -d--> categories
|
||||||
|
|
||||||
|
@enduml
|
||||||
68
search/Общий процесс autocomplete.puml
Normal file
68
search/Общий процесс autocomplete.puml
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
@startuml
|
||||||
|
mainframe api/v1/autocomplete Общая схема
|
||||||
|
Actor user
|
||||||
|
participant BackendSite
|
||||||
|
participant Sherlock
|
||||||
|
Database ElasticSearch
|
||||||
|
|
||||||
|
user -> BackendSite: Вводит запрос в поисковую строку
|
||||||
|
BackendSite -> BackendSite: Обработка запроса на бэкенде\n сайта и формирование запроса\nдля Sherlock
|
||||||
|
BackendSite -> Sherlock: REST POST api/v1/autocomplete
|
||||||
|
Sherlock -> Sherlock: Перевод запроса\nна второй язык
|
||||||
|
Sherlock -> Sherlock: Преобразование запроса\n в структуру и формирование\nзапроса для ElasticSearch
|
||||||
|
|
||||||
|
note over Sherlock
|
||||||
|
Отправка запроса в
|
||||||
|
ElasticSearch с доп
|
||||||
|
сортировкой по категориям
|
||||||
|
из Спектра
|
||||||
|
endnote
|
||||||
|
|
||||||
|
|
||||||
|
alt ElasticSearch ничего не вернул
|
||||||
|
Sherlock -> ElasticSearch: 8 запросов в 4 индекса: manufacturers,\ntagpage, categories, products на двух языках (RU, EN)
|
||||||
|
ElasticSearch --> Sherlock: Получен пустой ответ со всех 8-и запросов
|
||||||
|
|
||||||
|
note over Sherlock
|
||||||
|
Отправляются доп.запрос
|
||||||
|
в ElasticSearch с меньшим
|
||||||
|
процентом вхождения
|
||||||
|
endnote
|
||||||
|
|
||||||
|
Sherlock -> ElasticSearch: 8 запросов в 4 индекса: manufacturers,\ntagpage, categories, products на двух языках (RU, EN)
|
||||||
|
ElasticSearch --> Sherlock: Получен пустой ответ со всех 8-и запросов
|
||||||
|
|
||||||
|
Sherlock --> BackendSite: Получен пустой ответ
|
||||||
|
Sherlock --> user: Пользователь получает страницу:\nРезультаты не найдены
|
||||||
|
|
||||||
|
else Найдены товары
|
||||||
|
|
||||||
|
|
||||||
|
alt Есть товары спектр
|
||||||
|
note over ElasticSearch
|
||||||
|
ЕСЛИ хоть один из четырех индексов
|
||||||
|
отдал ответ, ТО он отдается на бэкенд
|
||||||
|
endnote
|
||||||
|
|
||||||
|
Sherlock -> ElasticSearch: 8 запросов в 4 индекса: manufacturers,\ntagpage, categories, products на двух языках (RU, EN)
|
||||||
|
|
||||||
|
note over ElasticSearch
|
||||||
|
Категории спектр поднимаются
|
||||||
|
наверх И товары внутри них
|
||||||
|
сортируются по скорингу
|
||||||
|
endnote
|
||||||
|
|
||||||
|
else Товаров спектр не найдено
|
||||||
|
Sherlock -> ElasticSearch: 8 запросов в 4 индекса: manufacturers,\ntagpage, categories, products на двух языках (RU, EN)
|
||||||
|
note over ElasticSearch
|
||||||
|
Товары сортируются
|
||||||
|
по скорингу
|
||||||
|
endnote
|
||||||
|
end
|
||||||
|
|
||||||
|
ElasticSearch --> Sherlock: Передает отсортированный\nсписок товаров
|
||||||
|
Sherlock --> BackendSite: Список товаров
|
||||||
|
BackendSite --> user: Пользователь получает страницу:\nРезультаты поиска
|
||||||
|
|
||||||
|
end
|
||||||
|
@enduml
|
||||||
55
search/Общий процесс filters.puml
Normal file
55
search/Общий процесс filters.puml
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
@startuml
|
||||||
|
mainframe api/v1/filters Общая схема
|
||||||
|
Actor user
|
||||||
|
participant BackendSite
|
||||||
|
participant Sherlock
|
||||||
|
Database ElasticSearch
|
||||||
|
|
||||||
|
user -> BackendSite: Вводит запрос в поисковую строку
|
||||||
|
BackendSite -> BackendSite: Обработка запроса на бэкенде\n сайта и формирование запроса\nдля Sherlock
|
||||||
|
|
||||||
|
BackendSite -> Sherlock: REST POST api/v1/filters
|
||||||
|
Sherlock -> Sherlock: Преобразование запроса\nв структуру и формирование\nзапроса для ElasticSearch
|
||||||
|
|
||||||
|
note over Sherlock
|
||||||
|
Отправка запроса в
|
||||||
|
ElasticSearch с доп
|
||||||
|
сортировкой по категориям
|
||||||
|
из Спектра
|
||||||
|
endnote
|
||||||
|
|
||||||
|
|
||||||
|
alt ElasticSearch ничего не вернул
|
||||||
|
Sherlock -> ElasticSearch: REST GET products/_search
|
||||||
|
ElasticSearch --> Sherlock: Получен пустой ответ
|
||||||
|
|
||||||
|
note over Sherlock
|
||||||
|
Отправляется доп.запрос
|
||||||
|
в ElasticSearch с меньшим
|
||||||
|
процентом вхождения
|
||||||
|
endnote
|
||||||
|
|
||||||
|
Sherlock -> ElasticSearch: REST GET products/_search
|
||||||
|
ElasticSearch --> Sherlock: Получен пустой ответ
|
||||||
|
Sherlock --> BackendSite: Получен пустой ответ
|
||||||
|
Sherlock --> user: Пользователь получает страницу:\nРезультаты не найдены
|
||||||
|
|
||||||
|
else Найдены товары
|
||||||
|
alt Есть товары спектр
|
||||||
|
Sherlock -> ElasticSearch: REST GET products/_search
|
||||||
|
note over ElasticSearch
|
||||||
|
Категории спектр
|
||||||
|
поднимаются наверх
|
||||||
|
endnote
|
||||||
|
else Товаров спектр не найдено
|
||||||
|
Sherlock -> ElasticSearch: REST GET products/_search
|
||||||
|
end
|
||||||
|
|
||||||
|
ElasticSearch --> Sherlock: Передает список\nкатегорий и фильтров
|
||||||
|
|
||||||
|
Sherlock --> BackendSite: Список категорий и фильтров
|
||||||
|
|
||||||
|
BackendSite --> user: Пользователь получает фильтры\nна странице: Результаты поиска
|
||||||
|
|
||||||
|
end
|
||||||
|
@enduml
|
||||||
64
search/Общий процесс products.puml
Normal file
64
search/Общий процесс products.puml
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
@startuml
|
||||||
|
mainframe api/v1/products Общая схема
|
||||||
|
Actor user
|
||||||
|
participant BackendSite
|
||||||
|
participant Sherlock
|
||||||
|
Database ElasticSearch
|
||||||
|
|
||||||
|
user -> BackendSite: Вводит запрос в поисковую строку
|
||||||
|
BackendSite -> BackendSite: Обработка запроса на бэкенде\n сайта и формирование запроса\nдля Sherlock
|
||||||
|
BackendSite -> Sherlock: REST POST api/v1/products
|
||||||
|
Sherlock -> Sherlock: Перевод запроса\nна второй язык
|
||||||
|
Sherlock -> Sherlock: Преобразование запроса\n в структуру и формирование\nзапроса для ElasticSearch
|
||||||
|
|
||||||
|
note over Sherlock
|
||||||
|
Отправка запроса в
|
||||||
|
ElasticSearch с доп
|
||||||
|
сортировкой по категориям
|
||||||
|
из Спектра
|
||||||
|
endnote
|
||||||
|
|
||||||
|
alt ElasticSearch ничего не вернул
|
||||||
|
Sherlock -> ElasticSearch: REST GET products/_search RU
|
||||||
|
Sherlock -> ElasticSearch: REST GET products/_search EN
|
||||||
|
ElasticSearch --> Sherlock: Получен пустой ответ
|
||||||
|
|
||||||
|
note over Sherlock
|
||||||
|
Отправляется доп.запрос
|
||||||
|
в ElasticSearch с меньшим
|
||||||
|
процентом вхождения
|
||||||
|
endnote
|
||||||
|
|
||||||
|
Sherlock -> ElasticSearch: REST GET products/_search RU
|
||||||
|
Sherlock -> ElasticSearch: REST GET products/_search EN
|
||||||
|
ElasticSearch --> Sherlock: Получен пустой ответ
|
||||||
|
Sherlock --> BackendSite: Получен пустой ответ
|
||||||
|
Sherlock --> user: Пользователь получает страницу:\nРезультаты не найдены
|
||||||
|
|
||||||
|
else Найдены товары
|
||||||
|
|
||||||
|
alt Есть товары спектр
|
||||||
|
Sherlock -> ElasticSearch: REST GET products/_search RU
|
||||||
|
Sherlock -> ElasticSearch: REST GET products/_search EN
|
||||||
|
note over ElasticSearch
|
||||||
|
Категории спектр поднимаются
|
||||||
|
наверх И товары внутри них
|
||||||
|
сортируются по скорингу
|
||||||
|
endnote
|
||||||
|
|
||||||
|
else Товаров спектр не найдено
|
||||||
|
|
||||||
|
Sherlock -> ElasticSearch: REST GET products/_search RU
|
||||||
|
Sherlock -> ElasticSearch: REST GET products/_search EN
|
||||||
|
note over ElasticSearch
|
||||||
|
Товары сортируются
|
||||||
|
по скорингу
|
||||||
|
endnote
|
||||||
|
end
|
||||||
|
|
||||||
|
ElasticSearch --> Sherlock: Передает отсортированный\nсписок товаров
|
||||||
|
Sherlock --> BackendSite: Список товаров
|
||||||
|
BackendSite --> user: Пользователь получает страницу:\nРезультаты поиска
|
||||||
|
|
||||||
|
end
|
||||||
|
@enduml
|
||||||
BIN
search/Схема поиск.png
Normal file
BIN
search/Схема поиск.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 28 KiB |
32
shipment.puml
Normal file
32
shipment.puml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
@startjson
|
||||||
|
{
|
||||||
|
"ShipmentDoc":{
|
||||||
|
"ShipmentMeta":{
|
||||||
|
"id":"uuid || Идентификатор доставки",
|
||||||
|
"OrderID":"uuid || Идентификатор заказа",
|
||||||
|
"MethodId":"int(enum) || Способы доставки",
|
||||||
|
"DeliveryDate":"datetime || Дата доставки",
|
||||||
|
"Services":{
|
||||||
|
"Settings":{
|
||||||
|
"SpreadExtraCost":"bool || Размазать стоимость доставки по товарам связанным с доставкой"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"CreatedAt":"datetime || Дата создания доставки",
|
||||||
|
"UpdatedAt":"datetime || Дата обновления доставки",
|
||||||
|
"Artifact": {
|
||||||
|
"DeliveryWith":"string || Начальный временной промежуток курьерской доставки",
|
||||||
|
"TrackingNumberId":"int || Удалить, бесполезное поле",
|
||||||
|
"PartnerDeliverTo":"string || ??? ",
|
||||||
|
"DestinationOfficeID":"int || Идентификатор офиса, откуда везем товар",
|
||||||
|
"DeliveryOn":"string || Верхняя граница часов доставки ",
|
||||||
|
"DeliveryType":"bool || - обычная доставка 1 - доставка строительных материалов",
|
||||||
|
"DeliveryZone":"int || id зоны доставки строительных материалов из таблицы wtis_ref_town_zone ",
|
||||||
|
"VeerouteExportDate":"datetime || Дата выгрузки в Veeroute ",
|
||||||
|
"AddressID":"int || Идентификатор адреса доставки (внутренний от WTIS) "
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"": {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@endjson
|
||||||
Reference in New Issue
Block a user