forum.bitel.ru http://forum.bitel.ru/ |
|
Активация кредитного договора, по платежу после начисления http://forum.bitel.ru/viewtopic.php?f=19&t=10387 |
Страница 1 из 1 |
Автор: | SeGa [ 08 апр 2015, 12:58 ] |
Заголовок сообщения: | Активация кредитного договора, по платежу после начисления |
Имеем кредитный способ расчета с абонентами, отключение производится после 20 числа, если абонент покрывал долг прошлого месяца - договор не активировался т.к. ему не хватало денег для покрытия полного долга(до 20 числа текущего месяца абонент может заплатить долг за прошлый месяц и должен начать работать до следующего отключения) Написал скрипт поведения(Функции скриптов поведения) который висит на событии приход платежа: Код: import java.sql.*; Меня тут сильно смущает вот этот кусок.Может есть способ попроще получить первый день прошлого месяца?import java.util.*; import java.math.*; import bitel.billing.server.contract.bean.*; import bitel.billing.server.tariff.*; import bitel.billing.server.util.*; import ru.bitel.bgbilling.kernel.event.*; import bitel.billing.server.script.bean.event.*; public void onEvent( event, setup, con, conSlave ) { int cid = event.getContractId(); ContractStatusManager contract_status_manager = new ContractStatusManager( con ); Contract contract = new ContractManager(con).getContractById(cid); Calendar DateNow = Calendar.getInstance(); BalanceUtils bu = new BalanceUtils( con ); //Получаю текущий день месяца int schDate = DateNow.get(Calendar.DAY_OF_MONTH); //Получаю первый день предыдущего месяца month=bitel.billing.common.TimeUtils.getStartMonth(bitel.billing.common.TimeUtils.getPrevDay(bitel.billing.common.TimeUtils.getStartMonth(bitel.billing.common.TimeUtils.convertCalendarToDate(DateNow)))); //Абонент должне заплатить абонплату до 20 числа, поэтому проверяем что текущий день месяца меньше или равен 20 числу if (schDate<21) { //Получаю Входящий остаток на начало прошлого месяца contract_balance = bu.getBalanceSumma1 (month, cid); bu.close(); // Получаю платежи с 1 числа прошлого месяца по текущее число String sql = " SELECT sum(cp.summa) FROM contract_payment as cp left join contract on contract.id=cp.cid where cp.dt > \""+bitel.billing.common.TimeUtils.formatSQLDate(month)+"\" and cp.dt < \""+bitel.billing.common.TimeUtils.formatSQLDate(DateNow)+"\" and cp.cid="+cid; PreparedStatement ps = con.prepareStatement( sql ); ResultSet rs = ps.executeQuery(); while(rs.next()) { int pm = rs.getInt( 1 ); BigDecimal sum = new BigDecimal(pm.toString()); //Складываем Входящий остаток и платежи BigDecimal balance=contract_balance.add(sum); //Если Входящий остаток + платежи больше либо равен и договор не активен - активируем его if (balance.compareTo( new BigDecimal("0.00") )>= 0 && contract.getStatus()!=0) { // активируем договор ContractStatus status = new ContractStatus(); status.setContractId( cid ); status.setDateFrom( DateNow.getTime() ); status.setDateTo( null ); status.setStatus(0); status.setComment( "Активировано скриптом 1-20" ); contract_status_manager.changeStatus( status, 0 ); } } } } Код: month=bitel.billing.common.TimeUtils.getStartMonth(bitel.billing.common.TimeUtils.getPrevDay(bitel.billing.common.TimeUtils.getStartMonth(bitel.billing.common.TimeUtils.convertCalendarToDate(DateNow)))); Ну и может кто какую ошибку увидит.... |
Автор: | skyb [ 08 апр 2015, 13:17 ] |
Заголовок сообщения: | Re: Активация кредитного договора, по платежу после начислен |
Код: Calendar c = Calendar.getInstance(); c.add(Calendar.MONTH, -1); Calendar firstDayOfPrevMonth = TimeUtils.getStartMonth(c); если я правильно понял задачу |
Автор: | skn [ 08 апр 2015, 13:22 ] |
Заголовок сообщения: | Re: Активация кредитного договора, по платежу после начислен |
skyb писал(а): Код: Calendar c = Calendar.getInstance(); c.add(Calendar.MONTH, -1); Calendar firstDayOfPrevMonth = TimeUtils.getStartMonth(c); если я правильно понял задачу интересно, если из 31 марта вычесть 1 месяц, какую дата получим ![]() |
Автор: | stark [ 08 апр 2015, 13:47 ] |
Заголовок сообщения: | Re: Активация кредитного договора, по платежу после начислен |
skn писал(а): skyb писал(а): Код: Calendar c = Calendar.getInstance(); c.add(Calendar.MONTH, -1); Calendar firstDayOfPrevMonth = TimeUtils.getStartMonth(c); если я правильно понял задачу интересно, если из 31 марта вычесть 1 месяц, какую дата получим ![]() 28 или 29 - зависит от того високосный год или нет. |
Автор: | skyb [ 08 апр 2015, 14:07 ] |
Заголовок сообщения: | Re: Активация кредитного договора, по платежу после начислен |
кстати, тут можно Код: String sql = " SELECT sum(cp.summa) FROM contract_payment as cp left join contract on contract.id=cp.cid where cp.dt > \""+bitel.billing.common.TimeUtils.formatSQLDate(month)+"\" and cp.dt < \""+bitel.billing.common.TimeUtils.formatSQLDate(DateNow)+"\" and cp.cid="+cid; использовать одинарные кавычки и не экранировать Код: String sql = " SELECT sum(cp.summa) FROM contract_payment as cp left join contract on contract.id=cp.cid where cp.dt > '"+bitel.billing.common.TimeUtils.formatSQLDate(month)+"' and cp.dt < '"+bitel.billing.common.TimeUtils.formatSQLDate(DateNow)+"' and cp.cid="+cid;
|
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |