forum.bitel.ru
http://forum.bitel.ru/

Помощь по реализации скрипта тариф + стоимость
http://forum.bitel.ru/viewtopic.php?f=19&t=8812
Страница 1 из 1

Автор:  Dipress [ 05 янв 2014, 23:16 ]
Заголовок сообщения:  Помощь по реализации скрипта тариф + стоимость

Добрый вечер. С наступившим!

Необходима консультация, либо указать в какую сторону копать. К сожалению в Java не силен (вообще). Задача состоит в следующем:
Есть, к примеру, такой вот тариф:
Вложение:
example-tariff.png
example-tariff.png [ 25.11 КБ | Просмотров: 17459 ]


В узле "Абонплаты" установлен период действия абонплаты и стоимость. Нужно каким-то образом получить из этого тарифа его название и текущую стоимость в узле Абонплаты, т.е. Тариф - стоимость. И так для каждого подобного тарифа.

Получить название всех тарифов, вроде бы не сложно:
Код:
import org.w3c.dom.*;
import bitel.billing.server.tariff.voice.calc.*;
import bitel.billing.server.task.bean.*;
import java.math.*;
import ru.bitel.bgbilling.kernel.network.radius.*;
import bitel.billing.server.npay.bean.*;
import bitel.billing.server.npay.*;
import bitel.billing.server.tariff.TariffTreeSet.TariffSetEntry;
import ru.bitel.bgbilling.modules.npay.server.*;
import java.util.ArrayList;
import java.util.Collections;
import java.math.BigDecimal;
import java.sql.*;
import java.util.*;
import java.lang.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.tariff.*;
import bitel.billing.server.util.*;
import ru.bitel.common.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import bitel.billing.server.tariff.bean.*;
import bitel.common.model.*;
import ru.bitel.bgbilling.kernel.tariff.common.bean.TariffPlan;
import ru.bitel.bgbilling.kernel.tariff.server.bean.TariffPlanManager

public void main( setup, Connection con, conSlave )
{
  TariffPlanManager tpm = new TariffPlanManager(con);
   print(tpm.getTariffPlanList());
}


А вот как получить абонплату по тарифу, я что-то не могу понять. Может у кого есть какие идеи как реализовать используя API, либо еще каким-нибудь способом. Наверняка такая возможность есть :D .

Заранее благодарю за помощь.

