BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 07 июн 2024, 10:35

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Блокировка управлением лимита
СообщениеДобавлено: 30 авг 2015, 17:16 
Не в сети

Зарегистрирован: 31 дек 2009, 14:40
Сообщения: 46
Карма: 0
Доброго дня.

Стандартная ситуация: клиент берет обещанный платеж, не оплачивает его вовремя, сервер после определенного времени подтягивает лимит снова до 0.
Позже клиент оплачивает этот платеж, но сервер не дает снова абоненту понизить лимит, т.к. возможность понижения заблокирована и нужно лезть в админку для принудительного деблокинга этого режима.
Вопрос: есть ли возможность где-то опционно указать, что при поступлении достаточного платежа нужно разблокировать возможность понижения лимита? Или может кто подскажет метод api соответствующий?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Блокировка управлением лимита
СообщениеДобавлено: 31 авг 2015, 07:38 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
Код:
#коды групп договоров для которых действует данная настройка, через ',' (чтобы узнать код группы нажмите Ctrl+i в справочнике
#групп при выбранной строке таблицы)
contract.limit.1.groups=4
#максимальное количество не оплаченных(не возвратившихся) понижений
#при котором клиенту будет доступно понижение, при 0 клиент не сможет выполнять
#понижение до тех пор пока будет хотя бы одно не оплаченное
contract.limit.1.maxnotpayoffed=0
#максимальное количество частично оплаченных понижений
#при котором клиенту будет доступно понижение (0-1, частично оплаченное понижение
#может быть только одно)
contract.limit.1.maxpartialpayoffed=0
#количество просроченных платежей после последней разблокировки
#после которых доступ к понижению будет заблокирован
contract.limit.1.maxexpiredforblock=0
#дни от до
contract.limit.1.mindays=2
contract.limit.1.maxdays=2
#сумма от до
contract.limit.1.minsumm=30
contract.limit.1.maxsumm=200
#нижний порог лимита при понижении клиентом (по умолчанию -100)
#т.е ниже этого порога клиент понизить не сможет
contract.limit.1.minlimit=-200

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Блокировка управлением лимита
СообщениеДобавлено: 31 авг 2015, 12:26 
Не в сети
Клиент

Зарегистрирован: 07 мар 2012, 15:02
Сообщения: 932
Откуда: Воронеж
Карма: 35
Не знаю, что имел ввиду skyb, но мне в своё время не удалось опциями настроить нужное нам поведение, поэтому пришлось писать скрипт... Специальных метод API не нашёл, поэтому работаю через базу:
Код:
package ru.xxx.contract.tasks;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import ru.bitel.bgbilling.kernel.task.server.TaskBase;

public class ClearLockOfDeferredPayment extends TaskBase {

   private int mode;
   private String groups;
   
   @Override
   public String getDescription() {
      return this.defaultDescription + "Очистка блокировки отложенного платежа по положительному балансу";
   }

   @Override
   protected boolean initTask() {
      mode = taskSetup.getInt("mode", 0);
      groups = taskSetup.get("groups", "");

      return true;
   }


