--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/Database.java 2016/02/05 10:11:06 2926 +++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/Database.java 2016/02/05 11:01:48 2927 @@ -47,20 +47,31 @@ //Map> ikkeDaekkedePrPost = new HashMap>(); + boolean isIncremental; private HashMap bbCache = new HashMap(); - public Database(Connection conn) throws SQLException,IOException { + public Database(Connection conn, boolean isIncremental) throws SQLException,IOException { this.conn = conn; + + String newExt = ""; + if (isIncremental == false) { + newExt = "_ny"; + } - String sql = "INSERT INTO fulddaekning.afstand_anden_rute_ny (orgId,orgPostnr, orgAdresse,orgGadeid,orgHusnr,orgHusnrBogstav,orgRute,id,postnr,adresse,gadeid,husnr,husnrbogstav,rute,afstand,`timestamp`) "+ + String sql = "INSERT INTO fulddaekning.afstand_anden_rute" + newExt + " (orgId,orgPostnr, orgAdresse,orgGadeid,orgHusnr,orgHusnrBogstav,orgRute,id,postnr,adresse,gadeid,husnr,husnrbogstav,rute,afstand,`timestamp`) "+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, now() )"; saveStmt = conn.prepareStatement(sql); + this.isIncremental = isIncremental; } public void resetResultTable() throws SQLException { + if (isIncremental == true) { + return; + } + try (Statement stmt = conn.createStatement()) { logger.info("Dropping old result table (if exists)"); String sql = "DROP TABLE IF EXISTS fulddaekning.afstand_anden_rute_ny"; @@ -79,6 +90,10 @@ throw new RuntimeException("Can not rename tables in test mode"); } + if (isIncremental) { + return; + } + Constants consts = Constants.getInstance(); try (Statement stmt = conn.createStatement()) { @@ -111,21 +126,36 @@ public Queue
hentAlleIkkedaekkedeAdresser(int minPostnr, int maxPostnr) throws SQLException { + String placeHolder1 = "%INCREMENTAL1%"; + String placeHolder2 = "%INCREMENTAL2%"; + + Constants consts = Constants.getInstance(); logger.info("Henter alle IKKE-daekkede Addressr"); - String sql = "SELECT id,a.postnr,vejnavn,gadeid,husnr,husnrbogstav,latitude,longitude,ruteMa,p.distributor as ho " + + String sql = "SELECT a.id,a.postnr,a.vejnavn,a.gadeid,a.husnr,a.husnrbogstav,latitude,longitude,ruteMa,p.distributor as ho " + "FROM fulddaekning.adressetabel a " + "LEFT JOIN bogleveringer.postnummerdistributor p on (a.postnr=p.postnr) " + + placeHolder1 + "WHERE ruteMa IS NULL " + //Ingen dækning "AND a.postnr BETWEEN ? AND ? " + "AND latitude IS NOT NULL " + "AND longitude IS NOT NULL " + - "AND gadeid IS NOT NULL " + + "AND a.gadeid IS NOT NULL " + "AND (a.distributor IS NULL OR a.distributor<>'LUKKET') " + + placeHolder2 + "ORDER BY gadeid " ; + + if (isIncremental) { + sql = sql.replace(placeHolder1, "LEFT JOIN fulddaekning.afstand_anden_rute" + consts.getTableExtension() +" afstand ON (a.id = afstand.orgId) " ); + sql = sql.replace(placeHolder2, "AND afstand.id IS NULL " ); + } else { + sql = sql.replace(placeHolder1, ""); + sql = sql.replace(placeHolder2, ""); + } + if (AfstandAndenRuteTask.test_mode == true) { sql = sql + " LIMIT 100 "; } @@ -261,6 +291,36 @@ //saveStmt.close(); } + + @SuppressFBWarnings("SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE") + public void prepareIncrementalSearch() throws SQLException { + + logger.info("prepareIncrementalSearch() "); + + Constants consts = Constants.getInstance(); + + String sql1 = "UPDATE fulddaekning.afstand_anden_rute" + consts.getTableExtension() + " afstand " + + "JOIN fulddaekning.adressetabel addr ON (afstand.id = addr.id) " + + "SET afstand.id = 0 " + + "WHERE addr.rutema is null " + ; + + String sql2 = "DELETE FROM fulddaekning.afstand_anden_rute" + consts.getTableExtension() + " " + + "WHERE id=0 " + ; + + + try (Statement stmt = conn.createStatement()) { + + int rows = stmt.executeUpdate(sql1); + logger.info(sql1 + "\n updated rows: " + rows); + + rows = stmt.executeUpdate(sql2); + logger.info(sql2 + "\n deleted rows: " + rows); + + } + } + public synchronized void saveBatch() throws SQLException{ saveStmt.executeBatch(); batchCount = 0; @@ -279,6 +339,7 @@ while (res.next()) { + double latitude = res.getDouble(7); double longitude = res.getDouble(8); @@ -296,6 +357,11 @@ adr.ruteMandag = ruteCache.getInstance( res.getString(9) ); adr.ho = res.getShort(10); + + if (consts.validatePostnr(adr.postnr) == false) {//delegate to Constants implementations to validate whether we should look at this address + continue; + } + list.add(adr); if (consts.doCheckHO() == true && adr.ho == 0) {