Автор:  skn [ 06 янв 2014, 03:57 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

Цитата:
А вот как получить абонплату по тарифу, я что-то не могу понять. Может у кого есть какие идеи как реализовать используя API, либо еще каким-нибудь способом. Наверняка такая возможность есть :D .

тарифное дерево может быть довольно сложным, поэтому нет универсального способа получить нужную информацию...

тарифное дерево орентировано на то, что ему будет передана вся необходимая инфрмация, и оно само все расчитает и вернет готовый результат (наработку), а не цену, так как цены могут меняться в течение учетного периода и на эти изменения может влиять множество факторов (например наработка в других модулях)

Автор:  Dipress [ 06 янв 2014, 13:42 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

Спасибо за ответ.
Жаль, что нет такого способа чтобы получить цену из тарифа. В этом и была главная идея, чтобы в зависимости от периода получать текущую стоимость тарифа. Таких периодов еще планируется несколько штук. Просто у нас уже есть скрипт где используются два массива - один с именем тарифа, другой с ценой. Но там все заноситься ручками, что сами понимаете не комильфо.

Автор:  Cromeshnic [ 06 янв 2014, 19:07 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

Можно делать специальный узел, куда заносить подобную мета-инфу о тарифе, не влияющую на тарификацию, а потом тарифным запросом её получать. Я пользуюсь для подобных штук узлом "конфигурация тарифа". Но, сами понимаете - это нужно отдельно в каждом тарифе добавлять узел.

Автор:  skn [ 06 янв 2014, 22:38 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

Cromeshnic писал(а):
Можно делать специальный узел, куда заносить подобную мета-инфу о тарифе, не влияющую на тарификацию, а потом тарифным запросом её получать. Я пользуюсь для подобных штук узлом "конфигурация тарифа". Но, сами понимаете - это нужно отдельно в каждом тарифе добавлять узел.


как я понимаю весь смысл доставать инфу из тарифа и не дублировать ее нигде повторно.

Автор:  Dipress [ 07 янв 2014, 19:54 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

Cromeshnic писал(а):
Можно делать специальный узел, куда заносить подобную мета-инфу о тарифе, не влияющую на тарификацию, а потом тарифным запросом её получать. Я пользуюсь для подобных штук узлом "конфигурация тарифа". Но, сами понимаете - это нужно отдельно в каждом тарифе добавлять узел.


Интересненько. А не могли бы вы показать примерчик подобный реализации?

skn писал(а):
Cromeshnic писал(а):
Можно делать специальный узел, куда заносить подобную мета-инфу о тарифе, не влияющую на тарификацию, а потом тарифным запросом её получать. Я пользуюсь для подобных штук узлом "конфигурация тарифа". Но, сами понимаете - это нужно отдельно в каждом тарифе добавлять узел.


как я понимаю весь смысл доставать инфу из тарифа и не дублировать ее нигде повторно.


Да, именно такая была первоначальная мысль. Но, как я понял из ваших слов, что извлечь всю нужную мне информацию из тарифа стандартными средствами не получиться (я имею ввиду используя API).

Автор:  Cromeshnic [ 09 янв 2014, 07:08 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

Вот пример для Dialup:

Код:
         ContractManager cmReadOnly = new ContractManager(conSlave);

         TariffTreeSet tts = cmReadOnly.getRealtimeTariffTreeSet( c.getId(), Calendar.getInstance(), "dialup", this.mid, true );

         if(tts!=null){
            TariffModuleTree tree = tts.getTree(Calendar.getInstance());
   
            if (tree != null)
            {
               TariffRequest req = new TariffRequest();
               req.setRequestParam("action", "init");
               req.setRequestParam("cid", new Integer(c.getId()));
               req.setRequestParam("time", Calendar.getInstance());
   //            req.setRequestParam("month_time", new GregorianCalendar());
   //            req.setRequestParam("period_end", new GregorianCalendar());
               req.setRequestParam("sid", new Integer(sid));
               req.setRequestParam("amount", new Long(1L));
               req.setRequestParam("tariffOptions", ContractTariffOptionDao.getContractRealtimeTariffOptionList(this.conSlave, c.getId(), new Date()));
   //            req.setRequestParam("level", Integer.valueOf(bitel.billing.server.processor.dialup.LevelManager.getLevel(c.getId())));
   
               tree.processRequest(req);
   
   //            if (req.wasAccepted()) //В 5.1 перестал быть accepted, но нужные данные выдаёт
   //            {
                  if(req.getResponseParam("custom_param")!=null && req.getResponseParam("custom_param")!=""){
                     package_id = (String) req.getResponseParam("custom_param");
                  }
   //            }else{
   //               print(req.toString());
   //            }
            }
         }

Автор:  skn [ 09 янв 2014, 14:14 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

по поводу добавления спец узла....
не понятно что в нем хранить, например с сегодняшнего дня меняется цена
что должно быть в этом узле? новая цена или несколько цен с указанием периода?

Автор:  Cromeshnic [ 09 янв 2014, 14:34 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

Смотря как использовать. Если при использовании всегда запрашивается только текущее значение - без разницы, можно просто менять.

зы. Чем это лучше хранения справочника цен и т.п. в отдельной таблице?
1. Проще следить - залез менять тариф, увидел этот узел рядом с ценой, поменял оба в периоде.
2. Гибкость. Можно делать зависимости от тарифных опций и пр. условий. А также (что очень важно) - применимо для персональных тарифов.

Можно использовать как вшитые метки тарифов по типам/скоростям для всякой отчётности, например.

Автор:  skn [ 09 янв 2014, 15:11 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

вот мне и не понятно для каких целей этот узел использовать
для чего нужна текущая стоимость?

Автор:  Akhmat [ 09 янв 2014, 15:43 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

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

Автор:  skyb [ 09 янв 2014, 16:01 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

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

плюсую

Автор:  skn [ 09 янв 2014, 16:12 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

skyb писал(а):
Akhmat писал(а):
иногда нужно. в разных случаях узнать сколько абоненту должно начисляться, и взависимости от этого, принимать решение.

плюсую


во! т.е. вы запрашиваете сколько должно, возращается ТЕКУЩАЯ цена, а в тарифе со следущего дня прописана НОВАЯ цена, и что вы получите?

Автор:  skyb [ 09 янв 2014, 16:25 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

skn писал(а):
skyb писал(а):
Akhmat писал(а):
иногда нужно. в разных случаях узнать сколько абоненту должно начисляться, и взависимости от этого, принимать решение.

плюсую


во! т.е. вы запрашиваете сколько должно, возращается ТЕКУЩАЯ цена, а в тарифе со следущего дня прописана НОВАЯ цена, и что вы получите?

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

Автор:  Akhmat [ 09 янв 2014, 16:38 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

от биллинга тут хотелось бы получать цену абонентки на дату, или просто текущую стоимость. хоть чтото. а в идеале метод типа
getAbonCost(tpid,sid=0/*если 0 вся абонентка*/,date=null/*если null текущую стоимость*/);
:)

Автор:  skn [ 09 янв 2014, 16:49 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

Akhmat писал(а):
от биллинга тут хотелось бы получать цену абонентки на дату, или просто текущую стоимость. хоть чтото. а в идеале метод типа
getAbonCost(tpid,sid=0/*если 0 вся абонентка*/,date=null/*если null текущую стоимость*/);
:)


так речь про другое, речь про узел с мета данными по тарифу, с одной текущей ценой, и про то, что она мало что даст...
да еще потребует дополнительных затрат на поддержание в актуальном состоянии.

Автор:  skn [ 09 янв 2014, 16:51 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

skyb писал(а):
skn писал(а):
skyb писал(а):
Akhmat писал(а):
иногда нужно. в разных случаях узнать сколько абоненту должно начисляться, и взависимости от этого, принимать решение.

плюсую


во! т.е. вы запрашиваете сколько должно, возращается ТЕКУЩАЯ цена, а в тарифе со следущего дня прописана НОВАЯ цена, и что вы получите?

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


а чего тут сложно в тарифе в котором цена абонентки с завтрашнего например повышается...
когда эту цену прописывать в мета узел, в 00-00 часов? вручную?

Автор:  Akhmat [ 09 янв 2014, 17:17 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

skn писал(а):
Akhmat писал(а):
от биллинга тут хотелось бы получать цену абонентки на дату, или просто текущую стоимость. хоть чтото. а в идеале метод типа
getAbonCost(tpid,sid=0/*если 0 вся абонентка*/,date=null/*если null текущую стоимость*/);
:)


так речь про другое, речь про узел с мета данными по тарифу, с одной текущей ценой, и про то, что она мало что даст...
да еще потребует дополнительных затрат на поддержание в актуальном состоянии.

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

Автор:  Cromeshnic [ 10 янв 2014, 06:15 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

skn писал(а):
когда эту цену прописывать в мета узел, в 00-00 часов? вручную?

Никто не мешает и сам этот узел в периоде задать.

Автор:  skyb [ 10 янв 2014, 06:25 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

Код:
<item>
<title>Обновление модуля Inet</title>
<link>http://bgbilling.ru/v6.0/download/inet/fixed</link>
<description>ДОБАВЛЕНО   Inet: Ветка Баланс в тарифе.
</description>
<pubDate>Thu, 09 Jan 2014 21:08:07 +0500</pubDate>
<guid>http://bgbilling.ru/v6.0/download/inet/fixed/362</guid>
</item>

Это чего добавили? ктонить пробовал уже?

Автор:  skn [ 10 янв 2014, 16:16 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

Cromeshnic писал(а):
skn писал(а):
когда эту цену прописывать в мета узел, в 00-00 часов? вручную?

Никто не мешает и сам этот узел в периоде задать.


тогда найти этот узел будет не менее сложно как и цену в текущем дереве... :-(

Автор:  Akhmat [ 10 янв 2014, 16:18 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

видимо перемещаешь прежний узел, чтобы один всегда. хорошее решение

Автор:  skn [ 10 янв 2014, 16:20 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

Akhmat писал(а):
видимо перемещаешь прежний узел, чтобы один всегда. хорошее решение


а кто должен перемещать и когда?

Автор:  Akhmat [ 10 янв 2014, 16:31 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

ну редактируешь тариф когда, изменяешь стоимость, то и переместил за одно. обычно по тарифу нужна одна текущая стоиомсть абонентки, ну и ежедневная она или месячная.

Автор:  skn [ 10 янв 2014, 17:03 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

Akhmat писал(а):
ну редактируешь тариф когда, изменяешь стоимость, то и переместил за одно. обычно по тарифу нужна одна текущая стоиомсть абонентки, ну и ежедневная она или месячная.


к примеру редактируем сегодня, о том что с завтра меняется цена, переместить в момент редактирования или в 00-00

Автор:  Akhmat [ 10 янв 2014, 18:23 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

у меня скрипты, которым нужна стоимость тарифа работают или в начале месяца, или ночью, т.е. на след день.
т.е. в моем случае обычно можно заранее перемещать. меня бы устроило. так и редактирую свой глоб массив инфы по тарифам

Автор:  Dipress [ 14 янв 2014, 14:43 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

Cromeshnic писал(а):
Вот пример для Dialup:

Код:
         ContractManager cmReadOnly = new ContractManager(conSlave);

         TariffTreeSet tts = cmReadOnly.getRealtimeTariffTreeSet( c.getId(), Calendar.getInstance(), "dialup", this.mid, true );

         if(tts!=null){
            TariffModuleTree tree = tts.getTree(Calendar.getInstance());
   
            if (tree != null)
            {
               TariffRequest req = new TariffRequest();
               req.setRequestParam("action", "init");
               req.setRequestParam("cid", new Integer(c.getId()));
               req.setRequestParam("time", Calendar.getInstance());
   //            req.setRequestParam("month_time", new GregorianCalendar());
   //            req.setRequestParam("period_end", new GregorianCalendar());
               req.setRequestParam("sid", new Integer(sid));
               req.setRequestParam("amount", new Long(1L));
               req.setRequestParam("tariffOptions", ContractTariffOptionDao.getContractRealtimeTariffOptionList(this.conSlave, c.getId(), new Date()));
   //            req.setRequestParam("level", Integer.valueOf(bitel.billing.server.processor.dialup.LevelManager.getLevel(c.getId())));
   
               tree.processRequest(req);
   
   //            if (req.wasAccepted()) //В 5.1 перестал быть accepted, но нужные данные выдаёт
   //            {
                  if(req.getResponseParam("custom_param")!=null && req.getResponseParam("custom_param")!=""){
                     package_id = (String) req.getResponseParam("custom_param");
                  }
   //            }else{
   //               print(req.toString());
   //            }
            }
         }


Спасибо. Буду пробывать.

Автор:  Phricker [ 21 фев 2014, 14:13 ]
Заголовок сообщения:  Re: Помощь по реализации скрипта тариф + стоимость

Akhmat писал(а):
от биллинга тут хотелось бы получать цену абонентки на дату, или просто текущую стоимость. хоть чтото. а в идеале метод типа
getAbonCost(tpid,sid=0/*если 0 вся абонентка*/,date=null/*если null текущую стоимость*/);
:)

апну тему. что-то так и заглохло все это :)

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/