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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3070 - (show annotations) (download)
Fri Jul 22 09:53:45 2016 UTC (7 years, 9 months ago) by torben
File size: 7300 byte(s)
Minor fix to csv header
1 package dk.daoas.adressevedligehold.dawa;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.List;
6 import java.util.Map;
7 import java.util.Map.Entry;
8 import java.util.TreeMap;
9
10 import com.google.common.base.Splitter;
11
12 import dk.daoas.adressevedligehold.MailSender;
13 import dk.daoas.adressevedligehold.beans.Address;
14 import dk.daoas.adressevedligehold.beans.Address.AddressState;
15 import dk.daoas.adressevedligehold.db.DatabaseCoverageUpdate;
16 import dk.daoas.adressevedligehold.tasks.Task;
17 import dk.daoas.adressevedligehold.tasks.TaskLogger;
18 import dk.daoas.adressevedligehold.util.CountMap;
19 import dk.daoas.adressevedligehold.util.DeduplicateHelper;
20 import dk.daoas.adressevedligehold.util.TimingHelper;
21
22 /*
23 * Alle regioner: http://dawa.aws.dk/regioner/
24 * Enkelt region: http://dawa.aws.dk/regioner/{region}
25 */
26
27
28 public class DawaTask extends Task {
29
30 final static String KOMMENTAR_TEMPLATE = "Oprettet via DAWA";
31
32 private TaskLogger logger = TaskLogger.getInstance();
33
34 private short regionCode;
35 private String regionName;
36
37 int antalBehandlede = 0;
38 int antalKommuner = 0;
39
40
41 DeduplicateHelper<String> dedup = new DeduplicateHelper<>();
42
43
44
45
46 public DawaTask(short regionCode, String regionName){
47 this.regionCode = regionCode;
48 this.regionName = regionName;
49
50 }
51
52 @Override
53 protected void taskRun() throws Exception {
54 TimingHelper timer = new TimingHelper();
55
56 DatabaseCoverageUpdate db = new DatabaseCoverageUpdate();
57
58 DawaWebservice dawa = new DawaWebservice();
59 TreeMap<String, DawaGade> search = new TreeMap<>();
60
61 // stage 1 - hent alle data
62 List<Address> adresser = db.getAllAdresses();
63
64
65 // stage 2 opbyg søge struktur
66 logger.info("Building search structure");
67
68
69 for (Address addr : adresser) {
70 String dav = getDAVid(addr);
71 DawaGade gade = search.get(dav);
72 if (gade == null) {
73 gade = new DawaGade();
74 search.put(dav, gade);
75 }
76 gade.gadeids.add( addr.gadeid );
77 gade.adresser.add(addr);
78 }
79 logger.info("Build search structure done");
80
81 Map<String,Integer> kommuner = dawa.kommunerIRegion(regionCode);
82
83 String subject = "DAWA indlæsning - " + regionName;
84
85 StringBuilder headerSB = new StringBuilder();
86 headerSB.append("<h1>Indlæsnings rapport for " + regionName + " </h1><br>");
87
88 List<Address> totalNye = new ArrayList<>();
89 List<Address> totalFejl = new ArrayList<>();
90 CountMap totalUkendtDAV = new CountMap();
91 CountMap totalDobbeltDav = new CountMap();
92
93
94
95 antalKommuner = kommuner.size();
96
97
98 StringBuilder sb = new StringBuilder();
99
100 for (Map.Entry<String, Integer> entry : kommuner.entrySet()) {
101 int kommunekode = entry.getValue();
102 String kommunenavn = entry.getKey();
103
104 logger.info("Behandler: " + kommunekode + " " + kommunenavn);
105
106
107 List<Address> dawaListe = dawa.adresserIKommune(kommunekode);
108 // stage 3 søg
109 CountMap ukendteDAV = new CountMap();
110 CountMap dobbeltGadeidDAV = new CountMap();
111 List<Address> nyeAdresser = new ArrayList<>();
112
113 for (Address dawaAddr : dawaListe) {
114 String dav = getDAVid(dawaAddr);
115 DawaGade gade = search.get(dav);
116 if (gade == null) {
117 String key = dav + " " + dawaAddr.vejnavn;
118 ukendteDAV.increment(key);
119 continue;
120 }
121
122 if (gade.gadeids.size() != 1) {
123 String key = dav + " " + dawaAddr.vejnavn;
124 dobbeltGadeidDAV.increment(key);
125 continue;
126 }
127
128 boolean fundet = false;
129 for (Address target : gade.adresser) {
130 if ( target.husnr == dawaAddr.husnr && target.husnrbogstav.equals(dawaAddr.husnrbogstav) ) {
131 fundet = true;
132 break;
133 }
134 }
135
136 if (fundet == false) {
137 dawaAddr.gadeid = gade.gadeids.iterator().next();
138 dawaAddr.state = AddressState.CREATED;
139 dawaAddr.kommentar = KOMMENTAR_TEMPLATE;
140 nyeAdresser.add(dawaAddr);
141 }
142 }
143 logger.info("Address Search done - starting save to DB");
144
145 db.saveNewAddresses(nyeAdresser);
146
147 logger.info("Save to db done - adding to report mail");
148
149 List<Address> saveOK = new ArrayList<>();
150 List<Address> saveFail = new ArrayList<>();
151 for (Address a : nyeAdresser) {
152 if (a.state == AddressState.CREATE_FAIL) {
153 saveFail.add(a);
154 } else {
155 saveOK.add(a);
156 }
157 }
158
159 totalNye.addAll(saveOK);
160 totalFejl.addAll(saveFail);
161
162 totalUkendtDAV.putAll(ukendteDAV);
163 totalDobbeltDav.putAll(dobbeltGadeidDAV);
164
165
166 antalBehandlede++;
167
168
169 sb.append("<h2>Kommune: " + kommunenavn + "</h2>\n");
170
171 sb.append("Kommunekode: " + kommunekode + "<br>\n");
172 sb.append("Antal Inserts: " + saveOK.size() + "<br>\n");
173 sb.append("Antal insert fails: " + saveFail.size() + "<br>\n");
174 sb.append("Antal ukendte dav: " + ukendteDAV.size() + "<br>\n");
175 sb.append("Antal dobbelt gadeid dav: " + dobbeltGadeidDAV.size() + "<br>\n");
176 }
177
178 logger.info("Sendingreport mail");
179
180 headerSB.append("Antal Inserts: " + totalNye.size() + "<br>\n");
181 headerSB.append("Antal insert fails: " + totalFejl.size() + "<br>\n");
182 headerSB.append("Antal ukendte dav: " + totalUkendtDAV.size() + "<br>\n");
183 headerSB.append("Antal dobbelt gadeid dav: " + totalDobbeltDav.size() + "<br>\n");
184 headerSB.append("Elapsed: " + timer.getElapsed() + " ms.<br>\n");
185
186 Map<String,String> attachments = new TreeMap<>();
187 attachments.put("saveok.csv", buildAddressFile(totalNye) );
188 attachments.put("savefailed.csv", buildAddressFile(totalFejl) );
189
190 attachments.put("ukendte_dav.csv", buildDavFile(totalUkendtDAV) );
191 attachments.put("dobbelt_dav_gadeid.csv", buildDavFile(totalDobbeltDav) );
192
193
194 MailSender.sendMailWithAttachments(subject, headerSB.toString() + sb.toString(), attachments);
195
196
197 //Cleaning
198 dedup.clear();
199 }
200
201 private String buildDavFile(CountMap dav) {
202 StringBuilder sb = new StringBuilder();
203
204 sb.append("DAVid;Vejnavn;Antal\r\n");
205 for ( Entry<String,Integer> entry : dav.entrySet()) {
206
207 List<String> split = Splitter.on(' ').limit(2).splitToList(entry.getKey());
208 sb.append( split.get(0) ).append(";");//DAVid
209 sb.append( split.get(1) ).append(";");//vejnavn
210
211 sb.append( entry.getValue() ).append("\r\n");//vejnavn
212
213 }
214
215 return sb.toString();
216 }
217
218 private String buildAddressFile(List<Address> addr) {
219
220 Collections.sort(addr); //brug dens egen compareTo funktion
221
222 StringBuilder sb = new StringBuilder();
223
224 sb.append("GadeID;Postnr;Kom.kode;Vejkode;Vejnavn;Husnr;Litra\r\n");
225 for (Address a: addr) {
226 sb.append(a.gadeid).append(";");
227 sb.append(a.postnr).append(";");
228 sb.append(a.kommunekode).append(";");
229 sb.append(a.vejkode).append(";");
230 sb.append(a.vejnavn).append(";");
231 sb.append(a.husnr).append(";");
232 sb.append(a.husnrbogstav).append("\r\n");
233 }
234 return sb.toString();
235
236 }
237
238
239 String getDAVid(Address addr) {
240 String dav = String.format("%04d%03d%04d", addr.postnr, addr.kommunekode, addr.vejkode);
241
242 return dedup.getInstance(dav);
243 }
244
245 @Override
246 public String getDescription() {
247 return "DawaTask";
248 }
249
250 @Override
251 public String getDetail() {
252 return "Region: " + regionCode + "/" + regionName;
253 }
254
255 @Override
256 public double getPercentCompleted() {
257 if (antalKommuner == 0) {
258 return 0;
259 }
260
261 return (antalBehandlede / ((double)antalKommuner) ) * 100.0;
262
263 }
264
265
266
267 }

  ViewVC Help
Powered by ViewVC 1.1.20