/[projects]/dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/dawa/DawaTask.java
ViewVC logotype

Annotation of /dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/dawa/DawaTask.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3006 - (hide annotations) (download)
Tue Apr 19 15:49:14 2016 UTC (8 years, 1 month ago) by torben
File size: 6488 byte(s)
1) Load DAWA to local csv file
2) use commons CSV to parse downloaded file
3) read all kommunekoder(muncipality codes) in region from dawa and use this to handle each muncipality individualy (smaller batches)
1 torben 3002 package dk.daoas.adressevedligehold.dawa;
2    
3 torben 3003 import java.util.ArrayList;
4     import java.util.List;
5 torben 3006 import java.util.Map;
6 torben 3003 import java.util.Set;
7     import java.util.TreeMap;
8     import java.util.TreeSet;
9 torben 3002
10 torben 3003 import dk.daoas.adressevedligehold.MailSender;
11     import dk.daoas.adressevedligehold.beans.Address;
12     import dk.daoas.adressevedligehold.beans.Address.AddressState;
13     import dk.daoas.adressevedligehold.db.DatabaseCoverageUpdate;
14 torben 3002 import dk.daoas.adressevedligehold.tasks.Task;
15 torben 3003 import dk.daoas.adressevedligehold.tasks.TaskLogger;
16     import dk.daoas.adressevedligehold.util.DeduplicateHelper;
17 torben 3006 import dk.daoas.adressevedligehold.util.TimingHelper;
18 torben 3002
19     /*
20     * Alle regioner: http://dawa.aws.dk/regioner/
21     * Enkelt region: http://dawa.aws.dk/regioner/{region}
22     */
23    
24    
25     public class DawaTask extends Task {
26    
27 torben 3003 final String kommentarTemplate = "Oprettet via DAWA";
28    
29     private TaskLogger logger = TaskLogger.getInstance();
30    
31 torben 3002 private short regionCode;
32     private String regionName;
33    
34    
35 torben 3003
36     DatabaseCoverageUpdate db = new DatabaseCoverageUpdate();
37    
38     DeduplicateHelper<String> dedup = new DeduplicateHelper<>();
39    
40 torben 3002 public DawaTask(short regionCode, String regionName){
41     this.regionCode = regionCode;
42     this.regionName = regionName;
43    
44     }
45    
46     @Override
47     protected void taskRun() throws Exception {
48 torben 3006 TimingHelper timer = new TimingHelper();
49    
50 torben 3003 DawaWebservice dawa = new DawaWebservice();
51 torben 3006 TreeMap<String, DawaGade> search = new TreeMap<>();
52 torben 3003
53 torben 3006 // stage 1 - hent alle data
54 torben 3003 List<Address> adresser = db.getAllAdresses();
55    
56    
57     // stage 2 opbyg søge struktur
58     logger.info("Building search structure");
59 torben 3006
60 torben 3003
61     for (Address addr : adresser) {
62     String dav = getDAVid(addr);
63     DawaGade gade = search.get(dav);
64     if (gade == null) {
65     gade = new DawaGade();
66     search.put(dav, gade);
67     }
68     gade.gadeids.add( addr.gadeid );
69     gade.adresser.add(addr);
70     }
71     logger.info("Build search structure done");
72    
73 torben 3006 Map<String,Integer> kommuner = dawa.kommunerIRegion(regionCode);
74 torben 3003
75 torben 3006 String subject = "DAWA indlæsning done";
76    
77     StringBuilder headerSB = new StringBuilder();
78     headerSB.append("<h1>Indlæsnings rapport for " + regionName + " / " + regionCode + " </h1><br>");
79    
80     int totalAntalNye = 0;
81     int totalAntalFejl = 0;
82     int totalAntalUkendt = 0;
83     int totalAntalDobbelt = 0;
84    
85    
86     StringBuilder sb = new StringBuilder();
87    
88     for (Map.Entry<String, Integer> entry : kommuner.entrySet()) {
89     int kommunekode = entry.getValue();
90     String kommunenavn = entry.getKey();
91    
92     logger.info("Behandler: " + kommunekode + " " + kommunenavn);
93    
94    
95     List<Address> dawaListe = dawa.adresserIKommune(kommunekode);
96     // stage 3 søg
97     Set<String> ukendteDAV = new TreeSet<>();
98     Set<String> dobbeltGadeidDAV = new TreeSet<>();
99     List<Address> nyeAdresser = new ArrayList<>();
100    
101     for (Address dawaAddr : dawaListe) {
102     String dav = getDAVid(dawaAddr);
103     DawaGade gade = search.get(dav);
104     if (gade == null) {
105     ukendteDAV.add(dav + " " + dawaAddr.vejnavn);
106     continue;
107     }
108    
109     if (gade.gadeids.size() != 1) {
110     dobbeltGadeidDAV.add(dav + " " + dawaAddr.vejnavn);
111     }
112    
113     boolean fundet = false;
114     for (Address target : gade.adresser) {
115     if ( target.husnr == dawaAddr.husnr && target.husnrbogstav.equals(dawaAddr.husnrbogstav) ) {
116     fundet = true;
117     break;
118     }
119     }
120    
121     if (fundet == false) {
122     dawaAddr.gadeid = gade.gadeids.iterator().next();
123     dawaAddr.state = AddressState.CREATED;
124     dawaAddr.kommentar = kommentarTemplate;
125     nyeAdresser.add(dawaAddr);
126     }
127 torben 3003 }
128 torben 3006 logger.info("Address Search done - starting save to DB");
129 torben 3003
130 torben 3006 db.saveNewAddresses(nyeAdresser);
131    
132     logger.info("Save to db done - sending report mail");
133    
134     List<Address> saveOK = new ArrayList<>();
135     List<Address> saveFail = new ArrayList<>();
136     for (Address a : nyeAdresser) {
137     if (a.state == AddressState.CREATE_FAIL) {
138     saveFail.add(a);
139     } else {
140     saveOK.add(a);
141     }
142 torben 3003 }
143    
144 torben 3006 totalAntalNye += saveOK.size();
145     totalAntalFejl += saveFail.size();
146     totalAntalUkendt += ukendteDAV.size();
147     totalAntalDobbelt += dobbeltGadeidDAV.size();
148    
149    
150     sb.append("<h2>Kommune: " + kommunenavn + " / " + kommunekode + "</h2><br>\n");
151     sb.append("Antal Inserts: " + saveOK.size() + "<br>\n");
152     sb.append("Antal insert fails: " + saveFail.size() + "<br>\n");
153     sb.append("Antal ukendte dav: " + ukendteDAV.size() + "<br>\n");
154     sb.append("Antal dobbelt gadeid dav: " + dobbeltGadeidDAV.size() + "<br>\n");
155    
156     sb.append("<h3>Adresser ok:</h3>\n");
157     addressTable(sb, saveOK);
158    
159     sb.append("<h3>SQL INSERT fejl:</h3>\n");
160     addressTable(sb, saveFail);
161    
162     sb.append("<h3>Ukendte DAV:</h3>\n");
163     for (String dav : ukendteDAV) {
164     sb.append(dav + "<br>\n");
165 torben 3003 }
166    
167 torben 3006 sb.append("<h3>Dobbelt gadeid DAV:</h3>\n");
168     for (String dav : dobbeltGadeidDAV) {
169     sb.append(dav + "<br>\n");
170 torben 3003 }
171 torben 3006
172 torben 3003 }
173    
174 torben 3006 headerSB.append("Antal Inserts: " + totalAntalNye + "<br>\n");
175     headerSB.append("Antal insert fails: " + totalAntalFejl + "<br>\n");
176     headerSB.append("Antal ukendte dav: " + totalAntalUkendt + "<br>\n");
177     headerSB.append("Antal dobbelt gadeid dav: " + totalAntalDobbelt + "<br>\n");
178     headerSB.append("Elapsed: " + timer.getElapsed() + " ms.<br>\n");
179 torben 3003
180 torben 3006 MailSender.sendMail(subject, headerSB.toString() + sb.toString() );
181 torben 3002
182     }
183 torben 3003
184 torben 3005 private void addressTable(StringBuilder sb, List<Address> addr) {
185     sb.append("<table border=0>\n");
186     sb.append("<tr><th>GadeID</th><th>Postnr</th><th>Kom.kode</th><th>Vejkode</th><th>Vejnavn</th><th>Husnr<th><th>Litra</th></tr>");
187     for (Address a: addr) {
188     sb.append("<tr>");
189     sb.append("<td>&nbsp;").append(a.gadeid).append(" </td>");
190     sb.append("<td>&nbsp;").append(a.postnr).append(" </td>");
191     sb.append("<td>&nbsp;").append(a.kommunekode).append(" </td>");
192     sb.append("<td>&nbsp;").append(a.vejkode).append(" </td>");
193     sb.append("<td>&nbsp;").append(a.vejnavn).append(" </td>");
194     sb.append("<td>&nbsp;").append(a.husnr).append(" </td>");
195     sb.append("<td>&nbsp;").append(a.husnrbogstav).append(" </td>");
196     }
197     sb.append("</table><br>\n");
198    
199     }
200    
201 torben 3003 String getDAVid(Address addr) {
202     String dav = String.format("%04d%03d%04d", addr.postnr, addr.kommunekode, addr.vejkode);
203    
204     return dedup.getInstance(dav);
205     }
206 torben 3002
207     @Override
208     public String getDescription() {
209     return "DawaTask";
210     }
211    
212     @Override
213     public String getDetail() {
214     return "Region: " + regionCode + "/" + regionName;
215     }
216    
217     @Override
218     public double getPercentCompleted() {
219     return 0;
220     }
221    
222    
223    
224     }

  ViewVC Help
Powered by ViewVC 1.1.20