создаются 3 группы они у меня по id равны соответственно
неработающие 9
давно неработающие 10
неработающие обзвоненые 11
в глобальном скрипте пишится скрипт
Код:
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import bitel.billing.server.util.*;
import ru.bitel.bgbilling.server.util.DefaultServerSetup;
import ru.bitel.bgbilling.server.util.ServerUtils;
import bitel.billing.server.contract.ContractRemover;
import bitel.billing.server.contract.bean.Contract;
import bitel.billing.server.contract.bean.ContractManager;
private long groupNoUseMask = Utils.enumToMask( "9" );
private long groupNoUseOldMask = Utils.enumToMask( "10" );
private long groupNoUseCallMask = Utils.enumToMask( "11" );
private long groupNoUseAllMask = Utils.enumToMask( "9,10,11" );
private int notUseMonth = 1;
private int notUseOldMonth = 2;
private boolean save = true;
private String folder = "/";
public void main( setup, con, conSlave )
{
Calendar calendar = new GregorianCalendar();
int yy = calendar.get( Calendar.YEAR );
int mm = calendar.get( Calendar.MONTH )+1;//
//Смотрим кого надо переносить в давно неиспользуемые
print("Поиск давно не работающих");
print("notUseMonth = "+notUseMonth);
print("notUseOldMonth = "+notUseOldMonth);
String query = "SELECT id FROM contract WHERE gr&?=0";
PreparedStatement contractPs = con.prepareStatement( query );
PreparedStatement balancePs = con.prepareStatement( "SELECT summa3,yy,mm FROM contract_balance WHERE cid=? AND summa3 IS NOT NULL AND summa3 !=0 ORDER BY yy DESC, mm DESC LIMIT 0,1" );
PreparedStatement addGroup = con.prepareStatement( "UPDATE contract SET gr=gr|? WHERE id=?" );
PreparedStatement removeGroup = con.prepareStatement( "UPDATE contract SET gr=gr&~? WHERE id=?" );
contractPs.setLong( 1, groupNoUseAllMask );
ResultSet contractRs = contractPs.executeQuery();
while ( contractRs.next() )
{
int cid = contractRs.getInt( 1 );
balancePs.setInt( 1, cid );
ResultSet balanceRs = balancePs.executeQuery();
BigDecimal ammount = BigDecimal.ZERO;
int yyAmmount = 0;
int mmAmmount = 0;
if ( balanceRs.next() )
{
ammount = balanceRs.getBigDecimal( 1 );
yyAmmount = balanceRs.getInt( 2 );
mmAmmount = balanceRs.getInt( 3 );
}
if (ammount == null || ammount.compareTo( BigDecimal.ZERO ) == 0)
{
//print("Ошибка баланса, cid => "+cid );
continue;
}
if ( ((yy*12+mm) - (yyAmmount*12+mmAmmount))> notUseMonth ) //нет движения больше месяца то в первую группу
{
print( "В неиспользованные cid => "+cid );
addGroup.setLong( 1, groupNoUseMask );
addGroup.setInt( 2, cid );
addGroup.executeUpdate();
}
}
contractRs.close();
contractPs.close();
print( "Проверка неработающих" );
//=================================
//берем неработающие
contractPs = con.prepareStatement( "SELECT id FROM contract WHERE gr&?!=0" );
contractPs.setLong( 1, groupNoUseMask );
contractRs = contractPs.executeQuery();
while ( contractRs.next() )
{
int cid = contractRs.getInt( 1 );
balancePs.setInt( 1, cid );
ResultSet balanceRs = balancePs.executeQuery();
BigDecimal ammount = BigDecimal.ZERO;
int yyAmmount = 0;
int mmAmmount = 0;
if ( balanceRs.next() )
{
ammount = balanceRs.getBigDecimal( 1 );
yyAmmount = balanceRs.getInt( 2 );
mmAmmount = balanceRs.getInt( 3 );
}
if (ammount == null || ammount.compareTo( BigDecimal.ZERO ) == 0)
{
//print( "Ошибка баланса cid => "+cid );
continue;
}
if ( ((yy*12+mm) - (yyAmmount*12+mmAmmount))> notUseOldMonth ) //нет движения больше 3 то в давно не работяющий
{
print( "В давно неработающие cid => "+cid );
addGroup.setLong( 1, groupNoUseOldMask );
addGroup.setInt( 2, cid );
addGroup.executeUpdate();
removeGroup.setLong( 1, groupNoUseMask );
removeGroup.setInt( 2, cid );
removeGroup.executeUpdate();
}
if ( ((yy*12+mm) - (yyAmmount*12+mmAmmount)) ==0 ) //есть движения в этом месяце
{
print( "Из неработающих cid => "+cid );
removeGroup.setLong( 1, groupNoUseMask );
removeGroup.setInt( 2, cid );
removeGroup.executeUpdate();
removeGroup.setLong( 1, groupNoUseOldMask );
removeGroup.executeUpdate();
removeGroup.setLong( 1, groupNoUseCallMask );
removeGroup.executeUpdate();
}
}
contractRs.close();
contractPs.close();
System.out.println( "Проверяем обзвоненых" );
//=================================
//берем неработающие(обзвоненые)
contractPs = con.prepareStatement( "SELECT id FROM contract WHERE gr&?!=0" );
contractPs.setLong( 1, groupNoUseCallMask );
contractRs = contractPs.executeQuery();
while ( contractRs.next() )
{
int cid = contractRs.getInt( 1 );
balancePs.setInt( 1, cid );
ResultSet balanceRs = balancePs.executeQuery();
BigDecimal ammount = BigDecimal.ZERO;
int yyAmmount = 0;
int mmAmmount = 0;
if ( balanceRs.next() )
{
ammount = balanceRs.getBigDecimal( 1 );
yyAmmount = balanceRs.getInt( 2 );
mmAmmount = balanceRs.getInt( 3 );
}
if (ammount == null || ammount.compareTo( BigDecimal.ZERO ) == 0)
{
//print( "Ошибка баланса cid => "+cid );
continue;
}
if ( ((yy*12+mm) - (yyAmmount*12+mmAmmount))> notUseOldMonth ) //нет движения больше 3 то в давно не работяющий
{
print( "В архив cid => "+cid );
deleteContract(setup,con,cid);
}
if ( ((yy*12+mm) - (yyAmmount*12+mmAmmount)) ==0 ) //есть движения в этом месяце
{
print( "Из обзвоненых cid => "+cid );
removeGroup.setLong( 1, groupNoUseMask );
removeGroup.setInt( 2, cid );
removeGroup.executeUpdate();
removeGroup.setLong( 1, groupNoUseOldMask );
removeGroup.executeUpdate();
removeGroup.setLong( 1, groupNoUseCallMask );
removeGroup.executeUpdate();;
}
}
}
public void deleteContract( setup, con, cid )
{
Contract contract = new ContractManager( con ).getContractByID( cid );
if ( contract.getSuperId() != Contract.IS_INDEPENDENT )
{
print( "Возможно удаление только независимого договора!" );
return;
}
Vector CID = new Vector();
CID.addElement( new Integer( cid ) );
ContractRemover cr = new ContractRemover( setup, con, folder );
String error = cr.removeContracts( CID, save );
if ( error != null && error.length() > 0 )
{
print( "Ошибка удаления договора! => "+error );
}
}
Алгоритм
1. Все происходит в начале месяца
2. Смотрим все договора которые пока не в группах если в прошлом не было движения, то в группу "Неработающие"
3. берем всех из "неработающих" и есьли нет движения уже 3 месяца то в "Давно неработающие", если есть движение от снимаем группу
4. берем всех из "неработающие(обзвоненные)" и если нет движения 3 месяца то в архим, иначе снимаем группу
А оператор кого обзвонил в группу "неработающие(обзвоненные)" помещаем
в
Код:
private int notUseMonth = 1;
private int notUseOldMonth = 2;
устанавливаются кол-во месяцев
_________________
Код:
Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegramСтиль программирования - пьяный мастерстер
Разработка мобильных приложений