forum.bitel.ru http://forum.bitel.ru/ |
|
Кредитный метод расчетов http://forum.bitel.ru/viewtopic.php?f=22&t=7521 |
Страница 1 из 1 |
Автор: | SeGa [ 11 дек 2012, 08:41 ] |
Заголовок сообщения: | Кредитный метод расчетов |
Кредитный договоры,20 числа каждого месяца происходит отключение абонентов. Допустим у абонента на 01.11.12 входящий остаток -330 руб 20.11.12 его отключают за долги за октябрь на 01.12.12 у абонента входящий баланс -660 руб 03.12.12 абонент оплачивает 330 руб, т.е. текущий баланс абонента -330 руб+наработка за 3 дня по идеи мы должны включить данного абонента т.к. метод кредитный и за октябрь он оплатил, а за ноябрь отключение будет только 20 декабря, т.е. при таком раскладе абонент должна быть активен с 03.12.12 по 20.12.12 если не внесет платеж за ноябрь месяц. От сюда вопрос, можно ли как то отслеживать таких абонентов? ![]() |
Автор: | Cromeshnic [ 11 дек 2012, 09:43 ] |
Заголовок сообщения: | Re: Кредитный метод расчетов |
У нас такая же логика. Отключаем кредитных руками 25 числа каждого месяца. Включаются они скриптом по приходу платежа: для кредитовых договоров проверяется, оплачен ли предыдущий месяц. Если оплачен - включаем. Могу поделиться скриптом. |
Автор: | SeGa [ 11 дек 2012, 09:48 ] |
Заголовок сообщения: | Re: Кредитный метод расчетов |
Если не жалко ![]() |
Автор: | Cromeshnic [ 11 дек 2012, 10:29 ] |
Заголовок сообщения: | Re: Кредитный метод расчетов |
Скрипт старый и довольно странный, сейчас я бы написал его постройнее. Но работает. Код: package ru.dsi.bgbilling.kernel.scripts;
import ru.bitel.bgbilling.kernel.contract.balance.server.event.PaymentEvent; import ru.bitel.bgbilling.kernel.event.Event; import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.sql.ConnectionSet; import bitel.billing.server.contract.bean.*; import java.sql.Connection; import java.util.*; public class MyCreditOpenLogic extends EventScriptBase<Event> { @Override public void onEvent( Event event, Setup setup, ConnectionSet connectionSet ) throws Exception { Connection con = connectionSet.getConnection(); int cid = event.getContractId(); Calendar now = Calendar.getInstance(); Date d_now = new Date(); if(event instanceof PaymentEvent){ Payment p = ((PaymentEvent)event).getPayment(); print("Сумма платежа" + p.getSumma()+"\n"); } ContractManager cm = new ContractManager( con ); ContractStatusManager cstm = new ContractStatusManager( con ); BalanceUtils bu = new BalanceUtils( con ); Contract c = cm.getContractById( cid ); print("Текущий статус: " + c.getStatus()+"\n"); if((c.getBalanceMode()==Contract.DEBET_BALANCE_MODE) &&(c.getStatus()==3)){ print("debet + статус=3 => выходим"); return;//Для дебета не обрабатываем } // Если мы - субдоговор с зависимым балансом - ничего не делаем // Вообще, на зависимые субдоговора не должны приходить платежи. Это ненормальная ситуация. При приходе платежа на субдоговор не генерируется евент прихода платежа для основного, поэтому основной не откроется, хотя должен. Но мы не будем обрабатывать подобные ситуации, т.к. это исключение. if (c.getSuperId()>0 && c.getSubMode()==0){ print("Договор является субдоговором с зависимым балансом => ничего не делаем"); return; } //Если баланс больше лимита, то выполняем далее, иначе не выполняем Float balance_limit = c.getBalanceLimit().floatValue(); Float current_balance = bu.getBalance(new Date(), c).floatValue(); print("Баланс: "+current_balance); if(current_balance < balance_limit){ print("Баланс меньше лимита. Пропускаем договор\n"); return; }else{ print("Баланс ОК\n"); } //Проверка сальдо для кредитных договоров: //Если в текущем месяце при разблокировании смотреть на : //1. Лимит - остаток должен быть больше лимита //2. до 25 проверять чтобы оплата была >= остатку на 1-е число предыдущего месяца, после 26 числа оплата должна быть >= остатку на 1-е число текущего месяца if(c.getBalanceMode()==Contract.CREDIT_BALANCE_MODE){ float saldo = 0; float debt = 0; if((new GregorianCalendar()).get(Calendar.DAY_OF_MONTH)<25){ Calendar last_month = (Calendar)now.clone(); last_month.add(Calendar.MONTH,-1); saldo = bu.getSaldo(last_month.getTime(), c.getId()).floatValue()+ bu.getSaldo(now.getTime(), c.getId()).floatValue() - bu.getBalanceSumma1(now.getTime(), c.getId()).floatValue(); debt = bu.getBalanceSumma1(last_month.getTime(), c.getId()).floatValue(); print("Сальдо за предыдущий месяц + приход в текущем: " + saldo+"\n"); print("Входящий остаток в предыдущем месяце: " + debt+"\n"); }else{ saldo = bu.getSaldo(now.getTime(), c.getId()).floatValue(); debt = bu.getBalanceSumma1(now.getTime(), c.getId()).floatValue(); print("Сальдо за текущий месяц: " + saldo+"\n"); print("Входящий остаток в текущем месяце: " + debt+"\n"); } // if(saldo<0.05*debt){ print("Сальдо < 0.05*(вх. остаток), долг не погашен - не открываем: \n"); print(saldo + " < " + "0.05*"+debt + "\n"); return; } } //Все тесты прошли - можно открывать клиента: //----------------------------------------------------------------------// //Если текущий статус Активен и далее нет никаких статусов в будущем пропускаем скрипт print("Можно открывать!\n"); List<ContractStatus> statusList = cstm.getStatusList(cid, d_now); if(statusList.size() == 0){ print("Список изменений статусов пуст, ничего не делаем - видимо договор и так активен\n"); return; } int lastStatus = ((ContractStatus)statusList.get(0)).getStatus(); if(statusList.size() == 1 && lastStatus == 0){ print("Договор и так активен\n"); return; } // Если последний и единственный на текущее время статус договора приостановить. // пропускаем выполнение. if(statusList.size() == 1 && lastStatus == 4){ print("Договору не нужен статус = АКТИВЕН. Последний статус договора = Приостановить.\n"); return; } ContractStatus s = new ContractStatus(); s.setContractId(cid); s.setDateFrom(new Date()); s.setDateTo(null); s.setStatus(0); s.setComment("Статус изменен по приходу платежа"); cstm.changeStatus(s,0,true); cstm.recycle(); } } |
Автор: | SeGa [ 12 дек 2012, 06:25 ] |
Заголовок сообщения: | Re: Кредитный метод расчетов |
т.к. не силен в яве вопрос: сильно придется переделывать этот скрипт в случае платежей на суб договоры с зависимым балансом? Печально что под 5.2.......в 5.1 нету EventScriptBase<Event> (( |
Автор: | SeGa [ 18 дек 2012, 11:37 ] |
Заголовок сообщения: | Re: Кредитный метод расчетов |
Может есть у кого вариант под 5.1? |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |