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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3122 - (hide annotations) (download)
Mon Oct 10 12:56:57 2016 UTC (7 years, 7 months ago) by torben
File size: 11130 byte(s)
Split unknown addresspoint op i unknown housenumber og unknown litra
1 torben 2608 package dk.daoas.daoadresseservice.db;
2    
3     import java.sql.Connection;
4     import java.sql.PreparedStatement;
5     import java.sql.ResultSet;
6     import java.sql.SQLException;
7     import java.sql.Statement;
8     import java.util.ArrayList;
9     import java.util.HashMap;
10     import java.util.List;
11     import java.util.Map;
12    
13 torben 2609 import dk.daoas.daoadresseservice.AddressUtils;
14 torben 2608 import dk.daoas.daoadresseservice.beans.Address;
15     import dk.daoas.daoadresseservice.beans.AliasBean;
16     import dk.daoas.daoadresseservice.beans.ExtendedBean;
17     import dk.daoas.daoadresseservice.beans.HundredePctBean;
18     import dk.daoas.daoadresseservice.beans.SearchResult;
19     import dk.daoas.daoadresseservice.util.DeduplicateHelper;
20 torben 2764 import dk.daoas.daoadresseservice.util.TimingHelper;
21 torben 2608
22     public class DatabaseLayerImplementation implements DatabaseLayer {
23    
24 torben 2826 public static final boolean DEBUG = false;
25 torben 2608
26     @Override
27     public List<Address> getAllAdresses() throws SQLException {
28 torben 2764 TimingHelper timing = new TimingHelper();
29    
30 torben 2608 String debugFilter = DatabaseLayerImplementation.DEBUG ? " AND postnr = 8700 " : "";
31    
32     String sql =
33 torben 2821 "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 torben 2827 + "FROM fulddaekning.adressetabel "
36 torben 2608 + "WHERE gadeid IS NOT NULL "
37     + debugFilter
38     ;
39 torben 2821
40 torben 2608
41     try ( Connection conn = DBConnection.getConnection();
42 torben 2943 Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
43 torben 2608 ) {
44     stmt.setFetchSize(Integer.MIN_VALUE);
45     ResultSet res = stmt.executeQuery(sql);
46    
47     List<Address> list = new ArrayList<Address>(2600000);//initial capacity 2.6 mio
48    
49 torben 2805 DeduplicateHelper<String> vejnavnCache = new DeduplicateHelper<String>(81920);
50 torben 2608 DeduplicateHelper<String> husnrbogstavCache = new DeduplicateHelper<String>();
51     DeduplicateHelper<String> distributorCache = new DeduplicateHelper<String>();
52 torben 2821 DeduplicateHelper<String> dirigeringsCache = new DeduplicateHelper<String>(16*1024);
53 torben 3110
54     DeduplicateHelper<String> baneCache = new DeduplicateHelper<String>();
55 torben 2608
56    
57     while (res.next()) {
58    
59     Address a = new Address();
60     a.id = res.getInt(1);
61     a.vejnavn = vejnavnCache.getInstance( res.getString(2) );
62     a.husnr = (short) res.getInt(3);
63     a.husnrbogstav = husnrbogstavCache.getInstance( res.getString(4) );
64     a.kommunekode = (short) res.getInt(5);
65     a.vejkode = (short)res.getInt(6);
66     a.postnr = (short)res.getInt(7);
67     a.gadeid = res.getInt(8);
68     a.distributor = distributorCache.getInstance(res.getString(9));
69 torben 3110 a.dbkBane = baneCache.getInstance( res.getString(10) );
70 torben 2821 a.latitude = (float) res.getDouble(11);
71     a.longitude = (float) res.getDouble(12);
72 torben 2608
73 torben 2966 a.routingMandag.rute = dirigeringsCache.getInstance( res.getString(13) );
74     a.routingMandag.koreliste = dirigeringsCache.getInstance( res.getString(14) );
75 torben 2608
76 torben 2966 a.routingTirsdag.rute = dirigeringsCache.getInstance( res.getString(15) );
77     a.routingTirsdag.koreliste = dirigeringsCache.getInstance( res.getString(16) );
78 torben 2821
79 torben 2966 a.routingOnsdag.rute = dirigeringsCache.getInstance( res.getString(17) );
80     a.routingOnsdag.koreliste = dirigeringsCache.getInstance( res.getString(18) );
81 torben 2608
82 torben 2966 a.routingTorsdag.rute = dirigeringsCache.getInstance( res.getString(19) );
83     a.routingTorsdag.koreliste = dirigeringsCache.getInstance( res.getString(20) );
84 torben 2608
85 torben 2966 a.routingFredag.rute = dirigeringsCache.getInstance( res.getString(21) );
86     a.routingFredag.koreliste = dirigeringsCache.getInstance( res.getString(22) );
87 torben 2608
88 torben 2966 a.routingLordag.rute = dirigeringsCache.getInstance( res.getString(23) );
89     a.routingLordag.koreliste = dirigeringsCache.getInstance( res.getString(24) );
90 torben 2821
91 torben 2966 a.routingSondag.rute = dirigeringsCache.getInstance( res.getString(25) );
92     a.routingSondag.koreliste = dirigeringsCache.getInstance( res.getString(26) );
93 torben 2821
94    
95 torben 2609 //Ajourfør adresse objectets dækningstype
96     AddressUtils.updateDaekningstype(a);
97    
98 torben 2608 list.add(a);
99     }
100     res.close();
101    
102 torben 2805
103 torben 2764 System.out.println("DB Loaded " + list.size() + " adresses in " + timing.getElapsed() + "ms");
104 torben 2608
105     return list;
106     }
107     }
108    
109     @Override
110     public List<AliasBean> getAliasList() throws SQLException {
111 torben 2764 TimingHelper timing = new TimingHelper();
112 torben 2608
113    
114     String sql = "SELECT postnr,vejnavn,aliasvejnavn " +
115     "FROM bogleveringer.vejtabelprod "
116     ;
117    
118     try ( Connection conn = DBConnection.getConnection();
119 torben 2943 Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
120 torben 2608 ) {
121    
122     stmt.setFetchSize(Integer.MIN_VALUE);
123    
124     ResultSet res = stmt.executeQuery(sql);
125    
126     DeduplicateHelper<String> vejCache = new DeduplicateHelper<String>();
127    
128     List<AliasBean> list = new ArrayList<AliasBean>( 5000);
129     while (res.next()) {
130    
131     AliasBean ab = new AliasBean();
132     ab.postnr = res.getShort(1);
133     ab.vejnavn = vejCache.getInstance( res.getString(2) );
134     ab.aliasVejnavn = vejCache.getInstance( res.getString(3) );
135    
136     list.add(ab);
137     }
138    
139     res.close();
140    
141 torben 2764 System.out.println("DB Loaded " + list.size() + " aliase beans in " + timing.getElapsed() + "ms");
142 torben 2608
143     return list;
144     }
145    
146     }
147    
148     @Override
149     public List<ExtendedBean> getExtendedAdresslist() throws SQLException {
150 torben 2764
151     TimingHelper timing = new TimingHelper();
152    
153 torben 2608 String debugFilter1 = DatabaseLayerImplementation.DEBUG ? " WHERE orgPostnr = 8700 " : "";
154     String debugFilter2 = DatabaseLayerImplementation.DEBUG ? " AND orgPostnr = 8700 " : "";
155    
156    
157     String sql = "select orgid, a.id as targetid, afstand, LOWER(type) as type from fulddaekning.afstand_anden_rute a " +
158 torben 2775 "LEFT join odbc.transporttype t " +
159     "ON (t.Rute = a.Rute) " +
160 torben 2608 debugFilter1 +
161    
162     "UNION ALL " +
163    
164     "SELECT orgid, a.id as targetid, afstand,'' as type FROM fulddaekning.afstand_anden_rute_bk a " +
165     "left join bogleveringer.postnummerdistributor d on d.PostNr = a.orgPostnr " +
166     "WHERE d.Distributor <> 10057 " +
167     debugFilter2
168     ;
169    
170     try ( Connection conn = DBConnection.getConnection();
171 torben 2943 Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
172 torben 2608 ) {
173    
174    
175     stmt.setFetchSize(Integer.MIN_VALUE);
176    
177     ResultSet res = stmt.executeQuery(sql);
178    
179     DeduplicateHelper<String> transportCache = new DeduplicateHelper<String>();
180    
181     List<ExtendedBean> list = new ArrayList<ExtendedBean>( 350000); //Initial capacity 350K
182     while (res.next()) {
183    
184     ExtendedBean eb = new ExtendedBean();
185     eb.orgId = res.getInt(1);
186     eb.targetId = res.getInt(2);
187     eb.afstand = (float) res.getDouble(3);
188     eb.transport = transportCache.getInstance(res.getString(4));
189    
190     list.add(eb);
191     }
192    
193     res.close();
194    
195 torben 2764 System.out.println("DB Loaded " + list.size() + " extendedbeans in " + timing.getElapsed() + "ms");
196 torben 2608
197     return list;
198     }
199     }
200    
201     @Override
202     public Map<Short,HundredePctBean> get100PctList() throws SQLException {
203 torben 2764 TimingHelper timing = new TimingHelper();
204    
205 torben 2608 String sql = "SELECT postnr,UPPER(distributor) as distributor,rute,koreliste,dbkbane " +
206     "FROM bogleveringer.adresser_udenfor_daekning";
207    
208     try ( Connection conn = DBConnection.getConnection();
209 torben 3026 Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
210 torben 2608 ) {
211     ResultSet res = stmt.executeQuery(sql);
212    
213     Map<Short, HundredePctBean> map = new HashMap<Short,HundredePctBean>();
214    
215     DeduplicateHelper<String> distributorCache = new DeduplicateHelper<String>();
216 torben 2763 DeduplicateHelper<String> ruteCache = new DeduplicateHelper<String>();
217     DeduplicateHelper<String> korelisteCache = new DeduplicateHelper<String>();
218 torben 3110 DeduplicateHelper<String> baneCache = new DeduplicateHelper<String>();
219 torben 2608
220     while (res.next()) {
221    
222    
223     HundredePctBean bean = new HundredePctBean();
224     bean.postnr = (short) res.getInt(1);
225     bean.distributor = distributorCache.getInstance(res.getString(2));
226 torben 2763 bean.rute = ruteCache.getInstance( res.getString(3) );
227     bean.koreliste = korelisteCache.getInstance(res.getString(4) );
228 torben 3110 bean.dbkBane = baneCache.getInstance(res.getString(5) );
229 torben 2608
230     map.put(bean.postnr, bean);
231     }
232    
233     res.close();
234    
235 torben 2764 System.out.println("DB Loaded " + map.size() + " 100pct beans in " + timing.getElapsed() + "ms");
236 torben 2608
237     return map;
238     }
239    
240     }
241    
242     @Override
243 torben 2665 public void saveRequestLog(String brugerid, String postnr, String adresse, String omdelingsdag, SearchResult result) throws SQLException {
244 torben 2608 String setVar = "set sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' ";
245    
246 torben 2666 String sql = "INSERT INTO logs.hentruteinformation (postnr,adresse,vejnavn,googlevejnavn,husnr,husnr_bogstav,etage,lejlighed,rest,brugerid,status, OmdelingDag, indlast) " +
247 torben 2665 "VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW() )";
248 torben 2608
249    
250    
251     try ( Connection conn = DBConnection.getConnection();
252     Statement setStmt = conn.createStatement();
253     PreparedStatement stmt = conn.prepareStatement(sql);
254     ) {
255    
256     setStmt.execute(setVar);
257    
258    
259     stmt.setInt( 1, safeInt(postnr) );
260     stmt.setString( 2, adresse);
261     stmt.setString( 3, result.splitResult.vej);
262     stmt.setString( 4, coalesce(result.googleVej,result.osmVej) );
263     stmt.setString( 5, nullify(result.splitResult.husnr) );
264     stmt.setString( 6, result.splitResult.litra);
265     stmt.setString( 7, result.splitResult.etage);
266     stmt.setString( 8, result.splitResult.lejlighed);
267     stmt.setString( 9, result.splitResult.resten);
268 torben 2667 stmt.setString(10, brugerid);
269     stmt.setInt(11, getStatusInt(result.status) );
270     stmt.setString(12, omdelingsdag);
271 torben 2608
272     stmt.executeUpdate();
273    
274     }
275     }
276    
277    
278    
279    
280     private static int safeInt(String str) {
281     try {
282     return Integer.parseInt( str );
283     } catch (NumberFormatException e) {
284     return 0;
285     }
286     }
287    
288     private static String nullify(String str) {
289     if (str == null)
290     return null;
291    
292     if (str.equals("")) {
293     return null;
294     } else {
295     return str;
296     }
297     }
298    
299     private static String coalesce(String s1, String s2) {
300     if (s1 != null)
301     return s1;
302    
303     return s2;
304     }
305    
306     public static int getStatusInt(SearchResult.Status status) {
307    
308     switch (status) {
309     case ERROR_UNKNOWN_POSTAL:
310     return 20;
311     case ERROR_MISSING_HOUSENUMBER:
312     return 21;
313     case ERROR_POSTBOX:
314     return 22;
315     case ERROR_UNKNOWN_STREETNAME:
316     return 23;
317 torben 3122 case ERROR_UNKNOWN_HOUSENUMBER:
318 torben 2608 return 24;
319 torben 3122
320 torben 2608 case STATUS_NOT_COVERED:
321     return 25;
322     case ERROR_INTERNAL: //
323 torben 3122 return 26;
324 torben 2608
325 torben 3122 case ERROR_UNKNOWN_LITRA: //Er kommet til senere, derfor ligger den paa 27 selvom den logisk set burde have haft 25
326     return 27;
327    
328 torben 2608 case STATUS_OK:
329     return 30;
330    
331     default:
332     return 31;
333     }
334     }
335    
336     }

  ViewVC Help
Powered by ViewVC 1.1.20