--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/AddressManager.java 2016/01/26 08:28:37 2846 +++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/AddressManager.java 2016/01/26 11:48:37 2847 @@ -2,6 +2,7 @@ import java.sql.SQLException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; @@ -15,24 +16,12 @@ import dk.daoas.adressevedligehold.beans.Address.AddressState; import dk.daoas.adressevedligehold.db.DatabaseLayerImplementation; import dk.daoas.adressevedligehold.util.DeduplicateHelper; +import dk.daoas.adressevedligehold.util.MiscUtils; import dk.daoas.adressevedligehold.util.TimingHelper; /* * TODO: håndtering af entry dupletter ! (+ rapportering af dem) - * TODO: ajourføring af DBKbane -DAO: -UPDATE fulddaekning.adressetabel -SET dbkbane = case - when substr(korelisteMa,1,2) IN ('07','10','11','12','14','15','16','18','19','20') then 205 #DAO-BRA - when substr(korelisteMa,1,2) BETWEEN 24 and 30 then 201 #DAO-Ovrige - else 202 #dao syd (52-99= -END -WHERE distributor='DAO' -AND ruteMa is not null; - -FD: Altid 200 -NS: Altid 204 -BK: 195,196,197,198 + */ @@ -44,7 +33,9 @@ Map> > searchStructure; - ArrayList afvisteEntries = new ArrayList(); + ArrayList afvisteEntries = new ArrayList(); + + Map dbkBaneMap = new TreeMap(); public AddressManager() throws SQLException { DatabaseLayerImplementation db = new DatabaseLayerImplementation(); @@ -65,6 +56,13 @@ Short husnr = shortHelper.getInstance( a.husnr ); TreeMap> gade = searchStructure.get( gadeid ); + if (a.dbkBane > 0 && a.postnr<=4999) { + Short bane = dbkBaneMap.get(a.postnr); + if (bane == null) { + dbkBaneMap.put(a.postnr, a.dbkBane); + } + } + if (gade == null) { gade = new TreeMap>(); searchStructure.put(gadeid, gade); @@ -177,14 +175,14 @@ continue; }*/ - if (addr.stateMan != AddressState.OPENED ) { + if (addr.stateMan != AddressState.MODIFIED ) { continue; } System.out.println(addr.state + ": " + addr.toStringExtended() ); System.out.println(addr.getRuteString() ); - if (count++ > 15) + if (count++ > 50) return; } } @@ -297,122 +295,151 @@ if (entry.ugedage.mandag) { - addr.visitedMan = true; - if (addr.ruteMandag == null) { - addr.stateMan = AddressState.OPENED; - addr.ruteMandag = entry.rute; - addr.korelisteMandag = entry.koreliste; - } else { - - if (StringUtils.equals(addr.ruteMandag, entry.rute) == false || StringUtils.equals(addr.korelisteMandag, entry.koreliste) == false) { - addr.stateMan = AddressState.MODIFIED; + if (addr.visitedMan == false) { + addr.visitedMan = true; + if (addr.ruteMandag == null) { + addr.stateMan = AddressState.OPENED; addr.ruteMandag = entry.rute; - addr.korelisteMandag = entry.koreliste; - } + addr.korelisteMandag = entry.koreliste; + } else { + + if (StringUtils.equals(addr.ruteMandag, entry.rute) == false || StringUtils.equals(addr.korelisteMandag, entry.koreliste) == false) { + addr.stateMan = AddressState.MODIFIED; + addr.ruteMandag = entry.rute; + addr.korelisteMandag = entry.koreliste; + } + } + } else { + System.out.println( "Double visit monday " + addr); } + } if (entry.ugedage.tirsdag) { - addr.visitedTir = true; - if (addr.ruteTirsdag == null) { - addr.stateTir = AddressState.OPENED; - addr.ruteTirsdag = entry.rute; - addr.korelisteTirsdag = entry.koreliste; - } else { - - if (StringUtils.equals(addr.ruteTirsdag, entry.rute) == false || StringUtils.equals(addr.korelisteTirsdag, entry.koreliste) == false) { - addr.stateTir = AddressState.MODIFIED; + if (addr.visitedTir == false) { + addr.visitedTir = true; + if (addr.ruteTirsdag == null) { + addr.stateTir = AddressState.OPENED; addr.ruteTirsdag = entry.rute; - addr.korelisteTirsdag = entry.koreliste; + addr.korelisteTirsdag = entry.koreliste; + } else { + + if (StringUtils.equals(addr.ruteTirsdag, entry.rute) == false || StringUtils.equals(addr.korelisteTirsdag, entry.koreliste) == false) { + addr.stateTir = AddressState.MODIFIED; + addr.ruteTirsdag = entry.rute; + addr.korelisteTirsdag = entry.koreliste; + } } - } + } else { + System.out.println( "Double visit tuesday " + addr); + } } if (entry.ugedage.onsdag) { - addr.visitedOns = true; - if (addr.ruteOnsdag == null) { - addr.stateOns = AddressState.OPENED; - addr.ruteOnsdag = entry.rute; - addr.korelisteOnsdag = entry.koreliste; - } else { - - if (StringUtils.equals(addr.ruteOnsdag, entry.rute) == false || StringUtils.equals(addr.korelisteOnsdag, entry.koreliste) == false) { - addr.stateOns = AddressState.MODIFIED; + if (addr.visitedOns == false) { + addr.visitedOns = true; + if (addr.ruteOnsdag == null) { + addr.stateOns = AddressState.OPENED; addr.ruteOnsdag = entry.rute; - addr.korelisteOnsdag = entry.koreliste; + addr.korelisteOnsdag = entry.koreliste; + } else { + + if (StringUtils.equals(addr.ruteOnsdag, entry.rute) == false || StringUtils.equals(addr.korelisteOnsdag, entry.koreliste) == false) { + addr.stateOns = AddressState.MODIFIED; + addr.ruteOnsdag = entry.rute; + addr.korelisteOnsdag = entry.koreliste; + } } - } + } else { + System.out.println( "Double visit wednesday " + addr); + } } if (entry.ugedage.torsdag) { - addr.visitedTor = true; - if (addr.ruteTorsdag == null) { - addr.stateTor = AddressState.OPENED; - addr.ruteTorsdag = entry.rute; - addr.korelisteTorsdag = entry.koreliste; - } else { - - - if (StringUtils.equals(addr.ruteTorsdag, entry.rute) == false || StringUtils.equals(addr.korelisteTorsdag, entry.koreliste) == false) { - addr.stateTor = AddressState.MODIFIED; + if (addr.visitedTor == false) { + addr.visitedTor = true; + if (addr.ruteTorsdag == null) { + addr.stateTor = AddressState.OPENED; addr.ruteTorsdag = entry.rute; - addr.korelisteTorsdag = entry.koreliste; + addr.korelisteTorsdag = entry.koreliste; + } else { + + + if (StringUtils.equals(addr.ruteTorsdag, entry.rute) == false || StringUtils.equals(addr.korelisteTorsdag, entry.koreliste) == false) { + addr.stateTor = AddressState.MODIFIED; + addr.ruteTorsdag = entry.rute; + addr.korelisteTorsdag = entry.koreliste; + } } - } + } else { + System.out.println( "Double visit thursday " + addr); + } } if (entry.ugedage.fredag) { - addr.visitedFre = true; - if (addr.ruteFredag == null) { - addr.stateFre = AddressState.OPENED; - addr.ruteFredag = entry.rute; - addr.korelisteFredag = entry.koreliste; - } else { - - if (StringUtils.equals(addr.ruteFredag, entry.rute) == false || StringUtils.equals(addr.korelisteFredag, entry.koreliste) == false) { - addr.stateFre = AddressState.MODIFIED; + if (addr.visitedFre == false) { + addr.visitedFre = true; + if (addr.ruteFredag == null) { + addr.stateFre = AddressState.OPENED; addr.ruteFredag = entry.rute; - addr.korelisteFredag = entry.koreliste; + addr.korelisteFredag = entry.koreliste; + } else { + + if (StringUtils.equals(addr.ruteFredag, entry.rute) == false || StringUtils.equals(addr.korelisteFredag, entry.koreliste) == false) { + addr.stateFre = AddressState.MODIFIED; + addr.ruteFredag = entry.rute; + addr.korelisteFredag = entry.koreliste; + } } - } + } else { + System.out.println( "Double visit friday " + addr); + } } if (entry.ugedage.lordag) { - addr.visitedLor = true; - if (addr.ruteLordag == null) { - addr.stateLor = AddressState.OPENED; - addr.ruteLordag = entry.rute; - addr.korelisteLordag = entry.koreliste; - } else { - - - if (StringUtils.equals(addr.ruteLordag, entry.rute) == false || StringUtils.equals(addr.korelisteLordag, entry.koreliste) == false) { - addr.stateLor = AddressState.MODIFIED; + if (addr.visitedLor == false) { + addr.visitedLor = true; + if (addr.ruteLordag == null) { + addr.stateLor = AddressState.OPENED; addr.ruteLordag = entry.rute; - addr.korelisteLordag = entry.koreliste; + addr.korelisteLordag = entry.koreliste; + } else { + + + if (StringUtils.equals(addr.ruteLordag, entry.rute) == false || StringUtils.equals(addr.korelisteLordag, entry.koreliste) == false) { + addr.stateLor = AddressState.MODIFIED; + addr.ruteLordag = entry.rute; + addr.korelisteLordag = entry.koreliste; + } } - } + } else { + System.out.println( "Double visit saturday " + addr); + } } if (entry.ugedage.sondag) { - addr.visitedSon = true; - if (addr.ruteSondag == null) { - addr.stateSon = AddressState.OPENED; - addr.ruteSondag = entry.rute; - addr.korelisteSondag = entry.koreliste; - } else { - - if (StringUtils.equals(addr.ruteSondag, entry.rute) == false || StringUtils.equals(addr.korelisteSondag, entry.koreliste) == false) { - addr.stateSon = AddressState.MODIFIED; + if (addr.visitedSon == false) { + addr.visitedSon = true; + if (addr.ruteSondag == null) { + addr.stateSon = AddressState.OPENED; addr.ruteSondag = entry.rute; - addr.korelisteSondag = entry.koreliste; + addr.korelisteSondag = entry.koreliste; + } else { + + if (StringUtils.equals(addr.ruteSondag, entry.rute) == false || StringUtils.equals(addr.korelisteSondag, entry.koreliste) == false) { + addr.stateSon = AddressState.MODIFIED; + addr.ruteSondag = entry.rute; + addr.korelisteSondag = entry.koreliste; + } } - } + } else { + System.out.println( "Double visit sunday " + addr); + } } @@ -432,6 +459,7 @@ } } + updateDbkBane(addr); } @@ -482,6 +510,8 @@ a.korelisteLordag = entry.koreliste; } + updateDbkBane(a); + // Nu er det nye adresse object oprettet - nu skal det gemmes i søge strukturen og totallisten @@ -503,10 +533,72 @@ } + + + /* + DAO: + UPDATE fulddaekning.adressetabel + SET dbkbane = case + when substr(korelisteMa,1,2) IN ('07','10','11','12','14','15','16','18','19','20') then 205 #DAO-BRA + when substr(korelisteMa,1,2) BETWEEN 24 and 30 then 201 #DAO-Ovrige + else 202 #dao syd (52-99= + END + WHERE distributor='DAO' + AND ruteMa is not null; + + FD: Altid 200 + NS: Altid 204 + BK: 195,196,197,198 + */ + + private void updateDbkBane(Address a) { + List daoBane205 = Arrays.asList( new Short[] {7,10,11,12,12,14,15,16,18,19,20} ); + + + Short bane = null; + + switch (a.distributor) { + case "BK": + bane = dbkBaneMap.get(a.postnr); + break; + case "DAO": + String koreliste = MiscUtils.firstNonNull(a.korelisteMandag,a.korelisteLordag, a.korelisteSondag); //DAO har kun 3 dækningstyper + short first2 = Short.parseShort( koreliste.substring(0,2) ); + if ( daoBane205.contains(first2) ) { + bane = 205; + } else if (first2 >= 24 && first2<=30) { + bane = 201; + } else { + bane = 202; + } + + break; + case "FD": + bane = 200; + break; + case "NS": + bane = 204; + break; + } + + if (bane == null) { + throw new RuntimeException("Ukendt bane for postnr" + a.postnr); + } + + if (a.dbkBane != bane) { + a.dbkBane = bane; + if (a.state ==AddressState.NOT_CHANGED) { + a.state = AddressState.MODIFIED; + } + } + } + public List
getAddressList() { return Collections.unmodifiableList(addressList); } + + public int getAfvistAntal() { return afvisteEntries.size(); }