1С:Фриланс
25.10
Импорт данных в систему учета из .excel таблицы (Symfony)
https://freelance.habr.com/tasks/605661 Бюджет: 170 000 руб. за проект
ВНИМАНИЕ : только фреймворк Symfony оставляйте свой TG для связи!
Надо получить механизм, который позволяет вгрузить к нам данные (создать и/ли обновить сущности) заданного типа до загрузки получить предпросмотр, чтобы юзер смог указать наглядно "что куда грузим" в зависимости от условий и выбранных данных, доуказать какие-то опции "как обрабатывать" когда всего хватает - обработать импорт Как сделано у другой системы (flow), для референса.
Там хорошо и правильно. Очень рекомендую посмотреть другие системы выбираешь "импорт" - например товары грузишь файл, excel-источник бек его читает, собирает первые NN строк со столбцами, выводит в ответе предпросмотра юзер в окне предпросмотра видит колонки с примером данных, выбирает им "заголовок", т.е куда грузить. По умолчанию не выбраны бек получает выбранные колонки/типы данных, и отдает в ответе "какие еще опции надо указать" юзер указывает (на фронте) доп параметры, которые бек запросил на этапе предпросмотра. Например "как обрабатывать остатки", создавать ли оприходование итп юзер аппрувит, шлёт данные. Бек ставит задачу по обработке данных, со всеми указанными параметрами - отдает фронту "запустили обработку, вон ее ID" обработка задачи выполняет то, что от нее просили, и финалится по готовности
Как бы я сделал, с учетом нашей имеющейся машинерии У нас есть миграшки. Всё чем они занимаются - берут входящие параметры (любые), обрабатывают эти параметры, ставят себе в миграшку задачи, которые уже обрабатывают и вливают данные в зависимости от того, что попросили. Мне кажется - вполне наш вариант.
Чего нет: нам надо получать файлик, выдавать предпросмотр, дальше (до постановки задачи в обработку) понимать, чего от нас хотят и чего не хватает, запрашивать у фронта необходимые параметры (доп.опции и доп.обработки), и когда всего хватает - ставить и запускать миграшки. Миграшка умеет писать лог, чего реально происходило и как обработалось - окай.
Я бы сделал объект ImportTask, и у него type=excel (мало ли потом захотят еще там с 1C, YML как у МСклада итд итп) Фронт запрашивает метод ImportTask/create entity=product (например), мы ее создаем пустую: фронт знает айдишник, может ее дальше доконфигурить Фронт грузит к ней файлик (возможно, больше одного раза) - т.е метод upload Мы по type=excel и entity=product понимаем, какие поля объекта существуют, и читаем первые 20 строк файла. Говорим OK - файлик получили (вдруг нет, или формат не тот) Отдаем а) строки предпросмотра б) набор возможных полей (метод configure для таски) В зависимости от уже загруженных данных в ImportTask, определяем, чего не хватает. Эта логика зависит от уже выбранных данных! так что имеет смысл для importTask написать ряд проверок, которые посмотрят на данные задачи, и что-то запишут в ее requirements + выдадут какой-то лог (например, "ваш файл ваще говно склизское") Я бы сделал отдельный метод ImportTask/configure, в который фронт шлет тупо набор данных, собранных из формы. Прямо json. Тут тебе и выбранные поля, и опции входной обработки (не создавать товары, только обновлять / выбраны остатки, создавать приход, какого контрагента итд итп). Мы данные получаем, прогоняем обработчики по type+entity, и отвечаем на configure: вот снова предпросмотр, вот такие requirements, вот такой ответ валидации, вот такой набор справочных строк (например, сколько данных там вообще в файле нашли подходящих) Для всей ImportTask я бы ввел статус, если он не ready - значит юзеру надо что-то дозаполнить Фронт, когда видит дополнительные requirements, показывает юзеру доп.формы и доп.блоки, которых изначально не было, и которые у юзера дособерут нужные данные Цикл повторяется: юзер дозаполняет или меняет поля (или даже грузит другой файл), мы снова всё проверяем, и так пока все наши проверки не пройдет, а для фронта ImportTask не станет ready Когда у importTask status=ready, фронт вызывает метод execute, который по полностью заполненному importT
еще контент в этом сообществе
еще контент в этом соообществе
1С:Фриланс
25.10
войдите, чтобы увидеть
и подписаться на интересных профи