BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 27 апр 2024, 19:22

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




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: 27 июл 2015, 19:17 
Не в сети

Зарегистрирован: 18 дек 2013, 13:07
Сообщения: 35
Карма: 0
Проблема:
Скрипт поведения, который привязан к событию "Запрос доп.расхода для открытия договора", выполняется бесконечное количество раз, когда статус договора переходит в закрытый.

Изображение

Код скрипта:
Код:
package ru.myscripts;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Calendar;
import java.util.Date;

import bitel.billing.server.contract.bean.BalanceUtils;
import ru.bitel.bgbilling.kernel.event.EventProcessor;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
import ru.bitel.bgbilling.kernel.event.Event;
import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase;

public class SetSuCharge
   extends EventScriptBase
{
   @Override
   public void onEvent( Event event1, Setup setup2, ConnectionSet connectionSet3 )
      throws Exception
   {   

    Date dateNow = new Date();
    int cid = event1.getContractId();   
   
   Connection con = connectionSet3.getConnection();   
    EventProcessor eventProc  = EventProcessor.getInstance();
    Calendar c = Calendar.getInstance();     
   
         
    int mid = 11; // ID модуля RSCM
    int RSCMServiceID = 27;  // ID услуги аренды линии (штраф за длит неуплату интернет услуг)
     
 
    BalanceUtils bu = new BalanceUtils (con);                   
    ContractManager contract = new ContractManager(con);
    Contract ct = contract.getContractById(cid);
    Date LastBalanceMonth = bu.getLastBalanceMonth(ct);
    if( LastBalanceMonth == null)
      {
         LastBalanceMonth = new Date();
      } 
    int mounth = TimeUtils.monthsDelta(LastBalanceMonth,dateNow);
    print ("mounth " + mounth);      
    print ("LastBalanceMonth " + LastBalanceMonth  + " DateNow " + dateNow);         
    
   
    }

}


При исправлении баланса (добавлении отрицательного платежа), при котором статус меняется с активного на закрытый, и запуска задания "Закрытие статуса NPay договоров по балансу" начинает бесконечное количество раз выполняться скрит поведения, описанный выше.

Изображение

В случае перехода статуса из закрытого в активный, скрипт выполняется 2 раза.

Вопрос:
Чем можно объянить такое поведение?
Где найти документацию по событию "Запрос доп.расхода для открытия договора"
Возможно ли использовать событие "Запрос доп.расхода для открытия договора" для добавления RSCM услуги "Плата за аренду линии" при длительной неуплате абонентом интернет услуг?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 июл 2015, 12:12 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
krtvand писал(а):


[b]Вопрос:

Чем можно объянить такое поведение?
Где найти документацию по событию "Запрос доп.расхода для открытия договора"
Возможно ли использовать событие "Запрос доп.расхода для открытия договора" для добавления RSCM услуги "Плата за аренду линии" при длительной неуплате абонентом интернет услуг?


Это событие нельзя для этого использовать. Оно каждый раз возникает когда нужно получить сумму для разблокировки (95 напротив npay на вашем скриншоте). Т.е если переоткрыть договор или нажать на кнопку "обновить" , оно вызовется. И при приходе платежа это событие вызовется. Его цель - это подменить эту сумму, например вы хотите чтобы всегда не меньше 1000 рублей клали.

Почему так много раз вызывалось, посмотрим..

У вас какая цель вообще? Почему вы решили при длительной неуплате использовать это событие ? Может вам проще написать глобальный скрипт и запускать его по планировщику.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 июл 2015, 14:33 
Не в сети

Зарегистрирован: 18 дек 2013, 13:07
Сообщения: 35
Карма: 0
Задача стоит аналогичная описанной в статье "Дебетовые абонплаты. Снятие штрафа за разблокировку.".
А именно, если абонент не пользовался интернетом в течении двух и более месяцев, и при этом не писал заявление на приостановку услуг, для продолжения пользования интернетом ему необходимо заплатить штраф в размере одной абонентской платы за простой, а также обычную абонплату за текущий месяц.

т.к. приведенный выше скрипт устарел, я решил его немного изменить. Я хочу перед разблокировкой договора проверять движение средств на договоре с помощью функции getLastBalanceMonth (т.е. получить последний месяц, где было движение средств). Если два и более месяца не было движений, то к договору необходимо добавить RSCM услугу "Аренда линии".

Цитата:
Может вам проще написать глобальный скрипт и запускать его по планировщику.

такой вариант я использовать не хочу, т.к. в данном случае очень сложно предусмотреть все ньюансы.

на данный момент я представляю (но не уверен, что такое возможно) реализацию описанного механизма следующим образом:
на событии "Запрос доп.расхода для открытия договора" проверять необходимость добавления услуги "Аренда линии".
на событии "После открытия договора по платежу" добавлять при необходимости RSCM услугу "Аренда линии"

Существует ли между двумя описанными событиями связь?
В скрипте из ссылки заметил такую вещь: event.setSumma( summa ); может через этот параметр получится передать в событие "После открытия договора по платежу" информацию о необходимости добавления RSCM услуги "Аренда линии"?

Код:
2. В скрипте поведения создайте функцию, обрабатывающую событие Запрос доп. расхода для открытия договора. Определите сумму минимальной предоплаты для каждого из тарифов.
 
includeBGBS( "bgbs://ru.bitel.bgbilling.kernel.script.common.bean.ScriptLibrary/npay_debet" );
 
public void onEvent( event, setup, con, conSlave )
{
   unlockInfo = getUnlockInfo( event.getContractID(), conSlave );
   if( unlockInfo == null )
   {
      error( "Error take unlock info" );
      return;
   }
 
   summa = unlockInfo.summa;
   print( "Cost for unlock: " + summa );
 
   // здесь можно определить "довесок" в зависимости от кода тарифного дерева
   // код дерева можно получить выбором любого узла тарифного дерева и нажатием Ctrl+i, tree => <код дерева>
   if( unlockInfo.treeId == 226 )
   {
      summa = summa.add( new BigDecimal( "11.20" ) );
      print( "Add summa to " + summa + " by tariffTreeId" );
   }
   event.setSumma( summa );
}


Понимаю, что задача не стандартная, если мне поможете, буду очень благодарен!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 июл 2015, 19:49 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
krtvand писал(а):
Задача стоит аналогичная описанной в статье "Дебетовые абонплаты. Снятие штрафа за разблокировку.".


Так там по другому. Там расход списывает в событии "После открытия договора по платежу". А вы пытались в событии " Запрос доп. расхода для открытия договора".

В событии " Запрос доп. расхода для открытия договора" вы можете заменить либо что-то добавить к сумме разблокировки. В том скрипте с помощью этого скрипта выполняется задача "Запрещение разблокировки в случае, если после разблокировки превышение остатка над лимитом составит менее определённой суммы, привязанной к конкретному тарифу (минимальный остаток)."

Думаю для вашей задачи будет достаточно "После открытия договора по платежу". А хотя нет, в этом случае он может уйти в минус.Надо в событии "" Запрос доп. расхода для открытия договора". возращать сумму штрафа тоже если абонент не пользовался нсколько месяцев чтобы она прибавлялась к сумме разблокировки( этот режим настраивается).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 31 авг 2015, 15:27 
Не в сети

Зарегистрирован: 29 окт 2008, 16:29
Сообщения: 55
Откуда: Екатеринбург
Карма: 0
Здравствуйте, чтоб не открывать тему, напишу здесь.

Хотелось бы реализовать, то что написано уважаемым stark выше.
Цитата:
"Запрещение разблокировки в случае, если после разблокировки превышение остатка над лимитом составит менее определённой суммы, привязанной к конкретному тарифу (минимальный остаток)."


Вопрос, как это сделать?
Я правильно понимаю, что надо найти/написать скрипт запрета разблокировки . Может уже есть?
И как привязать минимальный остаток к конкретному тарифу?

Версия билинга 6.0
модуля RSCM нет


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 сен 2015, 19:56 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
vi007 писал(а):
Здравствуйте, чтоб не открывать тему, напишу здесь.

Хотелось бы реализовать, то что написано уважаемым stark выше.
Цитата:
"Запрещение разблокировки в случае, если после разблокировки превышение остатка над лимитом составит менее определённой суммы, привязанной к конкретному тарифу (минимальный остаток)."


Вопрос, как это сделать?
Я правильно понимаю, что надо найти/написать скрипт запрета разблокировки . Может уже есть?
И как привязать минимальный остаток к конкретному тарифу?

Версия билинга 6.0
модуля RSCM нет


Цитата:
Надо в событии "" Запрос доп. расхода для открытия договора". возращать сумму штрафа тоже если абонент не пользовался нсколько месяцев чтобы она прибавлялась к сумме разблокировки( этот режим настраивается).

Вот с привязкой к тарифу сложнее. Как именно там привязано ? Т.е в тарифе одна цена, а минимальный остаток другой нужно ? Илим как? Дайте описание примера вашего тарифа с цифрами.


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

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


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

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


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

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