Код:
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 ++;
}
}