   @Override
   protected void executeTask() {
      Connection conn = setup.getDBConnectionFromPool();
      
      PreparedStatement ps;
      try {
         String query = "" +
               " SELECT" +
               "    c.id," +
               "    c.title," +
               "    m.mode," +
               "    m.cnt," +
               "    b.summa1 + b.summa2 - b.summa3 - b.summa4 AS balance" +
               " FROM" +
               "    contract c," +
               "    contract_limit_manage_mode m," +
               "    contract_balance b" +
               " WHERE" +
               "    c.status != 2 AND" +
               "    c.id = m.cid AND" +
               "    (m.mode > 0 OR m.cnt > 0) AND" +
               "    c.id = b.cid AND" +
               "    b.yy = YEAR(NOW()) AND" +
               "    b.mm = MONTH(NOW()) AND" +
               "    b.summa1 + b.summa2 - b.summa3 - b.summa4 >= 0";
         if (!groups.isEmpty()) {
            query += " AND (";
            for (String gid : groups.split(",")) {
               query += " (c.gr >> " + gid + ") & 1" + " OR";
            }
            query += " 0=1 )";
         }

         ps = conn.prepareStatement(query);
         ps.execute();
         ResultSet rs = ps.getResultSet();

         PreparedStatement psUpd = conn.prepareStatement("UPDATE contract_limit_manage_mode SET mode = 0, cnt = 0 WHERE cid = ?");
         PreparedStatement psIns = conn.prepareStatement("INSERT INTO log_contract_limit_manage_mode VALUES (NOW(), 0, 0, ?)");
         if (rs.next()) {
            do {
               int id = rs.getInt("id");
               String contract = rs.getString("title");
               int mode = rs.getInt("mode");
               int cnt = rs.getInt("cnt");
               BigDecimal balance = rs.getBigDecimal("balance");
               
               psUpd.setInt(1, id);
               psIns.setInt(1, id);
               try {
                  if (this.mode == 1) {
                     psUpd.executeUpdate();
                     psIns.executeUpdate();
                  }
                  log.info(contract + ": mode=" + mode + ", cnt=" + cnt + ", balance=" + balance + ", result=cleared.");
               } catch (SQLException e) {
                  log.error(contract + ": mode=" + mode + ", cnt=" + cnt + ", balance=" + balance + ", result=" + e.getMessage());
               }
            } while(rs.next());
         } else {
            log.info("The contracts with a locked deferred payment not found.");
         }
         psIns.close();
         ps.close();
      } catch (SQLException e) {
         log.error("Cannot get contracts with a locked deferred payment: " + e.getMessage());
      }

      try {
         conn.close();
      } catch (SQLException e) {
      }
   }
}

Скрипт сделан в виде задачи для планировщика, но лучше переделать в глобальный скрипт поведения. Скрипт разблокирует возможность понижения, если баланс договора стал больше нуля.

_________________

Клиент: вер. 6.2.873 / 04.12.2017 19:38:11
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65
Сервер: вер. 6.2.1202 / 04.12.2017 19:39:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Блокировка управлением лимита
СообщениеДобавлено: 31 авг 2015, 17:31 
Не в сети

Зарегистрирован: 31 дек 2009, 14:40
Сообщения: 46
Карма: 0
skyb писал(а):
Код:
#коды групп договоров для которых действует данная настройка, через ',' (чтобы узнать код группы нажмите Ctrl+i в справочнике
#групп при выбранной строке таблицы)
contract.limit.1.groups=4
#максимальное количество не оплаченных(не возвратившихся) понижений
#при котором клиенту будет доступно понижение, при 0 клиент не сможет выполнять
#понижение до тех пор пока будет хотя бы одно не оплаченное
contract.limit.1.maxnotpayoffed=0
#максимальное количество частично оплаченных понижений
#при котором клиенту будет доступно понижение (0-1, частично оплаченное понижение
#может быть только одно)
contract.limit.1.maxpartialpayoffed=0
#количество просроченных платежей после последней разблокировки
#после которых доступ к понижению будет заблокирован
contract.limit.1.maxexpiredforblock=0
#дни от до
contract.limit.1.mindays=2
contract.limit.1.maxdays=2
#сумма от до
contract.limit.1.minsumm=30
contract.limit.1.maxsumm=200
#нижний порог лимита при понижении клиентом (по умолчанию -100)
#т.е ниже этого порога клиент понизить не сможет
contract.limit.1.minlimit=-200


в вашей схеме клиент может брать несколько раз подряд обещанный платеж, не принося реальных денег, у нас политика пожестче )
А когда у абонента лимит улетел ниже -200, вы как регулируете ситуацию? Закрываете договор?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Блокировка управлением лимита
СообщениеДобавлено: 31 авг 2015, 17:34 
Не в сети

Зарегистрирован: 31 дек 2009, 14:40
Сообщения: 46
Карма: 0
vkulakov писал(а):
Не знаю, что имел ввиду skyb, но мне в своё время не удалось опциями настроить нужное нам поведение, поэтому пришлось писать скрипт... Специальных метод API не нашёл, поэтому работаю через базу:

Скрипт сделан в виде задачи для планировщика, но лучше переделать в глобальный скрипт поведения. Скрипт разблокирует возможность понижения, если баланс договора стал больше нуля.


Спасибо, попробую ваш скрипт на досуге


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Блокировка управлением лимита
СообщениеДобавлено: 01 сен 2015, 08:10 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
Да договор закрывается, это базовый пример, я тоже переписывал обещанный платеж в лк, там была совершенно другая логика зашита

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.037s | 27 Queries | GZIP : On ]