BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 24 июн 2025, 17:53

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 16 ] 
Автор Сообщение
СообщениеДобавлено: 16 мар 2010, 19:28 
Не в сети

Зарегистрирован: 20 фев 2010, 17:25
Сообщения: 26
Карма: -1
Доброго времени суток! хотелось бы уточнить такой вопрос, возможно ли в БГ задать поиск абонентов у которых на счету 0, в течении определенного периоду(например 2 месяца)!!! Как их выявить!!!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 мар 2010, 20:00 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Ну, а почему бы и нет. Структура БД и всякий прочий SQL открыт и документирован, а SQL-редактор встроен прямо в клиент биллинга :roll:
Понимаете, к чему я клоню? :)

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 мар 2010, 20:15 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
может что-то типа этого:
Код:
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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 мар 2010, 20:21 
Не в сети

Зарегистрирован: 20 фев 2010, 17:25
Сообщения: 26
Карма: -1
я ужастно извиняюсь... я инженер в бд не силен особо))) просто на меня билинг повесили пока билингера не найду... я тут уже и платную тех. потдержку заказал... но проплатят токо на след. неделе вот и мучаюсь... када это вставить посоветуйте)))


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 мар 2010, 20:54 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
coolfresh писал(а):
я инженер в бд не силен особо)))

хотите я Вам свой диплом покажу? я по нему чистой воды гуманитарий

coolfresh писал(а):
када это вставить посоветуйте)))

если "када"(с) это "когда?" - когда хотите, если это "куда?" - куда хотите! захотите - в консоль mysql, захотите - в phpmyadmin, а захотите - в SQL редактор в клиенте ... как Вам удобнее в общем ;)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 мар 2010, 23:19 
Не в сети

Зарегистрирован: 20 фев 2010, 17:25
Сообщения: 26
Карма: -1
да точно промахнулся))) ну я вот работаю по специальности))) как инженер :shock: ...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 мар 2010, 14:24 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
создаются 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
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 мар 2010, 14:25 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
Я ещё один плюсик заработал? :oops:

_________________
Код:
  Клиент: вер. 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
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 мар 2010, 16:04 
Не в сети

Зарегистрирован: 20 фев 2010, 17:25
Сообщения: 26
Карма: -1
полюбому заработал


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 мар 2010, 16:15 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
coolfresh писал(а):
полюбому заработал

А чаво не поставлено :(

_________________
Код:
  Клиент: вер. 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
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 мар 2010, 16:31 
Не в сети

Зарегистрирован: 20 фев 2010, 17:25
Сообщения: 26
Карма: -1
поставил же!!! да кстати а может поясните куда этот код вставлять!!! ну просто я в БГ пока совсем сырой


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 мар 2010, 20:32 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
coolfresh писал(а):
поставил же!!! да кстати а может поясните куда этот код вставлять!!! ну просто я в БГ пока совсем сырой

просто что то небыло :). Я тоже новичек. система очень интересная и многофункциональная и простая одновременно. главное понять что куда
этот скрип запихать в - автоматизация-глобальные скрипты, если надо это делать не руками а по времени то в планировщике заданий добавить этот параметр!

_________________
Код:
  Клиент: вер. 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
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 мар 2010, 02:50 
Не в сети

Зарегистрирован: 20 фев 2010, 17:25
Сообщения: 26
Карма: -1
слушай!!! ты говоришь про создания 3-х груп... мне их надо создавать или скрипт все зделает сам... и объясни как он работает после того как я его добавлю в глобальные скрипты пожалуйста)))


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 мар 2010, 06:06 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
coolfresh писал(а):
слушай!!! ты говоришь про создания 3-х груп... мне их надо создавать или скрипт все зделает сам... и объясни как он работает после того как я его добавлю в глобальные скрипты пожалуйста)))

Нет, группы добавляются самостоятельно. id групп которые у меня я указал-в скрипте их надо заменить на свои. А как он работает-см. алгоритм.

_________________
Код:
  Клиент: вер. 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
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 30 мар 2010, 18:31 
Не в сети

Зарегистрирован: 20 фев 2010, 17:25
Сообщения: 26
Карма: -1
не работает скрипт!!!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 31 мар 2010, 05:01 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
coolfresh писал(а):
не работает скрипт!!!

У меня работает :). А как проверяли? все же первого числа происходит.

_________________
Код:
  Клиент: вер. 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
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.048s | 48 Queries | GZIP : On ]