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

  ViewVC Help
Powered by ViewVC 1.1.20