--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/AfstandAndenRuteTask.java 2016/02/12 22:30:30 2937
+++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/AfstandAndenRuteTask.java 2016/03/08 09:41:53 2972
@@ -23,17 +23,21 @@
public class AfstandAndenRuteTask extends Task {
+
private TaskLogger logger = TaskLogger.getInstance();
final static boolean VERBOSE = false;//
+
+ public final static String INCREMENTAL = "INCREMENTAL";
+ public final static String FULL = "FULL";
static boolean test_mode;
String distributor;
- int antalIkkeDaekkede = -1;
+ int antalIkkeDaekkede = 0;
AtomicInteger antalBeregnet = new AtomicInteger();
@@ -49,10 +53,10 @@
type = type.toUpperCase();
switch(type) {
- case "FULL":
+ case FULL:
isIncremental = false;
break;
- case "INCREMENTAL":
+ case INCREMENTAL:
isIncremental = true;
break;
default:
@@ -87,124 +91,135 @@
- try (Connection conn = DBConnection.getConnection() ) {
- Database db = new Database(conn, isIncremental);
-
- db.prepareIncrementalSearch();
-
- Queue
ikkeDaekkede = db.hentAlleIkkedaekkedeAdresser(consts.getMinPostnr(), consts.getMaxPostnr() );
- antalIkkeDaekkede = ikkeDaekkede.size();
- logger.info("Antal ikke-daekkede: " + antalIkkeDaekkede );
-
-
- boolean testRun= false;
-
- AtomicInteger antalFundne = new AtomicInteger(0);
-
- long beregnStart =0;
- long start = System.currentTimeMillis();
- int antalDaekkedeAdresser = -1;
-
- if (testRun == false) {
-
- logger.info("Finder postnumre");
- Set postnumre = db.hentPostnumreCache();
-
- // Først validerer vi BBox på alle postnummre, for at undgå fuldt stop midt i beregningen
- for(short postnr : postnumre) { //
- logger.info("Validerer BBox for " + postnr);
- BoundingBox bbox = db.getBoundingbox(postnr);
- bbox.validateBbox();
- }
-
-
- logger.info("Henter alle daekkede adresser");
- antalDaekkedeAdresser = db.hentAlleDaekkedeAdresser(distributor);
- logger.info( "AlleDaekkedeAdresser.length=" + antalDaekkedeAdresser );
-
- Map> addrHoList = db.getDaekkedeAdresserHO();
-
- Map> hoTrees = new HashMap>();
+
- for ( Map.Entry> entry : addrHoList.entrySet() ) {
- short ho = entry.getKey();
- List geopoints = entry.getValue();
- logger.info("Opbygger KDTree for " + ho + " - antal=" + geopoints.size() );
- int bucketSize = 96*12;
+ AtomicInteger antalFundne = new AtomicInteger(0);
- KdTree addressTree = new KdTree( 3, bucketSize );
- for(Address a: geopoints) {
- addressTree.addPoint(a.xyz, a);
- }
+ long start = System.currentTimeMillis();
+ AtomicInteger antalDaekkedeAdresser = new AtomicInteger(-1);
- hoTrees.put(ho, addressTree);
- }
- db.resetResultTable();
+ // MAIN RUN START
- beregnStart = System.currentTimeMillis();
- logger.info("Starter beregning");
+ logger.info("======================================================================");
+
+ mainRun(consts, isIncremental, "ruteMa", max_workers, antalFundne, antalDaekkedeAdresser);
+
+ logger.info("======================================================================");
+
+ mainRun(consts, true, "ruteLo", max_workers, antalFundne, antalDaekkedeAdresser);
+
+ logger.info("======================================================================");
+
+ mainRun(consts, true, "ruteSo", max_workers, antalFundne, antalDaekkedeAdresser);
+
+ logger.info("======================================================================");
- //pre-check er ok - reset tmp tabel og start søgningen
+ // END OF MAIN run
+
+ threadPool.shutdown(); //Calc is done now
+
- CyclicBarrier barrier = new CyclicBarrier(max_workers + 1);
- for (int i=0; i postnumre = db.hentPostnumreCache();
+
+ // Først validerer vi BBox på alle postnummre, for at undgå fuldt stop midt i beregningen
+ for(short postnr : postnumre) { //
+ logger.info("Validerer BBox for " + postnr);
+ BoundingBox bbox = db.getBoundingbox(postnr);
+ bbox.validateBbox();
+ }
+
+
+ logger.info("Henter alle daekkede adresser");
+ int tmpAntalDaekkede = db.hentAlleDaekkedeAdresser(distributor);
+ antalDaekkedeAdresser.set(tmpAntalDaekkede);
+ logger.info( "AlleDaekkedeAdresser.length=" + antalDaekkedeAdresser );
+
+ Map> addrHoList = db.getDaekkedeAdresserHO();
+
+ Map> hoTrees = new HashMap>();
+
+ for ( Map.Entry> entry : addrHoList.entrySet() ) {
+ short ho = entry.getKey();
+ List geopoints = entry.getValue();
+
+ logger.info("Opbygger KDTree for " + ho + " - antal=" + geopoints.size() );
+
+ int bucketSize = 96*12;
+
+ KdTree addressTree = new KdTree( 3, bucketSize );
+ for(Address a: geopoints) {
+ addressTree.addPoint(a.xyz, a);
}
+
+ hoTrees.put(ho, addressTree);
+ }
+
+ db.resetResultTable();
+
-
-
- } /*else {
- /// Test
+ logger.info("Starter beregning");
+
+ //pre-check er ok - reset tmp tabel og start søgningen
+
+ CyclicBarrier barrier = new CyclicBarrier(max_workers + 1);
+
+ for (int i=0; i