BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 18 май 2024, 20:17

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Доработка модуля NPAY 5.2
СообщениеДобавлено: 19 ноя 2012, 13:18 
Не в сети
Клиент

Зарегистрирован: 20 мар 2008, 20:20
Сообщения: 676
Откуда: Россия, Иваново
Карма: 36
Ув. разработчики, интересует возможность, стоимость и сроки доработки 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


Последний раз редактировалось lda 19 ноя 2012, 18:31, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Доработка модуля NPAY 5.2
СообщениеДобавлено: 19 ноя 2012, 14:00 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Цитата:
3. Если режим списания дневной, то требуется раскладка по дням, в какой день, какая сумма была списана.

Я у себя запускаю последовательно 30 тарифных запросов и беру дельту.
Правда если такое запустить по всем договорам, то шедулер делает нам ручкой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Доработка модуля NPAY 5.2
СообщениеДобавлено: 19 ноя 2012, 15:14 
Не в сети
Клиент

Зарегистрирован: 20 мар 2008, 20:20
Сообщения: 676
Откуда: Россия, Иваново
Карма: 36
Cromeshnic писал(а):
Цитата:
3. Если режим списания дневной, то требуется раскладка по дням, в какой день, какая сумма была списана.

Я у себя запускаю последовательно 30 тарифных запросов и беру дельту.
Правда если такое запустить по всем договорам, то шедулер делает нам ручкой.


req.toString() уже выдает раскладку по дням, следовательно это уже рассчитано и лишней нагрузки не будет.
Я всего лишь прошу дать возможность получить раскладку по дням в удобном виде.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.033s | 22 Queries | GZIP : On ]