ru.bitel.bgbilling.modules.sorm.server.utils

## Class SormUtils

- java.lang.Object
- - ru.bitel.bgbilling.modules.sorm.server.utils.SormUtils

-     public final class SormUtils
      extends java.lang.Object

  Утильный класс, содержащий общеупотребимые методы для выгрузок СОРМ3.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static java.lang.String` | `CHANGED_CONTRACT_UPLOAD_TABLE`
    `static int` | `sormModuleId`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `SormUtils()`

  - ### Method Summary

    All Methods Static Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `static boolean` | `checkThreeYearAgo(java.util.Date dateTo)` Т.к. большинство поставщиков СОРМ просит данные за последние 3 года, создан метод для проверки даты
    `static void` | `clearContractLogTable(java.sql.Connection con, int sormProjectId)` Чистит запись о последнем выгруженном договоре для проекта СОРМ
    `static java.util.List<Pair<java.lang.Integer,java.util.List<Pair<java.lang.String,java.lang.Integer>>>>` | `getAddressList(Preferences config, java.util.List<SormContract> contracts)` Для каждого договора формирует пары номер договора - пара, где first-идентификатор типа адреса, second-pid параметра договора для данного типа адреса
    `static java.lang.String` | `getAddressType(java.lang.String configAddressKey)` Используется для MfiSoft и SpecTeh Соотносит тип адреса из конфига с типом адреса, который должен быть указан в формировании файла для выгрузки адресов абонента
    `static java.lang.String` | `getAdminEmail(Preferences config)` Возвращает указанный email для отправки информации по ошибкам
    `static java.lang.String` | `getAttributeFromBill(java.sql.Connection con, int cid, int billMid, java.lang.String attributeName)` Получение значения реквизита по договору из модуля бухгалтерия
    `static java.util.List<Bunch>` | `getBunches(Preferences config)` Возвращает список пучков оператора сохранённых в конфиге
    `static au.com.bytecode.opencsv.CSVWriter` | `getCSVFile(java.io.File file)`
    `static au.com.bytecode.opencsv.CSVWriter` | `getCSVFile(java.io.File file, char quoteCharacter)`
    `static au.com.bytecode.opencsv.CSVWriter` | `getCSVFile(java.io.File file, java.lang.String encoding)`
    `static au.com.bytecode.opencsv.CSVWriter` | `getCSVFile(java.io.File file, java.lang.String encoding, char quoteCharacter)`
    `static java.util.List<IdTitle>` | `getDocumentsTypes(Preferences config, ContractParameterManager cpm)` Возвращает список документов из выбранного пользователем спискового параметра договора
    `static java.util.List<java.lang.Integer>` | `getIdsModulesFromConfig(Preferences config, java.lang.String subKey)` Возвращает из конфига список id модулей по подключу.
    `static java.util.List<java.lang.Integer>` | `getIdsServices(Preferences config, java.sql.Connection con)`
    `static java.util.List<InetDevice>` | `getInetDevices(Preferences config, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)` Возвращает список устройств модуля Inet для выбранных в конфиге экземпляров Inet
    `static java.util.List<InetServ>` | `getInetServices(Preferences preferences, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext, java.util.List<SormContract> contractIds)`
    `static java.util.List<IpResource>` | `getIPResources(Preferences config, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)` Возвращает список ip-ресурсов для выбранных в конфиге модулей inet, за исключением тех, которые были выбраны, как не выгружаемые
    `static int` | `getLastPaymentId(java.sql.Connection con, int sormProjectId)` Возвращает id последнего выгруженного платежа для конкретного проекта выгрузки СОРМ
    `static int` | `getLastUploadContractId(java.sql.Connection con, int sormProjectId)` Возвращает id последнего выгруженного договора для конкретного проекта выгрузки СОРМ
    `static java.util.List<java.lang.Integer>` | `getListIntegerFromConfigByKey(Preferences config, java.lang.String key)` Возвращает список(Integer) сохранённых в конфиге по переданному ключу
    `static java.lang.String` | `getLocalUserPath(Preferences config)` Возвращает локальный путь для файлов, указанный пользователем в модуле
    `static java.util.List<Service>` | `getNpayServicesList(Preferences config, java.sql.Connection con)` Возвращает список услуг, которые были выбраны пользователем для выгрузки
    `static java.util.Map<java.lang.Integer,java.util.List<InetServ>>` | `getPairsAbonentInetServices(Preferences preferences, java.util.List<SormContract> contracts, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)` Получение списка сервисов всех установленных модулей Inet с уникальными ip-адресами всех договоров, которые возвращает метод getContractIds
    `static java.util.Map<java.lang.Integer,java.util.List<java.lang.Integer>>` | `getPairsMidsListIds(Preferences preferences, java.lang.String subKey)` Достаёт Map по подключу из переданного конфига, где ключ-mid, value-ids для этого модуля
    `static java.util.List<Payment>` | `getPaymentList(java.sql.Connection connection, int lastPaymentId, int sormProjectId, boolean isFullUpload)` Получение списка платежей договоров.
    `static java.lang.String` | `getPaymentTypeCode(Preferences config, int paymentTypeId)` Только для Спец.Технологий и МФИСОФТ!
    `static java.util.List<PaymentType>` | `getPaymentTypes(Preferences config, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)` Возвращает список типов платежей, которые были выбраны для выгрузки
    `static java.util.List<InetDevice>` | `getSelectedGateways(Preferences config, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)` Возвращает список устройств, которые выбраны, как шлюзы оператора
    `static java.util.Map<java.lang.String,java.util.List<java.lang.Integer>>` | `getTelephoneModulesIds()`
    `static java.util.List<SormContract>` | `getUploadContracts(java.sql.Connection con, int sormProjectId, boolean isFullUpload)` Получение списка id договоров, которые будут участвовать в выгрузке.
    `static java.io.File` | `getUploadFile(java.lang.String fileUploadPath, java.lang.String filePrefix, java.lang.String datePattern)` Создает новый временный файл в темповой директории на диске
    `static java.util.List<PhoneResource>` | `getUploadVoiceNumberingResources(Preferences config, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)` Возвращает список номеров, которые должны быть выгружены для всех установленных экземпляров модулей Voice
    `static java.util.List<VoiceDevice>` | `getVoiceDevices(Preferences config, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)` Возвращает список устройств модуля Voice для выбранных модулей в конфиге
    `static java.util.Map<java.lang.Integer,java.util.List<PhoneResourceSubscription>>` | `getVoiceModuleSubscriptionList(java.util.List<java.lang.Integer> voiceModules, ru.bitel.bgbilling.kernel.container.managed.ServerContext context, Preferences config)`
    `static java.lang.String` | `ip2Hex(java.lang.String ip)` Преобразование строки с ip-адресом из десятичного в шестнадцатеричное представление
    `static void` | `sendErrorToEmail(Setup setup, java.lang.Exception ex, java.lang.String subject)`
    `static void` | `sendErrorToEmail(Setup setup, java.lang.Exception ex, java.lang.String subject, java.lang.String email)` В случае возникновения любой ошибки формируется письмо, которое отправляется на почту администратору.
    `static java.lang.String` | `trimField(java.lang.String value, int length)` Обрезает строку до указанной длины.
    `static void` | `updateContractLogTable(java.sql.Connection con, int lastUploadCid, int sormProjectId)` Обновляет информацию о последнем выгруженном договоре
    `static void` | `updatePaymentsLogTable(java.sql.Connection con, int lastPaymentId, int sormProjectId)` Обновляет информацию о последнем выгруженном платеже

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### CHANGED_CONTRACT_UPLOAD_TABLE

          public static final java.lang.String CHANGED_CONTRACT_UPLOAD_TABLE

      See Also:
        Constant Field Values

    - #### sormModuleId

          public static int sormModuleId

  - ### Constructor Detail

    - #### SormUtils

          public SormUtils()

  - ### Method Detail

    - #### getUploadContracts

          public static java.util.List<SormContract> getUploadContracts(java.sql.Connection con,
                                                                        int sormProjectId,
                                                                        boolean isFullUpload)

      Получение списка id договоров, которые будут участвовать в выгрузке. Берет все договора после последнего выгруженного, если есть запись в таблице Критерии: договоры, на которых добавлен модуль договоры, которые действуют или действовали последние 3 года и к которым подключен модуль Sorm.

    - #### getLastUploadContractId

          public static int getLastUploadContractId(java.sql.Connection con,
                                                    int sormProjectId)

      Возвращает id последнего выгруженного договора для конкретного проекта выгрузки СОРМ

    - #### updateContractLogTable

          public static void updateContractLogTable(java.sql.Connection con,
                                                    int lastUploadCid,
                                                    int sormProjectId)
                                             throws java.sql.SQLException

      Обновляет информацию о последнем выгруженном договоре
      Parameters:
        `lastUploadCid` - - id последнего выгруженного договора
        `sormProjectId` - - id проекта выгрузки СОРМ
      Throws:
        `java.sql.SQLException`

    - #### clearContractLogTable

          public static void clearContractLogTable(java.sql.Connection con,
                                                   int sormProjectId)
                                            throws ru.bitel.bgbilling.common.BGException

      Чистит запись о последнем выгруженном договоре для проекта СОРМ
      Parameters:
        `sormProjectId` - - id проекта СОРМ
      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### getPairsAbonentInetServices

          public static java.util.Map<java.lang.Integer,java.util.List<InetServ>> getPairsAbonentInetServices(Preferences preferences,
                                                                                                              java.util.List<SormContract> contracts,
                                                                                                              ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)
                                                                                                       throws ru.bitel.bgbilling.common.BGException

      Получение списка сервисов всех установленных модулей Inet с уникальными ip-адресами всех договоров, которые возвращает метод getContractIds
      Returns:
        map, где key - cid договороа, value - список сервисов для данного договора
      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### getInetServices

          public static java.util.List<InetServ> getInetServices(Preferences preferences,
                                                                 ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext,
                                                                 java.util.List<SormContract> contractIds)
                                                          throws ru.bitel.bgbilling.common.BGException

      Returns:
        список сервисов всех установленных экземпляров модулей инета, которые были отмечены для выгрузки
      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### getListIntegerFromConfigByKey

          public static java.util.List<java.lang.Integer> getListIntegerFromConfigByKey(Preferences config,
                                                                                        java.lang.String key)

      Возвращает список(Integer) сохранённых в конфиге по переданному ключу

    - #### getNpayServicesList

          public static java.util.List<Service> getNpayServicesList(Preferences config,
                                                                    java.sql.Connection con)
                                                             throws ru.bitel.bgbilling.common.BGException

      Возвращает список услуг, которые были выбраны пользователем для выгрузки
      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### getIdsServices

          public static java.util.List<java.lang.Integer> getIdsServices(Preferences config,
                                                                         java.sql.Connection con)
                                                                  throws ru.bitel.bgbilling.common.BGException

      Returns:
        список id выбранных для выгрузки услуг оператора
      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### sendErrorToEmail

          public static void sendErrorToEmail(Setup setup,
                                              java.lang.Exception ex,
                                              java.lang.String subject)

    - #### sendErrorToEmail

          public static void sendErrorToEmail(Setup setup,
                                              java.lang.Exception ex,
                                              java.lang.String subject,
                                              java.lang.String email)

      В случае возникновения любой ошибки формируется письмо, которое отправляется на почту администратору. Email задается при настройке выгрузки в модуле СОРМ, если не заполнен, то будет взять в конфигурации сервера в параметре alarm.mail
      Parameters:
        `setup` - конфигурация биллинга
        `ex` - экземпляр исключения. Из него берется сообщение об ошибке, а также печатается стектрейс
        `subject` - тема письма. Например, ошибка при выгрузке такого то файла, при формировании такого то списка и т.д.

    - #### trimField

          public static java.lang.String trimField(java.lang.String value,
                                                   int length)

      Обрезает строку до указанной длины.
      Parameters:
        `value` - строка, длину которой, возможно, нужно сократить
        `length` - длина, до которой обрезаем строку

    - #### getUploadFile

          public static java.io.File getUploadFile(java.lang.String fileUploadPath,
                                                   java.lang.String filePrefix,
                                                   java.lang.String datePattern)

      Создает новый временный файл в темповой директории на диске
      Parameters:
        `fileUploadPath` - путь в локальной директории для создания файла
        `filePrefix` - префикс создаваемого файла
      Returns:
        объект типа файл в каталоге FILE_UPLOAD_PATH/

    - #### getLocalUserPath

          public static java.lang.String getLocalUserPath(Preferences config)

      Возвращает локальный путь для файлов, указанный пользователем в модуле

    - #### getAdminEmail

          public static java.lang.String getAdminEmail(Preferences config)

      Возвращает указанный email для отправки информации по ошибкам

    - #### getCSVFile

          public static au.com.bytecode.opencsv.CSVWriter getCSVFile(java.io.File file)
                                                              throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### getCSVFile

          public static au.com.bytecode.opencsv.CSVWriter getCSVFile(java.io.File file,
                                                                     java.lang.String encoding)
                                                              throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### getCSVFile

          public static au.com.bytecode.opencsv.CSVWriter getCSVFile(java.io.File file,
                                                                     char quoteCharacter)
                                                              throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### getCSVFile

          public static au.com.bytecode.opencsv.CSVWriter getCSVFile(java.io.File file,
                                                                     java.lang.String encoding,
                                                                     char quoteCharacter)
                                                              throws java.io.IOException

      Parameters:
        `file` - - созданный для записи файл
        `quoteCharacter` - - Для поставщика Специальные Технологии использовать CSVWriter.NO_QUOTE_CHARACTER, для остальных CSVWriter.DEFAULT_QUOTE_CHARACTER
      Returns:
      Throws:
        `java.io.IOException`

    - #### getIdsModulesFromConfig

          public static java.util.List<java.lang.Integer> getIdsModulesFromConfig(Preferences config,
                                                                                  java.lang.String subKey)

      Возвращает из конфига список id модулей по подключу. (Например, для выгрузки коммутаторов было выбрано несколько модулей inet, то вернётся список с выбранными модулями)

    - #### getPairsMidsListIds

          public static java.util.Map<java.lang.Integer,java.util.List<java.lang.Integer>> getPairsMidsListIds(Preferences preferences,
                                                                                                               java.lang.String subKey)

      Достаёт Map по подключу из переданного конфига, где ключ-mid, value-ids для этого модуля

    - #### getInetDevices

          public static java.util.List<InetDevice> getInetDevices(Preferences config,
                                                                  ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)

      Возвращает список устройств модуля Inet для выбранных в конфиге экземпляров Inet

    - #### getIPResources

          public static java.util.List<IpResource> getIPResources(Preferences config,
                                                                  ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)

      Возвращает список ip-ресурсов для выбранных в конфиге модулей inet, за исключением тех, которые были выбраны, как не выгружаемые

    - #### getVoiceDevices

          public static java.util.List<VoiceDevice> getVoiceDevices(Preferences config,
                                                                    ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)

      Возвращает список устройств модуля Voice для выбранных модулей в конфиге

    - #### getSelectedGateways

          public static java.util.List<InetDevice> getSelectedGateways(Preferences config,
                                                                       ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)

      Возвращает список устройств, которые выбраны, как шлюзы оператора

    - #### getBunches

          public static java.util.List<Bunch> getBunches(Preferences config)

      Возвращает список пучков оператора сохранённых в конфиге

    - #### getUploadVoiceNumberingResources

          public static java.util.List<PhoneResource> getUploadVoiceNumberingResources(Preferences config,
                                                                                       ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)

      Возвращает список номеров, которые должны быть выгружены для всех установленных экземпляров модулей Voice

    - #### getTelephoneModulesIds

          public static java.util.Map<java.lang.String,java.util.List<java.lang.Integer>> getTelephoneModulesIds()

      Returns:
        Map, где key - модуль phone или voice, value - список id соответствующего модуля установленного в биллинге

    - #### getVoiceModuleSubscriptionList

          public static java.util.Map<java.lang.Integer,java.util.List<PhoneResourceSubscription>> getVoiceModuleSubscriptionList(java.util.List<java.lang.Integer> voiceModules,
                                                                                                                                  ru.bitel.bgbilling.kernel.container.managed.ServerContext context,
                                                                                                                                  Preferences config)

      Parameters:
        `voiceModules` - - список id установленных модулей Voice
      Returns:
        Map, где key - id модуля Voice, value - список подписок на ресурсы данного модуля за последние 3 года

    - #### checkThreeYearAgo

          public static boolean checkThreeYearAgo(java.util.Date dateTo)

      Т.к. большинство поставщиков СОРМ просит данные за последние 3 года, создан метод для проверки даты

    - #### getAttributeFromBill

          public static java.lang.String getAttributeFromBill(java.sql.Connection con,
                                                              int cid,
                                                              int billMid,
                                                              java.lang.String attributeName)

      Получение значения реквизита по договору из модуля бухгалтерия
      Parameters:
        `attributeName` - - имя атрибута
        `cid` - - id договора
        `billMid` - - id модуля бухгалтерии

    - #### getAddressList

          public static java.util.List<Pair<java.lang.Integer,java.util.List<Pair<java.lang.String,java.lang.Integer>>>> getAddressList(Preferences config,
                                                                                                                                        java.util.List<SormContract> contracts)

      Для каждого договора формирует пары номер договора - пара, где first-идентификатор типа адреса, second-pid параметра договора для данного типа адреса

    - #### getAddressType

          public static java.lang.String getAddressType(java.lang.String configAddressKey)

      Используется для MfiSoft и SpecTeh Соотносит тип адреса из конфига с типом адреса, который должен быть указан в формировании файла для выгрузки адресов абонента
      Parameters:
        `configAddressKey` - - тип адреса из конфига
      Returns:
        тип адреса (целое число в виде строки) из списка поставщиков MfiSoft или SpecTeh

    - #### ip2Hex

          public static java.lang.String ip2Hex(java.lang.String ip)

      Преобразование строки с ip-адресом из десятичного в шестнадцатеричное представление
      Parameters:
        `ip` - вида 192.168.1.12
      Returns:
        вида C0A88565

    - #### getDocumentsTypes

          public static java.util.List<IdTitle> getDocumentsTypes(Preferences config,
                                                                  ContractParameterManager cpm)
                                                           throws ru.bitel.bgbilling.common.BGException

      Возвращает список документов из выбранного пользователем спискового параметра договора
      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### getPaymentTypes

          public static java.util.List<PaymentType> getPaymentTypes(Preferences config,
                                                                    ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)
                                                             throws ru.bitel.bgbilling.common.BGException

      Возвращает список типов платежей, которые были выбраны для выгрузки
      Throws:
        `ru.bitel.bgbilling.common.BGException`

    - #### getPaymentList

          public static java.util.List<Payment> getPaymentList(java.sql.Connection connection,
                                                               int lastPaymentId,
                                                               int sormProjectId,
                                                               boolean isFullUpload)
                                                        throws java.lang.Exception

      Получение списка платежей договоров. Используется как при первичной выгрузке,когда выгружаются все платежи всех абонентов за последние 3 года, так и при инкрементальной выгрузке, когда выгружается список платежей с момента последней выгрузки. В случае полной выгрузки в качестве lastPaymentId передаётся отрицательное число
      Parameters:
        `connection` - соединение с БД
        `lastPaymentId` - код последнего выгруженного платежа
        `sormProjectId` - id проекта СОРМ для которого формируем список платежей
        `isFullUpload` - флаг о том, полная выгрузка выполняется или инкрементальная
      Returns:
        список платежей
      Throws:
        `java.lang.Exception`

    - #### getPaymentTypeCode

          public static java.lang.String getPaymentTypeCode(Preferences config,
                                                            int paymentTypeId)

      Только для Спец.Технологий и МФИСОФТ! Коды типов платежей полностью совпадают, поэтому на данный момент нет разницы в соотношении типов для этих поставщиков По типу платежа возвращает id типа платежа в системе поставщика СОРМ (возвращает соответствие, которое было выбрано при настройке выгрузки)
      Parameters:
        `config` - - конфиг выгрузки
        `paymentTypeId` - - id типа платежа в биллинге
      Returns:
        тип платежа в системе поставщика сорм, если не найдено соотношение, то вернет тип 86 - неопределённый

    - #### getLastPaymentId

          public static int getLastPaymentId(java.sql.Connection con,
                                             int sormProjectId)
                                      throws java.sql.SQLException

      Возвращает id последнего выгруженного платежа для конкретного проекта выгрузки СОРМ
      Parameters:
        `sormProjectId` - - id проекта выгрузки СОРМ
      Returns:
      Throws:
        `java.sql.SQLException`

    - #### updatePaymentsLogTable

          public static void updatePaymentsLogTable(java.sql.Connection con,
                                                    int lastPaymentId,
                                                    int sormProjectId)
                                             throws java.sql.SQLException

      Обновляет информацию о последнем выгруженном платеже
      Parameters:
        `lastPaymentId` - - id последнего выгруженного платежа
        `sormProjectId` - - id проекта выгрузки СОРМ
      Throws:
        `java.sql.SQLException`