forum.bitel.ru http://forum.bitel.ru/ |
|
Нужна помощь разработчиков !!! http://forum.bitel.ru/viewtopic.php?f=16&t=3377 |
Страница 1 из 1 |
Автор: | dale [ 27 дек 2009, 02:48 ] |
Заголовок сообщения: | Нужна помощь разработчиков !!! |
Ситуация следующая, пытаюсь приспособить БГ под следующую схему. Необходимо в последний день месяца заблокировать всех абонентов у кого нет средств, что бы перейти в следующий месяц. Фишка именно в том, что обработка должна быть выполнена именно в последний день месяца а не 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); } } |
Автор: | Akhmat [ 28 дек 2009, 11:47 ] |
Заголовок сообщения: | Re: Нужна помощь разработчиков !!! |
Как насчет тут Код: prep2 = con.prepareStatement("select sid, col from npay_service_object_1 where cid=" + cid); date1 и date2 учитывать? |
Автор: | dale [ 10 янв 2010, 15:22 ] |
Заголовок сообщения: | Re: Нужна помощь разработчиков !!! |
У меня же проблема в другом месте. tree.processRequest(req_cost) вот здесь мне надо что бы обработчик рассчитал абонентскую плату не текущую, а на заданную дату с учетом параметров которые будут актуальны именно на заданную дату. Цитата: У абонента услуг подключенных на 100 руб. На счету 100 руб. 31 дек. я должен обработать увидеть что у абонента деньги есть и оставить его активным, либо если у него денег нет я его приостанавливаю. Теперь момент. Например в декабре услуг было подключено у абонента на 200 рублей. А с первого января уже на 100 рублей, например он отказался от одной из услуг. Скрипт мне все равно выдает сумму декабрьскую. Скрипт видя что услуг подключенных на 200 рублей, а на счету 100 блокирует абонента. Вопрос как получить сумму именно ту которую БГ начислит абоненту в январе. Смотрите при расчете мне возвращается что у абонента абонплата на 200 рублей. Т.к. рассчитывается абонплата на текущий момент времени, а не на 1 января. Мне нужно что бы конструкция tree.processRequest(req_cost) вернула мне сумму которая будет списана у абонента именно 1 января. Понимаете ??? |
Автор: | Администратор [ 11 янв 2010, 13:48 ] |
Заголовок сообщения: | Re: Нужна помощь разработчиков !!! |
Цитата: tree.processRequest(req_cost) вот здесь мне надо что бы обработчик рассчитал абонентскую плату не текущую, а на заданную дату с учетом параметров которые будут актуальны именно на заданную дату. Задача понятна, только в данный момент кода такого нет. Будет решена в рамках реализации классического дебета. См. тему: viewtopic.php?f=16&t=2386&start=90 Описание алгоритма там на 7ой странице, мой пост. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |