BiTel

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

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




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Поиск договоров
СообщениеДобавлено: 03 май 2012, 16:17 
Не в сети

Зарегистрирован: 26 апр 2012, 10:18
Сообщения: 14
Карма: 0
Есть такая страничка http://wiki.bgbilling.ru/index.php/%D0% ... 0%BE%D0%B2
там описывается способ поиска договоров.

Указываю такие параметры:

int statusPeriod = 2 ;
String statusPeriodUnit = "month";
Т.е. мне надо договора у которых статус менялся в течение последних 2 месяцев, но скрипт выводит абсолютно все статусы.

И еще можно ли каким нибудь образом посмотреть какой запрос к базе делает функция ws.contractSearch


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск договоров
СообщениеДобавлено: 03 май 2012, 17:25 
Не в сети
Клиент
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск договоров
СообщениеДобавлено: 03 май 2012, 18:46 
Не в сети

Зарегистрирован: 26 апр 2012, 10:18
Сообщения: 14
Карма: 0
Смс оповещение хочу сделать, для этого хочу получить список договоров с определенным тарифом и чтобы статус был установлен не позже месяца, ну и чтобы суммы не хватало на балансе до активации учетного периода


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск договоров
СообщениеДобавлено: 03 май 2012, 18:59 
Не в сети

Зарегистрирован: 08 окт 2009, 16:06
Сообщения: 186
Карма: 20
Дергаем дату статуса. сравниваем с текущей датой. daysDelta(Date1, Date2 ) возращает количество дней между датами.
Потом смотрим тариф. для удобства можно нужные тарифы обьеденить в группы. и смотреть состоит ли тариф контракта в нужной группе.

Если чтот не понятно, пишите, могу описать подробно. с кодом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск договоров
СообщениеДобавлено: 03 май 2012, 23:57 
Не в сети

Зарегистрирован: 26 апр 2012, 10:18
Сообщения: 14
Карма: 0
Сравнение же делается уже после выборки, в цикле получается. А я хочу сразу выборку ограничить


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск договоров
СообщениеДобавлено: 04 май 2012, 11:20 
Не в сети

Зарегистрирован: 26 апр 2012, 10:18
Сообщения: 14
Карма: 0
блин никак не могу понять, смотрю файл server.jar там куча пакетов, и все функции это просто определение функций, а где сами тела функций? уж очень хочется посмотреть как работает функция contractSearch


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск договоров
СообщениеДобавлено: 04 май 2012, 11:30 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
может ответы здесь?
http://bgbilling.ru/v5.2/javadoc/index.html

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск договоров
СообщениеДобавлено: 04 май 2012, 11:36 
Не в сети

Зарегистрирован: 26 апр 2012, 10:18
Сообщения: 14
Карма: 0
а можете привести пример хоть одной функции где описана процедура получения данных из базы? тарифа там, статуса и т.д.?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск договоров
СообщениеДобавлено: 04 май 2012, 11:48 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
http://wiki.bgbilling.ru/index.php/Заглавная_страница#.D0.A1.D0.BA.D1.80.D0.B8.D0.BF.D1.82.D1.8B_BGBS
примеры

2 skyb
что то мы какие то злые стали :roll: раньше объясняли все а щас в документацию тыкаем :D

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск договоров
СообщениеДобавлено: 04 май 2012, 11:53 
Не в сети

Зарегистрирован: 26 апр 2012, 10:18
Сообщения: 14
Карма: 0
Объясните мне пожалуйста если вы не злые как работает функция contractSearch? и почему не работает связка int statusPeriod = 2 ; String statusPeriodUnit = "month"; и вываливаются договора приостановленные 2 года назад?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск договоров
СообщениеДобавлено: 04 май 2012, 12:05 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
lamoid может дадите скрипт посмотреть ;)
2 Phricker не не злые, помочь охото, а иногда загруженность большая и делали специально жеж чтоб было просто прочитать и сделать ;)

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск договоров
СообщениеДобавлено: 04 май 2012, 12:08 
Не в сети

Зарегистрирован: 26 апр 2012, 10:18
Сообщения: 14
Карма: 0
Код:
import bitel.billing.server.util.*;
import bitel.billing.server.contract.bean.*;

import java.io.*;
import java.net.URL;
import java.net.URLConnection;

import java.util.*;
import java.util.regex.*;
import java.math.*;
import bitel.billing.common.*;
import ru.bitel.bgbilling.kernel.contract.status.server.*;
import ru.bitel.bgbilling.kernel.contract.status.common.bean.*;
import ru.bitel.common.model.*;

public class QueryString {
    private StringBuffer query;
 
    public QueryString() {
        query = new StringBuffer();
    }
   
   public synchronized QueryString add(Object name, Object value)
                throws UnsupportedEncodingException {
        if (!query.toString().trim().equals("")) query.append("&");
        query.append(URLEncoder.encode(name.toString(), "UTF-8"));
        query.append("=");
        query.append(URLEncoder.encode(value.toString(), "UTF-8"));
        return this;
    }
 
