1b.app
Скопирована ссылка -

Оценить доработки приложения

1. После импорта продукта с несколькими поставщиками (Источник импорта.png), через приложение «CMS ExtraParts» (box_auto_action_extraparts_import_products.php), в OneBox OS создаются дублирующиеся/идентичные карточки этого продукта, в каждой из которых разный поставщик (Дубли.png).
-Нужно что бы при импорте в OneBox OS создавалась только одна уникальная (связка Артикул-Бренд) карточка продукта, со всеми поставщиками этого продукта(Групировка поставщиков по продукту.png).

2.Приложение «CMS ExtraParts» (box_auto_action_extraparts_import_products.php) на основании уровней (price_group.level) и признака родительской категории (price_group.id_parent), а всего в CMS 4 уровня (Категории.png), импортирует и строит дерево категорий в OneBox OS (Категории в Box OS.png).
- Нужно Исключить импорт категорий 2-го уровня, что бы дерево категорий в OneBox OS строилось без групп 2-го уровня(они никогда не несут в себе продуктов). Тоесть родителем (id_parent) групп 1-го уровня (level = 1) должны быть группы 3-го уровня (level = 3).
- Категории с признаком price_group.visible=0 исключить из импорта в OneBox OS (Категории.png).

3. Во время импорта продуктов (box_auto_action_extraparts_import_products.php), принадлежность продукта к категории берется из price.id_price_group (главная категория).
Но так как продукт может одновременно принадлежать нескольким категориям(Дополнительные категории продукта.png), нужно добавить импорт значений: price.id_price_group1, price.id_price_group2, price.id_price_group3, price.id_price_group4 в Дополнительные категории продукта (OneBox OS).

Ответы:


1. После импорта продукта с несколькими поставщиками (Источник импорта.png), через приложение «CMS ExtraParts» (box_auto_action_extraparts_import_products.php), в OneBox OS создаются дублирующиеся/идентичные карточки этого продукта, в каждой из которых разный поставщик (Дубли.png).
-Нужно что бы при импорте в OneBox OS создавалась только одна уникальная (связка Артикул-Бренд) карточка продукта, со всеми поставщиками этого продукта(Групировка поставщиков по продукту.png).

надублить могло потому что в действии привязка на поиск по артикулу по настройке "Уникальность артикулов" - в таком случае карточки создавало бы уникально по связке артикул+бренд, а на деле - по артикулу из-за выключенной настройки не ищет

либо вам нужно включать настройку, либо менять логику в действии и искать по артикулу товары - это +1ч если дорабатывать в виде настройки
так же я вижу что у вас происходит поиск по ид из базы данных, который пишется во внешний ид - собственно это вполне вероятно нужно дорабатывать настройку чтобы выключать поиск по внешнему ид - чтобы искало исключительно по артикулу и после проверяло соответствие бренда - это +1ч в виде настройки


2.Приложение «CMS ExtraParts» (box_auto_action_extraparts_import_products.php) на основании уровней (price_group.level) и признака родительской категории (price_group.id_parent), а всего в CMS 4 уровня (Категории.png), импортирует и строит дерево категорий в OneBox OS (Категории в Box OS.png).
- Нужно Исключить импорт категорий 2-го уровня, что бы дерево категорий в OneBox OS строилось без групп 2-го уровня(они никогда не несут в себе продуктов). Тоесть родителем (id_parent) групп 1-го уровня (level = 1) должны быть группы 3-го уровня (level = 3).
- Категории с признаком price_group.visible=0 исключить из импорта в OneBox OS (Категории.png).

в виде настроек - 2ч


3. Во время импорта продуктов (box_auto_action_extraparts_import_products.php), принадлежность продукта к категории берется из price.id_price_group (главная категория).
Но так как продукт может одновременно принадлежать нескольким категориям(Дополнительные категории продукта.png), нужно добавить импорт значений: price.id_price_group1, price.id_price_group2, price.id_price_group3, price.id_price_group4 в Дополнительные категории продукта (OneBox OS).

в виде настройки - 2ч
31.07.2023, 10:25

Олександр Григорович
Support EP
Оставьте сообщение в этой теме и вам откроются контакты пользователя
Добрый день.
1) Проверил настройку "Уникальность артикулов" - она контролирует только поле Артикул (не связку артикул+бренд) и не позволяет создавать товары с одинаковым артикулом но разными брендами, что мне не подходит.
По этому ок - дорабатываем.
2) ок
3) ок

Жду счёт на оплату.
31.07.2023, 10:53


Александр писал/а:
1. После импорта продукта с несколькими поставщиками (Источник импорта.png), через приложение «CMS ExtraParts» (box_auto_action_extraparts_import_products.php), в OneBox OS создаются дублирующиеся/идентичные карточки этого продукта, в каждой из которых разный поставщик (Дубли.png).
-Нужно что бы при импорте в OneBox OS создавалась только одна уникальная (связка Артикул-Бренд) карточка продукта, со всеми поставщиками этого продукта(Групировка поставщиков по продукту.png).

Доработаны настройки:
"Игнорировать уникальность артикулов в системе и создавать продукты по связке артикула и бренда"
"Исключить поиск продукта по внешнему ID"

2.Приложение «CMS ExtraParts» (box_auto_action_extraparts_import_products.php) на основании уровней (price_group.level) и признака родительской категории (price_group.id_parent), а всего в CMS 4 уровня (Категории.png), импортирует и строит дерево категорий в OneBox OS (Категории в Box OS.png).
- Нужно Исключить импорт категорий 2-го уровня, что бы дерево категорий в OneBox OS строилось без групп 2-го уровня(они никогда не несут в себе продуктов). Тоесть родителем (id_parent) групп 1-го уровня (level = 1) должны быть группы 3-го уровня (level = 3).
- Категории с признаком price_group.visible=0 исключить из импорта в OneBox OS (Категории.png).

Доработаны настройки:
"Исключить импорт категорий 2-го уровня"
"Исключить импорт категорий с признаком visible=0"

3. Во время импорта продуктов (box_auto_action_extraparts_import_products.php), принадлежность продукта к категории берется из price.id_price_group (главная категория).
Но так как продукт может одновременно принадлежать нескольким категориям(Дополнительные категории продукта.png), нужно добавить импорт значений: price.id_price_group1, price.id_price_group2, price.id_price_group3, price.id_price_group4 в Дополнительные категории продукта (OneBox OS).

Доработаны настройки:
"Импортировать дополнительные категории продукта"
"Удалить не импортированные дополнительные категории"
07.08.2023, 15:05

Олександр Григорович
Support EP
Оставьте сообщение в этой теме и вам откроются контакты пользователя
Не могу проверить доработки .Перестало работать приложение "Автоматизация" https://core.extraparts.com.ua/app/automatization/
Ошибка: HTTP ERROR 500
07.08.2023, 15:45


Олександр Григорович
Support EP
Оставьте сообщение в этой теме и вам откроются контакты пользователя
1.1. Импортируются не все товары, поставщики (источник импорта пропущенные.png)
1.2. Во время ипорта импортируются не все данные опоставщика (поставщики.png)

Обратите внимание на время price.post_date пропущенных.
-видно что сбой происходит, когда в источнике (price) появляется много обновленных данных.

Алгоритм обновления данных в источнике ( таблица price) происходит следующим образом:
Перед вставкой масива данных с ключом id_provider, по этому же ключу в таблице price обнуляются поля price и stock.
С добавлением/обновлением данных в price, так же обновляется поле post_date, что стартует box_auto_action_extraparts_import_products.php у которого есть всего 2 мин. ($postDateFrom = DateTime_Object::Now()->addMinute(-2)->setFormat('Y-m-d H:i:s')->__toString();).
Выборка (Выборка.png) показывает обем обновленных (969981) строк в диапазоне 05:47:11 - 05:58:44.
Обновление в источнике по ключу id_provider происходит 1-2 раза в сутки.
Пускай это первый запуск, но все же есть вероятность пропусов при повторном запуске.
Может увеличить количество минут в $postDateFrom?
09.08.2023, 15:19


Александр писал/а:
Пускай это первый запуск, но все же есть вероятность пропусов при повторном запуске.
Может увеличить количество минут в $postDateFrom?

В теории можем вынести это в настройку с значением по умолчанию = 2
Я так понимаю это решит всю описанную вашу проблему, или же нужно на что-то отдельно обратить внимание?
09.08.2023, 16:44

Олександр Григорович
Support EP
Оставьте сообщение в этой теме и вам откроются контакты пользователя
[/quote]
Я так понимаю это решит всю описанную вашу проблему, или же нужно на что-то отдельно обратить внимание?
[/quote]

Проблему я описал выше.
По поводу $postDateFrom - это всего лишь мое видение решения, но я в нем не у верен, хотел бы услышать мнение, вариант от разработчика.

- Если мои выводы верны, то могу попробовать изменить значение 2 на другое, протестировать на деле, а по результатам решим что делать дальше.
09.08.2023, 17:04

Олександр Григорович
Support EP
Оставьте сообщение в этой теме и вам откроются контакты пользователя

Тындык Максим Вадимович
OneBox production писал/а:

Александр писал/а:
Пускай это первый запуск, но все же есть вероятность пропусов при повторном запуске.
Может увеличить количество минут в $postDateFrom?

В теории можем вынести это в настройку с значением по умолчанию = 2
Я так понимаю это решит всю описанную вашу проблему, или же нужно на что-то отдельно обратить внимание?


Да, тест с $postDateFrom показал удовлетворительный результат - можно вынести это в настройку с значением по умолчанию = 2.

По третему пункту ТЗ:
1. Не импортируются дополнительные категории продукта (Дополнительные категории не отображает.png)
2. В категориях перестали отображаться привязанные продукты. (Дополнительные категории не отображает.png)
10.08.2023, 11:11


Александр писал/а:
Да, тест с $postDateFrom показал удовлетворительный результат - можно вынести это в настройку с значением по умолчанию = 2.

вынес в настройку


Александр писал/а:
По третему пункту ТЗ:
1. Не импортируются дополнительные категории продукта (Дополнительные категории не отображает.png)
2. В категориях перестали отображаться привязанные продукты. (Дополнительные категории не отображает.png)

по данному пункту не вижу проблем с импортом дополнительных категорий
может проверить на каком-то конкретном примере (id) из таблицы price - сделаю вручную импорт только по указанной записи
10.08.2023, 16:00

Олександр Григорович
Support EP
Оставьте сообщение в этой теме и вам откроются контакты пользователя

может проверить на каком-то конкретном примере (id) из таблицы price - сделаю вручную импорт только по указанной записи

На скрине (Дополнительные категории не отображает.png) указан конкретный пример (id) из таблицы price - 2125275, его (id) в OneBOX -412732.
Так же на скрине видно, что у id 2125275 (BOX id =412732) главная категория 597 (BOX id =1500) и дополнительные: 887 (BOX id =1762), 1055 (BOX id = 1297), 1059 (BOX id =1928), ...
Открыв в боксе любую изперечисленных Дополнительных категорий - мы не найдем продукт с BOX id =412732.
10.08.2023, 17:00

Олександр Григорович
Support EP
Оставьте сообщение в этой теме и вам откроются контакты пользователя

В теории можем вынести это в настройку с значением по умолчанию = 2
Я так понимаю это решит всю описанную вашу проблему, или же нужно на что-то отдельно обратить внимание?

