Delete page "Home"
parent
ad6c85a1fe
commit
0c38479d41
106
Home.md
106
Home.md
@ -1,106 +0,0 @@
|
||||
## Назначение
|
||||
Программа облегчает большое количество рутинных операций с таблицами (импорт, экспорт, объединение, подбор артикулов и т.д.)
|
||||
|
||||
## Описание
|
||||
Проект состоит из нескольких компонентов:
|
||||
- Надстройка для Excel
|
||||
(<https://gitea.cebotari.ru/chebser/RhSolutions-AddIn>)
|
||||
- Серверное приложение для мультиклассовой классификации с помощью ML.NET и полнотекстового поиска в базе данных (<https://gitea.cebotari.ru/chebser/RhSolutions>)
|
||||
- Небольшая библиотека с моделями описывающими продукт из прайс-листа, парсер артикулов (<https://gitea.cebotari.ru/chebser/RhSolutions.Sku>)
|
||||
|
||||
### Использованные библиотеки
|
||||
Надстройка написана на C# с использованием библиотеки [Excel-DNA](https://github.com/Excel-DNA/). Основы создания подобной надстройки я описал в статьях на Хабре:
|
||||
+ [Пишем надстройку для Excel на .NET с помощью библиотеки Excel-DNA](https://habr.com/ru/articles/741110/)
|
||||
+ [Пишем надстройку Excel на Excel-DNA. Часть 2](https://habr.com/ru/articles/741732/)
|
||||
|
||||
Также в этой работе я использовал библиотеки
|
||||
- [Newtonsoft.Json](https://www.newtonsoft.com/json) - для сериализации и десериализации классов в JSON при передаче по REST API
|
||||
- [netDxf](https://github.com/haplokuon/netDxf) - для создания файлов спецификации По ГОСТ 21.110-2013 в чертежном формате
|
||||
- [ClosedXML](https://github.com/ClosedXML/ClosedXML) - для парсинга xls файлов при загрузке через POST-запрос в удаленную базу данных
|
||||
- [Npgsql](https://www.npgsql.org/) - для работы серверного приложения с базой данных PostgreSQL и реализации полнотекстового поиска
|
||||
- [ML.NET](https://learn.microsoft.com/en-us/dotnet/machine-learning/) - для мультиклассовой классификации артикулов в целях поиска в базе данных
|
||||
|
||||
## Демонстрация
|
||||
### Инструменты
|
||||
|
||||
- _Экспорт массива ячеек вида "Артикул - Количество" в прайс-лист_
|
||||
Выделив рядом идущие ячейки с артикулом и количеством и нажав одну кнопку можно выгрузить данные позиции в таблицу с прайс-листом
|
||||
Данный инструмент:
|
||||
1. Читает массив выделенных ячеек
|
||||
2. Проверяет построчно на наличие верного артикула
|
||||
3. Собирает словарь с парой ключ - значение: экземпляр модели продукта - количество
|
||||
4. Открывает предварительно заданные в настройках пустой шаблонный файл таблицы прайс-листа
|
||||
5. Заполняет с помощью словаря шаблонный файл
|
||||
|
||||
- _Актуализация прайс-листа до последней версии_
|
||||
Одной кнопкой актуализирует спецификацию заполненную в устаревшей версии прайс-листа с заменой изменившихся артикулов на новый вариант
|
||||
Данный инструмент:
|
||||
1. Читает открытый прайс-лист
|
||||
2. Собирает словарь с парой ключ - значение: экземпляр модели продукта - количество
|
||||
4. Открывает пустой шаблонный файл
|
||||
5. Заполняет шаблонный файл
|
||||
|
||||
- _Объединение нескольких прайс-листов в один файл_
|
||||
Объединение с разнесением данных по столбцам и суммированием в итоговом столбце количества
|
||||
Данный инструмент:
|
||||
1. Открывает выбранные в диалоге файлы прайс-листов
|
||||
2. Собирает лист из словарей со значениями продукт - количество
|
||||
4. Открывает пустой шаблонный файл
|
||||
5. Заполняет шаблонный файл
|
||||
|
||||
- _Поиск пар артикул-количество в любой сторонней таблице и экспорт в таблицу заказов_
|
||||
Автоматическое определение столбцов с артикулами и количеством в любой таблице и экспорт пар в прайс-лист
|
||||
Данный инструмент:
|
||||
1. Читает открытую таблицу по столбцам, проверяя на наличие столбца со значениями артикулов
|
||||
2. Если столбец с артикулами найден, ищет ближайший столбец с числовыми значениями, который принимает как столбец с количеством
|
||||
3. Если столбцы с артикулом и количеством определены, заполняет словарь продукт - количество
|
||||
4. Открывает пустой шаблонный файл
|
||||
5. Заполняет шаблонный файл
|
||||
|
||||
- _Подбор монтажных гильз для фитингов_
|
||||
Просмотр названий артикулов и подсчет с помощью регулярных выражений количества монтажных гильз для монтажа соответствующих фитингов. Занесение итогового количества в таблицу
|
||||
Данный инструмент:
|
||||
1. Читает открытый прайс-лист
|
||||
2. Собирает словарь с парой ключ - значение: экземпляр модели продукта - количество
|
||||
3. По регулярному выражению проверяет названия артикулов и собирает словарь со значениями продукт (монтажная гильза конкретного диаметра) - количество
|
||||
4. Заполняет открытый прайс-лист значениями словаря из п.3
|
||||
|
||||
- _Экспорт таблицы заказов в девятиграфку по ГОСТ_
|
||||
Экспорт спецификации из открытого прайс-листа в спецификацию-девятиграфку по ГОСТ в чертежном формате.
|
||||
Данный инструмент:
|
||||
1. Читает открытый прайс-лист
|
||||
2. Собирает словарь с парой ключ - значение: экземпляр модели продукта - количество
|
||||
3. С помощью библиотеки netDXF создает файл чертежа с таблицей по ГОСТ и заполняет ее полученными значениями
|
||||
4. Открывает полученный файл чертежа в программе-редакторе файлов *.dxf
|
||||
|
||||
### Формулы
|
||||
- ```=RHSOLUTIONS()``` и ```=РЕХАУ()``` - поиск артикула через GET-запрос в базе данных
|
||||
Данная формула делает GET-запрос в серверное приложение. В серверной части производится классификация искомой строки, парсинг с помощью соответствующего присвоенному классу парсера и формирование строки запроса для полнотекстового поиска по подготовленной предварительно из прайс-листа базе данных PostgreSQL. Приложение запущено на VPS в docker-контейнере, рядом с docker-контейнером базы данных.
|
||||
- ```=РЕХАУАРТИКУЛ()``` - экстракция артикула РЕХАУ из любой строки по регулярному выражению
|
||||
Формула использует парсер артикулов по регулярному выражению, определенный в классе модели продукта.
|
||||
Так как данный класс используется и в надстройке, и в серверном приложении полнотекстового поиска, я собрал NuGet пакет для него и загрузил в репозиторий своего инстанса Gitea.
|
||||
- ```=РЕХАУИМЯ()``` - поиск названия артикула по номеру
|
||||
Формула делает запрос артикула в серверную базу данных и выдает имя найденного артикула
|
||||
- ```=РЕХАУЦЕНА()``` - поиск цены в евро по номеру артикула
|
||||
Формула делает запрос артикула в серверную базу данных и выдает цену в евро найденного артикула
|
||||
- ```=РЕХАУЦЕНАРУБ()``` - поиск цены в рублях по номеру артикула и курсу ЦБ на любую дату
|
||||
Формула делает:
|
||||
- Запрос артикула в серверную базу данных
|
||||
- Запрос курса евро на нужную дату - используется открытый API Центрального банка РФ и парсится XML c ответом
|
||||
- Выдает произведение цены в евро и курса
|
||||
- ```=КУРСЕВРО()``` - курс евро ЦБ на дату
|
||||
Формула делает запрос курса евро на нужную дату в API Центрального банка РФ
|
||||
|
||||
## Заключение
|
||||
В проекте
|
||||
- Применял принципы _ООП_, наследование и полиморфизм. Использовал абстрактные классы, переопределение методов.
|
||||
- Изучал _Dependency Injection_: определял нужные интерфейсы, внедрял различные их реализации
|
||||
- Работал со сторонним _REST API_ и написал свой
|
||||
- Работал с популярными библиотеками, такими как _Newtonsoft.Json_, _ClosedXML_, _Npgsql_
|
||||
- Разработал несколько регулярных выражений с различными целями
|
||||
- Делал кросс-сборку проекта под различные версии .NET
|
||||
- Делал сериализацию и десериализацию классов в _JSON_ и _XML_
|
||||
- Работал с _PostgreSQL_ и его полнотекстовым поиском
|
||||
- Освоил объектную модель _Excel_
|
||||
- Собирал _Docker_-образы со своими приложениями и базами данных, разворачивал их на своем сервере
|
||||
- Применил ML с помощью ML.NET
|
Loading…
Reference in New Issue
Block a user