forum.bitel.ru
http://forum.bitel.ru/

Получить отсутствующую квартиру
http://forum.bitel.ru/viewtopic.php?f=19&t=11468
Страница 1 из 1

Автор:  skyb [ 24 мар 2016, 08:15 ]
Заголовок сообщения:  Получить отсутствующую квартиру

Приветствую. Чтот не могу вникнуть как поймать номер квартиры который в выборке отсутствует. Это класс отчета, но с отчетом проблем нет, есть проблемы с кодом. Собственно вот класс
Код:
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.... и т.д.

Автор:  barguzin2 [ 27 мар 2016, 16:27 ]
Заголовок сообщения:  Re: Получить отсутствующую квартиру

Ну да, хрень полная. Предлагается следующий алгоритм - в цикле выборки существующих квартир заносим их в список. Далее следует еще один цикл, который перебирает номера от 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 );

Автор:  skyb [ 28 мар 2016, 07:20 ]
Заголовок сообщения:  Re: Получить отсутствующую квартиру

Все вышло, с меня был поставлен плюс. Спасибо большое ;-)

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/