/[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 3009 - (show annotations) (download)
Tue Apr 19 20:22:43 2016 UTC (8 years ago) by torben
File size: 6512 byte(s)
rapport tweaks
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.DeduplicateHelper;
17 import dk.daoas.adressevedligehold.util.TimingHelper;
18
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 final String kommentarTemplate = "Oprettet via DAWA";
28
29 private TaskLogger logger = TaskLogger.getInstance();
30
31 private short regionCode;
32 private String regionName;
33
34
35
36 DatabaseCoverageUpdate db = new DatabaseCoverageUpdate();
37
38 DeduplicateHelper<String> dedup = new DeduplicateHelper<>();
39
40 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 TimingHelper timer = new TimingHelper();
49
50 DawaWebservice dawa = new DawaWebservice();
51 TreeMap<String, DawaGade> search = new TreeMap<>();
52
53 // stage 1 - hent alle data
54 List<Address> adresser = db.getAllAdresses();
55
56
57 // stage 2 opbyg søge struktur
58 logger.info("Building search structure");
59
60
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 Map<String,Integer> kommuner = dawa.kommunerIRegion(regionCode);
74
75 String subject = "DAWA indlæsning - " + regionName;
76
77 StringBuilder headerSB = new StringBuilder();
78 headerSB.append("<h1>Indlæsnings rapport for " + regionName + " </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 }
128 logger.info("Address Search done - starting save to DB");
129
130 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 }
143
144 totalAntalNye += saveOK.size();
145 totalAntalFejl += saveFail.size();
146 totalAntalUkendt += ukendteDAV.size();
147 totalAntalDobbelt += dobbeltGadeidDAV.size();
148
149
150 sb.append("<h2>Kommune: " + kommunenavn + "</h2>\n");
151
152 sb.append("Kommunekode: " + kommunekode + "<br>\n");
153 sb.append("Antal Inserts: " + saveOK.size() + "<br>\n");
154 sb.append("Antal insert fails: " + saveFail.size() + "<br>\n");
155 sb.append("Antal ukendte dav: " + ukendteDAV.size() + "<br>\n");
156 sb.append("Antal dobbelt gadeid dav: " + dobbeltGadeidDAV.size() + "<br>\n");
157
158 sb.append("<h3>Adresser ok:</h3>\n");
159 addressTable(sb, saveOK);
160
161 sb.append("<h3>SQL INSERT fejl:</h3>\n");
162 addressTable(sb, saveFail);
163
164 sb.append("<h3>Ukendte DAV:</h3>\n");
165 for (String dav : ukendteDAV) {
166 sb.append(dav + "<br>\n");
167 }
168
169 sb.append("<h3>Dobbelt gadeid DAV:</h3>\n");
170 for (String dav : dobbeltGadeidDAV) {
171 sb.append(dav + "<br>\n");
172 }
173
174 }
175
176 headerSB.append("Antal Inserts: " + totalAntalNye + "<br>\n");
177 headerSB.append("Antal insert fails: " + totalAntalFejl + "<br>\n");
178 headerSB.append("Antal ukendte dav: " + totalAntalUkendt + "<br>\n");
179 headerSB.append("Antal dobbelt gadeid dav: " + totalAntalDobbelt + "<br>\n");
180 headerSB.append("Elapsed: " + timer.getElapsed() + " ms.<br>\n");
181
182 MailSender.sendMail(subject, headerSB.toString() + sb.toString() );
183
184 }
185
186 private void addressTable(StringBuilder sb, List<Address> addr) {
187 sb.append("<table border=0>\n");
188 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>");
189 for (Address a: addr) {
190 sb.append("<tr>");
191 sb.append("<td>&nbsp;").append(a.gadeid).append(" </td>");
192 sb.append("<td>&nbsp;").append(a.postnr).append(" </td>");
193 sb.append("<td>&nbsp;").append(a.kommunekode).append(" </td>");
194 sb.append("<td>&nbsp;").append(a.vejkode).append(" </td>");
195 sb.append("<td>&nbsp;").append(a.vejnavn).append(" </td>");
196 sb.append("<td>&nbsp;").append(a.husnr).append(" </td>");
197 sb.append("<td>&nbsp;").append(a.husnrbogstav).append(" </td>");
198 }
199 sb.append("</table><br>\n");
200
201 }
202
203 String getDAVid(Address addr) {
204 String dav = String.format("%04d%03d%04d", addr.postnr, addr.kommunekode, addr.vejkode);
205
206 return dedup.getInstance(dav);
207 }
208
209 @Override
210 public String getDescription() {
211 return "DawaTask";
212 }
213
214 @Override
215 public String getDetail() {
216 return "Region: " + regionCode + "/" + regionName;
217 }
218
219 @Override
220 public double getPercentCompleted() {
221 return 0;
222 }
223
224
225
226 }

  ViewVC Help
Powered by ViewVC 1.1.20