Отключение Fake сессий при приходе платежа

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

Версия от 08:56, 20 января 2012; Admin (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Для версии 5.1 сброс Reject-To-Accept сессий при приходе платежа в договор либо понижении лимита в случае если баланс превышает лимит.

import bitel.billing.server.contract.bean.*;
import ru.bitel.bgbilling.server.util.*;
import java.math.*;
import java.util.*;
import java.sql.*;
 
int MID = 8;
 
public void onEvent( event, setup, con, conSlave )
{
	Payment payment = event.getPayment();
	int contractId = payment.getContractID();
	java.util.Date date = event.getGenerateTime().getTime();
	BigDecimal summa = payment.getSumma();
 
	BalanceUtils bu = new BalanceUtils( con );
 
	BigDecimal balance = bu.getBalance( date, contractId );
	if( balance.compareTo( BigDecimal.ZERO ) > 0 /*&& summa.compareTo( balance ) > 0*/ )
	{
		int count = 0;
 
		String tableName = ServerUtils.getModuleMonthTableName( "log_session", date, MID );
		if( ServerUtils.tableExists( con, tableName ) )
		{
			String query = 
				"SELECT session.id FROM " + tableName + " AS session " +
				"INNER JOIN user_login_" + MID + " AS login ON session.lid=login.id AND login.cid=? " +
				"WHERE session.status=0 AND fake=1";
			PreparedStatement ps = con.prepareStatement( query );
			ps.setInt( 1, contractId );
			ResultSet rs = ps.executeQuery();
			while( rs.next() )
			{
				int recordId = rs.getInt( 1 );
				count++;
 
				print( "Killing " + recordId );
 
				BillingEventBus.publish( new DialupSessionBreakEvent( MID, recordId ) );								
			}
		}
 
		print( "Сброшено " + count + " сессий." );		
	}
}
Личные инструменты