1. Yasir Arsanukaev
  2. rpcmp-cert

Overview

Приложение позволяет генерировать сертификаты в PDF и отправлять их на адреса электронной почты из базы данных.

В данный момент для простоты в качестве СУБД используется SQLite версии 3.

База данных периодически пополняется новыми адресами из CSV-файла с помощью SQLite-инструкции .import. Типичный запуск:

sqlite> .separator "^"
sqlite> .import data.csv imp

Где imp -- название таблицы с необработанными данными пользователей. (Всю схему базы данных можно отобразить, выполнив команду .schema в командной строке SQLite.)

Как видно из примера, перед импортом необходимо из постоянно пополняющейся базы в не-CSV-формате получить CSV-файл, где поля разделены символом ^. Это проще всего сделать с помощью экспорта в OpenOffice с указанием ^ в качестве разделителя.

Как только данные попали в базу данных SQLite, необходимо их нормализовать. Для этого нужно преобразовать все адреса в соответствующем столбце таблицы imp к нижнему регистру, удалить пробелы в адресах, удалить строки, где в столбце адреса отсутствует символ @.

Все изменения удобно делать через механизм транзакций. Для этого наборы команд можно обрамлять инструкциями begin/commit. Так будет проще откатить ошибочные изменения, чтобы при некорректном DML не начинать всё снова.

Был также создан файл queries.sql, чтобы при каждой рассылке не вспоминать запросы, нормализующие базу. Здесь есть запросы по удалению строк с дублирующимися адресами, например.

Поскольку представление дат в не-CSV-файле отличается от того, что используется в базе данных, то необходимо преобразовать импортированные значения в столбце даты в таблице imp. Для этого можно выполнить команду ant convert-dates (такая цель описана в файле build.xml).

После того как нормализация была произведена, необходимо скопировать все записи из представления impnotx в таблицу users. Именно users и будет являться той таблицей, откуда приложение черпает информацию, необходимую для рассылки. Необходимый запрос опять же есть в файле queries.sql.

После копирования новых записей в таблицу users значение столбца certsent в них будет равно 0; для приложения значение 0 является признаком того, что на эти адреса рассылка ещё не производилась.

Настройки соединения с почтовым сервером указываются в файле SendEmail.java.

Само приложение можно скомпилировать с помощью команды ant jar. Перед компиляцией полезно выполнить ant clean, чтобы удалить все предыдущие скомпилированные объекты. По сути компиляция нужна только при изменении настроек соединения с почтовым сервером. Учитывая, что приложение подключается к локальному почтовому серверу, эти настройки меняться не будут.

/usr/share/fonts -- приложение будет ожидать, что здесь находится гарнитура English Rose, с помощью которой набирается имя счастливого обладателя сертификата.

После всех подготовительных процедур запустить рассылку можно с помощью команды ant run. При этом на stdout будут выводиться сведения об отправляемых письмах (имя получателя, дата заполнения заявления, адрес электронной почты).