EN · DE · RU · FR · ES

#824: AddressExport.kt

projectforge-business/src/main/kotlin/org/projectforge/business/address/AddressExport.kt @Service("addressExport") — Сервис экспорта в Excel, projectforge-business/src/main/kotlin/org/projectforge/business/address/AddressExport.kt 216 строк · 157 кода · 35 комментариев · 24 пустых
Spring-сервис, который экспортирует данные адресов в книги Excel (.xlsx). Обрабатывает регистрацию столбцов, фильтрацию с контролем доступа и многосекционные объединённые строки заголовков для блоков почтовых, деловых, почтовых и частных адресов.

Архитектура

Иерархия классов

AddressExport — это открытый класс с аннотацией @Service("addressExport"), предназначенный для расширения плагинами. Плагин маркетинга AddressCampaignValueExport расширяет его, переопределяя registerAdditionalCols(), configureSheet() и handleAddressCampaign() для добавления полей, специфичных для кампаний.

Регистрация столбцов (registerCols)

Регистрирует ~40 столбцов в следующем порядке:

  1. Идентификация: name, firstName, form, title, contactStatus
  2. Организация: organization, division, positionText, communicationLanguage
  3. Хук плагина: registerAdditionalCols() — точка расширения для значений кампаний
  4. Контакты: email, website
  5. Почтовый адрес: addressText, addressText2, zipCode, city, country, state
  6. Деловой адрес: полный блок (авторегистрация через registerAddress(sheet, ""))
  7. Почтовый адрес: полный блок (registerAddress(sheet, "postal"))
  8. Телефоны: businessPhone, fax, mobilePhone
  9. Частный: полный блок адреса, privateEmail, privatePhone, privateMobilePhone
  10. Метаданные: birthday, lastUpdate, comment, fingerprint, publicKey, id

Константы размеров из ExcelUtils.Size управляют шириной столбцов: STANDARD (по умолчанию), EMAIL, ZIPCODE, PHONENUMBER, EXTRA_LONG.

Процесс экспорта (export())

  1. Контроль доступа: Участники FINANCE_GROUP или MARKETING_GROUP получают все адреса; остальные пользователи получают только свои личные избранные (сопоставление через personalAddressMap).
  2. Создание книги: Использует ExcelWorkbook от Merlin с try-with-resources через .use { }.
  3. Настройка листа: Строка заголовка, строка заголовка с жирным стилем, закрепление панели на (2,2) и автофильтр на строке заголовка.
  4. Объединённые области заголовков: Четыре объединённые области ячеек в строке 0 группируют столбцы почтового, делового, почтового и частного адресов под жирными заголовками секций.
  5. Вызов хука: configureSheet(sheet, *params) для настройки подклассами.
  6. Заполнение строк: Каждый адрес становится строкой Excel. Вызывает ExcelUtils.autoFill() для стандартного сопоставления свойств, вручную заполняет ячейки почтового адреса и язык общения, затем вызывает handleAddressCampaign() для данных кампании.

Точки расширения

История Git

868d6abb7 2025 -> 2026
83cbccb11 ExcelUtils AddressExport: stream.use (потоки не закрывались раньше?)
78a38ca8f ExcelUtils.createFont и используется всеми подпрограммами создания шрифтов Excel.
63081666f Заголовки исходных файлов: 2024-> 2025.
4c04cfd65 MAJOR-CHANGE! Миграция целочисленных id на Long id
b6092df09 Авторские права 2023 -> 2024
ab45d51fa Авторские права 2001-2022 -> 2001-2023.
dce7927f4 заменена устаревшая функция Kotlin decapitalize()
5f7ef41b8 Авторские права 2021 -> 2022
e1538819c Merlin: теперь используется Autoclosure для ExcelWorkbook
91554ea83 Новая версия Merlin.