Пример конвертера данных из csv-файлов в базу BGBilling
Материал из BiTel WiKi
Версия биллинга 5.0.
Осуществляется конвертация базы VPN клиентов из CSV файла с полями:
- ФИО
- Номер договора
- Дата создания договора
- логин(алиас)
- пароль для доступа на vpn-сервер(pptp)
- 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 ); } } }