--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/dawa/DawaTask.java 2016/04/19 12:39:38 3004
+++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/dawa/DawaTask.java 2016/04/29 11:23:06 3029
@@ -2,9 +2,8 @@
import java.util.ArrayList;
import java.util.List;
-import java.util.Set;
+import java.util.Map;
import java.util.TreeMap;
-import java.util.TreeSet;
import dk.daoas.adressevedligehold.MailSender;
import dk.daoas.adressevedligehold.beans.Address;
@@ -12,7 +11,9 @@
import dk.daoas.adressevedligehold.db.DatabaseCoverageUpdate;
import dk.daoas.adressevedligehold.tasks.Task;
import dk.daoas.adressevedligehold.tasks.TaskLogger;
+import dk.daoas.adressevedligehold.util.CountMap;
import dk.daoas.adressevedligehold.util.DeduplicateHelper;
+import dk.daoas.adressevedligehold.util.TimingHelper;
/*
* Alle regioner: http://dawa.aws.dk/regioner/
@@ -22,13 +23,16 @@
public class DawaTask extends Task {
- final String kommentarTemplate = "Oprettet via DAWA";
+ final static String KOMMENTAR_TEMPLATE = "Oprettet via DAWA";
private TaskLogger logger = TaskLogger.getInstance();
private short regionCode;
private String regionName;
+ int antalBehandlede = 0;
+ int antalKommuner = 0;
+
DatabaseCoverageUpdate db = new DatabaseCoverageUpdate();
@@ -43,21 +47,18 @@
@Override
protected void taskRun() throws Exception {
-
- int kommunekode = 615;
- String kommunenavn = "Horsens";
-
- // stage 1 - hent alle data
+ TimingHelper timer = new TimingHelper();
+
DawaWebservice dawa = new DawaWebservice();
- List
dawaListe = dawa.lookup(kommunekode);
+ TreeMap search = new TreeMap<>();
+ // stage 1 - hent alle data
List adresser = db.getAllAdresses();
-
// stage 2 opbyg søge struktur
logger.info("Building search structure");
- TreeMap search = new TreeMap<>();
+
for (Address addr : adresser) {
String dav = getDAVid(addr);
@@ -71,83 +72,142 @@
}
logger.info("Build search structure done");
- // stage 3 søg
- Set ukendteDAV = new TreeSet<>();
- Set dobbeltGadeidDAV = new TreeSet<>();
- List nyeAdresser = new ArrayList<>();
+ Map kommuner = dawa.kommunerIRegion(regionCode);
- for (Address dawaAddr : dawaListe) {
- String dav = getDAVid(dawaAddr);
- DawaGade gade = search.get(dav);
- if (gade == null) {
- ukendteDAV.add(dav + " " + dawaAddr.vejnavn);
- continue;
- }
-
- if (gade.gadeids.size() != 1) {
- dobbeltGadeidDAV.add(dav + " " + dawaAddr.vejnavn);
- }
-
- boolean fundet = false;
- for (Address target : gade.adresser) {
- if ( target.husnr == dawaAddr.husnr && target.husnrbogstav.equals(dawaAddr.husnrbogstav) ) {
- fundet = true;
- break;
- }
- }
-
- if (fundet == false) {
- dawaAddr.gadeid = gade.gadeids.iterator().next();
- dawaAddr.state = AddressState.CREATED;
- dawaAddr.kommentar = kommentarTemplate;
- nyeAdresser.add(dawaAddr);
- }
- }
- logger.info("Address Search done - starting save to DB");
+ String subject = "DAWA indlæsning - " + regionName;
- db.saveNewAddresses(nyeAdresser);
+ StringBuilder headerSB = new StringBuilder();
+ headerSB.append("Indlæsnings rapport for " + regionName + "
");
- logger.info("Save to db done - sending report mail");
+ int totalAntalNye = 0;
+ int totalAntalFejl = 0;
+ int totalAntalUkendt = 0;
+ int totalAntalDobbelt = 0;
- List saveOK = new ArrayList<>();
- List saveFail = new ArrayList<>();
- for (Address a : nyeAdresser) {
- if (a.state == AddressState.CREATE_FAIL) {
- saveFail.add(a);
- } else {
- saveOK.add(a);
- }
- }
+ antalKommuner = kommuner.size();
- String subject = "DAWA indlæsning done";
StringBuilder sb = new StringBuilder();
- sb.append("Indlæsnings rapport for " + regionName + " / " + regionCode + "
");
- sb.append("Kommune: " + kommunenavn + " / " + kommunekode + "
\n");
- sb.append("Adresser ok:
\n");
- for (Address a: saveOK) {
- sb.append(a.toString() + "
\n");
- }
-
- sb.append("SQL INSERT fejl:
\n");
- for (Address a: saveFail) {
- sb.append(a.toString() + "
\n");
- }
-
- sb.append("Ukendte DAV:
\n");
- for (String dav : ukendteDAV) {
- sb.append(dav + "
\n");
- }
+ for (Map.Entry entry : kommuner.entrySet()) {
+ int kommunekode = entry.getValue();
+ String kommunenavn = entry.getKey();
+
+ logger.info("Behandler: " + kommunekode + " " + kommunenavn);
- sb.append("Dobbelt gadeid DAV:
\n");
- for (String dav : dobbeltGadeidDAV) {
- sb.append(dav + "
\n");
+
+ List dawaListe = dawa.adresserIKommune(kommunekode);
+ // stage 3 søg
+ CountMap ukendteDAV = new CountMap();
+ CountMap dobbeltGadeidDAV = new CountMap();
+ List nyeAdresser = new ArrayList<>();
+
+ for (Address dawaAddr : dawaListe) {
+ String dav = getDAVid(dawaAddr);
+ DawaGade gade = search.get(dav);
+ if (gade == null) {
+ String key = dav + " " + dawaAddr.vejnavn;
+ ukendteDAV.increment(key);
+ continue;
+ }
+
+ if (gade.gadeids.size() != 1) {
+ String key = dav + " " + dawaAddr.vejnavn;
+ dobbeltGadeidDAV.increment(key);
+ continue;
+ }
+
+ boolean fundet = false;
+ for (Address target : gade.adresser) {
+ if ( target.husnr == dawaAddr.husnr && target.husnrbogstav.equals(dawaAddr.husnrbogstav) ) {
+ fundet = true;
+ break;
+ }
+ }
+
+ if (fundet == false) {
+ dawaAddr.gadeid = gade.gadeids.iterator().next();
+ dawaAddr.state = AddressState.CREATED;
+ dawaAddr.kommentar = KOMMENTAR_TEMPLATE;
+ nyeAdresser.add(dawaAddr);
+ }
+ }
+ logger.info("Address Search done - starting save to DB");
+
+ db.saveNewAddresses(nyeAdresser);
+
+ logger.info("Save to db done - adding to report mail");
+
+ List saveOK = new ArrayList<>();
+ List saveFail = new ArrayList<>();
+ for (Address a : nyeAdresser) {
+ if (a.state == AddressState.CREATE_FAIL) {
+ saveFail.add(a);
+ } else {
+ saveOK.add(a);
+ }
+ }
+
+ totalAntalNye += saveOK.size();
+ totalAntalFejl += saveFail.size();
+ totalAntalUkendt += ukendteDAV.size();
+ totalAntalDobbelt += dobbeltGadeidDAV.size();
+
+
+ antalBehandlede++;
+
+
+ sb.append("Kommune: " + kommunenavn + "
\n");
+
+ sb.append("Kommunekode: " + kommunekode + "
\n");
+ sb.append("Antal Inserts: " + saveOK.size() + "
\n");
+ sb.append("Antal insert fails: " + saveFail.size() + "
\n");
+ sb.append("Antal ukendte dav: " + ukendteDAV.size() + "
\n");
+ sb.append("Antal dobbelt gadeid dav: " + dobbeltGadeidDAV.size() + "
\n");
+
+ sb.append("Adresser ok:
\n");
+ addressTable(sb, saveOK);
+
+ sb.append("SQL INSERT fejl:
\n");
+ addressTable(sb, saveFail);
+
+ sb.append("Ukendte DAV:
\n");
+ for (Map.Entry dav : ukendteDAV.entrySet()) {
+ sb.append(dav.getKey() + " : " + dav.getValue() + "
\n");
+ }
+
+ sb.append("Dobbelt gadeid DAV:
\n");
+ for (Map.Entry dav : dobbeltGadeidDAV.entrySet()) {
+ sb.append(dav.getKey() + " : " + dav.getValue() + "
\n");
+ }
+ }
+ logger.info("Sendingreport mail");
+
+ headerSB.append("Antal Inserts: " + totalAntalNye + "
\n");
+ headerSB.append("Antal insert fails: " + totalAntalFejl + "
\n");
+ headerSB.append("Antal ukendte dav: " + totalAntalUkendt + "
\n");
+ headerSB.append("Antal dobbelt gadeid dav: " + totalAntalDobbelt + "
\n");
+ headerSB.append("Elapsed: " + timer.getElapsed() + " ms.
\n");
+
+ MailSender.sendMail(subject, headerSB.toString() + sb.toString() );
+
+ }
+
+ private void addressTable(StringBuilder sb, List addr) {
+ sb.append("\n");
+ sb.append("GadeID | Postnr | Kom.kode | Vejkode | Vejnavn | Husnr | | Litra |
");
+ for (Address a: addr) {
+ sb.append("");
+ sb.append(" ").append(a.gadeid).append(" | ");
+ sb.append(" ").append(a.postnr).append(" | ");
+ sb.append(" ").append(a.kommunekode).append(" | ");
+ sb.append(" ").append(a.vejkode).append(" | ");
+ sb.append(" ").append(a.vejnavn).append(" | ");
+ sb.append(" ").append(a.husnr).append(" | ");
+ sb.append(" ").append(a.husnrbogstav).append(" | ");
}
+ sb.append("
\n");
- MailSender.sendMail(subject, sb.toString() );
-
-
}
String getDAVid(Address addr) {
@@ -168,7 +228,12 @@
@Override
public double getPercentCompleted() {
- return 0;
+ if (antalKommuner == 0) {
+ return 0;
+ }
+
+ return (antalBehandlede / ((double)antalKommuner) ) * 100.0;
+
}