Обработка события "добавление услуги RSCM в договор" . Скипт сменяет тариф, подключает абонплату

Материал из BiTel WiKi

Версия от 12:21, 14 декабря 2009; 127.0.0.1 (Обсуждение)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Необходимо ,было сделать, чтобы следующие услуги автоматически меняли статус абонента и/или тариф:

  • Подключение к сети КТВ на Базовый тариф (стоимость 330 рублей) – начинала начисляться абонплата и у абонента появлялся Базовый тариф.
  • Подключение к сети КТВ на Эфирный тариф (стоимость 330 рублей) – начинала начисляться абонплата и у абонента появлялся Эфирный тариф.
  • Подключение к сети КТВ на Локальный тариф (стоимость 330 рублей) – начинала начисляться абонплата и у абонента появлялся Локальный тариф.
  • Подключение к сети КТВ на Служебный тариф (стоимость 0 рублей) – начинала начисляться абонплата и у абонента появлялся Служебный тариф.
  • Льготное подключение к сети КТВ на Базовый тариф (0) – начинала начисляться абонплата и у абонента появлялся Базовый тариф.
  • Льготное подключение к сети КТВ на Эфирный тариф (0) – начинала начисляться абонплата и у абонента появлялся Эфирный тариф.
  • Льготное подключение к сети КТВ на Локальный тариф (0) – начинала начисляться абонплата и у абонента появлялся Локальный тариф.
  • 50 % подключение к сети КТВ на Базовый тариф (165) – начинала начисляться абонплата и у абонента появлялся Базовый тариф.
  • 50 % подключение к сети КТВ на Эфирный тариф (165) – начинала начисляться абонплата и у абонента появлялся Эфирный тариф.
  • 50 % подключение к сети КТВ на Локальный тариф (165) – начинала начисляться абонплата и у абонента появлялся Локальный тариф.
  • Повторное подключение к сети КТВ (100 рублей) – начинала начисляться абонплата.
  • Бесплатное повторное подключение к сети КТВ (0 рублей) – начинала начисляться абонплата.
  • Переключение на Эфирный тариф (150) – у абонента вместо какого-либо тарифа появлялся Эфирный тариф.
  • Бесплатное переключение на Эфирный тариф (0) – у абонента вместо какого-либо тарифа появлялся Эфирный тариф.
  • Переключение на Базовый тариф (0) – у абонента вместо какого-либо тарифа появлялся Базовый тариф.
  • Переключение на Локальный тариф (0) – у абонента вместо какого-либо тарифа появлялся Локальный тариф.
  • Переключение на Служебный тариф (0) – у абонента вместо какого-либо тарифа появлялся Служебный тариф.
  • Приостановление действия договора (0) – статус абонента переводился в «приостановлен».
  • Расторжение договора (0) - статус абонента переводился в «закрыт».

На основании события добавления услуги в RSCM модуле реализуются BGBS скрипты, реализующие данные действия.

Скрипт(возможно в коде скрипта несколько изменена логика , описанная выше, скрипт и коментарии в нем являются первичными ):

import bitel.billing.server.contract.bean.*;	
import bitel.billing.server.tariff.bean.*;
import bitel.billing.server.script.event.*;
import java.util.*;
import bitel.billing.common.*;
import bitel.billing.server.npay.bean.*;
import bitel.billing.server.admin.eventbus.event.*;
import bitel.billing.server.admin.eventbus.*;
 
private getPrevDate( date )
{
	Calendar result = new GregorianCalendar();	
	result.setTime( date );
	result.add( Calendar.DAY_OF_YEAR, -1 );
	return result;		
}
 