Это решило проблему, но не всю...
- в price за одну секунду обновилось 806900 строк, но алгоритм импорта не взял этот обем в работу, тоесть импорт даже не начался(когда меньшее количество все Ок).
ОЗУ/CPU на сервере с запасом, настройка $postDateFrom роли не играет, может memory limit или time limit на выполнение скриптов не пропускают?
10.08.2023, 20:27

Олександр Григорович
Support EP
Оставьте сообщение в этой теме и вам откроются контакты пользователя

Александр писал/а:

В теории можем вынести это в настройку с значением по умолчанию = 2
Я так понимаю это решит всю описанную вашу проблему, или же нужно на что-то отдельно обратить внимание?

Это решило проблему, но не всю...
- в price за одну секунду обновилось 806900 строк, но алгоритм импорта не взял этот обем в работу, тоесть импорт даже не начался(когда меньшее количество все Ок).
ОЗУ/CPU на сервере с запасом, настройка $postDateFrom роли не играет, может memory limit или time limit на выполнение скриптов не пропускают?

Решено!
- выделите пожалуйста минутному крону 4G памяти (/usr/bin/php -d memory_limit=4G -f ~/cron/cron-minute.php) и сделайте commit - этот обем позволяет нормально работать скрипту с 5М строк из price. (Проверено)


Александр писал/а:

может проверить на каком-то конкретном примере (id) из таблицы price - сделаю вручную импорт только по указанной записи

На скрине (Дополнительные категории не отображает.png) указан конкретный пример (id) из таблицы price - 2125275, его (id) в OneBOX -412732.
Так же на скрине видно, что у id 2125275 (BOX id =412732) главная категория 597 (BOX id =1500) и дополнительные: 887 (BOX id =1762), 1055 (BOX id = 1297), 1059 (BOX id =1928), ...
Открыв в боксе любую изперечисленных Дополнительных категорий - мы не найдем продукт с BOX id =412732.

Эта проблема все еще актуальна.
16.08.2023, 16:27

Олександр Григорович
Support EP
Оставьте сообщение в этой теме и вам откроются контакты пользователя
Практическое испоьзование показало проблемы:
Работа скрипта импорта продуктов может длится от 2 мин. до 5 ч. (на 5 млн. строк) потребляя до 4G памяти.
- запуская такой скрипт на ряду с другими Автоматизациями Минутного Крона, последние не запустятся пока не закончится выполнение скрипта импорта, порой это 5 ч.
- так же следующий импорт, сможет начатся только после окончания предыдущего, что делает настройку $postDateMinute неэфективной и приводиь к пропусам импортируемых данных.

Вариант решения проблем алгоритма импорта:
1. Нужно запускать паралельноо/независимо от других задач на минутном кроне (к примеру как /usr/bin/php -d memory_limit=512M -f ~/.../cron-supplierprice.php), выделив ему 4G памяти.
2. Что бы не пропускать обновления данных в price, необходимо после каждого запуска алгоритма - фиксировать время запуска (к примеру $LastDateStart), а в работу брать с учетом этой метки (SELECT * FROM `price` WHERE `post_date` > '{$LastDateStart}' ORDER BY `price`.`id` ASC).
На случай если алгоритм ипорта давно не запускался, и нет необходимости импортировать устарелые данные, можно добавить настройку (Метка времени последнего запуска иморта.png), отметив которую - временной метке будет присвоено текущее время сервера ($LastDateStart = DateTime_Object::Now()->setFormat('Y-m-d H:i:s')->__toString();)

Оцените пожалуйста доработки?
17.08.2023, 15:17


1. Нужно запускать паралельноо/независимо от других задач на минутном кроне (к примеру как /usr/bin/php -d memory_limit=512M -f ~/.../cron-supplierprice.php), выделив ему 4G памяти.

я могу вынести на вашем проекте запуск действия в отдельный крон + игнорировать его в минутном кроне - это займёт 1ч

