Закрытие телефонных договоров
Материал из BiTel WiKi
Пример скрипта блокировки телефонных шлюзов. Запускаем его 21го числа (где то в толщах закона о связи и правил предоставления услуг) и скрипт блокирует всех, у кого платежи за месяц не перекрыли долг на начало месяца (если на начало месяца был плюс - абонент не должник, естественно).
import bitel.billing.server.util.*; import bitel.billing.server.contract.bean.*; import java.math.*; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.StringTokenizer; import ru.bitel.bgbilling.modules.phone.server.bean.PhoneContractStatusManager; import org.apache.log4j.Logger; import ru.bitel.bgbilling.server.util.Setup; public void main( setup, con, conSlave ) { s=""; cm=new ContractManager(con); bu=new BalanceUtils(con); pcsm=new PhoneContractStatusManager(con, 3); //Находим договора, где есть услуги телефонии. У меня такие договора называются МТС rs=con.prepareStatement("select * from contract where title like '%МТС%' and pgid=1 and status!=3 and date2 is null").executeQuery(); ContractStatusManager csm=new ContractStatusManager(con); while(rs.next()){ cid=rs.getInt("id"); contract=cm.getContractById(cid); print("Договор: "+rs.getString("title")); print("Баланс на начало месяца: "+bu.getBalanceSumma1(new Date(), cid)); BigDecimal start=new BigDecimal(0); BigDecimal payments=new BigDecimal(0); rs2=con.prepareStatement("select SUM(summa) from contract_payment where cid="+cid+" and dt>='2012-05-01' ").executeQuery(); if(rs2.next()){ if(rs2.getBigDecimal(1)!=null) payments=rs2.getBigDecimal(1); print("Платежи: "+payments); } if(payments.add(bu.getBalanceSumma1(new Date(), cid)).compareTo(BigDecimal.ZERO)<0){ print("ЗАБЛОКИРОВАТЬ АБОНЕНТА!"); s=s+"\n"+cid+":"+contract.getTitle()+":"+contract.getComment(); status=new ContractStatus(); status.setStatus(2); status.setComment("Баланс на начало месяца:"+start+", платежи за месяц: "+payments); status.setDateFrom(new java.util.Date()); status.setContractId(contract.getId()); csm.changeStatus(status, 0,true); //Т.к. телефония на субдоговоре for(String subcid:rs.getString("sub_list").split(",")){ print("Блокируем поддоговор:"+subcid); pcsm.changeContractStatus(Integer.parseInt(subcid), 1, 0); } } print("---"); } //Смотрим кого в итоге заблокировало print(s); }