private void setTariff( cid, tariffId, date )
{
	ctm =  new ContractTariffManager(  con );
	cm = new ContractManager( con );
 
	t = null;
 
	//пытаемся найти на текущий момент тариф 
	list = ctm.getContractTariffList(cid, date);
	if ( list.size() > 0) 
	{
		t = list.get(0);
	}
 
 
	//Если нашли , то закрываем предыдушим днем 
	createNew = true;
	changed = false;
  	if ( t != null)
	{
		if ( t.getDate1() == null || t.getDate1().getTime().compareTo( date ) < 0 )
		{
			print ("close tariff..");
			changed = true;
			Calendar stopDate = getPrevDate( date) ;
			t.setDate2(  stopDate );
			ctm.updateContractTariff(  t );		
		}
		//если открыт сегодняшним числом  - ничего не делаем
		else if ( t.getDate1().getTime().compareTo( date ) == 0 )
		{
			print ("update tariff ");
			createNew = false;						
			changed = true;
			t.setTariffPlanID( tariffId );
			t.setComment( "создан автоматически" );
			ctm.updateContractTariff( t );		
 
		}
	}
 
 
	// создаем новый
	if ( createNew )
	{
		print ("add new tariff..");
		changed = true;	
		t = new ContractTariff();
		t.setContractID( cid );
		t.setTariffPlanID( tariffId );
		t.setPos( 0 );
		t.setDate1(  TimeUtils.convertDateToCalendar( date ) );
		t.setDate2(  null );
		t.setComment( "создан автоматически" );                
		ctm.updateContractTariff(  t );		
	}
 
	if ( changed ) 
	{
		BillingEventBus.publish( new TariffChangedEvent( cid ) );
	}
}
 
private addNpayModule()
{
	ContractModuleManager manager = new ContractModuleManager( con );
	modules = manager.getContractModuleSet( cid );
	if ( !modules.contains( NPAY_MID ) )
	{
		ContractModule module = new ContractModule();
		module.setContractId( cid );
		module.setModuleId( 	NPAY_MID );
		manager.addContractModule( module );
	} 
}
 
private addNPayService( date )
{
	addNpayModule();
 
	ServiceObjectManager som = new ServiceObjectManager( con, NPAY_MID ) ;
 
 
	services = som.getServiceObjectList( cid, 0, 0, 0 );
	object = null;
 
	//TODO - переделать так чтобы искал в нужно врменном отрезке, а не последнюю незакрытую 
	if ( services.size() > 0)
	{
		//ищем последнюю не закрытую ..  
		Date maxdate = new Date (0 );
		for ( ServiceObject  o : services )
		{
			if ( o.getDate2() == null && o.getDate1().compareTo( maxdate) >= 0   ) 
			{
				maxdate = o.getDate1();
				object = o;
			}
		}
 
	}	
 
 
	createNew = true;
   //Если нашли , то закрываем предыдушим днем
	if ( object != null)
	{
 
		if ( object.getDate1().compareTo( date ) < 0 )
		{
			print ("close pay service...");
			Calendar stopDate = getPrevDate( date) ;
 
			object.setDate2( stopDate.getTime() );
			print ("object.Date2=" + object.getDate2() );
 
			som.updateServiceObject( object );
		}
		//если открыт сегодняшним числом  - ничего не делаем
		else  if ( object.getDate1().compareTo( date ) == 0 )
		{
			print ("update pay service...");
			createNew = false;						
			object.setComment( "Установлена скриптом" );
			som.updateServiceObject( object );
 
		}
	}
 
 
	if ( createNew )
	{
		// установка абонплаты
		print ("add pay service...");	
		object = new ServiceObject();
		object.setContractId( cid );
		object.setServiceId( PAY_SERVICE );
		object.setDate1( date );
		object.setComment( "Установлена скриптом" );
		som.updateServiceObject( object );
	}
 
}
 
private void setStatus( cid, date, statusId )
{
	status = new ContractStatus();
	status.setContractId( cid );
	status.setStatus( statusId );
	status.setDate1( TimeUtils.convertDateToCalendar( date ) );
	status.setComment( "установлен скриптом " );	
	sm = new ContractStatusManager( con );
	sm.changeStatus( status.clone(), USER_ID );	
}
 
//id услуги абонплат
PAY_SERVICE = 1;
NPAY_MID = 1;
 
 
TARIFF_BASE_ID = 103315;
TARIFF_LOCAL_ID = 103317;
TARIFF_EFIR_ID = 103316;
TARIFF_SERVICE_ID = 103312;
 
//id пользователя от имени которого будет изменяться статус договора 
USER_ID = 0;
 
 
service = event.getContractService();
serviceId = service.getServiceId();
cid = event.getContractID();
print ("serviceId=" + serviceId);
date = service.getDate().getTime();
 
switch(serviceId)
 