2. Что бы не пропускать обновления данных в price, необходимо после каждого запуска алгоритма - фиксировать время запуска (к примеру $LastDateStart), а в работу брать с учетом этой метки (SELECT * FROM `price` WHERE `post_date` > '{$LastDateStart}' ORDER BY `price`.`id` ASC).
На случай если алгоритм ипорта давно не запускался, и нет необходимости импортировать устарелые данные, можно добавить настройку (Метка времени последнего запуска иморта.png), отметив которую - временной метке будет присвоено текущее время сервера ($LastDateStart = DateTime_Object::Now()->setFormat('Y-m-d H:i:s')->__toString();)

можно сделать такую настройку в действие - это то же 1ч


Александр писал/а:
На скрине (Дополнительные категории не отображает.png) указан конкретный пример (id) из таблицы price - 2125275, его (id) в OneBOX -412732.
Так же на скрине видно, что у id 2125275 (BOX id =412732) главная категория 597 (BOX id =1500) и дополнительные: 887 (BOX id =1762), 1055 (BOX id = 1297), 1059 (BOX id =1928), ...
Открыв в боксе любую изперечисленных Дополнительных категорий - мы не найдем продукт с BOX id =412732.

Эту проблему проверю в ближайшее время.
25.08.2023, 14:26

Олександр Григорович
Support EP
Оставьте сообщение в этой теме и вам откроются контакты пользователя
Согласен доработки 2ч, готов оплатить.
25.08.2023, 14:40


Александр писал/а:
На скрине (Дополнительные категории не отображает.png) указан конкретный пример (id) из таблицы price - 2125275, его (id) в OneBOX -412732.
Так же на скрине видно, что у id 2125275 (BOX id =412732) главная категория 597 (BOX id =1500) и дополнительные: 887 (BOX id =1762), 1055 (BOX id = 1297), 1059 (BOX id =1928), ...
Открыв в боксе любую изперечисленных Дополнительных категорий - мы не найдем продукт с BOX id =412732.

Исправлено.
25.08.2023, 15:49


Тындык Максим Вадимович
OneBox production писал/а:

Александр писал/а:
На скрине (Дополнительные категории не отображает.png) указан конкретный пример (id) из таблицы price - 2125275, его (id) в OneBOX -412732.
Так же на скрине видно, что у id 2125275 (BOX id =412732) главная категория 597 (BOX id =1500) и дополнительные: 887 (BOX id =1762), 1055 (BOX id = 1297), 1059 (BOX id =1928), ...
Открыв в боксе любую изперечисленных Дополнительных категорий - мы не найдем продукт с BOX id =412732.

Исправлено.

+
25.08.2023, 16:19

1. доработал настройку "Импортировать данные измененные с момента последнего запуска действия" (при запуске запоминает время старта действия и при следующем запуске забирает данные с этого времени)
Если это первый запуск с данной настройкой - то возьмёт за N минут указанные в действии и запомнит время запуска для последующего запуска.
После этого убираете в настройке N минут - и действие работает согласно дате предыдущего запуска. Если нужно запарсить с конкретного времени - убираете галочку и ставите за сколько минут запарсить единоразово, потом возвращаете.

2. вынес запуск действия в отдельный минутный крон, с автоматизаций его не удалять.
28.08.2023, 09:47


Тындык Максим Вадимович
OneBox production писал/а:
1. доработал настройку "Импортировать данные измененные с момента последнего запуска действия" (при запуске запоминает время старта действия и при следующем запуске забирает данные с этого времени)
Если это первый запуск с данной настройкой - то возьмёт за N минут указанные в действии и запомнит время запуска для последующего запуска.
После этого убираете в настройке N минут - и действие работает согласно дате предыдущего запуска. Если нужно запарсить с конкретного времени - убираете галочку и ставите за сколько минут запарсить единоразово, потом возвращаете.

+

2. вынес запуск действия в отдельный минутный крон, с автоматизаций его не удалять.

Смотрю кронам добавили памяти, но почему то лог fatal-2023-08-28.log жалуется каждую минуту:
[2023-08-28 14:06:12]
point: /var/www/..../cron/cron-minute.php
engine_sessionid: 1693220763_1129
data: Array
(
[type] => 1
[message] => Allowed memory size of 536870912 bytes exhausted (tried to allocate 16384 bytes)
[file] => /var/www/..../web/packages/ConnectionManager/ConnectionManager_MySQLi.class.php
[line] => 125

И алгоритм иморта с 3G памяти не взял в работу 4909532 строк, а с 4G берет ок - добавьте пожалуйста это значение.
28.08.2023, 14:18


Александр писал/а:
Смотрю кронам добавили памяти, но почему то лог fatal-2023-08-28.log жалуется каждую минуту:
[2023-08-28 14:06:12]
point: /var/www/..../cron/cron-minute.php
engine_sessionid: 1693220763_1129
data: Array
(
[type] => 1
[message] => Allowed memory size of 536870912 bytes exhausted (tried to allocate 16384 bytes)
[file] => /var/www/..../web/packages/ConnectionManager/ConnectionManager_MySQLi.class.php
[line] => 125


это минутному крону не хватило памяти, можно поднять (я поднял до 3G)


Александр писал/а:
И алгоритм иморта с 3G памяти не взял в работу 4909532 строк, а с 4G берет ок - добавьте пожалуйста это значение.

я вижу вы уже видимо самостоятельно это сделали
28.08.2023, 17:47


я вижу вы уже видимо самостоятельно это сделали

Я сделал это для теста, нужно сделать commit с 4G.
28.08.2023, 17:50


Александр писал/а:
Я сделал это для теста, нужно сделать commit с 4G.

поставил обеим 5 с запасом чтобы
28.08.2023, 17:54


Тындык Максим Вадимович
OneBox production писал/а:

Александр писал/а:
Я сделал это для теста, нужно сделать commit с 4G.

поставил обеим 5 с запасом чтобы

+
28.08.2023, 17:55


1. доработал настройку "Импортировать данные измененные с момента последнего запуска действия" (при запуске запоминает время старта действия и при следующем запуске забирает данные с этого времени)
Если это первый запуск с данной настройкой - то возьмёт за N минут указанные в действии и запомнит время запуска для последующего запуска.
После этого убираете в настройке N минут - и действие работает согласно дате предыдущего запуска. Если нужно запарсить с конкретного времени - убираете галочку и ставите за сколько минут запарсить единоразово, потом возвращаете.

Максим, настройка пропускает измененные данные с момента последнего запуска действия.
Для наглядности сделал выборку по времени обновления данных в таблице price. (пропущенный_массив.png)
Красным отмечено время обновленнных данных которое скрипт импорта не взял в работу. (Настройки алгоритма импорта.png)
Провев несколько тестов, выяснил что пропуски не зависят от обёма данных или самих данных, тоесть обновив те же данные - алгоритм их взял в работу.
Думаю проблема кроется в тригере запуска {$postDateFrom}, а именно меня смущает $postDateMinute = 2, проверьте пожалуйста еще раз..
31.08.2023, 18:09

Олександр Григорович
Support EP
Оставьте сообщение в этой теме и вам откроются контакты пользователя
Если не баг, то оцените доработку.
После импорта через приложение «CMS ExtraParts» - данные о количестве, закупочной цене, дате обновления в Поставщиках продукта изменяются, но Автоматический Пересчет Цен и Наличия продуктов не происходит, как через Загрузку Прайс-листа (xlsx) поставщика.

Проблему уже описывал, но ответа нет:
https://1b.app/ru/forum/supplier-and-price-list-management/17355-ne-proishodit-a...
https://1b.app/ru/forum/supplier-and-price-list-management/17381-ne-pratsyuie-za...
13.09.2023, 23:05

Пожалуйста, присоединяйтесь к диалогу. Если вам есть что сказать - пожалуйста, напишите комментарий. Для входа потребуется мобильный телефон и смс-код для идентификации. Войти и написать комментарий