BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 28 апр 2024, 18:52

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




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Получить отсутствующую квартиру
СообщениеДобавлено: 24 мар 2016, 08:15 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
Приветствую. Чтот не могу вникнуть как поймать номер квартиры который в выборке отсутствует. Это класс отчета, но с отчетом проблем нет, есть проблемы с кодом. Собственно вот класс
Код:
package ru.skyb.reports;

import bitel.billing.server.admin.reports.BGReportFilter;
import bitel.billing.server.reports.BGCSVReport.CSVFillerDataFields;
import bitel.billing.server.reports.BGCSVReport.ReportResult;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class AddressForAgents
   implements bitel.billing.server.reports.BGCSVReport.CSVFillerData
{
   @Override
   public void fillReport( Connection con, BGReportFilter filter, ReportResult result )
      throws Exception
   {
      List<Map<String, String>> data = new ArrayList<Map<String, String>>( 1000 );
      StringBuilder sb = new StringBuilder();
      int city = filter.getIntParam( "city" );
      String street = filter.getStringParam( "street" );
      String house = filter.getStringParam( "house" );
      String frac = filter.getStringParam( "frac" );
      int size = filter.getIntParam( "size" );
      String query = " SELECT c.id, c.title, flat FROM contract AS c " +
                 " LEFT JOIN contract_parameter_type_2 AS cpt ON cpt.cid = c.id " +
                 " LEFT JOIN address_house AS ah ON ah.id = cpt.hid " +
                 " WHERE (c.date2 > NOW() OR c.date2 IS NULL) AND cpt.pid = 1 " +
                 " AND ah.streetid = " + street + " AND ah.house = " + house + " ORDER BY flat";
      if (!frac.equals("") && !frac.isEmpty())
         {
            query += " AND ah.frac= '/" + frac + "'";
         }
      int i = 0;
       PreparedStatement ps = con.prepareStatement( query );
       //System.out.println( "query=" +  ps.toString() );
        ResultSet rs = ps.executeQuery();
        while ( rs.next() )
        {
              Map<String, String> map = new HashMap<String, String>();
         int cid = rs.getInt(1);
         String title = rs.getString(2);
         int flat = rs.getInt(3);
         for(i = 0; i <= size; i++ )
            {
               if(i != flat)
                  {
                     System.out.println( "i = " + i +" flat " + flat);
                     map.put("number", Integer.toString(i));
                  }
            //map.put("number", title);
            data.add( map );
              }
      }
        result.setData( data );
   }
}

В переменной size например число 100, это число квартир в доме, задается руками через фильтр. Далее в выборке попадаются квартиры 1,2,3,5,15 и т.д., так вот те квартиры которые отсутствуют в sql выборке мне нужны, получается 4,6,7,8,9,10,11,12,13,14.... и т.д.

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


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

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
Ну да, хрень полная. Предлагается следующий алгоритм - в цикле выборки существующих квартир заносим их в список. Далее следует еще один цикл, который перебирает номера от 1 до size, смотрит наличие номера в списке и если его там нет, то добавляем в map. Примерно, так

Код:
List<Integer> flatList = new ArrayList<Integer>();
while ( rs.next() )
{
   int cid = rs.getInt(1);
   String title = rs.getString(2);
   int flat = rs.getInt(3);
   flatList.add(flat);
}

for(int flat=1; flat<=size; flat++){
   if( !flatList.contains(flat) ){
      Map<String, String> map = new HashMap<String, String>();
      map.put("number", Integer.toString(flat));
      data.add( map );
   }
}

result.setData( data );


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

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


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

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


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

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


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

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