Пожалуйста проверти у себя такие платежи. Создайте у себя приведенный ниже скрипт и выполните его. Он выведет все записи из журнала где пропали копейки.
Данный скрипт не анализирует уже поправленные платежи.
Для оптимизации, выставите в переменной "cal" тот месяц с которого вы перешли на 6.1. Например если переход был в мае то:
Calendar cal = TimeUtils.convertStringToCalendar( "01.05.2014" );
PS: Код подправлен, теперь выдает только коды договоров, сумму которая должна быть и дату.
Код:
import java.math.BigDecimal;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import ru.bitel.bgbilling.common.BGException;
import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase;
import ru.bitel.bgbilling.server.util.ServerUtils;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.Utils;
import ru.bitel.common.sql.ConnectionSet;
import bitel.billing.common.TimeUtils;
import bitel.billing.server.contract.ContractRemover;
import bitel.billing.server.contract.bean.ContractParameterManager;
public class CheckDistributionPayment extends GlobalScriptBase
{
@Override
public void execute( Setup setup1, ConnectionSet connectionSet2 ) throws Exception
{
Calendar cal = TimeUtils.convertStringToCalendar( "01.01.2014" );
String tableName = ServerUtils.getMonthTableName( "bgs_query_log", cal.getTime() );
int count = 0;
while( ServerUtils.tableExists( connectionSet2.getConnection(), tableName ) )
{
String query = "SELECT query FROM " + tableName + " WHERE mid_aid='0_1001' AND query LIKE '%distribution%'";
PreparedStatement ps = connectionSet2.getConnection().prepareStatement( query );
ResultSet rs = ps.executeQuery();
while( rs.next() )
{
String qr = rs.getString( "query" ).replaceFirst( "<p", "p" );
int ind1 = qr.indexOf( "sum=\"" );
int ind2 = qr.indexOf( "\" summa=" );
if( ind1 >0 && ind2 > 0)
{
BigDecimal total = Utils.parseBigDecimal( qr.substring( ind1 +5, ind2 ), null );
List<String> dList = Utils.toList( qr.substring( qr.indexOf( "distribution => " ) ) );
ArrayList<BigDecimal> disSumList = new ArrayList<>();
int cid = 0;
for( String d : dList )
{
String[] s = d.split( ":" );
if( s.length == 2)
{
disSumList.add( Utils.parseBigDecimal( s[1], null ) );
cid = Utils.parseInt( s[0] );
}
}
BigDecimal allSum = BigDecimal.ZERO;
for( BigDecimal s : disSumList )
{
if( s != null )
{
allSum = allSum.add( s );
}
}
if ( total.compareTo( allSum ) != 0 )
{
// print( qr ); // если нужен весь лог журнала, то раскоментить
ind1 = qr.indexOf( "date=\"" );
String datePay = qr.substring( ind1+6, ind1+16 );
print( cid + " - " + total.subtract( allSum.subtract( disSumList.get( disSumList.size()-1 ) ) ) + " " + datePay );
count++;
}
}
}
cal.add( Calendar.MONTH, 1 );
tableName = ServerUtils.getMonthTableName( "bgs_query_log", cal.getTime() );
}
print("Всего записей: " + count);
}
}