/[projects]/dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/AfstandAndenRuteTask.java
ViewVC logotype

Diff of /dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/afstandandenrute/AfstandAndenRuteTask.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2954 by torben, Tue Feb 16 13:15:25 2016 UTC revision 2972 by torben, Tue Mar 8 09:41:53 2016 UTC
# Line 37  public class AfstandAndenRuteTask extend Line 37  public class AfstandAndenRuteTask extend
37    
38    
39          String distributor;          String distributor;
40          int antalIkkeDaekkede = -1;          int antalIkkeDaekkede = 0;
41                    
42          AtomicInteger antalBeregnet = new AtomicInteger();          AtomicInteger antalBeregnet = new AtomicInteger();
43    
# Line 91  public class AfstandAndenRuteTask extend Line 91  public class AfstandAndenRuteTask extend
91    
92    
93    
94                  try (Connection conn = DBConnection.getConnection() ) {                  
                         DatabaseRouteDistance db = new DatabaseRouteDistance(conn, isIncremental);  
                           
                         db.prepareIncrementalSearch();  
   
                         Queue<Address> 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<Short> 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<Short, List<Address>> addrHoList = db.getDaekkedeAdresserHO();  
95    
                                 Map<Short, KdTree<Address>> hoTrees = new HashMap<Short,KdTree<Address>>();  
96    
                                 for ( Map.Entry<Short, List<Address>> entry : addrHoList.entrySet() ) {  
                                         short ho = entry.getKey();  
                                         List<Address> geopoints = entry.getValue();  
97    
98                                          logger.info("Opbygger KDTree for " + ho + " - antal=" + geopoints.size() );                  AtomicInteger antalFundne = new AtomicInteger(0);
99    
100                                          int bucketSize = 96*12;                  long start = System.currentTimeMillis();
101                    AtomicInteger antalDaekkedeAdresser = new AtomicInteger(-1);
102    
                                         KdTree<Address> addressTree = new KdTree<Address>( 3, bucketSize );  
                                         for(Address a: geopoints) {  
                                                 addressTree.addPoint(a.xyz, a);  
                                         }  
103    
104                                          hoTrees.put(ho, addressTree);                                            // MAIN RUN START
                                 }  
105    
106                                  db.resetResultTable();                  logger.info("======================================================================");
107                    
108                                  beregnStart = System.currentTimeMillis();                  mainRun(consts, isIncremental, "ruteMa", max_workers,  antalFundne, antalDaekkedeAdresser);
109                                  logger.info("Starter beregning");                  
110                    logger.info("======================================================================");
111                    
112                    mainRun(consts, true, "ruteLo", max_workers,  antalFundne, antalDaekkedeAdresser);
113                    
114                    logger.info("======================================================================");
115                    
116                    mainRun(consts, true, "ruteSo", max_workers,  antalFundne, antalDaekkedeAdresser);
117                    
118                    logger.info("======================================================================");
119    
120                                  //pre-check er ok - reset tmp tabel og start søgningen                  // END OF MAIN run
121                    
122                    threadPool.shutdown(); //Calc is done now
123                            
124    
                                 CyclicBarrier barrier = new CyclicBarrier(max_workers + 1);  
125    
126                                  for (int i=0; i<max_workers; i++) {                  long now = System.currentTimeMillis();
127                                          LookupWorker worker = new LookupWorker(i, this, barrier, ikkeDaekkede, hoTrees,antalFundne,antalBeregnet,db,VERBOSE,consts);                  long elapsed = now - start ;
                                         threadPool.submit( worker );  
                                 }  
128    
                                 barrier.await(); // Afvent at workerne bliver færdige  
129    
                                 logger.info("Calc is done - cleaning up remaining bits");  
130    
131                                  threadPool.shutdown(); //Calc is done now                  logger.info("Fuld load done : " + formatMilliSeconds(elapsed) );
132                    logger.info("Antal daekkede : " + antalDaekkedeAdresser );
133                    logger.info("Antal ikke-daekkede : " + antalIkkeDaekkede );
134                    logger.info("Heraf, antal fundne : " + antalFundne );
135    
136                    logger.info( String.format("Fandt adresser til : %.2f %%", (antalFundne.get() *100.0)/antalIkkeDaekkede ) );
137            }
138    
                                 db.saveBatch();  