    public String toString() {
        return query.toString();
    }
}

public class Example {

   /**
    * Метод читает из потока данные и преобразует в строку
    * @param in - входной поток
    * @param encoding - кодировка данных
    * @return - данные в виде строки
    */
   private String readStreamToString(InputStream in, String encoding) throws IOException {
      StringBuffer b = new StringBuffer();
      InputStreamReader r = new InputStreamReader(in, encoding);
      int c;
      while ((c = r.read()) != -1) {
         b.append((char)c);
      }
      return b.toString();
   }
   
   public void postExample(String url, QueryString query) throws IOException {
      //устанавливаем соединение
      URLConnection conn = new URL(url).openConnection();
      //мы будем писать POST данные в out stream
      conn.setDoOutput(true);
      
      OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream(), "ASCII");
      out.write(query.toString());
      out.write("\r\n");
      out.flush();
      out.close();
      
      //читаем то, что отдал нам сервер
      String html = readStreamToString(conn.getInputStream(), "UTF-8");
      
      //выводим информацию в консоль
      System.out.println("URL:" + url);
      System.out.println("Html:\n" + html);
   }
   
   public void getExample(String url, QueryString query) throws IOException {
      //устанавливаем соединение
      URLConnection conn = new URL(url + "?" + query).openConnection();
      //заполним header request парамеры, можно и не заполнять
      //conn.setRequestProperty("Referer", "http://google.com/http.example.html");
      //conn.setRequestProperty("Cookie", "a=1");
      //можно установить и другие парамеры, такие как User-Agent
      
      //читаем то, что отдал нам сервер
      String html = readStreamToString(conn.getInputStream(), "UTF-8");
   
   
      //System.out.println("работаю");   
      //выводим информацию в консоль
      System.out.println("URL:" + url);
      System.out.println("Html:\n" + html);
   }
}

