forum.bitel.ru http://forum.bitel.ru/ |
|
Доработка модуля NPAY 5.2 http://forum.bitel.ru/viewtopic.php?f=1&t=7437 |
Страница 1 из 1 |
Автор: | lda [ 19 ноя 2012, 13:18 ] |
Заголовок сообщения: | Доработка модуля NPAY 5.2 |
Ув. разработчики, интересует возможность, стоимость и сроки доработки API модуля NPAY 5.2 Я уже приводил код для определения размера абонплаты и режима списания: Код: package ru.ttk.billing.event.GlobalScript; import bitel.billing.common.TimeUtils; import bitel.billing.server.npay.bean.ServiceObject; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Calendar; import java.util.Collections; import java.util.List; import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase; import ru.bitel.bgbilling.kernel.tariff.tree.server.TariffModuleTree; import ru.bitel.bgbilling.kernel.tariff.tree.server.TariffModuleTreeSet; import ru.bitel.bgbilling.kernel.tariff.tree.server.TariffModuleTreeSetDao; import ru.bitel.bgbilling.modules.npay.tariff.server.NPayTariffContext; import ru.bitel.bgbilling.modules.npay.tariff.server.NPayTariffRequest; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.Preferences; import ru.bitel.common.model.Period; import ru.bitel.common.sql.ConnectionSet; /** * * @author lda */ public class test extends GlobalScriptBase{ @Override public void execute( Setup setup, ConnectionSet connectionSet ) throws Exception{ int cid = 79343; int mid = 7; Calendar dt = TimeUtils.clear_HOUR_MIN_MIL_SEC(Calendar.getInstance()); Calendar startMonth = TimeUtils.getStartMonth( dt ); Calendar endMonth = TimeUtils.getEndMonth( dt ); int daysInMonth = startMonth.getActualMaximum( Calendar.DAY_OF_MONTH ); Connection con = connectionSet.getConnection(); Connection conSlave = connectionSet.getSlaveConnection(); try { TariffModuleTreeSetDao tariffModuleTreeSetDao = new TariffModuleTreeSetDao( con ); Preferences moduleSetup = setup.getModuleSetup( mid ); NPayTariffContext context = new NPayTariffContext( moduleSetup, con, mid, startMonth, endMonth, endMonth, String.valueOf(cid), null ); context.setPrecalcOpenPeriod( new Period( TimeUtils.convertCalendarToDate( startMonth ), null ) ); String query = "SELECT cid, sid, col, emid, eid " + "FROM npay_service_object_" + mid + " " + "WHERE (date1 IS NULL OR date1<=?) AND (date2 IS NULL OR date2>=?) "; query += " AND cid IN (" + cid + ")"; query += " ORDER BY cid, sid"; PreparedStatement ps = conSlave.prepareStatement( query ); ps.setDate( 1, TimeUtils.convertCalendarToSqlDate( dt ) ); ps.setDate( 2, TimeUtils.convertCalendarToSqlDate( dt ) ); ResultSet rs = ps.executeQuery(); while( rs.next() ){ ServiceObject serviceObject = new ServiceObject(); serviceObject.setContractId( rs.getInt( 1 ) ); serviceObject.setServiceId( rs.getInt( 2 ) ); serviceObject.setDate1( TimeUtils.convertCalendarToDate(startMonth )); serviceObject.setDate2( TimeUtils.convertCalendarToDate(endMonth ) ); serviceObject.setCol( rs.getInt( 3 ) ); serviceObject.setEntityMid( rs.getInt( 4 ) ); serviceObject.setEntityId( rs.getInt( 5 ) ); int emid = serviceObject.getEntityMid(); int eid = serviceObject.getEntityId(); int col = serviceObject.getCol(); int sid = serviceObject.getServiceId(); Calendar serviceStart = TimeUtils.convertDateToCalendar( serviceObject.getDate1() ); Calendar serviceEnd = TimeUtils.convertDateToCalendar( serviceObject.getDate2() ); Calendar date1 = (Calendar)serviceStart.clone(); Calendar date2 = (Calendar)serviceEnd.clone(); TariffModuleTreeSet tts = tariffModuleTreeSetDao.getTariffTreeSetForDay(cid, dt, "npay", mid, emid, eid); for( TariffModuleTreeSet.Entry tariffPeriod : tts.entries() ){ List<NPayTariffRequest.NPayServiceCost> serviceCostList = Collections.singletonList( new NPayTariffRequest.NPayServiceCost( sid, serviceStart, serviceEnd, date1, date2, col ) ); NPayTariffRequest req = new NPayTariffRequest( mid, cid, sid ); req.setInfoEnable( true ); req.setConnectionSet( connectionSet ); req.setAccountingMonthDays( daysInMonth ); req.setTime( date1 ); req.setServiceCost( sid, serviceCostList); final TariffModuleTree tree = tariffPeriod.getTree(); tree.execute( req, context ); if( req.isAccepted() ){ boolean isDayMode = req.toString().indexOf("Day mode") != -1; for( NPayTariffRequest.NPayServiceCost serviceCost : req.getServiceCostList() ){ print("cost="+serviceCost.cost); print("isDayMode="+isDayMode); } } } } ps.close(); tariffModuleTreeSetDao.freeResources(); }catch( Exception e ){ e.printStackTrace(); } } } Нам требуется: 1. Получать размер абонплаты напрямую из тарифа, а не так как сейчас. Сейчас для получения размера абонплаты приходится указывать, что тариф и услуга действуют весь месяц и договор активен весь месяц. 2. Режим списания. 3. Если режим списания дневной, то требуется раскладка по дням, в какой день, какая сумма была списана. 2 и 3 пункт у Вас уже есть в req.toString(), но к сожалению в текстовом виде. Новый функционал можно добавить в NPayTariffRequest.NPayServiceCost serviceCost |
Автор: | Cromeshnic [ 19 ноя 2012, 14:00 ] |
Заголовок сообщения: | Re: Доработка модуля NPAY 5.2 |
Цитата: 3. Если режим списания дневной, то требуется раскладка по дням, в какой день, какая сумма была списана. Я у себя запускаю последовательно 30 тарифных запросов и беру дельту. Правда если такое запустить по всем договорам, то шедулер делает нам ручкой. |
Автор: | lda [ 19 ноя 2012, 15:14 ] |
Заголовок сообщения: | Re: Доработка модуля NPAY 5.2 |
Cromeshnic писал(а): Цитата: 3. Если режим списания дневной, то требуется раскладка по дням, в какой день, какая сумма была списана. Я у себя запускаю последовательно 30 тарифных запросов и беру дельту. Правда если такое запустить по всем договорам, то шедулер делает нам ручкой. req.toString() уже выдает раскладку по дням, следовательно это уже рассчитано и лишней нагрузки не будет. Я всего лишь прошу дать возможность получить раскладку по дням в удобном виде. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |