package dk.daoas.adressevedligehold.dawa; 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/ * Enkelt region: http://dawa.aws.dk/regioner/{region} */ public class DawaTask extends Task { final String kommentarTemplate = "Oprettet via DAWA"; private TaskLogger logger = TaskLogger.getInstance(); private short regionCode; private String regionName; DatabaseCoverageUpdate db = new DatabaseCoverageUpdate(); DeduplicateHelper dedup = new DeduplicateHelper<>(); public DawaTask(short regionCode, String regionName){ this.regionCode = regionCode; this.regionName = regionName; } @Override protected void taskRun() throws Exception { int kommunekode = 779; String kommunenavn = "Skive"; // 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"); addressTable(sb, saveOK); sb.append("

SQL INSERT fejl:

\n"); addressTable(sb, saveFail); 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() ); } private void addressTable(StringBuilder sb, List
addr) { sb.append("\n"); sb.append(""); for (Address a: addr) { sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); } sb.append("
GadeIDPostnrKom.kodeVejkodeVejnavnHusnrLitra
 ").append(a.gadeid).append("  ").append(a.postnr).append("  ").append(a.kommunekode).append("  ").append(a.vejkode).append("  ").append(a.vejnavn).append("  ").append(a.husnr).append("  ").append(a.husnrbogstav).append("

\n"); } 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() { return "DawaTask"; } @Override public String getDetail() { return "Region: " + regionCode + "/" + regionName; } @Override public double getPercentCompleted() { return 0; } }