{
//Подключение к сети КТВ на Базовый тариф (стоимость 330 рублей) – начинала начисляться абонплата и у абонента появлялся Базовый тариф.
case 5: setTariff(cid, TARIFF_BASE_ID, date); addNPayService( date );  break;
//Подключение к сети КТВ на Эфирный тариф (стоимость 330 рублей) – начинала начисляться абонплата и у абонента появлялся Эфирный тариф.
case 6: setTariff(cid, TARIFF_EFIR_ID, date); addNPayService( date ); break;
//Подключение к сети КТВ на Локальный тариф (стоимость 330 рублей) – начинала начисляться абонплата и у абонента появлялся Локальный тариф.
case 23: setTariff(cid, TARIFF_LOCAL_ID, date); addNPayService( date ); break;
//Подключение к сети КТВ на Служебный тариф (стоимость 0 рублей) – начинала начисляться абонплата и у абонента появлялся Служебный тариф.
case 7:  setTariff(cid, TARIFF_SERVICE_ID, date); addNPayService( date ); break;
//Льготное подключение к сети КТВ на Базовый тариф (0) – начинала начисляться абонплата и у абонента появлялся Базовый тариф.
case 8: setTariff(cid, TARIFF_BASE_ID, date); addNPayService( date );  break;
//Льготное подключение к сети КТВ на Эфирный тариф (0) – начинала начисляться абонплата и у абонента появлялся Эфирный тариф.
case 9:  setTariff(cid, TARIFF_EFIR_ID, date); addNPayService( date ); break;
//Льготное подключение к сети КТВ на Локальный тариф (0) – начинала начисляться абонплата и у абонента появлялся Локальный тариф.
case 10:  setTariff(cid, TARIFF_LOCAL_ID, date); addNPayService( date ); break;
//50 % подключение к сети КТВ на Базовый тариф (165) – начинала начисляться абонплата и у абонента появлялся Базовый тариф.
case 11:  setTariff(cid, TARIFF_BASE_ID, date); addNPayService( date ); break;
//50 % подключение к сети КТВ на Эфирный тариф (165) – начинала начисляться абонплата и у абонента появлялся Эфирный тариф.
case 12:  setTariff(cid, TARIFF_EFIR_ID, date); addNPayService( date ); break;
//50 % подключение к сети КТВ на Локальный тариф (165) – начинала начисляться абонплата и у абонента появлялся Локальный тариф.
case 13:  setTariff(cid, TARIFF_LOCAL_ID, date); addNPayService( date ); break;
//Повторное подключение к сети КТВ (100 рублей)  состояние переходит в активен
case 14:  setStatus(cid, date, KernelConst.CONTRACT_STATUS_ACTIVE); break;
//Бесплатное повторное подключение к сети КТВ (0 рублей) - состояние переходит в активен
case 15: setStatus(cid, date, KernelConst.CONTRACT_STATUS_ACTIVE); break;
//Переключение на Эфирный тариф (150) – у абонента вместо какого-либо тарифа появлялся Эфирный тариф.
case 16: setTariff(cid, TARIFF_EFIR_ID, date); break;
//Бесплатное переключение на Эфирный тариф (0) – у абонента вместо какого-либо тарифа появлялся Эфирный тариф.
case 17: setTariff(cid, TARIFF_EFIR_ID, date); break;
//Переключение на Базовый тариф (0) – у абонента вместо какого-либо тарифа появлялся Базовый тариф.
case 18: setTariff(cid, TARIFF_BASE_ID, date); break;
//Переключение на Локальный тариф (0) – у абонента вместо какого-либо тарифа появлялся Локальный тариф.
case 19: setTariff(cid, TARIFF_LOCAL_ID, date); break;
//Переключение на Служебный тариф (0) – у абонента вместо какого-либо тарифа появлялся Служебный тариф.
case 20: setTariff(cid, TARIFF_SERVICE_ID, date); break;
//Приостановление действия договора (0) –  статус абонента переводился в «приостановлен».
case 21: setStatus(cid, date, KernelConst.CONTRACT_STATUS_SUSPENDED); break;
//Расторжение договора (0) - статус абонента переводился в «закрыт».
case 22: setStatus(cid, date, KernelConst.CONTRACT_STATUS_CLOSED); break;
}
Личные инструменты