/[projects]/dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/db/DatabaseLayerImplementation.java
ViewVC logotype

Diff of /dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/db/DatabaseLayerImplementation.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2609 by torben, Wed Jul 15 08:37:40 2015 UTC revision 2822 by torben, Tue Jan 19 10:23:47 2016 UTC
# Line 11  import java.util.List; Line 11  import java.util.List;
11  import java.util.Map;  import java.util.Map;
12    
13  import dk.daoas.daoadresseservice.AddressUtils;  import dk.daoas.daoadresseservice.AddressUtils;
 import dk.daoas.daoadresseservice.DaekningsType;  
14  import dk.daoas.daoadresseservice.beans.Address;  import dk.daoas.daoadresseservice.beans.Address;
15  import dk.daoas.daoadresseservice.beans.AliasBean;  import dk.daoas.daoadresseservice.beans.AliasBean;
16  import dk.daoas.daoadresseservice.beans.ExtendedBean;  import dk.daoas.daoadresseservice.beans.ExtendedBean;
17  import dk.daoas.daoadresseservice.beans.HundredePctBean;  import dk.daoas.daoadresseservice.beans.HundredePctBean;
 import dk.daoas.daoadresseservice.beans.LoggedAddress;  
18  import dk.daoas.daoadresseservice.beans.SearchResult;  import dk.daoas.daoadresseservice.beans.SearchResult;
19  import dk.daoas.daoadresseservice.util.DeduplicateHelper;  import dk.daoas.daoadresseservice.util.DeduplicateHelper;
20    import dk.daoas.daoadresseservice.util.TimingHelper;
21    
22  public class DatabaseLayerImplementation implements DatabaseLayer {  public class DatabaseLayerImplementation implements DatabaseLayer {
23                    
# Line 26  public class DatabaseLayerImplementation Line 25  public class DatabaseLayerImplementation
25                    
26          @Override          @Override
27          public List<Address> getAllAdresses() throws SQLException {          public List<Address> getAllAdresses() throws SQLException {
28                    TimingHelper timing = new TimingHelper();
29                    
30                  String debugFilter = DatabaseLayerImplementation.DEBUG ? " AND postnr = 8700 " : "";                  String debugFilter = DatabaseLayerImplementation.DEBUG ? " AND postnr = 8700 " : "";
31                                    
32                  String sql =                  String sql =
33                                  "SELECT id,vejnavn,husnr,husnrbogstav,kommunekode,vejkode,postnr,gadeid,upper(distributor) AS distributor,dbkbane,koreliste,rute,korelisteloerdag,ruteloerdag,korelistesoendag,rutesoendag,latitude,longitude "                                  "SELECT id,vejnavn,husnr,husnrbogstav,kommunekode,vejkode,postnr,gadeid,upper(distributor) AS distributor,dbkbane,latitude,longitude, "
34                                    + "rutema,korelistema,ruteti,korelisteti,ruteon,korelisteon,ruteto,korelisteto,rutefr,korelistefr,rutelo,korelistelo,ruteso,korelisteso "
35                                  + "FROM fulddaekning.adressetabel "                                  + "FROM fulddaekning.adressetabel "
36                                  + "WHERE gadeid IS NOT NULL "                                  + "WHERE gadeid IS NOT NULL "
37                                  + debugFilter                                  + debugFilter
38                                  ;                                  ;
39    
40                                    
41                  try ( Connection conn = DBConnection.getConnection();                            try ( Connection conn = DBConnection.getConnection();          
42                                  Statement stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);                                  Statement stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
# Line 43  public class DatabaseLayerImplementation Line 46  public class DatabaseLayerImplementation
46                                                    
47                          List<Address> list = new ArrayList<Address>(2600000);//initial capacity 2.6 mio                          List<Address> list = new ArrayList<Address>(2600000);//initial capacity 2.6 mio
48                                                    
49                          DeduplicateHelper<String> vejnavnCache = new DeduplicateHelper<String>();                          DeduplicateHelper<String> vejnavnCache = new DeduplicateHelper<String>(81920);
50                          DeduplicateHelper<String> husnrbogstavCache = new DeduplicateHelper<String>();                          DeduplicateHelper<String> husnrbogstavCache = new DeduplicateHelper<String>();
51                          DeduplicateHelper<String> distributorCache = new DeduplicateHelper<String>();                          DeduplicateHelper<String> distributorCache = new DeduplicateHelper<String>();
52                          DeduplicateHelper<String> korelisteCache = new DeduplicateHelper<String>();                          DeduplicateHelper<String> dirigeringsCache = new DeduplicateHelper<String>(16*1024);
                         DeduplicateHelper<String> ruteCache = new DeduplicateHelper<String>();  
53                    
54                                                    
55                          while (res.next()) {                          while (res.next()) {
# Line 63  public class DatabaseLayerImplementation Line 65  public class DatabaseLayerImplementation
65                                  a.gadeid = res.getInt(8);                                  a.gadeid = res.getInt(8);
66                                  a.distributor = distributorCache.getInstance(res.getString(9));                                  a.distributor = distributorCache.getInstance(res.getString(9));
67                                  a.dbkBane = (short) res.getInt(10);                                  a.dbkBane = (short) res.getInt(10);
68                                    a.latitude = (float) res.getDouble(11);
69                                    a.longitude = (float) res.getDouble(12);
70                                                                    
71                                  a.koreliste = korelisteCache.getInstance( res.getString(11) );                                  a.ruteMandag = dirigeringsCache.getInstance( res.getString(13) );
72                                  a.rute = ruteCache.getInstance( res.getString(12) );                                  a.korelisteMandag = dirigeringsCache.getInstance( res.getString(14) );
                                 a.korelisteLordag = korelisteCache.getInstance( res.getString(13) );  
                                 a.ruteLordag = ruteCache.getInstance( res.getString(14) );                                
                                 a.korelisteSondag = korelisteCache.getInstance( res.getString(15) );  
                                 a.ruteSondag = ruteCache.getInstance( res.getString(16) );  
73                                                                    
74                                  a.latitude = (float) res.getDouble(17);                                  a.ruteTirsdag = dirigeringsCache.getInstance( res.getString(15) );
75                                  a.longitude = (float) res.getDouble(18);                                  a.korelisteTirsdag = dirigeringsCache.getInstance( res.getString(16) );                        
76    
77                                    a.ruteOnsdag = dirigeringsCache.getInstance( res.getString(17) );
78                                    a.korelisteOnsdag = dirigeringsCache.getInstance( res.getString(18) );
79                                                                    
80                                  //a.vasketVejnavn = AddressUtils.vaskVejnavn(a.vejnavn);                                  a.ruteTorsdag = dirigeringsCache.getInstance( res.getString(19) );
81                                    a.korelisteTorsdag = dirigeringsCache.getInstance( res.getString(20) );
82                                    
83                                    a.ruteFredag = dirigeringsCache.getInstance( res.getString(21) );
84                                    a.korelisteFredag = dirigeringsCache.getInstance( res.getString(22) );
85                                    
86                                    a.ruteLordag = dirigeringsCache.getInstance( res.getString(23) );
87                                    a.korelisteLordag = dirigeringsCache.getInstance( res.getString(24) );
88                                    
89                                    a.ruteSondag = dirigeringsCache.getInstance( res.getString(25) );
90                                    a.korelisteSondag = dirigeringsCache.getInstance( res.getString(16) );
91                                                                    
92                                                                    
93                                  //Ajourfør adresse objectets dækningstype                                  //Ajourfør adresse objectets dækningstype
# Line 83  public class DatabaseLayerImplementation Line 96  public class DatabaseLayerImplementation
96                                  list.add(a);                                  list.add(a);
97                          }                          }
98                          res.close();                          res.close();
                         stmt.close();  
                         conn.close();  
99                                                    
100                          System.out.println("Loaded " + list.size() + " adresses");                          
101                            System.out.println("DB Loaded " + list.size() + " adresses in " + timing.getElapsed() + "ms");
102                                                    
103                          return list;                          return list;
104                  }                  }
# Line 94  public class DatabaseLayerImplementation Line 106  public class DatabaseLayerImplementation
106                    
107          @Override          @Override
108          public List<AliasBean> getAliasList() throws SQLException {          public List<AliasBean> getAliasList() throws SQLException {
109                    TimingHelper timing = new TimingHelper();
110                                    
111    
112                  String sql = "SELECT postnr,vejnavn,aliasvejnavn " +                  String sql = "SELECT postnr,vejnavn,aliasvejnavn " +
# Line 123  public class DatabaseLayerImplementation Line 136  public class DatabaseLayerImplementation
136                                    
137                          res.close();                          res.close();
138                                                    
139                          System.out.println("Loaded " + list.size() + " aliase beans");                          System.out.println("DB Loaded " + list.size() + " aliase beans in " + timing.getElapsed() + "ms");
140                                                    
141                          return list;                          return list;
142                  }                  }
# Line 132  public class DatabaseLayerImplementation Line 145  public class DatabaseLayerImplementation
145                    
146          @Override          @Override
147          public List<ExtendedBean> getExtendedAdresslist() throws SQLException {          public List<ExtendedBean> getExtendedAdresslist() throws SQLException {
148                    
149                    TimingHelper timing = new TimingHelper();
150                    
151                  String debugFilter1 = DatabaseLayerImplementation.DEBUG ? " WHERE orgPostnr = 8700 " : "";                  String debugFilter1 = DatabaseLayerImplementation.DEBUG ? " WHERE orgPostnr = 8700 " : "";
152                  String debugFilter2 = DatabaseLayerImplementation.DEBUG ? " AND orgPostnr = 8700 " : "";                  String debugFilter2 = DatabaseLayerImplementation.DEBUG ? " AND orgPostnr = 8700 " : "";
153                                    
154                                    
155                  String sql = "select orgid, a.id as targetid, afstand, LOWER(type) as type from fulddaekning.afstand_anden_rute a " +                  String sql = "select orgid, a.id as targetid, afstand, LOWER(type) as type from fulddaekning.afstand_anden_rute a " +
156                                          "join odbc.transporttype t " +                                          "LEFT join odbc.transporttype t " +
157                                          "on t.Art = 'Transpost' " +                                          "ON (t.Rute = a.Rute) " +
                                         "and ( (t.Type = 'Cykel' and a.Afstand < 1.001) or (t.Type = 'Scooter' and a.Afstand < 1.201) or (t.Type = 'Bil' and a.Afstand < 2.601) ) " +  
                                         "and t.Rute = a.Rute " +  
158                                          debugFilter1 +                                          debugFilter1 +
159                                                                                    
160                                          "UNION ALL " +                                          "UNION ALL " +
# Line 176  public class DatabaseLayerImplementation Line 190  public class DatabaseLayerImplementation
190                                                    
191                          res.close();                          res.close();
192                                                    
193                          System.out.println("Loaded " + list.size() + " extendedbeans");                          System.out.println("DB Loaded " + list.size() + " extendedbeans in " + timing.getElapsed() + "ms");
194                                                    
195                          return list;                          return list;
196                  }                  }
# Line 184  public class DatabaseLayerImplementation Line 198  public class DatabaseLayerImplementation
198                    
199          @Override          @Override
200          public Map<Short,HundredePctBean> get100PctList() throws SQLException {          public Map<Short,HundredePctBean> get100PctList() throws SQLException {
201                    TimingHelper timing = new TimingHelper();
202                    
203                  String sql = "SELECT postnr,UPPER(distributor) as distributor,rute,koreliste,dbkbane " +                  String sql = "SELECT postnr,UPPER(distributor) as distributor,rute,koreliste,dbkbane " +
204                                           "FROM bogleveringer.adresser_udenfor_daekning";                                           "FROM bogleveringer.adresser_udenfor_daekning";
205                                    
# Line 195  public class DatabaseLayerImplementation Line 211  public class DatabaseLayerImplementation
211                          Map<Short, HundredePctBean> map = new HashMap<Short,HundredePctBean>();                          Map<Short, HundredePctBean> map = new HashMap<Short,HundredePctBean>();
212                                                    
213                          DeduplicateHelper<String> distributorCache = new DeduplicateHelper<String>();                          DeduplicateHelper<String> distributorCache = new DeduplicateHelper<String>();
214                            DeduplicateHelper<String> ruteCache = new DeduplicateHelper<String>();
215                            DeduplicateHelper<String> korelisteCache = new DeduplicateHelper<String>();
216                                                    
217                          while (res.next()) {                          while (res.next()) {
218                                                                    
# Line 202  public class DatabaseLayerImplementation Line 220  public class DatabaseLayerImplementation
220                                  HundredePctBean bean = new HundredePctBean();                                  HundredePctBean bean = new HundredePctBean();
221                                  bean.postnr = (short) res.getInt(1);                                  bean.postnr = (short) res.getInt(1);
222                                  bean.distributor = distributorCache.getInstance(res.getString(2));                                  bean.distributor = distributorCache.getInstance(res.getString(2));
223                                  bean.rute = res.getString(3);                                  bean.rute = ruteCache.getInstance( res.getString(3) );
224                                  bean.koreliste = res.getString(4);                                  bean.koreliste = korelisteCache.getInstance(res.getString(4) );
225                                  bean.dbkBane = (short)res.getInt(5);                                                      bean.dbkBane = (short)res.getInt(5);                    
226                                                                                                                    
227                                  map.put(bean.postnr, bean);                                  map.put(bean.postnr, bean);
# Line 211  public class DatabaseLayerImplementation Line 229  public class DatabaseLayerImplementation
229                                                    
230                          res.close();                          res.close();
231                                                    
232                          System.out.println("Loaded " + map.size() + " 100pct beans");                          System.out.println("DB Loaded " + map.size() + " 100pct beans in " + timing.getElapsed() + "ms");
233                                                    
234                          return map;                          return map;
235                  }                  }
# Line 219  public class DatabaseLayerImplementation Line 237  public class DatabaseLayerImplementation
237          }          }
238                    
239          @Override          @Override
240          public void saveRequestLog(String brugerid, String postnr, String adresse, SearchResult result) throws SQLException {          public void saveRequestLog(String brugerid, String postnr, String adresse, String omdelingsdag, SearchResult result) throws SQLException {
241                  String setVar = "set sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' ";                  String setVar = "set sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' ";
242                                    
243                  String sql = "INSERT INTO logs.hentruteinformation (postnr,adresse,vejnavn,googlevejnavn,husnr,husnr_bogstav,etage,lejlighed,rest,brugerid,status, indlast) " +                  String sql = "INSERT INTO logs.hentruteinformation (postnr,adresse,vejnavn,googlevejnavn,husnr,husnr_bogstav,etage,lejlighed,rest,brugerid,status, OmdelingDag, indlast) " +
244                                          "VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,  NOW() )";                                          "VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW() )";
245                                    
246    
247                                    
# Line 244  public class DatabaseLayerImplementation Line 262  public class DatabaseLayerImplementation
262                          stmt.setString( 7, result.splitResult.etage);                          stmt.setString( 7, result.splitResult.etage);
263                          stmt.setString( 8, result.splitResult.lejlighed);                          stmt.setString( 8, result.splitResult.lejlighed);
264                          stmt.setString( 9, result.splitResult.resten);                          stmt.setString( 9, result.splitResult.resten);
265                          stmt.setString(10, brugerid);                          stmt.setString(10, brugerid);                  
266                          stmt.setInt(11, getStatusInt(result.status) );                          stmt.setInt(11, getStatusInt(result.status) );
267                            stmt.setString(12, omdelingsdag);
268                                                    
269                          stmt.executeUpdate();                          stmt.executeUpdate();
270                                                    
271                  }                                }              
272          }          }
273                    
         /*  
          * Bruges til at sammenligne gammel og ny adresse service - kan fjernes engang efter at vi er skiftet til ny service  
          */  
         @Deprecated      
         public static List<LoggedAddress> getLoggedAdresses(int antaldage) throws SQLException {  
                 String sql = "select postnr,adresse,status from logs.hentruteinformation where indlast>=date_sub(curdate(), interval " + antaldage + " day) " +  
                                 "and status IN (10,11,12) " +  
                                 "group by postnr,adresse "  
                                 ;  
274    
                 try ( Connection conn = DBConnection.getConnection();            
                                 Statement stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);  
                                 ) {  
   
   
                         stmt.setFetchSize(Integer.MIN_VALUE);  
   
                         ResultSet res = stmt.executeQuery(sql);  
   
                         List<LoggedAddress> result = new ArrayList<LoggedAddress>();  
   
                         while (res.next()) {  
                                 LoggedAddress a = new LoggedAddress();                            
                                 a.postnr = res.getInt(1);                                
                                 a.adresse = res.getString(2);  
                                 a.status = res.getInt(3);  
   
                                 result.add(a);  
                         }  
   
                         res.close();  
   
                         return result;  
                 }  
         }  
275    
276                    
277          private static int safeInt(String str) {          private static int safeInt(String str) {

Legend:
Removed from v.2609  
changed lines
  Added in v.2822

  ViewVC Help
Powered by ViewVC 1.1.20