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

Annotation of /dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/db/DatabaseLayer.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2395 - (hide annotations) (download)
Fri Feb 27 09:39:05 2015 UTC (9 years, 3 months ago) by torben
Original Path: dao/DaoAdresseService/src/dk/daoas/daoadresseservice/db/DatabaseLayer.java
File size: 9955 byte(s)
1) simplify helper code
2) read alias table from database and use 
1 torben 2274 package dk.daoas.daoadresseservice.db;
2    
3    
4     import java.sql.Connection;
5 torben 2372 import java.sql.PreparedStatement;
6 torben 2274 import java.sql.ResultSet;
7     import java.sql.SQLException;
8     import java.sql.Statement;
9     import java.util.ArrayList;
10 torben 2279 import java.util.HashMap;
11 torben 2274 import java.util.List;
12 torben 2279 import java.util.Map;
13 torben 2274
14     import dk.daoas.daoadresseservice.DaekningsType;
15 torben 2282 import dk.daoas.daoadresseservice.beans.Address;
16 torben 2395 import dk.daoas.daoadresseservice.beans.AliasBean;
17 torben 2282 import dk.daoas.daoadresseservice.beans.ExtendedBean;
18     import dk.daoas.daoadresseservice.beans.HundredePctBean;
19 torben 2384 import dk.daoas.daoadresseservice.beans.LoggedAddress;
20 torben 2372 import dk.daoas.daoadresseservice.beans.SearchResult;
21 torben 2316 import dk.daoas.daoadresseservice.util.DeduplicateHelper;
22 torben 2274
23     public class DatabaseLayer {
24    
25 torben 2337 static boolean DEBUG = false;
26    
27 torben 2274 public static List<Address> getAllAdresses() throws SQLException {
28 torben 2337 String debugFilter = DatabaseLayer.DEBUG ? " AND postnr = 8700 " : "";
29 torben 2274
30 torben 2283 String sql = "SELECT id,vejnavn,husnr,husnrbogstav,kommunekode,vejkode,postnr,gadeid,upper(distributor) AS distributor,dbkbane,koreliste,rute "
31 torben 2274 + "FROM fulddaekning.adressetabel "
32 torben 2296 + "WHERE gadeid IS NOT NULL "
33 torben 2337 + debugFilter
34 torben 2274 ;
35    
36 torben 2372 try ( Connection conn = DBConnection.getConnection();
37     Statement stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
38     ) {
39     stmt.setFetchSize(Integer.MIN_VALUE);
40     ResultSet res = stmt.executeQuery(sql);
41 torben 2308
42 torben 2372 List<Address> list = new ArrayList<Address>(2600000);//initial capacity 2.6 mio
43 torben 2274
44 torben 2372 DeduplicateHelper<String> vejnavnCache = new DeduplicateHelper<String>();
45     DeduplicateHelper<String> husnrbogstavCache = new DeduplicateHelper<String>();
46     DeduplicateHelper<String> distributorCache = new DeduplicateHelper<String>();
47     DeduplicateHelper<String> korelisteCache = new DeduplicateHelper<String>();
48     DeduplicateHelper<String> ruteCache = new DeduplicateHelper<String>();
49    
50 torben 2274
51 torben 2372 while (res.next()) {
52    
53     Address a = new Address();
54     a.id = res.getInt(1);
55     a.vejnavn = vejnavnCache.getInstance( res.getString(2) );
56     a.husnr = res.getInt(3);
57     a.husnrbogstav = husnrbogstavCache.getInstance( res.getString(4) );
58     a.kommunekode = res.getInt(5);
59     a.vejkode = res.getInt(6);
60     a.postnr = res.getInt(7);
61     a.gadeid = res.getLong(8);
62     a.distributor = distributorCache.getInstance(res.getString(9));
63     a.dbkBane = res.getInt(10);
64     a.koreliste = korelisteCache.getInstance( res.getString(11) );
65     a.rute = ruteCache.getInstance( res.getString(12) );
66    
67     //a.vasketVejnavn = AddressUtils.vaskVejnavn(a.vejnavn);
68    
69     if (a.rute != null && a.rute.length()> 0) {
70     a.daekningsType = DaekningsType.DAEKNING_DIREKTE;
71     } else {
72     a.daekningsType = DaekningsType.DAEKNING_IKKEDAEKKET;
73     }
74    
75     list.add(a);
76     }
77     res.close();
78     stmt.close();
79     conn.close();
80 torben 2274
81 torben 2372 System.out.println("Loaded " + list.size() + " adresses");
82    
83     return list;
84 torben 2274 }
85     }
86 torben 2276
87 torben 2395 public static List<AliasBean> getAliasList() throws SQLException {
88    
89    
90     String sql = "SELECT postnr,vejnavn,aliasvejnavn " +
91     "FROM bogleveringer.vejtabelprod "
92     ;
93    
94     try ( Connection conn = DBConnection.getConnection();
95     Statement stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
96     ) {
97    
98     stmt.setFetchSize(Integer.MIN_VALUE);
99    
100     ResultSet res = stmt.executeQuery(sql);
101    
102     DeduplicateHelper<String> vejCache = new DeduplicateHelper<String>();
103    
104     List<AliasBean> list = new ArrayList<AliasBean>( 5000);
105     while (res.next()) {
106    
107     AliasBean ab = new AliasBean();
108     ab.postnr = res.getInt(1);
109     ab.vejnavn = vejCache.getInstance( res.getString(2) );
110     ab.aliasVejnavn = vejCache.getInstance( res.getString(3) );
111    
112     list.add(ab);
113     }
114    
115     res.close();
116    
117     System.out.println("Loaded " + list.size() + " aliase beans");
118    
119     return list;
120     }
121    
122     }
123    
124 torben 2279 public static List<ExtendedBean> getExtendedAdresslist() throws SQLException {
125 torben 2337 String debugFilter1 = DatabaseLayer.DEBUG ? " WHERE orgPostnr = 8700 " : "";
126     String debugFilter2 = DatabaseLayer.DEBUG ? " AND orgPostnr = 8700 " : "";
127 torben 2296
128 torben 2337
129 torben 2283 String sql = "select orgid, a.id as targetid, afstand, LOWER(type) as type from fulddaekning.afstand_anden_rute a " +
130 torben 2276 "join odbc.transporttype t " +
131     "on t.Art = 'Transpost' " +
132     "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) ) " +
133     "and t.Rute = a.Rute " +
134 torben 2337 debugFilter1 +
135 torben 2276
136     "UNION ALL " +
137    
138     "SELECT orgid, a.id as targetid, afstand,'' as type FROM fulddaekning.afstand_anden_rute_bk a " +
139     "left join bogleveringer.postnummerdistributor d on d.PostNr = a.orgPostnr " +
140 torben 2337 "WHERE d.Distributor <> 10057 " +
141     debugFilter2
142 torben 2276 ;
143    
144 torben 2372 try ( Connection conn = DBConnection.getConnection();
145     Statement stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
146     ) {
147    
148 torben 2308
149 torben 2372 stmt.setFetchSize(Integer.MIN_VALUE);
150 torben 2318
151 torben 2372 ResultSet res = stmt.executeQuery(sql);
152    
153     DeduplicateHelper<String> transportCache = new DeduplicateHelper<String>();
154    
155     List<ExtendedBean> list = new ArrayList<ExtendedBean>( 350000); //Initial capacity 350K
156     while (res.next()) {
157    
158     ExtendedBean eb = new ExtendedBean();
159     eb.orgId = res.getInt(1);
160     eb.targetId = res.getInt(2);
161     eb.afstand = res.getDouble(3);
162     eb.transport = transportCache.getInstance(res.getString(4));
163    
164     list.add(eb);
165     }
166    
167     res.close();
168    
169     System.out.println("Loaded " + list.size() + " extendedbeans");
170    
171     return list;
172 torben 2276 }
173     }
174    
175 torben 2279 public static Map<Integer,HundredePctBean> get100PctList() throws SQLException {
176 torben 2283 String sql = "SELECT postnr,UPPER(distributor) as distributor,rute,koreliste,dbkbane " +
177 torben 2279 "FROM bogleveringer.adresser_udenfor_daekning";
178    
179 torben 2372 try ( Connection conn = DBConnection.getConnection();
180     Statement stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
181     ) {
182     ResultSet res = stmt.executeQuery(sql);
183    
184     Map<Integer,HundredePctBean> map = new HashMap<Integer,HundredePctBean>();
185 torben 2279
186 torben 2372 DeduplicateHelper<String> distributorCache = new DeduplicateHelper<String>();
187 torben 2317
188 torben 2372 while (res.next()) {
189    
190    
191     HundredePctBean bean = new HundredePctBean();
192     bean.postnr = res.getInt(1);
193     bean.distributor = distributorCache.getInstance(res.getString(2));
194     bean.rute = res.getString(3);
195     bean.koreliste = res.getString(4);
196     bean.dbkBane = res.getInt(5);
197    
198     map.put(bean.postnr, bean);
199     }
200    
201     res.close();
202    
203     System.out.println("Loaded " + map.size() + " 100pct beans");
204    
205     return map;
206 torben 2279 }
207    
208 torben 2372 }
209    
210     public static void saveRequestLog(String brugerid, String postnr, String adresse, SearchResult result) throws SQLException {
211     String sql = "INSERT INTO logs.hentruteinformation (postnr,adresse,vejnavn,googlevejnavn,husnr,husnr_bogstav,etage,lejlighed,rest,brugerid,status, indlast) " +
212     "VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW() )";
213 torben 2279
214 torben 2372
215 torben 2279
216 torben 2372 try ( Connection conn = DBConnection.getConnection();
217     PreparedStatement stmt = conn.prepareStatement(sql);
218     ) {
219    
220     stmt.setInt( 1, safeInt(postnr) );
221     stmt.setString( 2, adresse);
222     stmt.setString( 3, result.splitResult.vej);
223     stmt.setString( 4, coalesce(result.googleVej,result.osmVej) );
224     stmt.setString( 5, nullify(result.splitResult.husnr) );
225     stmt.setString( 6, result.splitResult.litra);
226     stmt.setString( 7, result.splitResult.etage);
227     stmt.setString( 8, result.splitResult.lejlighed);
228     stmt.setString( 9, result.splitResult.resten);
229     stmt.setString(10, brugerid);
230     stmt.setInt(11, getStatusInt(result.status) );
231    
232     stmt.executeUpdate();
233    
234     }
235     }
236    
237 torben 2384 /*
238     * Bruges til at sammenligne gammel og ny adresse service - kan fjernes engang efter at vi er skiftet til ny service
239     */
240     public static List<LoggedAddress> getLoggedAdresses(int antaldage) throws SQLException {
241     String sql = "select postnr,adresse,status from logs.hentruteinformation where indlast>=date_sub(curdate(), interval " + antaldage + " day) " +
242     "and status IN (10,11,12) " +
243     "group by postnr,adresse "
244     ;
245    
246     try ( Connection conn = DBConnection.getConnection();
247     Statement stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
248     ) {
249    
250    
251     stmt.setFetchSize(Integer.MIN_VALUE);
252    
253     ResultSet res = stmt.executeQuery(sql);
254    
255     List<LoggedAddress> result = new ArrayList<LoggedAddress>();
256    
257     while (res.next()) {
258     LoggedAddress a = new LoggedAddress();
259     a.postnr = res.getInt(1);
260     a.adresse = res.getString(2);
261     a.status = res.getInt(3);
262    
263     result.add(a);
264     }
265    
266     res.close();
267    
268     return result;
269     }
270     }
271    
272 torben 2372 private static int getStatusInt(SearchResult.Status status) {
273    
274     switch (status) {
275     case ERROR_UNKNOWN_POSTAL:
276     return 20;
277     case ERROR_MISSING_HOUSENUMBER:
278     return 21;
279     case ERROR_UNKNOWN_STREETNAME:
280     return 22;
281     case ERROR_UNKNOWN_ADDRESSPOINT:
282     return 23;
283     case STATUS_NOT_COVERED:
284     return 24;
285     case STATUS_OK:
286     return 25;
287    
288     default:
289     return 29;
290     }
291     }
292    
293     private static int safeInt(String str) {
294     try {
295     return Integer.parseInt( str );
296     } catch (NumberFormatException e) {
297     return 0;
298     }
299     }
300    
301     private static String nullify(String str) {
302     if (str == null)
303     return null;
304 torben 2279
305 torben 2372 if (str.equals("")) {
306     return null;
307     } else {
308     return str;
309     }
310 torben 2279 }
311    
312 torben 2372 private static String coalesce(String s1, String s2) {
313     if (s1 != null)
314     return s1;
315    
316     return s2;
317     }
318    
319    
320 torben 2274 }

  ViewVC Help
Powered by ViewVC 1.1.20