BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 04 июл 2025, 21:03

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




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Нужна помощь разработчиков !!!
СообщениеДобавлено: 27 дек 2009, 02:48 
Не в сети

Зарегистрирован: 04 апр 2008, 13:13
Сообщения: 87
Карма: 0
Ситуация следующая, пытаюсь приспособить БГ под следующую схему.
Необходимо в последний день месяца заблокировать всех абонентов у кого нет средств, что бы перейти в следующий месяц.
Фишка именно в том, что обработка должна быть выполнена именно в последний день месяца а не 1 числа. Я написал небольшой скрипт, но тут момент, система мне выдает сумму которую она снимает у абонента в текущем месяце а не в следующем. А меня интересует сумма которая будет снята в следующем месяце.

Попробую детальней.
У абонента услуг подключенных на 100 руб. На счету 100 руб. 31 дек. я должен обработать увидеть что у абонента деньги есть и оставить его активным, либо если у него денег нет я его приостанавливаю. Теперь момент. Например в декабре услуг было подключено у абонента на 200 рублей. А с первого января уже на 100 рублей, например он отказался от одной из услуг. Скрипт мне все равно выдает сумму декабрьскую. Скрипт видя что услуг подключенных на 200 рублей, а на счету 100 блокирует абонента. Вопрос как получить сумму именно ту которую БГ начислит абоненту в январе.
Код:
import bitel.billing.server.util.*;
import bitel.billing.server.tariff.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.contract.bean.ContractManager;
import bitel.billing.server.contract.bean.Contract;
import bitel.billing.server.tariff.TariffTreeSet;
import bitel.billing.server.tariff.TariffModuleTree;
import bitel.billing.server.tariff.TariffRequest;



public void main( setup, con, conSlave )
{
      query = "select c.id from contract c join contract_module cm on c.id=cm.cid where (gr&1<<17)=0 and cid=22";
        firstDayByTextMonth = new GregorianCalendar();
        firstDayByTextMonth.add(Calendar.MONTH, 1);
        firstDayByTextMonth.set(Calendar.DAY_OF_MONTH, 1);
        print(new Date(firstDayByTextMonth.getTimeInMillis()));
        prep = con.prepareStatement(query);
        rs = prep.executeQuery();
      sum = 0;
        while (rs.next()) {
            cid = rs.getInt(1);
         //print("Обработка контракта c ид="+cid);
            prep2 = con.prepareStatement("select sid, col from npay_service_object_1 where cid=" + cid);
            rs2 = prep2.executeQuery();
            while (rs2.next()) {
                sid = rs2.getInt(1);
                col = rs2.getInt(2);
                if (col != 0) {
                    contract = new ContractManager(con).getContractByID(cid);
                    tts = new ContractManager(con).getRealtimeTariffTreeSet(cid, firstDayByTextMonth, "npay", 1, true);               
                    for (TariffModuleTree tree : tts.getTreeList(firstDayByTextMonth)) {
                        req_cost = new TariffRequest();
                        req_cost.setRequestParam("action", "calculate");
                        req_cost.setRequestParam("sid", sid);
                        req_cost.setRequestParam("month_days", 1);
                        req_cost.setRequestParam("period_days", 1);
                        req_cost.setRequestParam("time", firstDayByTextMonth);
                   req_cost.setRequestParam("date", firstDayByTextMonth);
                        tree.processRequest(req_cost);
                        cost = (Double) req_cost.getResponseParam("cost");
                        cost_type = req_cost.getResponseParam("cost_type");

                        req_calc_mode = new TariffRequest();
                        req_calc_mode.setRequestParam("action", "reset");
                        req_calc_mode.setRequestParam("sid", sid);
                        req_calc_mode.setRequestParam("time", firstDayByTextMonth);
                    req_calc_mode.setRequestParam("date", firstDayByTextMonth);
                        tree.processRequest(req_calc_mode);
                        calc_mode = (String) req_calc_mode.getResponseParam("calc_mode");
                        calc_type = req_calc_mode.getResponseParam("calc_type");
                        if (cost == null || calc_mode == null) {
                     error("Параметры абонплаты не найдены");
                        }
                   //print(cost);print(calc_mode);print(calc_type);print(cost_type);
                    sum = sum + cost * col;
                    }               
                }
            }
         print(cid+" - " +sum);
        }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужна помощь разработчиков !!!
СообщениеДобавлено: 28 дек 2009, 11:47 
Не в сети

Зарегистрирован: 05 окт 2007, 13:36
Сообщения: 1073
Карма: 46
Как насчет тут
Код:
prep2 = con.prepareStatement("select sid, col from npay_service_object_1 where cid=" + cid);

date1 и date2 учитывать?

_________________
интеграция биллинга с 1с http://bgbilling-1c.ru/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужна помощь разработчиков !!!
СообщениеДобавлено: 10 янв 2010, 15:22 
Не в сети

Зарегистрирован: 04 апр 2008, 13:13
Сообщения: 87
Карма: 0
У меня же проблема в другом месте.
tree.processRequest(req_cost)
вот здесь мне надо что бы обработчик рассчитал абонентскую плату не текущую, а на заданную дату с учетом параметров которые будут актуальны именно на заданную дату.
Цитата:
У абонента услуг подключенных на 100 руб. На счету 100 руб. 31 дек. я должен обработать увидеть что у абонента деньги есть и оставить его активным, либо если у него денег нет я его приостанавливаю. Теперь момент. Например в декабре услуг было подключено у абонента на 200 рублей. А с первого января уже на 100 рублей, например он отказался от одной из услуг. Скрипт мне все равно выдает сумму декабрьскую. Скрипт видя что услуг подключенных на 200 рублей, а на счету 100 блокирует абонента. Вопрос как получить сумму именно ту которую БГ начислит абоненту в январе.

Смотрите при расчете мне возвращается что у абонента абонплата на 200 рублей. Т.к. рассчитывается абонплата на текущий момент времени, а не на 1 января. Мне нужно что бы конструкция tree.processRequest(req_cost) вернула мне сумму которая будет списана у абонента именно 1 января. Понимаете ???


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужна помощь разработчиков !!!
СообщениеДобавлено: 11 янв 2010, 13:48 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Цитата:
tree.processRequest(req_cost)
вот здесь мне надо что бы обработчик рассчитал абонентскую плату не текущую, а на заданную дату с учетом параметров которые будут актуальны именно на заданную дату.


Задача понятна, только в данный момент кода такого нет.

Будет решена в рамках реализации классического дебета. См. тему:
viewtopic.php?f=16&t=2386&start=90

Описание алгоритма там на 7ой странице, мой пост.


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

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