Обработка события "добавление услуги RSCM в договор" . Скипт сменяет тариф, подключает абонплату
Материал из BiTel WiKi
(Различия между версиями)
Stark (Обсуждение | вклад) |
|||
Строка 30: | Строка 30: | ||
import java.util.*; | import java.util.*; | ||
import bitel.billing.common.*; | 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 ) | private getPrevDate( date ) | ||
{ | { | ||
Calendar result = new GregorianCalendar(); | Calendar result = new GregorianCalendar(); | ||
- | result.setTime( date | + | result.setTime( date ); |
result.add( Calendar.DAY_OF_YEAR, -1 ); | result.add( Calendar.DAY_OF_YEAR, -1 ); | ||
return result; | return result; | ||
Строка 47: | Строка 50: | ||
//пытаемся найти на текущий момент тариф | //пытаемся найти на текущий момент тариф | ||
- | + | list = ctm.getContractTariffList(cid, date); | |
+ | if ( list.size() > 0) | ||
+ | { | ||
+ | t = list.get(0); | ||
+ | } | ||
+ | |||
//Если нашли , то закрываем предыдушим днем | //Если нашли , то закрываем предыдушим днем | ||
createNew = true; | createNew = true; | ||
+ | changed = false; | ||
if ( t != null) | if ( t != null) | ||
{ | { | ||
- | if ( t.getDate1() == null || t.getDate1().compareTo( date ) < 0 ) | + | if ( t.getDate1() == null || t.getDate1().getTime().compareTo( date ) < 0 ) |
{ | { | ||
print ("close tariff.."); | print ("close tariff.."); | ||
+ | changed = true; | ||
Calendar stopDate = getPrevDate( date) ; | Calendar stopDate = getPrevDate( date) ; | ||
t.setDate2( stopDate ); | t.setDate2( stopDate ); | ||
- | ctm.updateContractTariff( | + | ctm.updateContractTariff( t ); |
} | } | ||
//если открыт сегодняшним числом - ничего не делаем | //если открыт сегодняшним числом - ничего не делаем | ||
- | else if ( t.getDate1().compareTo( date ) == 0 ) | + | else if ( t.getDate1().getTime().compareTo( date ) == 0 ) |
{ | { | ||
print ("update tariff "); | print ("update tariff "); | ||
createNew = false; | createNew = false; | ||
+ | changed = true; | ||
t.setTariffPlanID( tariffId ); | t.setTariffPlanID( tariffId ); | ||
t.setComment( "создан автоматически" ); | t.setComment( "создан автоматически" ); | ||
- | ctm.updateContractTariff | + | ctm.updateContractTariff( t ); |
+ | |||
} | } | ||
} | } | ||
Строка 76: | Строка 88: | ||
{ | { | ||
print ("add new tariff.."); | print ("add new tariff.."); | ||
+ | changed = true; | ||
t = new ContractTariff(); | t = new ContractTariff(); | ||
t.setContractID( cid ); | t.setContractID( cid ); | ||
t.setTariffPlanID( tariffId ); | t.setTariffPlanID( tariffId ); | ||
t.setPos( 0 ); | t.setPos( 0 ); | ||
- | t.setDate1( date ); | + | t.setDate1( TimeUtils.convertDateToCalendar( date ) ); |
t.setDate2( null ); | t.setDate2( null ); | ||
t.setComment( "создан автоматически" ); | t.setComment( "создан автоматически" ); | ||
- | ctm.updateContractTariff( | + | 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 ) | private addNPayService( date ) | ||
{ | { | ||
+ | addNpayModule(); | ||
- | + | ServiceObjectManager som = new ServiceObjectManager( con, NPAY_MID ) ; | |
- | + | ||
- | + | ||
- | services = | + | 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; | createNew = true; | ||
//Если нашли , то закрываем предыдушим днем | //Если нашли , то закрываем предыдушим днем | ||
- | if ( | + | if ( object != null) |
{ | { | ||
- | if ( | + | if ( object.getDate1().compareTo( date ) < 0 ) |
{ | { | ||
- | |||
- | |||
print ("close pay service..."); | print ("close pay service..."); | ||
Calendar stopDate = getPrevDate( date) ; | Calendar stopDate = getPrevDate( date) ; | ||
- | + | object.setDate2( stopDate.getTime() ); | |
- | + | print ("object.Date2=" + object.getDate2() ); | |
+ | |||
+ | som.updateServiceObject( object ); | ||
} | } | ||
//если открыт сегодняшним числом - ничего не делаем | //если открыт сегодняшним числом - ничего не делаем | ||
- | else if ( | + | else if ( object.getDate1().compareTo( date ) == 0 ) |
{ | { | ||
print ("update pay service..."); | print ("update pay service..."); | ||
createNew = false; | createNew = false; | ||
- | + | object.setComment( "Установлена скриптом" ); | |
- | + | som.updateServiceObject( object ); | |
} | } | ||
} | } | ||
+ | |||
if ( createNew ) | if ( createNew ) | ||
Строка 138: | Строка 176: | ||
// установка абонплаты | // установка абонплаты | ||
print ("add pay service..."); | print ("add pay service..."); | ||
- | + | object = new ServiceObject(); | |
- | + | object.setContractId( cid ); | |
- | + | object.setServiceId( PAY_SERVICE ); | |
- | + | object.setDate1( date ); | |
- | + | object.setComment( "Установлена скриптом" ); | |
- | + | som.updateServiceObject( object ); | |
} | } | ||
- | |||
} | } | ||
Строка 153: | Строка 190: | ||
status = new ContractStatus(); | status = new ContractStatus(); | ||
status.setContractId( cid ); | status.setContractId( cid ); | ||
- | |||
status.setStatus( statusId ); | status.setStatus( statusId ); | ||
- | status.setDate1( date ); | + | status.setDate1( TimeUtils.convertDateToCalendar( date ) ); |
status.setComment( "установлен скриптом " ); | status.setComment( "установлен скриптом " ); | ||
sm = new ContractStatusManager( con ); | sm = new ContractStatusManager( con ); | ||
- | sm.changeStatus( status.clone() ); | + | sm.changeStatus( status.clone(), USER_ID ); |
} | } | ||
//id услуги абонплат | //id услуги абонплат | ||
PAY_SERVICE = 1; | PAY_SERVICE = 1; | ||
+ | NPAY_MID = 1; | ||
Строка 170: | Строка 207: | ||
TARIFF_SERVICE_ID = 103312; | TARIFF_SERVICE_ID = 103312; | ||
- | //id пользователя от имени которого будет изменяться статус договора | + | //id пользователя от имени которого будет изменяться статус договора |
- | USER_ID = | + | USER_ID = 0; |
Строка 178: | Строка 215: | ||
cid = event.getContractID(); | cid = event.getContractID(); | ||
print ("serviceId=" + serviceId); | print ("serviceId=" + serviceId); | ||
- | date = service.getDate(); | + | date = service.getDate().getTime(); |
switch(serviceId) | switch(serviceId) | ||
Строка 203: | Строка 240: | ||
//50 % подключение к сети КТВ на Локальный тариф (165) – начинала начисляться абонплата и у абонента появлялся Локальный тариф. | //50 % подключение к сети КТВ на Локальный тариф (165) – начинала начисляться абонплата и у абонента появлялся Локальный тариф. | ||
case 13: setTariff(cid, TARIFF_LOCAL_ID, date); addNPayService( date ); break; | case 13: setTariff(cid, TARIFF_LOCAL_ID, date); addNPayService( date ); break; | ||
- | //Повторное подключение к сети КТВ (100 рублей) | + | //Повторное подключение к сети КТВ (100 рублей) состояние переходит в активен |
- | case 14: | + | case 14: setStatus(cid, date, KernelConst.CONTRACT_STATUS_ACTIVE); break; |
- | //Бесплатное повторное подключение к сети КТВ (0 рублей) | + | //Бесплатное повторное подключение к сети КТВ (0 рублей) - состояние переходит в активен |
- | case 15: | + | case 15: setStatus(cid, date, KernelConst.CONTRACT_STATUS_ACTIVE); break; |
//Переключение на Эфирный тариф (150) – у абонента вместо какого-либо тарифа появлялся Эфирный тариф. | //Переключение на Эфирный тариф (150) – у абонента вместо какого-либо тарифа появлялся Эфирный тариф. | ||
case 16: setTariff(cid, TARIFF_EFIR_ID, date); break; | case 16: setTariff(cid, TARIFF_EFIR_ID, date); break; | ||
Строка 222: | Строка 259: | ||
case 22: setStatus(cid, date, KernelConst.CONTRACT_STATUS_CLOSED); break; | case 22: setStatus(cid, date, KernelConst.CONTRACT_STATUS_CLOSED); break; | ||
} | } | ||
+ | |||
</source> | </source> |
Текущая версия на 12:21, 14 декабря 2009
Необходимо ,было сделать, чтобы следующие услуги автоматически меняли статус абонента и/или тариф:
- Подключение к сети КТВ на Базовый тариф (стоимость 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; }