Пример конвертера данных из csv-файлов в базу BGBilling

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

Перейти к: навигация, поиск

Версия биллинга 5.0.

Осуществляется конвертация базы VPN клиентов из CSV файла с полями:

  1. ФИО
  2. Номер договора
  3. Дата создания договора
  4. логин(алиас)
  5. пароль для доступа на vpn-сервер(pptp)
  6. id тарифного плана (из уже существующих в базе)

Конвертер реализуется в виде глобального скрипта поведения:

import bitel.billing.server.util.*;
import com.Ostermiller.util.*;
import java.util.*;
import bitel.billing.common.*;
import java.io.*;
import java.sql.*;
import bitel.billing.server.dialup.bean.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.contract.*;
import ru.bitel.bgbilling.server.util.*;
 
public void main( setup, con, conSlave )
{
	String	FILE = "/home/bitel/1C_VPN_TI_final.csv";
	Map TARIFF_MAP = new HashMap();
	int PATTERN_ID = 1;
	int LOADED_GROUP = 12;
	int DIALUP_MID = 4;
 
	// загрузка соотношения тариф->ID тарифа
	String query = "SELECT title, id FROM tariff_plan";
	PreparedStatement ps = con.prepareStatement( query );
	ResultSet rs = ps.executeQuery();
	while( rs.next() )
	{
		TARIFF_MAP.put( rs.getString(1).toLowerCase(), rs.getInt(2) );
	}
	ps.close();
 
	ContractManager cm = new ContractManager( con );
	DialUpLoginManager lm = new DialUpLoginManager( con, DIALUP_MID );
	ContractTariffManager ctm = new ContractTariffManager( con );
	ContractRemover cr = new ContractRemover( Setup.getSetup(), con, null );
 
	// удаление ранее загруженных договоров
	query = "SELECT	id FROM  contract WHERE gr & (1<<?) != 0 ";
	ps  = con.prepareStatement( query );
	ps.setInt( 1, LOADED_GROUP );
	rs = ps.executeQuery();
 
	int count = 0;
	while ( rs.next() )
	{
		int cid = rs.getInt( 1 );
		cr.deleteContract( cid );
		count ++;				
	}
	ps.close();
	//
	print( "Removed " + count + " contracts.." );
 
	int rowNum = 0;
 
	String[][] data = ExcelCSVParser.parse( new InputStreamReader( new FileInputStream( FILE ), "UTF-8" ) , ',' );
	if( data != null && data.length > 0 )
	{
		final int rowCount = data.length;
		for( rowNum = 0; rowNum < rowCount; rowNum++ )
                {
			String[] fields = data[rowNum];
			if( fields.length < 6 )
			{
				error( "Incorrect line " + rowNum );
				continue;
			} 
 
			/*
			if( rowNum > 1 )
			{
				print( "Break" );
				break;
			}
			*/
 
			String fio = fields[0];
			String contractTitle = fields[1];
			java.util.Date createDate = TimeUtils.parseDate( fields[2], "dd.MM.yy" );
			String alias = fields[3];
			String pswd = fields[4];
			String tariffName = fields[5].toLowerCase();
 
			print( "FIO: " + fio + "; contract: " + contractTitle );			
			//
			// тариф
			Integer tpid = TARIFF_MAP.get( tariffName );
			if( tpid == null )
			{
				error( "Line " + rowNum + " can't find tariff " + tariffName );
				continue;
			}
			//
			// создание договора
			Contract contract = cm.createFromPattern( PATTERN_ID, contractTitle, TimeUtils.convertDateToCalendar( createDate ), pswd );
			contract.setComment( fio );
			cm.updateContract( contract );
			//
			//	установка тарифа
			ContractTariff tariff = new ContractTariff();
			tariff.setContractID( contract.getID() );
			tariff.setTariffPlanID( tpid );
			tariff.setComment( "" );
			tariff.setDate1( TimeUtils.convertDateToCalendar( createDate ) );
			ctm.updateContractTariff( tariff );
			//
			// создание логина
			DialUpLogin login = new DialUpLogin();
			login.setCid( contract.getID() );
			login.setStatus( true );
			login.setMaxSession( 1 );
			login.setPswd( pswd );
			login.setDate1( createDate );
			login.setComment( "" );
			//
			login = lm.addLogin( login, Setup.getSetup().getModuleSetup( DIALUP_MID ) );
			Set aliases = new HashSet();
			aliases.add( alias );
			lm.updateAliases( login.getId(), aliases );			
		}
	}			
}
Личные инструменты