Примерно так:
Код:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
import bitel.billing.server.call.bean.CardCallUtils;
import bitel.billing.server.call.bean.LoginUtils;
import bitel.billing.server.card.bean.Card;
import bitel.billing.server.card.bean.CardManager;
int voiceipMid = 1;
int dialupMid = 2;
// кол-во одновременных сессий
int sessionCol = 1;
PreparedStatement ps = con.prepareStatement( "SELECT id FROM card_data_5 WHERE cid=? AND status=?" );
ps.setInt( 1, cid );
ps.setInt( 2, Card.CARD_ACTIVATE_CONTRACT );
ResultSet rs = ps.executeQuery();
if( rs.next() )
{
int cardId = rs.getInt( 1 );
CardManager cm = new CardManager( setup, mid );
List<Card> cards = cm.getCards( String.valueOf( cardId ) );
Card card = cards.get( 0 );
// если нет dialup логина
LoginUtils lu = LoginUtils.getLoginUtils( "dialup", con, dialupMid, setup );
if( lu.getContractLogins( cid ).size() == 0 )
{
int loginId = new CardCallUtils( con, dialupMid ).createLogin( cid, card, sessionCol );
}
// если нет voiceip логина
lu = LoginUtils.getLoginUtils( "voiceip", con, voiceipMid, setup );
if( lu.getContractLogins( cid ).size() == 0 )
{
int loginId = new CardCallUtils( con, voiceipMid ).createLogin( cid, card, sessionCol );
}
}
Однако следует учитывать, что при звонке voip по протоколу максимум минут, в течение которых может длится звонок, отправляются в начале разговора. Т.е. во время разговора есть возможность потратить остаток по другой услуге, при этом звонок не прервется при достижении лимита.