BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 23 июн 2025, 04:50

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




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: 20 апр 2011, 15:34 
Не в сети

Зарегистрирован: 20 апр 2011, 09:56
Сообщения: 346
Карма: 19
Доброго времени суток.
После обновления сервера с 4.6 на 5.1 перестал работать скрипт "Управление статусом договора по состоянию баланса"

Сам код:
Код:
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.tariff.bean.*;
import bitel.billing.server.script.event.*;
import bitel.billing.server.service.bean.*;
import bitel.billing.server.tariff.*;
import bitel.billing.server.util.*;
import bitel.billing.server.npay.*;
import bitel.billing.server.task.bean.RunTaskData;
import bitel.billing.server.task.bean.RunTaskDataManager;
import java.util.*;
import bitel.billing.common.KernelConst;
import ru.bitel.bgbilling.server.util.ModuleSetup;
import bitel.billing.server.contract.bean.ContractStatusManager;
import bitel.billing.server.ipn.bean.*;
import bitel.billing.server.npay.bean.ServiceObjectManager;
import bitel.billing.server.npay.bean.ServiceObject;

// Если это таймер на начало месяца, в п.1, иначе выход
// соответственно не забываем добавить параметр запуска в задачу "flag=1"
// (вместо 1 подставляем любое число, но оно же должно быть в следующем условии =)
if (event.getFlag() != 6 ) {
   return;
 
}
 
// номер модуля NPAY
NPAY_MID = 5;
DateNow = new GregorianCalendar();
 
cid = event.getContractID();
cstm = new ContractStatusManager( con );
 
 
// округляем день (на 00:00:00) события
egt = event.getGenerateTime();
df = egt.clone();
df.clear();
df.set(egt.get(Calendar.YEAR), egt.get(Calendar.MONTH), egt.get(Calendar.DAY_OF_MONTH));
 
// получаем день, предыдущий событию
dt = df.clone();
dt.roll(Calendar.DAY_OF_YEAR, -1);
 
db = df.clone();
db.roll(Calendar.MONTH, -2);
 
 
print( df );
print( dt );
print( db );
 
 
// определяем текущий статус договора
 
StatusContractList = cstm.getStatusList(cid, event.getGenerateTime());
if (StatusContractList.size() == 0)
   return;
 
StatusContract = StatusContractList.get(0);
print("StatusContract.getStatus():"+StatusContract.getStatus() );
 
contract = new ContractManager(con).getContractByID(cid);
contract_groups = contract.getGroups();
print ("rpynna:"+contract_groups);
print (1L);
 
// выбираем только нужную группу договоров (нам нужна только 1 группа)
if ((contract_groups & (1L<<1)) > 0) {
internet = 1;
} else {
internet = 0;
}
print (internet);
 
if( StatusContract.getStatus() == 0 && internet == 1)
{
// 1. определить нужно ли приостанавливать договор (если есть абонплата и баланс меньше лимита)
// 1.1 определить баланс и лимит: если баланс > лимита - выход, если меньше, то см. п.1.2
 
   ctm = new ContractTariffManager(  con );
   csm   = new ContractServiceManager( con );
   cu   = new ContractUtils( con );
   cm   = new ContractManager( con );
   cn   = cm.getContractByID( cid );
   tts = cm.getRealtimeTariffTreeSet( cid, df, "npay", NPAY_MID, true );
   msu = new ModuleAndServiceUtils( con );
   bu  = new BalanceUtils( con );
   tpm = new TariffPlanManager(con);   
 
 
 
   // получаем текущий баланс (с учетом данного платежа)
   balance = bu.getBalance(event.getGenerateTime(), cid);
   limit = cn.getLimit();
   fbm = cn.getFakeBalanceMode();
   bm = cn.getBalanceMode();
   print ( "balance = "+balance );
   print ( "limit = "+limit );
   print ( "fbm = "+fbm+"; bm = "+bm );
 
// 1.2 получить наработку для всех услуг типа "Абонплата" и если она больше 0, то в п.2 иначе выход
   totalCost = 0d;
 
   // получаем список услуг
som = new ServiceObjectManager(con,NPAY_MID);
        serviceList  = som.getServiceObjectList( cid, -1 , -1, -1);
 
   for( Iterator it = serviceList.iterator(); it.hasNext(); ) {
      service = (ServiceObject)it.next();
 
      if ( TimeUtils.dateInRange( TimeUtils.convertCalendarToDate( egt ), service.getDate1(), service.getDate2() ) ) {
         sid = service.getServiceId();
 
         // считаем сумму абонплаты
         // перебор тарифов в порядке позиций сначала персональных, потом глобальных
         for( TariffModuleTree tree : tts.getTreeList( df ) )   {
             req = new TariffRequest();
             req.setRequestParam( "action", "calculate" );
             req.setRequestParam( "sid", sid );
 
             // считаем абонплату пропорционально количеству дней до конца месяца(действует для тарифов "Пропорционально периоду")
 
            // всего дней в месяце
             req.setRequestParam( "month_days", 1 );
            // всего дней до конца месяца
             req.setRequestParam( "period_days", 1 );
 
             tree.processRequest( req );
 
             cost = (Double) req.getResponseParam( "cost" );               
            print ( "cost:" + cost );
             if( req.wasAccepted() && cost != null )   {
                 print( cost );
               totalCost += cost;
                 break;
             }
         }
       }
   }
 
   print ("totalCost = "+totalCost);
   if ( totalCost <= 0 || balance-totalCost >= limit) {
      print ( "Все ОК!" );
      return;
   }
 
// 2. Приостановить договор. установить статус "Приостановлен"
//newdate = DateNow;
//newdate.set (2011,1,4);      
ContractStatus status = new ContractStatus();
      status.setContractId( cid );
      status.setDate1( DateNow);
      status.setDate2( null );
      status.setStatus( KernelConst.CONTRACT_STATUS_SUSPENDED);
      status.setComment( "Недостаточно средств" );
       cstm.changeStatus( status,0 );    


//Закрываем шлюз
modset = new ModuleSetup(con, 3);
(new IPNContractStatusManager(con, 3, modset)).changeStatus(cid, 2, 0, true);

   StatusContract = cstm.getStatus(cid, df);
//   print("cm.getStatus("+df+"):"+StatusContract.getStatus() );

}



Логи:
ERROR [Thread-9] script - Eval error: Sourced file: Function [id:2; title:Блокировка статуса] : Error in method invocation: Method getStatusList( int, java.util.GregorianCalendar ) not found in class'bitel.billing.server.contract.bean.ContractStatusManager' : at Line: 55 : in file: Function [id:2; title:Блокировка статуса] : cstm .getStatusList ( cid , event .getGenerateTime ( ) )

Код:
// определяем текущий статус договора
 
StatusContractList = cstm.getStatusList(cid, event.getGenerateTime());
if (StatusContractList.size() == 0)
   return;
 
StatusContract = StatusContractList.get(0);
print("StatusContract.getStatus():"+StatusContract.getStatus() );
 
contract = new ContractManager(con).getContractByID(cid);
contract_groups = contract.getGroups();
print ("rpynna:"+contract_groups);
print (1L);


Сам проблему решить не смог, надеюсь на вашу помощь.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 апр 2011, 15:39 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Код:
   public List<ContractStatus> getStatusList( int cid, java.util.Date date )
       throws SQLException



теперь дата там, а не календарь...

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 апр 2011, 15:43 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
aiwbend писал(а):
ERROR [Thread-9] script - Eval error: Sourced file: Function [id:2; title:Блокировка статуса] : Error in method invocation: Method getStatusList( int, java.util.GregorianCalendar ) not found in class'bitel.billing.server.contract.bean.ContractStatusManager' : at Line: 55 : in file: Function [id:2; title:Блокировка статуса] : cstm .getStatusList ( cid , event .getGenerateTime ( ) )

Переделайте GregorianCalendar в дату

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


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

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


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

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


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

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