Package ru.bitel.bgbilling.plugins.cashcheck.server

# Class CashCheckUtils

java.lang.Object
ru.bitel.bgbilling.plugins.cashcheck.server.CashCheckUtils

public class CashCheckUtils extends Object
Всякие методы-хелперы, которые можно использовать в скриптах для автоматизации печати чеков и т.д.

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static class`
  `CashCheckUtils.HttpReply`
  `static class`
  `CashCheckUtils.ReceiptLinkSearch`
  враппер, используется например в личном кабинете в странице при рендеринге, для генерации в рантайме ссылок на электронные чеки (если присутствовали в фискальных данных).

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `CashCheckUtils()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static byte[]`
  `convertSTAGtoSTLV(Check.STAG stag)`
  `static CashCheckUtils.HttpReply`
  `doHttpRequest(String method, String url, String body, Map<String,String> requestProperties, int timeout, org.apache.logging.log4j.Logger logger)`
  http(s)-запрос, ответ и запрос подразумеваются в utf-8.
  `static List<Integer>`
  `getAllPaytypes(Integer registratorId)`
  Все замапленные типы платежей.
  `static String`
  `getCashierInn(Connection con, int userId)`
  Возвращает ИНН юзера-кассира по ид.
  `static String`
  `getCashierName(Connection con, int userId)`
  Возвращает имя юзера-кассира по ид.
  `static String`
  `getChargeOfdReceiptUrl(Connection con, int chargeId)`
  Возвращает урл на чек из лога расходов, если 1) фиск.данные присутствуют 2) правильного формата 3) урл там имеется.
  `static ru.bitel.bgbilling.plugins.cashcheck.server.CheckMaker`
  `getCheckMaker(Setup setup, Connection con, Connection conSlave, Payment payment, Printer printer)`
  Общий код получения дин.код через маппинги - платежа (если есть), принтера (если есть), общий.
  `static List<Contract>`
  `getContractsWithBalance(Connection con, LocalDate month)`
  все договоры имеющие любое движение балансов в месяце указанной даты
  `static String`
  `getCustomerAddressFromWeb(Connection con, int contractId, int... mids)`
  Возвращается email/телефон из ContractModuleConfigDao (то что вводится в полях в ЛК перед платежом, например).
  `static String`
  `getEmailCustomer(Connection con, int cid)`
  Получает email из "контактов" у сущности "клиент" договора.
  `static String`
  `getEmailParam(Connection con, int contractId, int parameterId)`
  Возвращает значение email или телефона из параметра договора по contractId и parameterId Поддерживает и mail-параметр и phone-параметр (если несколько мыл/телефонов, то вернётся первый) и текстовый параметр.
  `static String`
  `getPaymentOfdReceiptUrl(Connection con, int paymentId)`
  Возвращает урл на чек из лога платежей, если 1) фиск.данные присутствуют 2) правильного формата 3) урл там имеется.
  `static Printer`
  `getPrinter(int kkmNum)`
  Из настроек плагина получаем принтер по его номеру в конфиге.
  `static List<Payment>`
  `getQueue(Connection con, Date fromDate, Date toDate, Integer registratorId)`
  Получение очереди платежей.
  `static BigDecimal`
  `getTax(BigDecimal sum, int TAXPERCENT)`
  вычисление суммы ндс из общей суммы по переданному проценту (в процентах!)
  `static void`
  `openDay(Printer printer, int kkmPass)`
  Печатает отчёт об открытии дня, как это делает серверная часть плагина.
  `static void`
  `printCheck(Check check, Printer printer, int kkmPass, Connection con, int paymentId)`
  `static void`
  `printCheck(Check check, Printer printer, int kkmPass, Connection con, int paymentId, String posMapping, int contractId, Integer logId)`
  Печатает чек с указанными настройками, как это делает серверная часть плагина.
  `static void`
  `printCheckCharge(Check check, Printer printer, int kkmPass, Connection con, int chargeId)`
  в коде не используется, автоплатежей расходов нету, можно в данный момент использовать в скриптах
  `static void`
  `printCheckCharge(Check check, Printer printer, int kkmPass, Connection con, int chargeId, String posMapping, int contractId, Integer logId)`
  Печатает чек возврата с указанными настройками, как это делает серверная часть плагина.
  `static void`
  `printCheckVirtual(Check check, Printer printer, Connection con, int paymentId, String posMapping, int contractId)`
  Виртуально печатает чек с указанными настройками.
  `static void`
  `runCheckMakerAddPayment(PrinterManager.PaymentPrintMode printMode, Setup setup, Connection con, Connection conSlave, Payment payment, Check check, Printer printer)`
  `static void`
  `runCheckMakeraddPaymentAuto(Setup setup, Connection con, Connection conSlave, Payment payment, Check check, Printer printer)`
  Формирование чека через прописанный в плагине динкод, т.е. вызов метода CheckMaker.addPaymentAuto.
  `static void`
  `runCheckMakeraddPaymentAutoDelay(Setup setup, Connection con, Connection conSlave, Payment payment, Check check, Printer printer)`
  `static void`
  `runCheckMakerAddPaymentRefund(Setup setup, Connection con, Connection conSlave, Payment payment, Check check, Printer printer)`
  аналог runCheckMakerAddPayment, но для формирования чека возврата. printMode нету, т.к. сейчас только ручной режим
  `static void`
  `sendAlarm(String keysuffix, int kkt, String subject, String text, Throwable ex)`
  Отправка сообщения через штатные алармы.
  `static void`
  `sleepBatch()`
  спит настроенно кол-во времени в задачах последовательных печатей чеков
  `static byte[]`
  `STLV(byte[]... tlvs)`
  создаёт общую структуру из нескольких переданных TLV-структур
  `static byte[]`
  `TLV(int tag, byte[] value)`
  `static byte[]`
  `TLV(int tag, long value, int len)`
  `static byte[]`
  `TLV(int tag, String value, String charsetName)`
  `static BigDecimal`
  `vatCalc(BigDecimal sum, int vatType)`
  вычисление суммы ндс в зависимости от используемого типа налога из чека
  `static void`
  `ZReport(Printer printer, int kkmPass)`
  Печатает z-отчёт, как это делает серверная часть плагина.

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

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

- ## Constructor Details

  - ### CashCheckUtils

    public CashCheckUtils()

- ## Method Details

  - ### getPrinter

    public static Printer getPrinter(int kkmNum) throws ru.bitel.bgbilling.common.BGException
    Из настроек плагина получаем принтер по его номеру в конфиге.
    Parameters:
      `kkmNum` - номер принтера в конфиге плагина.
    Throws:
      `ru.bitel.bgbilling.common.BGException` - если такого не найдено принтера.

  - ### printCheck

    public static void printCheck(Check check, Printer printer, int kkmPass, Connection con, int paymentId) throws ru.bitel.bgbilling.common.BGException
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### printCheck

    public static void printCheck(Check check, Printer printer, int kkmPass, Connection con, int paymentId, String posMapping, int contractId, Integer logId) throws ru.bitel.bgbilling.common.BGException
    Печатает чек с указанными настройками, как это делает серверная часть плагина. Сохраняет в лог запись о напечатанном чеке. Если была ошибка - то выходит с BGException и пишет в лог ошибок печати(!).
    Parameters:
      `logId` - Если задан logId не-null то это значит печатается уже чек на готовый запись в логе, перепечатывается, логироваться будет именно туда и результат и ошибка. иначе запись добавится непременно новая.
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### printCheckVirtual

    public static void printCheckVirtual(Check check, Printer printer, Connection con, int paymentId, String posMapping, int contractId) throws ru.bitel.bgbilling.common.BGException
    Виртуально печатает чек с указанными настройками. Т.е. сохраняет его в лог как "новый" чтобы потом задача подхватила и напечатала. Для асинхронного формирования кучи чеков с последующей печатью неспеша (если скрипт печатал бы их два дня с риском что он упадёт и непонятно что ещё надо допечатать). Сохраняет в лог запись о "напечатанном" чеке с отметкой что новый (в виде фейковой "ошибки"). Ошибок печати быть не должно, т.к. печати реальной не происходит, только сохранение в БД.
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### printCheckCharge

    public static void printCheckCharge(Check check, Printer printer, int kkmPass, Connection con, int chargeId) throws ru.bitel.bgbilling.common.BGException
    в коде не используется, автоплатежей расходов нету, можно в данный момент использовать в скриптах
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### printCheckCharge

    public static void printCheckCharge(Check check, Printer printer, int kkmPass, Connection con, int chargeId, String posMapping, int contractId, Integer logId) throws ru.bitel.bgbilling.common.BGException
    Печатает чек возврата с указанными настройками, как это делает серверная часть плагина. Печатает на расход. Сохраняет в лог возвратов запись о напечатанном чеке. в коде не используется, автоплатежей расходов нету, можно в данный момент использовать в скриптах Если была ошибка - то выходит с BGException и пишет в лог ошибок печати(!).
    Parameters:
      `logId` - Если задан logId не-null то это значит печатается уже чек на готовый запись в логе, перепечатывается, логироваться будет именно туда и результат и ошибка. иначе запись добавится непременно новая. (для расходов для общности как для платежей)
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### ZReport

    public static void ZReport(Printer printer, int kkmPass) throws ru.bitel.bgbilling.common.BGException
    Печатает z-отчёт, как это делает серверная часть плагина. Если была ошибка - то выходит с BGException.
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### openDay

    public static void openDay(Printer printer, int kkmPass) throws ru.bitel.bgbilling.common.BGException
    Печатает отчёт об открытии дня, как это делает серверная часть плагина. Если была ошибка - то выходит с BGException.
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### sendAlarm

    public static void sendAlarm(String keysuffix, int kkt, String subject, String text, Throwable ex)
    Отправка сообщения через штатные алармы. Для каждого можно задать суффикс, также алармы разделяются по ккт ещё одним суффиксом (учитывая что алармы можно отключать по префиксам - можно отключить для всех ккт сразу или только для одного). Если kkt invalid input: '<'= 0, то не добавляется

  - ### runCheckMakeraddPaymentAuto

    public static void runCheckMakeraddPaymentAuto(Setup setup, Connection con, Connection conSlave, Payment payment, Check check, Printer printer) throws ru.bitel.bgbilling.common.BGException
    Формирование чека через прописанный в плагине динкод, т.е. вызов метода CheckMaker.addPaymentAuto.
    Throws:
      `ru.bitel.bgbilling.common.BGException` - если неправильно настроено, дин.код не реализован итд. Ну или если CheckMaker.addPaymentAuto ошибку вернул.

  - ### runCheckMakeraddPaymentAutoDelay

    public static void runCheckMakeraddPaymentAutoDelay(Setup setup, Connection con, Connection conSlave, Payment payment, Check check, Printer printer) throws ru.bitel.bgbilling.common.BGException
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### getCheckMaker

    public static ru.bitel.bgbilling.plugins.cashcheck.server.CheckMaker getCheckMaker(Setup setup, Connection con, Connection conSlave, Payment payment, Printer printer) throws ru.bitel.bgbilling.common.BGException
    Общий код получения дин.код через маппинги - платежа (если есть), принтера (если есть), общий. Создаёт класс и вызывает ему init.
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### runCheckMakerAddPayment

    public static void runCheckMakerAddPayment(PrinterManager.PaymentPrintMode printMode, Setup setup, Connection con, Connection conSlave, Payment payment, Check check, Printer printer) throws ru.bitel.bgbilling.common.BGException
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### runCheckMakerAddPaymentRefund

    public static void runCheckMakerAddPaymentRefund(Setup setup, Connection con, Connection conSlave, Payment payment, Check check, Printer printer) throws ru.bitel.bgbilling.common.BGException
    аналог runCheckMakerAddPayment, но для формирования чека возврата. printMode нету, т.к. сейчас только ручной режим
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### getQueue

    public static List<Payment> getQueue(Connection con, Date fromDate, Date toDate, Integer registratorId) throws ru.bitel.bgbilling.common.BGException
    Получение очереди платежей.
    Parameters:
      `con` - коннекшен
      `fromDate` - дата начала включительно, может быть null
      `toDate` - дата конца включительно, может быть null
      `registratorId` - конкретный принтер, может быть null
    Returns:
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### getAllPaytypes

    public static List<Integer> getAllPaytypes(Integer registratorId)
    Все замапленные типы платежей.
    Parameters:
      `registratorId` - фильтр по номеру ккт, если null то все типы
    Returns:
      список ид типов платежей, не null

  - ### getEmailParam

    public static String getEmailParam(Connection con, int contractId, int parameterId) throws ru.bitel.bgbilling.common.BGException
    Возвращает значение email или телефона из параметра договора по contractId и parameterId Поддерживает и mail-параметр и phone-параметр (если несколько мыл/телефонов, то вернётся первый) и текстовый параметр. Параметры нормализуются по возможности (и неправильные мыло/телефоны не должны вернуться). Если ничего нет, вернёт null.
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### getEmailCustomer

    public static String getEmailCustomer(Connection con, int cid) throws Exception
    Получает email из "контактов" у сущности "клиент" договора. Если несколько, то первый, если нет клиента или контакта - вернёт null. Какой из них "первый" в общем случае неочевидно, так что "первый" следует трактовать как "случайный". Мыло нормализуются по возможности (и неправильное не должно вернуться).
    Throws:
      `Exception`

  - ### getCustomerAddressFromWeb

    public static String getCustomerAddressFromWeb(Connection con, int contractId, int... mids) throws Exception
    Возвращается email/телефон из ContractModuleConfigDao (то что вводится в полях в ЛК перед платежом, например). Можно указать несколько mid модулей (в ряде случаев модули хранят эти параметры отдельно), будет смотреться также общий для mid=0. Значения нормализуются по возможности (и неправильные мыло/телефоны не должны вернуться). Преимущественно вернётся email.
    Throws:
      `Exception`

  - ### doHttpRequest

    public static CashCheckUtils.HttpReply doHttpRequest(String method, String url, String body, Map<String,String> requestProperties, int timeout, org.apache.logging.log4j.Logger logger) throws ru.bitel.bgbilling.common.BGException, ru.bitel.bgbilling.plugins.cashcheck.server.BGFiscConnectException
    http(s)-запрос, ответ и запрос подразумеваются в utf-8.
    Parameters:
      `method` -
      `url` -
      `body` - тело или null для гет-запрос например
      `requestProperties` -
      `timeout` - таймаут в миллисекундах - и setConnectTimeout и setReadTimeout.
      `logger` -
    Returns:
      объект HttpReply с http-кодом и телом (код int, тело всегда не null)
    Throws:
      `ru.bitel.bgbilling.common.BGException` - если что-то не так
      `ru.bitel.bgbilling.plugins.cashcheck.server.BGFiscConnectException` - если что-то не так до/при коннекте

  - ### getCashierName

    public static String getCashierName(Connection con, int userId) throws ru.bitel.bgbilling.common.BGException
    Возвращает имя юзера-кассира по ид. Сначала пытается взять настройку "cashcheck.name" из конфига юзера (можно перекрыть). Если не найдено, то будет null.
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### getCashierInn

    public static String getCashierInn(Connection con, int userId) throws ru.bitel.bgbilling.common.BGException
    Возвращает ИНН юзера-кассира по ид. Пытается взять настройку "cashcheck.inn" из конфига юзера. Если не найдено, то будет null.
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### sleepBatch

    public static void sleepBatch() throws InterruptedException
    спит настроенно кол-во времени в задачах последовательных печатей чеков
    Throws:
      `InterruptedException`

  - ### getContractsWithBalance

    public static List<Contract> getContractsWithBalance(Connection con, LocalDate month) throws ru.bitel.bgbilling.common.BGException
    все договоры имеющие любое движение балансов в месяце указанной даты
    Throws:
      `ru.bitel.bgbilling.common.BGException`

  - ### TLV

    public static byte[] TLV(int tag, String value, String charsetName)

  - ### TLV

    public static byte[] TLV(int tag, long value, int len)

  - ### TLV

    public static byte[] TLV(int tag, byte[] value)

  - ### STLV

    public static byte[] STLV(byte[]... tlvs)
    создаёт общую структуру из нескольких переданных TLV-структур

  - ### convertSTAGtoSTLV

    public static byte[] convertSTAGtoSTLV(Check.STAG stag)

  - ### getTax

    public static BigDecimal getTax(BigDecimal sum, int TAXPERCENT)
    вычисление суммы ндс из общей суммы по переданному проценту (в процентах!) ндс

  - ### vatCalc

    public static BigDecimal vatCalc(BigDecimal sum, int vatType) throws ru.bitel.bgbilling.common.BGMessageException
    вычисление суммы ндс в зависимости от используемого типа налога из чека
    Throws:
      `ru.bitel.bgbilling.common.BGMessageException`

  - ### getPaymentOfdReceiptUrl

    public static String getPaymentOfdReceiptUrl(Connection con, int paymentId)
    Возвращает урл на чек из лога платежей, если 1) фиск.данные присутствуют 2) правильного формата 3) урл там имеется. В противном случае молча вернётся null.

  - ### getChargeOfdReceiptUrl

    public static String getChargeOfdReceiptUrl(Connection con, int chargeId)
    Возвращает урл на чек из лога расходов, если 1) фиск.данные присутствуют 2) правильного формата 3) урл там имеется. В противном случае молча вернётся null.