--- dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Database.java 2014/09/22 10:17:38 2228 +++ dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Database.java 2014/12/09 20:39:45 2238 @@ -53,17 +53,22 @@ logger.info("Rename tables"); sql = "RENAME TABLE fulddaekning.afstand_anden_rute" + ext + " TO fulddaekning.afstand_anden_rute_old" + ext + ", fulddaekning.afstand_anden_rute_ny TO fulddaekning.afstand_anden_rute" + ext; + + logger.info("Executing: " + sql); conn.createStatement().executeUpdate(sql); } - public BoundingBox getBoundingbox(int postnr) throws SQLException { + public BoundingBox getBoundingbox(String postnr) throws SQLException { + String minPostnr = postnr.replace("x", "0"); + String maxPostnr = postnr.replace("x", "9"); String sql = "SELECT max(latitude) latmax, min(latitude) latmin, max(longitude) lngmax,min(longitude) lngmin " + - "FROM fulddaekning.adressetabel WHERE postnr=? and rute is null;"; + "FROM fulddaekning.adressetabel WHERE postnr BETWEEN ? and ? and rute is null;"; PreparedStatement stmt = conn.prepareStatement(sql); - stmt.setInt(1, postnr); + stmt.setString(1, minPostnr); + stmt.setString(2, maxPostnr); ResultSet res = stmt.executeQuery(); res.next(); //query returnerer altid 1 række @@ -80,35 +85,54 @@ return bbox; } - public Queue hentIkkedaekkedeAdresser(int postnr) throws SQLException { + public Queue hentIkkedaekkedeAdresser(String postnr) throws SQLException { + + String minPostnr = postnr.replace("x", "0"); + String maxPostnr = postnr.replace("x", "9"); + ConcurrentLinkedQueue queue = new ConcurrentLinkedQueue(); - String sql = "SELECT id,postnr,adresse,gadeid,husnr,husnrbogstav,latitude,longitude,rute " + - "FROM fulddaekning.adressetabel " + + String sql = "SELECT id,a.postnr,adresse,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 postnr=? " + + "AND a.postnr BETWEEN ? AND ? " + "AND latitude IS NOT NULL " + "AND longitude IS NOT NULL " + - "AND gadeid IS NOT NULL "; + "AND gadeid IS NOT NULL " + + "AND (a.distributor IS NULL OR a.distributor<>'LUKKET') "; PreparedStatement stmt = conn.prepareStatement(sql); - stmt.setInt(1, postnr); + stmt.setString(1, minPostnr); + stmt.setString(2, maxPostnr); queue.addAll( hentAdresseListe( stmt ) ); return queue; } - public List hentPostnumre() throws SQLException { - ArrayList list = new ArrayList(); + public List hentPostnumre() throws SQLException { + ArrayList list = new ArrayList(); Constants consts = Constants.getInstance(); - + /* String sql = "SELECT postnr " + "FROM fulddaekning.adressetabel " + - //"WHERE distributor = ? and rute is not null " + "WHERE postnr BETWEEN ? AND ? " + + "AND rute is null " + // Træk kun liste på postnumre hvor der er ikke-dækkede adresser "GROUP BY postnr " + "ORDER by postnr"; + */ + + + String sql = "SELECT concat(left(postnr,3),'x') as postnr2 " + + "FROM fulddaekning.adressetabel " + + "WHERE postnr BETWEEN ? AND ? " + + "AND rute is null " + // Træk kun liste på postnumre hvor der er ikke-dækkede adresser + "GROUP BY postnr2 " + + "ORDER by postnr2 "; + + + PreparedStatement stmt = conn.prepareStatement(sql); //stmt.setString(1, Lookup.distributor ); stmt.setInt(1, consts.getMinPostnr()); @@ -116,7 +140,7 @@ ResultSet res = stmt.executeQuery(); while (res.next()) { - int postnr = res.getInt("postnr"); + String postnr = res.getString("postnr2"); list.add(postnr); } res.close(); @@ -128,12 +152,13 @@ } public Adresse[] hentDaekkedeAdresser( BoundingBox bbox) throws SQLException { - String sql = "SELECT id,postnr,adresse,gadeid,husnr,husnrbogstav,latitude,longitude,rute " + - "FROM fulddaekning.adressetabel " + + String sql = "SELECT id,a.postnr,adresse,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 BETWEEN ? AND ? " + "AND longitude BETWEEN ? AND ? " + - "AND distributor = ? "; + "AND a.distributor = ? "; // 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 @@ -153,12 +178,13 @@ public Adresse[] hentAlleDaekkedeAdresser() throws SQLException { - String sql = "SELECT id,postnr,adresse,gadeid,husnr,husnrbogstav,latitude,longitude,rute " + - "FROM fulddaekning.adressetabel " + + String sql = "SELECT id,a.postnr,adresse,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 distributor = ? "; + "AND a.distributor = ? "; // 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 @@ -240,6 +266,7 @@ adr.latitude = res.getDouble("latitude"); adr.longitude = res.getDouble("longitude"); adr.rute = res.getString("rute"); + adr.ho = res.getInt("ho"); list.add(adr);