Отключение 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 + " сессий." ); } }