1. Краткая инструкция по конфигурации проекта
Настройка файла опций
С корневой папки MySales необходимо перейти в папку config и создать файл
options_[name].json5 , где [name] - название проекта;Копируем стандартную заготовку файла опций (с м. Приложение) в созданный
файл с заменой [name] на название проекта;В поле db_interface вписываем используемый драйвер БД:
a. './DbMysql' - драйвер для MySql;
b. './DbMssqlNew' - драйвер для MSSql;
c. './DbOracle' - драйвер для БД Oracle;
d. './DbPostgresql' - драйвер для PostgreSql.В поле connection заполняем необходимые параметры для подключения к БД
исходя из образцов ( см. Приложение );В поле weather.location удаляеме коды городов, которые не используются
клиентом;В поле end_week устанавливаем максимально доступную неделю если
пилотный проект или 0 если продуктив;В поле start_week устанавливаем минимальную (самую ранюю) историческую
неделю;Если Клиент имеет больше одного региона, то необходимо параметру
use_all_region присвоить значение true иначе false .Сохраняем файл.
Настройка файла SQL запросов
1. С корневой папки MySales необходимо перейти в папку config и создать файл
sql_[name].ini , где [name] - название проекта;
2. Записываем в файл основные SQL запросы следующего предназначения
(форма записи SQL запроса см. Приложение ):
Название запроса | Описание запроса |
---|---|
all_stores | Возвращает следующие поля:
Отсортированные в порядке Пример запроса: SELECT STORE_ID NUM, STORE_NAME NAME,REGION_ID REGION, WEATHER_CODE WEATHERFROM STORES ORDER BY REGION_ID, STORE_ID |
all_regions | Возвращает следующие поля:
Пример запроса: SELECT '0' NUM, 'All' NAME, null WEATHERUNION ALLSELECT REGION_ID NUM, NAME NAME, WEATHER_CODE WEATHERFROM REGIONS |
all_groups | Возвращает следующие поля:
Отсортированные в порядке Пример запроса: SELECT GROUP_ID GRP, NAME NAME FROM GROUPS ORDER BY GROUP_ID |
sku_group | Возвращает следующие поля:
Отсортированные в порядке SELECT SKU_ID SKU, ARTICLE_NAME NAME, GROUP_ID GRPFROM PRODUCTS WHERE SKU_ID [sku_list] AND GROUP_ID [group_list] AND SUPPLIER_ID [supplier_list] ORDER BY GROUP_ID, SKU_ID |
all_suppliers | Возвращает следующие поля:
Пример запроса: SELECT SUPPLIER_ID NUM, SUPPLIER_NAMENAMEFROM SUPPLIERS ORDER BY SUPPLIER_NAME |
3. Записываем в файл предопределение переменных “price_disc” и
“price_disc_sum” в следующем виде:
{price_disc}
case when [ sales volume] = 0 then null else ( [ sales value] +
[discount value] ) / [sales volume] end PRICE,
case when [ sales volume] = 0 then 0 else [ discount value] / [ sales
volume] end DISC{price_disc_sum}
case when sum([ sales volume]) = 0 then null else sum ( [ sales
value] + [discount value] ) / sum( [sales volume] ) end PRICE,
case when sum([ sales volume]) = 0 then 0 else sum([ discount
value] ) / sum( [sales volume] ) end DISC
Квадратные скобки необходимо заменить на соответствующие им поля в БД.
4. Записываем в файл основные SQL запросы по загрузке продаж(форма записи
SQL запроса см. Приложение ):
Название запроса | Описание запроса |
---|---|
sales_by_group_store | Возвращает следующие поля:
С возможностью передачи
Пример запроса: SELECT STORE_ID STORE, WEEK,STOCK_ITEM_COUNT CNT, STOCK_VOLUMESTOCK, SALES_VOLUME SALES, {price_disc} FROM SALES_GROUPWHERE STORE_ID [store_list] AND GROUP_ID = :groupAND WEEK BETWEEN :start_week AND :end_weekAND ((sales_volume > 0) OR (stock_volume > 0)) |
sales_sum_stores_sum_groups | Возвращает следующие поля:
С возможностью передачи
Группирование по полю Недели. Пример запроса: SELECT WEEK, SUM(STOCK_ITEM_COUNT) CNT, SUM(STOCK_VOLUME) STOCK,SUM(SALES_VOLUME) SALES, {price_disc_sum} FROM SALES_GROUPWHERE WEEK BETWEEN :start_week AND:end_weekAND ((sales_volume > 0) OR (stock_volume > 0)) GROUP BY WEEK |
sales_by_stores_sum_groups | Возвращает следующие поля:
С возможностью передачи
Группирование по полям: Номер SELECT STORE_ID STORE, WEEK, SUM(STOCK_ITEM_COUNT) CNT, SUM(STOCK_VOLUME) STOCK,SUM(SALES_VOLUME) SALES, {price_disc_sum} FROM SALES_GROUPWHERE STORE_ID [store_list] AND WEEK BETWEEN :start_week AND :end_week AND ((sales_volume > 0) OR (stock_volume > 0)) GROUP BY STORE_ID, WEEK |
sales_by_group_sum_stores | Возвращает следующие поля:
С возможностью передачи
Группирование по полям: Номер SELECT WEEK, sum(STOCK_ITEM_COUNT) CNT, sum(STOCK_VOLUME) STOCK,sum(SALES_VOLUME) SALES, {price_disc_sum} FROM SALES_GROUPWHERE GROUP_ID = :group AND WEEK between :start_week and :end_week AND ((sales_volume > 0) or (stock_volume > 0)) GROUP BY GROUP_ID, WEEK |
sales_by_sku_store | Возвращает следующие поля:
С возможностью передачи
Пример запроса: SELECT SKU_ID SKU, STORE_ID STORE, WEEK, STOCK_VOLUME STOCK, SALES_VOLUME SALES, {price_disc} FROM SALES_SKU WHERE STORE_ID [store_list] AND SKU_ID [sku_list] AND ((sales_volume > 0) or (stock_volume > 0)) AND WEEK between :start_week and :end_week |
sales_by_sku_sum_stores | Возвращает следующие поля:
С возможностью передачи
Пример запроса: SELECT SKU_ID SKU, WEEK, count(*) CNT, sum(STOCK_VOLUME) STOCK, sum(SALES_VOLUME) SALES, {price_disc_sum} FROM SALES_SKU WHERE SKU_ID [sku_list] AND ((sales_volume > 0) or (stock_volume > 0)) AND WEEK between :start_week and :end_week GROUP BY SKU_ID, WEEK |
5. Сохраняем файл.
Настройка директории
Открываем корневую папку MySales в командной строке (терминале) и
прописываем следующую команду для создания директории проекта:
mkdir data/data_ [name]
где [name] - название проекта;Далее прописываем команду для создания лицензионного файла:
node util/generate_keys.js options_ [name] .json5
где [name] - название проекта;В созданную директорию mysales/data/data_ [name] копируем файлы с историей
курса доллара (currency_rate.json) и погоды (weather.json).
Настройка сборщика
С корневой папки MySales необходимо перейти в папку dist и создать файл
update_[name].sh , где [name] - название проекта;Заполнить файл по примеру:
echo Downloading installation >>./data_ [name] /update.log wget "https://www.dropbox.com/s/qqz3qn2yqttcq6e/mysales.zip?dl=1%22” -O mysales.zip >>./data_ [name] /update.log wget "" -O mysales_ [name] .zip >>./data_ [name] /update.log unzip -o mysales.zip >>./data_ [name] /update.log unzip -o mysales_ [name] .zip >>./data_ [name] /update.log node stop >>./data_ [name] /update.log pkill -9 -f node >>./data_ [name] /update.log cp log.txt prev_log.txt >>./data_ [name] /update.log nohup node start &>log.txt & echo Update completed. Instance started >>./data_ [name] /update.log date +"%m/%d/%Y %H:%M:%S $HOSTNAME" >>./data_ [name] /update.log
где [name] - название проекта; "С корневой папки MySales необходимо перейти в папку util и открыть файл
make.sh ;Перед записью echo Completed необходимо вставить запись для сборки
проекта:
echo Make for [name] mkdir ./data_ [name] cp ../data/data_demo/currency_rate.json ./data_ [name] cp ../data/data_demo/weather.json ./data_ [name] node ../util/generate_keys.js ./options_ [name] .json5 cp ./options_ [name] .json5 ./options.json5 cp ./update_ [name] .sh ./update.sh zip -r ./mysales_ [name] ./options.json5 [db_interface] ./options_ [name] .json5 ./sql_ [name] . ini ./data_[ name] update.sh start.sh start.bat rm -r ./data_ [name]
где [name] - название проекта, [db_interface] - драйвер БД:
a. ./DbMysql - драйвер для MySql;
b. ./DbMssqlNew - драйвер для MSSql;
c. ./DbOracle - драйвер для БД Oracle;
d. ./DbPostgresql - драйвер для PostgreSql.
5. Сохраняем файл.
2. Краткая инструкция по созданию сборки
При создании сборки проекта можно выделить следующие этапы:
Создание сборки;
Обновление конфигурационных файлов (необходим только после создания
первой сборки по проекту);Установка сборки.
Создание сборки
Открываем корневую папку MySales в командной строке (терминале) и
прописываем следующую команду для создания директории проекта:
util/make.shОжидаем окончания создания сборок по всем проектам;
Сборки хранятся в хранилище на Dropbox в папке MySalesDist .
Обновление конфигурационных файлов
Открываем папку MySalesDist на Dropbox;
Предоставляем доступ по ссылке файлу mysales_ [name] .zip , где [ name] -
название проекта.Копируем ссылку доступа и вставляем её в:
a. файл опций options_ [name] .json5 в поле updater.optArchUrl;
b. файл обновления update_ [name] .sh в поле wget "[ link]" -O
mysales_ [name] .zip
где [name] - название проекта,
[link] - ссылка.
Примечание: если ссылка заканчивается на “0”, в файлах опций и обновления “0”
необходимо заменить на “1”.
Установка сборки
Открываем папку MySalesDist на Dropbox;
Скачиваем файлы:
a. mysales.zip;
b. mysales_ [name] .zip, где [name] - название проекта.Разархивируем скачанные файлы, после удаляем файлы.
Перемещаем файлы с папки mysales и mysales_ [name] (где [ name] - название
проекта) в одну папку и открываем ее в командной строке (терминале);Выполняем команду: npm i ;
Установка сборки завершена, для запуска MySales необходимо открыть папку с
файлами MySales в командной строке (терминале) и выполнить команду: node
app .
3. Дополнительная конфигурация
Добавление ассортиментной матрицы
Открываем файл конфигурации проекта;
В поле loader добавляем свойство load_range_days со значением N (кол-во
последних дней, за которые загружаются цены, по умолчанию 365);В поле default_predictors добавляем новый предиктор 'assrt' ;
Сохраняем файл конфигураций;
Открываем файл Sql запросов;
Добавляем следующий Sql запрос:
Название запроса | Описание запроса |
---|---|
ranges_by_sku_store | Возвращает следующие поля:
С возможностью передачи следующих параметров:
Пример запроса: SELECT SKU_ID SKU, STORE_ID STORE, TO_NUMBER(TO_CHAR(START_DATE, ‘IYYYIW’))STARTW, TO_NUMBER(TO_CHAR(NVL(END_DATE,TO_DATE('20500101', 'YYYYMMDD')), ‘IYYYIW’))ENDW FROM SKU_RANGEWHERE (END_DATE >= TO_DATE(‘:end_date’,'YYYY-MM-DD') OR END_DATE IS NULL) AND STORE_ID [store_list] AND SKU_ID [sku_list] |
7. Сохраняем файл Sql запросов.
Добавление цен
Открываем файл конфигурации проекта;
В поле loader добавляем свойство load_price_days со значением N (кол-во
последних дней, за которые загружаются цены, по умолчанию 365);Сохраняем файл конфигураций;
Открываем файл Sql запросов;
Добавляем следующий Sql запрос:
Название запроса | Описание запроса |
---|---|
price_by_sku_store | Возвращает следующие поля:
С возможностью передачи
Пример запроса: SELECT SKU_ID SKU, PRICELINE_ID PRL, PRICE, TO_CHAR(START_DATE, 'YYYY-MM-DD') STARTD, TO_CHAR(END_DATE, 'YYYY-MM-DD') ENDD FROM PRICES WHERE SKU_ID [sku_list] AND PRICELINE_ID IN (SELECT PRICELINE_ID FROM STORES WHERE STORE_ID [store_list]) AND (END_DATE > TO_DATE(':start_date', 'YYYY-MM-DD') OR END_DATE IS NULL) |
6. В Sql запрос all_stores необходимо добавить поле вывода ценового региона
PRL.
Пример запроса:
SELECT STORE_ID NUM, STORE_NAME NAME, PRICE_LINE_ID PRL, REGION_ID REGION, WEATHER_CODE WEATHER FROM STORES ORDER BY REGION_ID, STORE_ID
7. Сохраняем файл Sql запросов.
4. Приложение
Стандартный файл опций
Стандартный файл опций находится в директории MySales по пути
config/docs/options_[name].json5 .
Настройки подключения к БД
MySql
{ connectionLimit: 10, host: ' [host / server] ', port: [port] , user: ' [username] ', password: ' [password] ’, database: ' [name of database] ’, multipleStatements: true }
MSSql
{ user: ' [username] ', password: ' [password] ', server: ' [host / server] ', port: [port] , database: ' [name of database] ', pool: { max: 50, min: 0, idleTimeoutMillis: 3000000 }, connectionTimeout: 3000000, requestTimeout: 4000000 }
Azure Sql
'Server=tcp: [server/host] ,1433;Database= [nameOfDatabase] ;Uid= [userName] ;Pwd= [pas sword] ;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=9999999;'
Oracle
{ user: " [username] ", password: " [password] ", tns: "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST= [host/server] )(PORT= [port] ))(C ONNECT_DATA=(SERVICE_NAME= [serviceName] )))", poolSize: 5 }
PostgreSql
{ host: ' [host / server] ', port: [port] , user: ' [username] ', password: ' [password] ', database: ' [name of database] ', schema: ' [name of schema] ' }
Форма записи SQL запроса
[ [name of SQL query] ] SQL query
Переменные в SQL запросе
MySales поддерживает передачу переменных двух видов:
содержащая одно значение;
содержащая список значений.
Первый вид используется следующим способом:
WHERE COLUMN_NAME = :variable_name
Если тип значения переменной string, то запись переменной имеет следующий вид:
WHERE COLUMN_NAME = “:variable_name”
При использовании второго вида переменной запись выглядит:
WHERE COLUMN_NAME [variable_name]
Если тип значения переменной string, то запись переменной имеет следующий вид:
WHERE COLUMN_NAME “[variable_name]”