forum.bitel.ru http://forum.bitel.ru/ |
|
выявление не работающих пользователей!!! http://forum.bitel.ru/viewtopic.php?f=5&t=3725 |
Страница 1 из 1 |
Автор: | coolfresh [ 16 мар 2010, 19:28 ] |
Заголовок сообщения: | выявление не работающих пользователей!!! |
Доброго времени суток! хотелось бы уточнить такой вопрос, возможно ли в БГ задать поиск абонентов у которых на счету 0, в течении определенного периоду(например 2 месяца)!!! Как их выявить!!! |
Автор: | dimOn [ 16 мар 2010, 20:00 ] |
Заголовок сообщения: | Re: выявление не работающих пользователей!!! |
Ну, а почему бы и нет. Структура БД и всякий прочий SQL открыт и документирован, а SQL-редактор встроен прямо в клиент биллинга ![]() Понимаете, к чему я клоню? ![]() |
Автор: | snark [ 16 мар 2010, 20:15 ] |
Заголовок сообщения: | Re: выявление не работающих пользователей!!! |
может что-то типа этого: Код: SELECT DISTINCT title FROM
contract AS c LEFT JOIN contract_balance AS cb ON (c.id = cb.cid) WHERE cb.yy = YEAR(NOW()) AND cb.summa1 = 0 AND cb.summa2 = 0 AND cb.summa3 = 0 AND cb.summa4 = 0 AND cb.mm BETWEEN (MONTH(NOW()) - 2) AND MONTH(NOW()) ORDER BY title |
Автор: | coolfresh [ 16 мар 2010, 20:21 ] |
Заголовок сообщения: | Re: выявление не работающих пользователей!!! |
я ужастно извиняюсь... я инженер в бд не силен особо))) просто на меня билинг повесили пока билингера не найду... я тут уже и платную тех. потдержку заказал... но проплатят токо на след. неделе вот и мучаюсь... када это вставить посоветуйте))) |
Автор: | snark [ 16 мар 2010, 20:54 ] |
Заголовок сообщения: | Re: выявление не работающих пользователей!!! |
coolfresh писал(а): я инженер в бд не силен особо))) хотите я Вам свой диплом покажу? я по нему чистой воды гуманитарий coolfresh писал(а): када это вставить посоветуйте))) если "када"(с) это "когда?" - когда хотите, если это "куда?" - куда хотите! захотите - в консоль mysql, захотите - в phpmyadmin, а захотите - в SQL редактор в клиенте ... как Вам удобнее в общем ![]() |
Автор: | coolfresh [ 16 мар 2010, 23:19 ] |
Заголовок сообщения: | Re: выявление не работающих пользователей!!! |
да точно промахнулся))) ну я вот работаю по специальности))) как инженер ![]() |
Автор: | skyb [ 17 мар 2010, 14:24 ] |
Заголовок сообщения: | Re: выявление не работающих пользователей!!! |
создаются 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; устанавливаются кол-во месяцев |
Автор: | skyb [ 17 мар 2010, 14:25 ] |
Заголовок сообщения: | Re: выявление не работающих пользователей!!! |
Я ещё один плюсик заработал? ![]() |
Автор: | coolfresh [ 17 мар 2010, 16:04 ] |
Заголовок сообщения: | Re: выявление не работающих пользователей!!! |
полюбому заработал |
Автор: | skyb [ 17 мар 2010, 16:15 ] |
Заголовок сообщения: | Re: выявление не работающих пользователей!!! |
coolfresh писал(а): полюбому заработал А чаво не поставлено ![]() |
Автор: | coolfresh [ 17 мар 2010, 16:31 ] |
Заголовок сообщения: | Re: выявление не работающих пользователей!!! |
поставил же!!! да кстати а может поясните куда этот код вставлять!!! ну просто я в БГ пока совсем сырой |
Автор: | skyb [ 17 мар 2010, 20:32 ] |
Заголовок сообщения: | Re: выявление не работающих пользователей!!! |
coolfresh писал(а): поставил же!!! да кстати а может поясните куда этот код вставлять!!! ну просто я в БГ пока совсем сырой просто что то небыло ![]() этот скрип запихать в - автоматизация-глобальные скрипты, если надо это делать не руками а по времени то в планировщике заданий добавить этот параметр! |
Автор: | coolfresh [ 18 мар 2010, 02:50 ] |
Заголовок сообщения: | Re: выявление не работающих пользователей!!! |
слушай!!! ты говоришь про создания 3-х груп... мне их надо создавать или скрипт все зделает сам... и объясни как он работает после того как я его добавлю в глобальные скрипты пожалуйста))) |
Автор: | skyb [ 18 мар 2010, 06:06 ] |
Заголовок сообщения: | Re: выявление не работающих пользователей!!! |
coolfresh писал(а): слушай!!! ты говоришь про создания 3-х груп... мне их надо создавать или скрипт все зделает сам... и объясни как он работает после того как я его добавлю в глобальные скрипты пожалуйста))) Нет, группы добавляются самостоятельно. id групп которые у меня я указал-в скрипте их надо заменить на свои. А как он работает-см. алгоритм. |
Автор: | coolfresh [ 30 мар 2010, 18:31 ] |
Заголовок сообщения: | Re: выявление не работающих пользователей!!! |
не работает скрипт!!! |
Автор: | skyb [ 31 мар 2010, 05:01 ] |
Заголовок сообщения: | Re: выявление не работающих пользователей!!! |
coolfresh писал(а): не работает скрипт!!! У меня работает ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |