--- dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Database.java 2015/08/14 10:56:32 2643 +++ dao/FuldDaekningWorker/src/main/java/dk/daoas/fulddaekning/Database.java 2015/10/07 18:57:53 2743 @@ -1,7 +1,5 @@ package dk.daoas.fulddaekning; -import geocode.GeoPoint; - import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; @@ -13,8 +11,10 @@ import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.Queue; import java.util.Set; import java.util.TreeSet; +import java.util.concurrent.ConcurrentLinkedQueue; import java.util.logging.Logger; @@ -27,16 +27,16 @@ Connection conn; PreparedStatement saveStmt; - List alleAdresser; + List alleAdresser; Adresse alleIkkeDaekkede[]; - Map> daekkedeAdresserHO = new HashMap>(); + Map> daekkedeAdresserHO = new HashMap>(); - + DeduplicateHelper vejnavnCache = new DeduplicateHelper(); DeduplicateHelper husnrbogstavCache = new DeduplicateHelper(); DeduplicateHelper ruteCache = new DeduplicateHelper(); @@ -68,6 +68,10 @@ } public void renameResultTables() throws SQLException { + if (LookupMain.test_mode == true) { + throw new RuntimeException("Can not rename tables in test mode"); + } + Constants consts = Constants.getInstance(); String ext = consts.getTableExtension(); @@ -93,21 +97,25 @@ } - public Adresse[] hentAlleIkkedaekkedeAdresser(int minPostnr, int maxPostnr) throws SQLException { + public Queue hentAlleIkkedaekkedeAdresser(int minPostnr, int maxPostnr) throws SQLException { logger.info("Henter alle IKKE-daekkede adresser"); - String sql = "SELECT id,a.postnr,adresse,gadeid,husnr,husnrbogstav,latitude,longitude,rute,p.distributor as ho " + + String sql = "SELECT id,a.postnr,vejnavn,gadeid,husnr,husnrbogstav,latitude,longitude,rute,p.distributor as ho " + "FROM fulddaekning.adressetabel a " + "LEFT JOIN bogleveringer.postnummerdistributor p on (a.postnr=p.postnr) " + "WHERE rute IS NULL " + //Ingen dækning "AND a.postnr BETWEEN ? AND ? " + - "AND a.postnr NOT BETWEEN 3900 and 3999 " + //Skip greenland - "AND a.postnr NOT BETWEEN 9000 AND 9549 " + // Skip nordjylland (DAO) "AND latitude IS NOT NULL " + "AND longitude IS NOT NULL " + "AND gadeid IS NOT NULL " + - "AND (a.distributor IS NULL OR a.distributor<>'LUKKET') "; + "AND (a.distributor IS NULL OR a.distributor<>'LUKKET') " + ; + + if (LookupMain.test_mode == true) { + sql = sql + " LIMIT 100 "; + } + PreparedStatement stmt = conn.prepareStatement(sql); stmt.setInt(1, minPostnr); stmt.setInt(2, maxPostnr); @@ -140,25 +148,29 @@ } - return alleIkkeDaekkede; + return new ConcurrentLinkedQueue( list ); } - public Map> getDaekkedeAdresserHO() { + public Map> getDaekkedeAdresserHO() { return daekkedeAdresserHO; } public int hentAlleDaekkedeAdresser() throws SQLException { if ( alleAdresser == null ) { - String sql = "SELECT id,a.postnr,adresse,gadeid,husnr,husnrbogstav,latitude,longitude,rute,p.distributor as ho " + + String sql = "SELECT id,a.postnr,vejnavn,gadeid,husnr,husnrbogstav,latitude,longitude,rute,p.distributor as ho " + "FROM fulddaekning.adressetabel a " + "LEFT JOIN bogleveringer.postnummerdistributor p on (a.postnr=p.postnr) " + "WHERE rute IS NOT NULL " + "AND latitude IS NOT NULL " + "AND longitude IS NOT NULL " + "AND a.distributor = ? "; + + if (LookupMain.test_mode == true) { + sql = sql + " AND a.postnr BETWEEN 6000 and 7200 "; + } // Forward only + concur_read_only + fetchsize tvinger driver til at hente en række af gangen (bedre performance ved store result sets) // Se http://dev.mysql.com/doc/connector-j/en/connector-j-reference-implementation-notes.html @@ -169,14 +181,14 @@ List list = hentAdresseListe( stmt ); - alleAdresser = new ArrayList(); + alleAdresser = new ArrayList(); alleAdresser.addAll(list); for(Adresse addr : list) { short ho = addr.ho; - List hoListe = daekkedeAdresserHO.get(ho); + List hoListe = daekkedeAdresserHO.get(ho); if ( hoListe == null) { - hoListe = new ArrayList(); + hoListe = new ArrayList(); daekkedeAdresserHO.put(ho, hoListe); } @@ -191,14 +203,14 @@ public synchronized void gemResultat(Adresse orgAdresse, Adresse bedsteAdresse, double bedsteAfstand) throws SQLException { - /*String sql = "INSERT INTO fulddaekning.afstand_anden_rute_thn (orgId,orgPostnr, orgAdresse,orgGadeid,orgHusnr,orgHusnrBogstav,orgLatitude,orgLongitude,orgRute,id,postnr,adresse,gadeid,husnr,husnrbogstav,latitude,longitude,rute,afstand,`timestamp`) "+ + /*String sql = "INSERT INTO fulddaekning.afstand_anden_rute_thn (orgId,orgPostnr, orgVejnavn,orgGadeid,orgHusnr,orgHusnrBogstav,orgLatitude,orgLongitude,orgRute,id,postnr,vejnavn,gadeid,husnr,husnrbogstav,latitude,longitude,rute,afstand,`timestamp`) "+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, now() )"; PreparedStatement saveStmt = conn.prepareStatement(sql);*/ saveStmt.setInt(1, orgAdresse.id); saveStmt.setShort(2, orgAdresse.postnr); - saveStmt.setString(3, orgAdresse.adresse); + saveStmt.setString(3, orgAdresse.vejnavn); saveStmt.setInt(4, orgAdresse.gadeid); saveStmt.setShort(5, orgAdresse.husnr); saveStmt.setString(6, orgAdresse.husnrbogstav); @@ -207,7 +219,7 @@ saveStmt.setInt(8, bedsteAdresse.id); saveStmt.setShort(9, bedsteAdresse.postnr); - saveStmt.setString(10, bedsteAdresse.adresse); + saveStmt.setString(10, bedsteAdresse.vejnavn); saveStmt.setInt(11, bedsteAdresse.gadeid); saveStmt.setShort(12, bedsteAdresse.husnr); saveStmt.setString(13, bedsteAdresse.husnrbogstav); @@ -251,7 +263,7 @@ adr.id = res.getInt(1); adr.postnr = res.getShort(2); - adr.adresse = res.getString(3); + adr.vejnavn = vejnavnCache.getInstance( res.getString(3) ); adr.gadeid = res.getInt(4); adr.husnr = res.getShort(5); adr.husnrbogstav = husnrbogstavCache.getInstance( res.getString(6) );