139    
140                                  if (test_mode == false && this.isAborted() == false) {          private void mainRun(Constants consts, boolean localIsIncremental, String ugedag, int max_workers, AtomicInteger antalFundne, AtomicInteger antalDaekkedeAdresser) throws Exception {
141                                          db.renameResultTables();                  
142                                                            logger.info("MainRun() isIncremental=" + localIsIncremental + " ugedag=" + ugedag);
143                                          ReloadHelper.triggerReload( "AfstandAndenRute/" + distributor );                  
144                    try (Connection conn = DBConnection.getConnection() ) {
145                            DatabaseRouteDistance db = new DatabaseRouteDistance(conn, localIsIncremental, ugedag);
146                            
147                            if (localIsIncremental) {
148                                    db.prepareIncrementalSearch();
149                            }
150    
151                            Queue<Address> ikkeDaekkede = db.hentAlleIkkedaekkedeAdresser(consts.getMinPostnr(), consts.getMaxPostnr() );
152                            antalIkkeDaekkede += ikkeDaekkede.size();
153                            logger.info("Antal ikke-daekkede: " + antalIkkeDaekkede );
154                    
155                    
156    
157                                  } else {                          logger.info("Finder postnumre");
158                                          logger.info( "Rename tables is disabled !!!" );                          Set<Short> postnumre = db.hentPostnumreCache();
159            
160                            // Først validerer vi BBox på alle postnummre, for at undgå fuldt stop midt i beregningen
161                            for(short postnr : postnumre) { //
162                                    logger.info("Validerer BBox for " + postnr);
163                                    BoundingBox bbox = db.getBoundingbox(postnr);
164                                    bbox.validateBbox();
165                            }
166            
167            
168                            logger.info("Henter alle daekkede adresser");
169                            int tmpAntalDaekkede = db.hentAlleDaekkedeAdresser(distributor);
170                            antalDaekkedeAdresser.set(tmpAntalDaekkede);
171                            logger.info( "AlleDaekkedeAdresser.length=" + antalDaekkedeAdresser );
172            
173                            Map<Short, List<Address>> addrHoList = db.getDaekkedeAdresserHO();
174            
175                            Map<Short, KdTree<Address>> hoTrees = new HashMap<Short,KdTree<Address>>();
176            
177                            for ( Map.Entry<Short, List<Address>> entry : addrHoList.entrySet() ) {
178                                    short ho = entry.getKey();
179                                    List<Address> geopoints = entry.getValue();
180            
181                                    logger.info("Opbygger KDTree for " + ho + " - antal=" + geopoints.size() );
182            
183                                    int bucketSize = 96*12;
184            
185                                    KdTree<Address> addressTree = new KdTree<Address>( 3, bucketSize );
186                                    for(Address a: geopoints) {
187                                            addressTree.addPoint(a.xyz, a);
188                                  }                                  }
189            
190                                    hoTrees.put(ho, addressTree);                          
191                            }
192            
193                            db.resetResultTable();
194            
195    
196                            logger.info("Starter beregning");
197            
198                          } /*else {                          //pre-check er ok - reset tmp tabel og start søgningen
199                                  /// Test          
200                            CyclicBarrier barrier = new CyclicBarrier(max_workers + 1);
201            
202                            for (int i=0; i<max_workers; i++) {
203                                    LookupWorker worker = new LookupWorker(i, this, barrier, ikkeDaekkede, hoTrees,antalFundne,antalBeregnet,db,VERBOSE,consts);
204                                    threadPool.submit( worker );
205                            }
206            
207                            barrier.await(); // Afvent at workerne bliver færdige
208            
209                            logger.info("Calc is done - cleaning up remaining bits");
210            
211            
212                            db.saveBatch();
213            
214                            if (test_mode == false && this.isAborted() == false) {
215                                    db.renameResultTables();
216                                                                    
217                                  db.resetResultTable();                                  ReloadHelper.triggerReload( "AfstandAndenRute/" + distributor );
218            
219            
220                                  alleDaekkedeAdresser = db.hentAlleDaekkedeAdresser();                          } else {
221                                  logger.info( "AlleDaekkedeAdresser.length=" + alleDaekkedeAdresser.size());                                  logger.info( "Rename tables is disabled !!!" );
222                            }
                                 short post = (short) 2700;                        
                                 Lookup lookup = new Lookup(post, db, threadPool);  
                                 lookup.doLookup();                                                                
                         } */  
   
   
                         long now = System.currentTimeMillis();  
                         long elapsed = now - start ;  
                         long elapsedBeregn = now - beregnStart;  
   
   
                         logger.info("Fuld load done : " + formatMilliSeconds(elapsed) );  
                         logger.info("Fuld load done (beregning) : " + formatMilliSeconds(elapsedBeregn) );  
                         logger.info("Antal daekkede : " + antalDaekkedeAdresser );  
                         logger.info("Antal ikke-daekkede : " + antalIkkeDaekkede );  
                         logger.info("Heraf, antal fundne : " + antalFundne );  
223    
                         logger.info( String.format("Fandt adresser til : %.2f %%", (antalFundne.get() *100.0)/antalIkkeDaekkede ) );  
224                  }                  }
225          }          }
226    
# Line 260  public class AfstandAndenRuteTask extend Line 273  public class AfstandAndenRuteTask extend
273    
274          @Override          @Override
275          public double getPercentCompleted() {          public double getPercentCompleted() {
276                    if (antalIkkeDaekkede == 0) {//avoid division by zero
277                            return -1;
278                    }
279                    
280                  return (antalBeregnet.get() / ((float)antalIkkeDaekkede)) * 100.0;                  return (antalBeregnet.get() / ((float)antalIkkeDaekkede)) * 100.0;
281          }          }
282  }  }

Legend:
Removed from v.2954  
changed lines
  Added in v.2972

  ViewVC Help
Powered by ViewVC 1.1.20