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

SQL: Стоимость АП по текущему тарифу абонента
http://forum.bitel.ru/viewtopic.php?f=16&t=6710
Страница 1 из 1

Автор:  mikos [ 17 апр 2012, 20:18 ]
Заголовок сообщения:  SQL: Стоимость АП по текущему тарифу абонента

Добрый день.
Помогите пожалуйста запросом к БД. Необходимо узнать стоимость АП по текущему тарифу пользователя.
В наличии имеем параметры:
Код:
<npay_service_object_2 cid="2271" col="1" comment="" csid="0" date1="2010-12-30" eid="0" emid="0" id="2226" oid="2302" sid="1" title="Абонплата (интернет)"/>

Я так понимаю id и oid с датой достаточно? Осталось понять откуда выгребать стоимость :(

Автор:  Cromeshnic [ 18 апр 2012, 06:09 ]
Заголовок сообщения:  Re: SQL: Стоимость АП по текущему тарифу абонента

В общем случае это делается не в sql, а через TariffRequest

Автор:  mikos [ 18 апр 2012, 15:06 ]
Заголовок сообщения:  Re: SQL: Стоимость АП по текущему тарифу абонента

Это понятно, но мне стоимость надо вытянуть в xslt шаблоне, где я могу только через SQL это вытянуть.

Автор:  mikos [ 04 май 2012, 21:59 ]
Заголовок сообщения:  Re: SQL: Стоимость АП по текущему тарифу абонента

Не вычисляемо?

Автор:  skyb [ 05 май 2012, 05:45 ]
Заголовок сообщения:  Re: SQL: Стоимость АП по текущему тарифу абонента

Cromeshnic писал(а):
В общем случае это делается не в sql, а через TariffRequest

а есть пример? :-[

Автор:  mikos [ 05 май 2012, 12:24 ]
Заголовок сообщения:  Re: SQL: Стоимость АП по текущему тарифу абонента

skyb писал(а):
Cromeshnic писал(а):
В общем случае это делается не в sql, а через TariffRequest

а есть пример? :-[

Скриптом тоже тот еще процесс, но согласен - оно есть, к примеру viewtopic.php?f=16&t=6753
SQL я так понимаю, что не позволяет сделать запрос сама структура данных - слишком много логики подсчета АП для SQL.

Автор:  Феанор [ 05 май 2012, 12:54 ]
Заголовок сообщения:  Re: SQL: Стоимость АП по текущему тарифу абонента

если структура тарифов типовая - то можно, почему нет
вот кусок xslt - это находим ноду на которой висит модуль АП
<xsl:variable name="queryText" select="concat('SELECT t3.id,t4.title from tariff_tree_link as t1, module_tariff_tree as t2, mtree_node as t3, tariff_plan as t4 where t1.tree_id=t2.tree_id and t1.tpid=',@tpid,' and t4.id=t1.tpid and t2.id=t3.mtree_id and t3.parent_node=0 and t2.mid=MIDAP')/>
<xsl:variable name="query" select="sql:select( $queryText )"/>
<xsl:variable name="nid" select="$query/row/@id" />

потом делаем запрос и находим где у нас висит услуга АП
select * from mtree_node where parent_node=$nid
а потом зная ноду где висит АП находит ее наследователей и смотрим где там указана цена:
select * from mtree_node where parent_node="+nid2+" and type like '%cost%'

А вообще проще мне кажется сделать скриптик который будет кэшировать стоимости АП по тарифам и делать запрос к ней.

Автор:  mikos [ 05 май 2012, 16:21 ]
Заголовок сообщения:  Re: SQL: Стоимость АП по текущему тарифу абонента

Вот спасибо! Поковыряю.

Автор:  mikos [ 28 май 2012, 23:14 ]
Заголовок сообщения:  Re: SQL: Стоимость АП по текущему тарифу абонента

Феанор писал(а):
если структура тарифов типовая - то можно, почему нет


А если тарифы персональные? Этот запрос на персональных тарифах не фурычит.

Автор:  mikos [ 28 май 2012, 23:25 ]
Заголовок сообщения:  Re: SQL: Стоимость АП по текущему тарифу абонента

По сути, в XML есть информация только по услугам. Но как по ним взять стоимость, которая определена в персональных тарифах?

Код:
<module id="2" name="npay" title="Абонплата">
<npay_service_object_2 cid="609" col="1" comment="" csid="0" date1="2011-09-01" eid="0" emid="0" id="2835" oid="590" sid="1" title="Абонплата (интернет)"/>
<npay_service_object_2 cid="609" col="1" comment="" csid="0" date1="2012-05-28" eid="0" emid="0" id="3514" oid="0" sid="39" title="Организация канала точка-точка"/>
</module>

Автор:  Феанор [ 04 июн 2012, 11:24 ]
Заголовок сообщения:  Re: SQL: Стоимость АП по текущему тарифу абонента

Код:
"SELECT t3.id,t1.title from contract_tree_link as t1, module_tariff_tree as t2, mtree_node as t3,contract as t4 where t1.tree_id=t2.tree_id and t1.cid="+id+" and t2.id=t3.mtree_id and t3.parent_node=0 and t4.id=t1.cid and t2.mid="+MIDAP

вот такой запрос первым.. ну а дальше - запрос из mtree_node и т.д.

Автор:  focus [ 04 июн 2012, 13:49 ]
Заголовок сообщения:  Re: SQL: Стоимость АП по текущему тарифу абонента

из XSL можно запустить функцию своего класса. Что мешает сделать Java класс, где будет функция, возвращающая стоимость АП для конкретного договора на определенную дату с помощью TariffRequest ?
По-моему, так будет проще, чем городить SQL запрос к таблицам, где содержатся деревья тарифа. Да и будет использоваться стандартная логика разработчиков.
Это же и будет работать для персональных ТП.

Автор:  mikos [ 04 июн 2012, 14:22 ]
Заголовок сообщения:  Re: SQL: Стоимость АП по текущему тарифу абонента

В Java не силен. Есть ли где нибудь пример реализации своего класса и его вызов из XSL? По образу и подобию бы сделал. С нуля не хватит мозгов :(

Автор:  mikos [ 04 июн 2012, 14:37 ]
Заголовок сообщения:  Re: SQL: Стоимость АП по текущему тарифу абонента

2Феанор Запрос ничего не выдает :(

Автор:  focus [ 05 июн 2012, 06:11 ]
Заголовок сообщения:  Re: SQL: Стоимость АП по текущему тарифу абонента

Вот тут можешь посмотреть как вызывают из XSL функции объектов, написанных на Java.
Что касается реализации Java класса. Тут двумя словами не описать, но и сложного нет ничего.
Делаем свой класс, там делаем функцию, которая с помощью BG API TariffRequest/NPay Calculator считает сумму для договора.
Функция будет предельно похожа на BGBS скрипт.
После компилируешь исходник. Получившийся класс или jar файл кладем в папку BGBillingServer\lib\ext
Сервак рестартуем и пробуем xsl шаблон.

Автор:  mikos [ 15 июн 2012, 21:14 ]
Заголовок сообщения:  Re: SQL: Стоимость АП по текущему тарифу абонента

Таким способом можно использовать свою функцию расчета АП в XSL?

http://wiki.bgbilling.ru/index.php/Подстановка_данных_в_зависимости_от_текущего_пользователя_биллинга

В 5.1 будет работать?

Автор:  skyb [ 18 июн 2012, 07:08 ]
Заголовок сообщения:  Re: SQL: Стоимость АП по текущему тарифу абонента

Да, в 5.2 тоже работает

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