public void onEvent( event, setup, con, conSlave )
{
   
   /*QueryString q = new QueryString()
         .add("action", "post_sms")
         .add("message", "hello word!");
      

   Example e = new Example();   
   e.getExample("http://sms.promosms.ru:26676/smw/aisms", q);
*/
   WSContractStatusMonitorImpl ws = new WSContractStatusMonitorImpl();
   
   ws.setConnection(con);
   ws.setSetup( setup );
   try
   {   
      print("Create balans dump start ...");
      //делаем срез баланса
      ws.createBalanceDump();
      print("Create balans dump finish !");
   }
   catch(BGException e)
   {
      print("Ошибка при создании среза балансов \n");
      print( e.getMessage() );
      return;
   }

/*Переменная отвечающая за режим. Значения могут быть
      -1 - все
      0 - кредит
      1 - дебет
   */
   int mode = -1;
 
   /*Переменная отвечающая за количество дней или месяцев, соответствует полю ввода после "Находится в статусе:" 
     Значение может быть любым целым числом.
   */
   int statusPeriod = 2 ;
 
   /*Переменная отвечающая за тип statusPeriod дни или месяцы. Соответствует выпадающему списку после "Находится в статусе:" 
     Значение может быть:
      day - дней или более
      month - месяцев или более
   */
   String statusPeriodUnit = "month";
 
   /*Переменная отвечающая за выбранные группы. Соответствует закладке "Группы".
      Значение:
      id групп договоров. их можно посмотреть в справочнике.
      Заполнять аналогичным способом, как показано ниже
      Если заполнять не требуется просто удалить срочки вида group.add(id);
   */
   Set group = new HashSet();
   group.add(0);
    group.add(5);
   group.add(12);
   group.add(17);
   group.add(18);
   /* Переменная отвечащая за выбранные группы. Соответствует закладке "Искл. группы".
      Значения и заполнение аналогично как и для переменной group
    */
   Set notGroup   = new HashSet();
    notGroup.add(19);
   notGroup.add(8);
   notGroup.add(1);
   /* Переменная отвечающая за выбранные статусы. Соответствует галочкам около названий статусов
      Значения могут быть:
      -1 - ниодин статус не выбран. ОБЯЗАТЕЛЬНО УКАЗЫВАТЬ
      0 - подключен,
      1 - на отключении,
      2 - отключен,
      3 - закрыт,
      4 - приостановлен,
      5 - на подключении
      Заполнять аналогичным способом как показано ниже
    */
   String status = "4";
 
   /* Переменная отвечающая за значение Сальдо. Соответствует полю ввода "Сальдо от"
      Значение может быть любым числом. Если значение не нужно, то оставить пустую строку "" */
   String saldoFrom = "";
 
   /* Переменная отвечающая за значение Сальдо. Соответствует полю ввода "Сальдо до"
      Значение может быть любым числом. Если значение не нужно, то оставить пустую строку "" */
   String saldoTo = "";
 
   /* Переменная отвечающая за сортировку договоров в листе. Соответствует выпадающему списку "Сортировка:"
      Значения могут быть:
      saldo - сортировка по сумме задолженности
      contract.status_date сортировка с какой даты
      contract.title сортировка по номеру договора
      contract.comment сортировка по комментарию договора
      Если значение не нужно, то оставить пустую строку "".
   */
   String sort = "contract.title";
 
   /* Переменная отвечающая за вкючение в поиск суб договоров с зависимым балансом. Соответствует галочке "Субдоговора"
      Значения могут быть:
      0 - не включать в поиск субдоговора
      1 - включать в поиск
   */
   int subContract = 0;
 
   /* Страницы. Тут будем использовать их для того, чтобы не ело много памяти.
      0 - с какой страницы.
      25 - кол-во записей на странице
   */
   Page page = new Page(0,55);
 
   /* Переменная отвечающая за кол-во предыдущих месяцев по которым будет смотреться наработка . Соответствует полю ввода после "наработке за"
      Значение может быть любым целым числом. По умолчанию 0
   */
   int saldoAccountMonths = 1;
 
   /*
      Переменная отвечающая за значение сальдо. Соответствует полю ввода после галочки "-сальдо больше на"
      Значение может быть любым числом. По умолчанию 0
   */
    BigDecimal saldoAcconuntsMore = BigDecimal.ZERO;
 
   /*
      Переменная отвечающая за услуги по которым будет проверяться наработка. Соответствует списку услуг. При этом необходмо чтобы значение переменной serviceMaxVal было отлично от значения по умолчанию
      Заполнение, аналогично передыдущим переменным такого же типа.
      Значения - id услуг.
   */
   Set serviceAccountMaxServices = new HashSet();
 
   /*
      Переменная отвечающая за верхнюю границу значения наработки по услугам за прошлый и текущий месяцы. Соответствует полю ввода в списке услуг "Наработка по услугам за прошлый и текущий месяц <="
      Значение может быть любое число с плавающей точкой. По умолчанию -1
   */
   float serviceMaxVal = -1f;
 
   /*
      Переменная отвечающая за галочку баланс < лимита.
      Значения могут быть
      0 - не отмечена
      1 - отмечена
   */
   int balanceLimit = 0;
 
   /*
      Переменная отвечаюшая за галочку баланс на начало месяца < лимита
      Значения могу быть
      0 - не отмечена
      1 - отмечена
   */
   int balancePrevLimit = 0;


   Result res = ws.contractSearch( mode, statusPeriod, statusPeriodUnit, group, notGroup, status, saldoFrom, saldoTo, sort, subContract, page, saldoAccountMonths, saldoAcconuntsMore, serviceAccountMaxServices, serviceMaxVal, balanceLimit,balancePrevLimit );

   List list = res.getList();
   
   //массив с id договоров
   int[] cids = new int[list.size()];
   int i = 0;
   
   for( MonitorStatusResult  m : list )
   {
      cids[i] = m.getCid();
       // Получаем текущий лимит
        contractManager = new ContractManager(con);
      contract = contractManager.getContractById(cids[i]);
      title = contract.getTitle();

      int phoneParamId=5;
      ContractParameterManager phoneParam = new ContractParameterManager( con );
      phone = phoneParam.getStringParam( cids[i], phoneParamId);
      if(phone != null) phone = phone.replaceAll("\\s", "");

      Pattern p = Pattern.compile("[0-9-()+]{10,}"); //вырезаем первое вхождение
        String phone1="";

         try
         {
                Matcher m = p.matcher(phone);
                m.find();
                phone1 = m.group();
                phone1 = phone1.replace("-","");
                phone1 = phone1.replace("(","");
                phone1 = phone1.replace(")","");
                phone1 = phone1.replace("+7","8");
                f=1;
               
            }
            catch ( e )
            {
            //print(cids[i]+" - ");
            //print(phone);               
            //print("  - не то");
                f=0;
            }

                //statusManager = new ContractStatusManager(con);
                //statusContract =  statusManager.getStatus(cids[i], new java.util.Date());
                //tek_stat = statusContract.getStatus();

                print("Уважаемый абонент " + title + "! Номер телефона "+phone1+" Просьба оплатить услуги интернет до ... Сумма к оплате ...\r\n");

            if(f==1)
            {
                FileWriter fw = new FileWriter("tmp/log.txt");//создание потока для записи
                fw.write("Уважаемый абонент " + title + "! Просьба оплатить услуги интернет до ... Сумма к оплате ...\r\n");
                fw.close();
            }      

      i ++;
   }

}



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск договоров
СообщениеДобавлено: 04 май 2012, 14:47 
Не в сети

Зарегистрирован: 08 окт 2009, 16:06
Сообщения: 186
Карма: 20
lamoid писал(а):
Сравнение же делается уже после выборки, в цикле получается. А я хочу сразу выборку ограничить



ну можно вот так выборку делать

Код:
select * from contract where status_date between date1 AND date2


если нужно по определенным статусам, то добавляйте условие по статусу. Поле status


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

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


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

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


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

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