/[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 3012 - (show annotations) (download)
Wed Apr 20 13:51:24 2016 UTC (8 years, 1 month ago) by torben
File size: 6767 byte(s)


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

  ViewVC Help
Powered by ViewVC 1.1.20