Package 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 Object
Утильный класс, содержащий общеупотребимые методы для выгрузок СОРМ3.

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static class`
  `SormUtils.IpUtils`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final char`
  `CSV_SEPARATOR`
  `static final String`
  `PARAMETER_KEY_REGION`
  `static final String`
  `PARAMETER_KEY_ZONE`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `SormUtils()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static boolean`
  `checkThreeYearsAgo(Date dateTo)`
  Т.к. большинство поставщиков СОРМ просит данные за последние 3 года, создан метод для проверки даты
  `static boolean`
  `checkValidAddress(AddressStruct address)`
  Проверка адреса на заполненность обязательных для СОРМа полей
  `static void`
  `clearChangedContractsTable(Connection con, int moduleId)`
  `static void`
  `clearContractLogTable(Connection con, int sormProjectId, int sormModuleId)`
  Чистит запись о последнем выгруженном договоре для проекта СОРМ
  `static boolean`
  `contractHasModule(Connection connection, int moduleId, int contractId)`
  `static String`
  `formatDateToUTC(Calendar date, String pattern)`
  `static String`
  `formatDateToUTC(Date date, String pattern)`
  `static EntityAttrAddress`
  `getAddressFromDeviceAttributes(Device<?,?> device)`
  `static List<Pair<Integer,List<Pair<String,Integer>>>>`
  `getAddressList(Preferences config, List<SormContract> contracts)`
  Для каждого договора формирует пары номер договора - пара, где first-идентификатор типа адреса, second-pid параметра договора для данного типа адреса
  `static String`
  `getAddressType(String configAddressKey)`
  Используется для MfiSoft и SpecTeh Соотносит тип адреса из конфига с типом адреса, который должен быть указан в формировании файла для выгрузки адресов абонента
  `static String`
  `getAdminEmail(Preferences config)`
  Возвращает указанный email для отправки информации по ошибкам
  `static List<Bunch>`
  `getBunches(Preferences config)`
  Возвращает список пучков оператора сохранённых в конфиге
  `static String`
  `getConnectionStandard(Preferences config)`
  `static SormCSVWriter`
  `getCSVFile(Path file)`
  `static SormCSVWriter`
  `getCSVFile(Path file, char quoteCharacter)`
  `static SormCSVWriter`
  `getCSVFile(Path file, String encoding)`
  `static SormCSVWriter`
  `getCSVFile(Path path, Charset encoding, char quoteCharacter)`
  `static SormCSVWriter`
  `getCSVFile(Path path, Charset charset, char quoteCharacter, char separator)`
  `static List<IdTitle>`
  `getDocumentsTypes(Preferences config, ContractParameterManager cpm)`
  Возвращает список документов из выбранного пользователем спискового параметра договора
  `static int`
  `getDocumentTypeIdOfContract(Preferences config, ContractDao contractDao, int contractId, List<IdTitle> documentTypes)`
  Возвращает id типа документа для договора
  `static String`
  `getFullOperatorAddress(Preferences config)`
  Формирует адрес оператора одной строкой из конфигурации выгрузки
  `static List<Integer>`
  `getIdsModulesFromConfig(Preferences config, String subKey)`
  Возвращает из конфига список id модулей по подключу.
  `static List<Integer>`
  `getIdsServices(Preferences config)`
  `static List<Device<?,?>>`
  `getInetDevices(Preferences config, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)`
  Возвращает список устройств модуля Inet для выбранных в конфиге экземпляров Inet
  `static List<InetServ>`
  `getInetServices(Preferences preferences, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext, List<SormContract> contractIds)`
  `static List<InternalUser>`
  `getInternalUsers(ContractObjectDao contractObjectDao, ru.bitel.bgbilling.modules.sorm.server.utils.SormUploadHelper uploadHelper, Preferences config)`
  `static String[]`
  `getIPGatewayItem(Device<?,?> inetDevice, String regionId)`
  Только для МФИСофт и Спец.Технологий!
  `static Map<IpCategory,List<IpResource>>`
  `getIPResources(Preferences config, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)`
  Возвращает список ip-ресурсов для выбранных в конфиге модулей inet, за исключением тех, которые были выбраны, как не выгружаемые
  `static int`
  `getLastUploadContractId(Connection con, int sormModuleId, int sormProjectId)`
  Возвращает id последнего выгруженного договора для конкретного проекта выгрузки СОРМ
  `static List<Integer>`
  `getListIntegerFromConfigByKey(Preferences config, String key)`
  Возвращает список(Integer) сохранённых в конфиге по переданному ключу
  `static String`
  `getOperatorStartDate(Preferences config, String format)`
  `static Map<Integer,List<InetServ>>`
  `getPairsAbonentInetServices(Preferences config, List<SormContract> contracts, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)`
  Получение списка сервисов всех установленных модулей Inet с уникальными ip-адресами всех договоров, которые возвращает метод getContractIds
  `static Map<Integer,List<InetServ>>`
  `getPairsAbonentInetServicesByContractIds(Preferences config, List<Integer> contracts, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)`
  `static Map<Integer,List<VoiceAccount>>`
  `getPairsAbonentVoiceAccountsByContractIds(Preferences config, List<Integer> contractIds, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)`
  `static Map<Integer,List<Integer>>`
  `getPairsMidsListIds(Preferences preferences, String subKey)`
  Достаёт Map по подключу из переданного конфига, где ключ-mid, value-ids для этого модуля
  `static String`
  `getParameterOfCity(ru.bitel.bgbilling.modules.sorm.server.upload.Upload uploadImpl, int houseId, String parameterKey)`
  `static String`
  `getParameterOfCity(ru.bitel.bgbilling.modules.sorm.server.upload.Upload uploadImpl, AddressStruct addressStruct, String parameterKey)`
  Возвращает значение дополнительного параметра для города
  `static List<Device<?,?>>`
  `getSelectedGateways(Preferences config, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)`
  Возвращает список устройств, которые выбраны, как шлюзы оператора
  `static List<Integer>`
  `getSelectedInetModulesToUpload(Preferences config)`
  `static List<ServiceSorm>`
  `getSelectedServicesForUpload(Preferences config)`
  Возвращает список услуг, которые были выбраны пользователем для выгрузки
  `static List<Integer>`
  `getSelectedVoiceModulesToUpload(Preferences config)`
  `static Map<String,List<Integer>>`
  `getTelephoneModulesIds(Preferences config)`
  Возвращает список выбранныз для выгрузки телефонных модулей
  `static List<SormContract>`
  `getUploadContracts(ru.bitel.bgbilling.modules.sorm.server.upload.Upload uploadImplementation)`
  Получение списка id договоров, которые будут участвовать в выгрузке.
  `static List<SormContract>`
  `getUploadContracts(ru.bitel.bgbilling.modules.sorm.server.upload.Upload uploadImplementation, boolean forFullUpload)`
  Флаг для полной выгрузки или инкрементальной сделан, т.к. для некоторых типов выгрузок (логины абонентов для ВасЭкспертс) требуется полный список договоров всегда, несмотря на то, что сама выгрузка инкрементальная
  `static Path`
  `getUploadFile(String fileUploadPath, String filePrefix, String datePattern)`
  Создает новый файл на диске по заданному пути
  `static List<NumberRange>`
  `getUploadPhoneNumberingResources(Preferences config, Connection connection)`
  Возвращает список номеров, которые должны быть выгружены для выбранных модулей phone
  `static List<NumberRange>`
  `getUploadVoiceNumberingResources(Preferences config, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)`
  Возвращает список номеров, которые должны быть выгружены для выбранных экземпляров модулей Voice
  `static List<Device<?,?>>`
  `getVoiceDevices(Preferences config, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)`
  Возвращает список устройств модуля Voice для выбранных модулей в конфиге
  `static Map<Integer,List<PhoneResourceSubscription>>`
  `getVoiceModuleSubscriptionList(List<Integer> voiceModules, ru.bitel.bgbilling.kernel.container.managed.ServerContext context, Preferences config)`
  `static String`
  `ip2Hex(String ip)`
  Преобразование строки с ip-адресом из десятичного в шестнадцатеричное представление
  `static void`
  `sendErrorToEmail(Setup setup, Exception ex, String subject)`
  `static void`
  `sendErrorToEmail(Setup setup, Exception ex, String subject, String email)`
  В случае возникновения любой ошибки формируется письмо, которое отправляется на почту администратору.
  `static String`
  `trimField(String value, int length)`
  Обрезает строку до указанной длины.
  `static void`
  `updateContractLogTable(ru.bitel.bgbilling.modules.sorm.server.upload.Upload uploadImplementation)`
  Обновляет информацию о последнем выгруженном договоре

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

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

