--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/dawa/DawaTask.java 2016/04/18 18:56:35 3002 +++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/dawa/DawaTask.java 2016/04/19 12:36:31 3003 @@ -1,8 +1,18 @@ package dk.daoas.adressevedligehold.dawa; -import com.google.gson.Gson; - +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; + +import dk.daoas.adressevedligehold.MailSender; +import dk.daoas.adressevedligehold.beans.Address; +import dk.daoas.adressevedligehold.beans.Address.AddressState; +import dk.daoas.adressevedligehold.db.DatabaseCoverageUpdate; import dk.daoas.adressevedligehold.tasks.Task; +import dk.daoas.adressevedligehold.tasks.TaskLogger; +import dk.daoas.adressevedligehold.util.DeduplicateHelper; /* * Alle regioner: http://dawa.aws.dk/regioner/ @@ -12,10 +22,18 @@ public class DawaTask extends Task { + final String kommentarTemplate = "Oprettet via DAWA"; + + private TaskLogger logger = TaskLogger.getInstance(); + private short regionCode; private String regionName; - private Gson gson = new Gson(); + + + DatabaseCoverageUpdate db = new DatabaseCoverageUpdate(); + + DeduplicateHelper dedup = new DeduplicateHelper<>(); public DawaTask(short regionCode, String regionName){ this.regionCode = regionCode; @@ -25,9 +43,118 @@ @Override protected void taskRun() throws Exception { - // TODO Auto-generated method stub + + int kommunekode = 615; + String kommunenavn = "Horsens"; + + // stage 1 - hent alle data + DawaWebservice dawa = new DawaWebservice(); + List
dawaListe = dawa.lookup(kommunekode); + + 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); + DawaGade gade = search.get(dav); + if (gade == null) { + gade = new DawaGade(); + search.put(dav, gade); + } + gade.gadeids.add( addr.gadeid ); + gade.adresser.add(addr); + } + logger.info("Build search structure done"); + + // stage 3 søg + Set ukendteDAV = new TreeSet<>(); + Set dobbeltGadeidDAV = new TreeSet<>(); + List
nyeAdresser = new ArrayList<>(); + + 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"); + + db.saveNewAddresses(nyeAdresser); + + logger.info("Save to db done - sending 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); + } + } + + 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"); + } + + sb.append("

Dobbelt gadeid DAV:


\n"); + for (String dav : dobbeltGadeidDAV) { + sb.append(dav + "
\n"); + } + + MailSender.sendMail(subject, sb.toString() ); + } + + String getDAVid(Address addr) { + String dav = String.format("%04d%03d%04d", addr.postnr, addr.kommunekode, addr.vejkode); + + return dedup.getInstance(dav); + } @Override public String getDescription() {