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 не силен (вообще). Задача состоит в следующем: Есть, к примеру, такой вот тариф: Вложение: В узле "Абонплаты" установлен период действия абонплаты и стоимость. Нужно каким-то образом получить из этого тарифа его название и текущую стоимость в узле Абонплаты, т.е. Тариф - стоимость. И так для каждого подобного тарифа. Получить название всех тарифов, вроде бы не сложно: Код: 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, либо еще каким-нибудь способом. Наверняка такая возможность есть ![]() Заранее благодарю за помощь. |
Автор: | skn [ 06 янв 2014, 03:57 ] |
Заголовок сообщения: | Re: Помощь по реализации скрипта тариф + стоимость |
Цитата: А вот как получить абонплату по тарифу, я что-то не могу понять. Может у кого есть какие идеи как реализовать используя API, либо еще каким-нибудь способом. Наверняка такая возможность есть ![]() тарифное дерево может быть довольно сложным, поэтому нет универсального способа получить нужную информацию... тарифное дерево орентировано на то, что ему будет передана вся необходимая инфрмация, и оно само все расчитает и вернет готовый результат (наработку), а не цену, так как цены могут меняться в течение учетного периода и на эти изменения может влиять множество факторов (например наработка в других модулях) |
Автор: | 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/ |