- ## Field Details

  - ### PARAMETER_KEY_REGION

    public static final String PARAMETER_KEY_REGION
    See Also:
      - Constant Field Values

  - ### PARAMETER_KEY_ZONE

    public static final String PARAMETER_KEY_ZONE
    See Also:
      - Constant Field Values

  - ### CSV_SEPARATOR

    public static final char CSV_SEPARATOR
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### SormUtils

    public SormUtils()

- ## Method Details

  - ### getUploadContracts

    public static List<SormContract> getUploadContracts(ru.bitel.bgbilling.modules.sorm.server.upload.Upload uploadImplementation, boolean forFullUpload)
    Флаг для полной выгрузки или инкрементальной сделан, т.к. для некоторых типов выгрузок (логины абонентов для ВасЭкспертс) требуется полный список договоров всегда, несмотря на то, что сама выгрузка инкрементальная
    Parameters:
      `uploadImplementation` - реализация выгрузки
      `forFullUpload` - флаг, полный список договоров или только изменения
    Returns:
      Список договоров для выгрузки. В случае с инкрементальной выгрузкой добавляются договора, берутся договора с id > последнего выгруженного, берутся договора по которым были зафиксированы изменения. Если выгрузка полная, чистится список изменённых договоров.

  - ### getUploadContracts

    public static List<SormContract> getUploadContracts(ru.bitel.bgbilling.modules.sorm.server.upload.Upload uploadImplementation)
    Получение списка id договоров, которые будут участвовать в выгрузке. Берет: 1-все договора после последнего выгруженного, если есть запись в таблице 2-все изменённые договора Критерии: договоры на которых: - добавлен модуль СОРМ - которые действуют или действовали последние 3 года есть один из модулей, которые были выбраны для выгрузки

  - ### clearChangedContractsTable

    public static void clearChangedContractsTable(Connection con, int moduleId)

  - ### getLastUploadContractId

    public static int getLastUploadContractId(Connection con, int sormModuleId, int sormProjectId)
    Возвращает id последнего выгруженного договора для конкретного проекта выгрузки СОРМ

  - ### updateContractLogTable

    public static void updateContractLogTable(ru.bitel.bgbilling.modules.sorm.server.upload.Upload uploadImplementation) throws SQLException
    Обновляет информацию о последнем выгруженном договоре
    Parameters:
      `uploadImplementation` - - реализация выгрузки
    Throws:
      `SQLException`

  - ### clearContractLogTable

    public static void clearContractLogTable(Connection con, int sormProjectId, int sormModuleId) throws ru.bitel.bgbilling.common.BGException
    Чистит запись о последнем выгруженном договоре для проекта СОРМ
    Parameters:
      `sormProjectId` - - id проекта СОРМ
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### getPairsAbonentInetServicesByContractIds

    public static Map<Integer,List<InetServ>> getPairsAbonentInetServicesByContractIds(Preferences config, List<Integer> contracts, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext) throws Exception
    Throws:
      `Exception`

  - ### getPairsAbonentVoiceAccountsByContractIds

    public static Map<Integer,List<VoiceAccount>> getPairsAbonentVoiceAccountsByContractIds(Preferences config, List<Integer> contractIds, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext) throws Exception
    Throws:
      `Exception`

  - ### getPairsAbonentInetServices

    public static Map<Integer,List<InetServ>> getPairsAbonentInetServices(Preferences config, List<SormContract> contracts, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext) throws Exception
    Получение списка сервисов всех установленных модулей Inet с уникальными ip-адресами всех договоров, которые возвращает метод getContractIds
    Returns:
      map, где key - cid договороа, value - список сервисов для данного договора
    Throws:
      `Exception`

  - ### getInetServices

    public static List<InetServ> getInetServices(Preferences preferences, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext, List<SormContract> contractIds) throws Exception
    Returns:
      список сервисов всех установленных экземпляров модулей инета, которые были отмечены для выгрузки
    Throws:
      `Exception`

  - ### getSelectedInetModulesToUpload

    public static List<Integer> getSelectedInetModulesToUpload(Preferences config)
    Returns:
      список id модулей inet, которые были выбраны для выгрузки

  - ### getSelectedVoiceModulesToUpload

    public static List<Integer> getSelectedVoiceModulesToUpload(Preferences config)
    Returns:
      список id модулей inet, которые были выбраны для выгрузки

  - ### getListIntegerFromConfigByKey

    public static List<Integer> getListIntegerFromConfigByKey(Preferences config, String key)
    Возвращает список(Integer) сохранённых в конфиге по переданному ключу

  - ### getIdsServices

    public static List<Integer> getIdsServices(Preferences config) throws ru.bitel.bgbilling.common.BGException
    Returns:
      список id выбранных для выгрузки услуг оператора
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### getSelectedServicesForUpload

    public static List<ServiceSorm> getSelectedServicesForUpload(Preferences config)
    Возвращает список услуг, которые были выбраны пользователем для выгрузки

  - ### sendErrorToEmail

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

  - ### sendErrorToEmail

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

  - ### trimField

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

  - ### getUploadFile

    public static Path getUploadFile(String fileUploadPath, String filePrefix, String datePattern)
    Создает новый файл на диске по заданному пути
    Parameters:
      `fileUploadPath` - путь в локальной директории для создания файла
      `filePrefix` - префикс создаваемого файла
      `datePattern` - формат даты, которая должна присутствовать в названии файла
    Returns:
      объект типа файл в каталоге FILE_UPLOAD_PATH/

  - ### getAdminEmail

    public static String getAdminEmail(Preferences config)
    Возвращает указанный email для отправки информации по ошибкам

  - ### getCSVFile

    public static SormCSVWriter getCSVFile(Path file) throws IOException
    Throws:
      `IOException`

  - ### getCSVFile

    public static SormCSVWriter getCSVFile(Path file, String encoding) throws IOException
    Throws:
      `IOException`

  - ### getCSVFile

    public static SormCSVWriter getCSVFile(Path file, char quoteCharacter) throws IOException
    Throws:
      `IOException`

  - ### getCSVFile

    public static SormCSVWriter getCSVFile(Path path, Charset encoding, char quoteCharacter) throws IOException
    Throws:
      `IOException`

  - ### getCSVFile

    public static SormCSVWriter getCSVFile(Path path, Charset charset, char quoteCharacter, char separator) throws IOException
    Parameters:
      `path` - - созданный для записи файл
      `quoteCharacter` - - Для поставщика Специальные Технологии использовать CSVWriter.NO_QUOTE_CHARACTER, для остальных CSVWriter.DEFAULT_QUOTE_CHARACTER
    Returns:
    Throws:
      `IOException`

  - ### getIdsModulesFromConfig

    public static List<Integer> getIdsModulesFromConfig(Preferences config, String subKey)
    Возвращает из конфига список id модулей по подключу. (Например, для выгрузки коммутаторов было выбрано несколько модулей inet, то вернётся список с выбранными модулями)

  - ### getPairsMidsListIds

    public static Map<Integer,List<Integer>> getPairsMidsListIds(Preferences preferences, String subKey)
    Достаёт Map по подключу из переданного конфига, где ключ-mid, value-ids для этого модуля

  - ### getInetDevices

    public static List<Device<?,?>> getInetDevices(Preferences config, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)
    Возвращает список устройств модуля Inet для выбранных в конфиге экземпляров Inet

  - ### getIPResources

    public static Map<IpCategory,List<IpResource>> getIPResources(Preferences config, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)
    Возвращает список ip-ресурсов для выбранных в конфиге модулей inet, за исключением тех, которые были выбраны, как не выгружаемые

  - ### getVoiceDevices

    public static List<Device<?,?>> getVoiceDevices(Preferences config, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)
    Возвращает список устройств модуля Voice для выбранных модулей в конфиге

  - ### getSelectedGateways

    public static List<Device<?,?>> getSelectedGateways(Preferences config, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)
    Возвращает список устройств, которые выбраны, как шлюзы оператора

  - ### getBunches

    public static List<Bunch> getBunches(Preferences config)
    Возвращает список пучков оператора сохранённых в конфиге

  - ### getUploadVoiceNumberingResources

    public static List<NumberRange> getUploadVoiceNumberingResources(Preferences config, ru.bitel.bgbilling.kernel.container.managed.ServerContext serverContext)
    Возвращает список номеров, которые должны быть выгружены для выбранных экземпляров модулей Voice

  - ### getUploadPhoneNumberingResources

    public static List<NumberRange> getUploadPhoneNumberingResources(Preferences config, Connection connection)
    Возвращает список номеров, которые должны быть выгружены для выбранных модулей phone

  - ### getTelephoneModulesIds

    public static Map<String,List<Integer>> getTelephoneModulesIds(Preferences config)
    Возвращает список выбранныз для выгрузки телефонных модулей
    Returns:
      Map, где key - модуль phone или voice, value - список id соответствующего модуля установленного в биллинге

  - ### getVoiceModuleSubscriptionList

    public static Map<Integer,List<PhoneResourceSubscription>> getVoiceModuleSubscriptionList(List<Integer> voiceModules, ru.bitel.bgbilling.kernel.container.managed.ServerContext context, Preferences config)
    Parameters:
      `voiceModules` - - список id установленных модулей Voice
    Returns:
      Map, где key - id модуля Voice, value - список подписок на ресурсы данного модуля за последние 3 года

  - ### checkThreeYearsAgo

    public static boolean checkThreeYearsAgo(Date dateTo)
    Т.к. большинство поставщиков СОРМ просит данные за последние 3 года, создан метод для проверки даты
    Returns:
      true - если переданная дата была не раньше 3-х лет назад с текущего момента

  - ### getAddressList

    public static List<Pair<Integer,List<Pair<String,Integer>>>> getAddressList(Preferences config, List<SormContract> contracts)
    Для каждого договора формирует пары номер договора - пара, где first-идентификатор типа адреса, second-pid параметра договора для данного типа адреса

  - ### getAddressType

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

  - ### ip2Hex

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

  - ### getDocumentsTypes

    public static List<IdTitle> getDocumentsTypes(Preferences config, ContractParameterManager cpm) throws ru.bitel.bgbilling.common.BGException
    Возвращает список документов из выбранного пользователем спискового параметра договора
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### getDocumentTypeIdOfContract

    public static int getDocumentTypeIdOfContract(Preferences config, ContractDao contractDao, int contractId, List<IdTitle> documentTypes) throws ru.bitel.bgbilling.common.BGException
    Возвращает id типа документа для договора
    Parameters:
      `config` - - конфиг выгрузки
      `contractDao` -
      `contractId` - - id договора
      `documentTypes` - - список типов документов
    Returns:
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### getConnectionStandard

    public static String getConnectionStandard(Preferences config)

  - ### getParameterOfCity

    public static String getParameterOfCity(ru.bitel.bgbilling.modules.sorm.server.upload.Upload uploadImpl, AddressStruct addressStruct, String parameterKey) throws Exception
    Возвращает значение дополнительного параметра для города
    Parameters:
      `addressStruct` - - адрес из которого будет взят город, у которого будет взят параметр, если в конфигурации не установлен пользователем ключ
      `parameterKey` - - ключ параметра, значение которого будет возвращено
    Returns:
    Throws:
      `Exception`

  - ### getParameterOfCity

    public static String getParameterOfCity(ru.bitel.bgbilling.modules.sorm.server.upload.Upload uploadImpl, int houseId, String parameterKey) throws Exception
    Throws:
      `Exception`

  - ### checkValidAddress

    public static boolean checkValidAddress(AddressStruct address)
    Проверка адреса на заполненность обязательных для СОРМа полей
    Returns:
      true - если все необходимые поля заполнены

  - ### getIPGatewayItem

    public static String[] getIPGatewayItem(Device<?,?> inetDevice, String regionId)
    Только для МФИСофт и Спец.Технологий! Для формирования файла IP_GATEWAY, т.к. для данных поставщиков структура файла одинакова
    Parameters:
      `inetDevice` - устройство модуля inet
    Returns:
      возвращает запись для файла IP_GATEWAY исходя из inetDevice

  - ### getFullOperatorAddress

    public static String getFullOperatorAddress(Preferences config)
    Формирует адрес оператора одной строкой из конфигурации выгрузки
    Returns:
      адрес оператора одной строкой

  - ### getOperatorStartDate

    public static String getOperatorStartDate(Preferences config, String format) throws ParseException
    Parameters:
      `config` -
    Returns:
      Дата начала работы оператора установленная в конфиге модуля
    Throws:
      `ParseException`

  - ### getInternalUsers

    public static List<InternalUser> getInternalUsers(ContractObjectDao contractObjectDao, ru.bitel.bgbilling.modules.sorm.server.utils.SormUploadHelper uploadHelper, Preferences config) throws Exception
    Throws:
      `Exception`

  - ### getAddressFromDeviceAttributes

    public static EntityAttrAddress getAddressFromDeviceAttributes(Device<?,?> device)

  - ### contractHasModule

    public static boolean contractHasModule(Connection connection, int moduleId, int contractId)

  - ### formatDateToUTC

    public static String formatDateToUTC(Date date, String pattern)

  - ### formatDateToUTC

    public static String formatDateToUTC(Calendar date, String pattern)