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

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

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

revision 2845 by torben, Tue Jan 26 08:21:22 2016 UTC revision 2876 by torben, Thu Jan 28 22:14:42 2016 UTC
# Line 2  package dk.daoas.adressevedligehold; Line 2  package dk.daoas.adressevedligehold;
2    
3  import java.sql.SQLException;  import java.sql.SQLException;
4  import java.util.ArrayList;  import java.util.ArrayList;
5    import java.util.Arrays;
6  import java.util.Collections;  import java.util.Collections;
7  import java.util.List;  import java.util.List;
8  import java.util.Map;  import java.util.Map;
# Line 15  import dk.daoas.adressevedligehold.beans Line 16  import dk.daoas.adressevedligehold.beans
16  import dk.daoas.adressevedligehold.beans.Address.AddressState;  import dk.daoas.adressevedligehold.beans.Address.AddressState;
17  import dk.daoas.adressevedligehold.db.DatabaseLayerImplementation;  import dk.daoas.adressevedligehold.db.DatabaseLayerImplementation;
18  import dk.daoas.adressevedligehold.util.DeduplicateHelper;  import dk.daoas.adressevedligehold.util.DeduplicateHelper;
19    import dk.daoas.adressevedligehold.util.MiscUtils;
20  import dk.daoas.adressevedligehold.util.TimingHelper;  import dk.daoas.adressevedligehold.util.TimingHelper;
21    
22  /*  /*
23   * TODO: håndtering af entry dupletter ! (+ rapportering af dem)   * TODO: håndtering af entry dupletter ! (+ rapportering af dem)
24   * TODO: ajourføring af DBKbane  
 DAO:  
 UPDATE fulddaekning.adressetabel  
 SET dbkbane = case  
         when substr(korelisteMa,1,2) IN ('07','10','11','12','14','15','16','18','19','20') then 205 #DAO-BRA  
     when substr(korelisteMa,1,2) BETWEEN 24 and 30 then 201 #DAO-Ovrige  
     else 202 #dao syd (52-99=  
 END  
 WHERE distributor='DAO'  
 AND ruteMa is not null;  
   
 FD: Altid 200  
 NS: Altid 204  
 BK: 195,196,197,198  
25    
26    
27   */   */
# Line 44  public class AddressManager { Line 33  public class AddressManager {
33                    
34          Map<Integer, TreeMap<Short, ArrayList<Address>> > searchStructure;          Map<Integer, TreeMap<Short, ArrayList<Address>> > searchStructure;
35                    
36          ArrayList<AddressSourceEntry> afvisteEntries = new ArrayList<AddressSourceEntry>();          ArrayList<AddressSourceEntry> rejectedEntries = new ArrayList<AddressSourceEntry>();
37            
38            Map<Integer,String> unknownStreets = new TreeMap<Integer, String>();
39            
40            Map<Short,Short> dbkBaneMap = new TreeMap<Short,Short>();
41                    
42          public AddressManager() throws SQLException {          public AddressManager() throws SQLException {
43                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();
# Line 65  public class AddressManager { Line 58  public class AddressManager {
58                          Short husnr = shortHelper.getInstance( a.husnr );                          Short husnr = shortHelper.getInstance( a.husnr );
59                          TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( gadeid );                          TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( gadeid );
60                                                    
61                            if (a.dbkBane > 0 && a.postnr<=4999) {
62                                    Short bane = dbkBaneMap.get(a.postnr);
63                                    if (bane == null) {
64                                            dbkBaneMap.put(a.postnr, a.dbkBane);
65                                    }
66                            }
67                            
68                          if (gade == null) {                          if (gade == null) {
69                                  gade = new TreeMap<Short,ArrayList<Address>>();                                  gade = new TreeMap<Short,ArrayList<Address>>();
70                                  searchStructure.put(gadeid, gade);                                  searchStructure.put(gadeid, gade);
# Line 177  public class AddressManager { Line 177  public class AddressManager {
177                                  continue;                                  continue;
178                          }*/                          }*/
179                                                    
180                          if (addr.stateMan != AddressState.OPENED ) {                          if (addr.stateMan != AddressState.MODIFIED ) {
181                                  continue;                                  continue;
182                          }                          }
183                                                    
184                          System.out.println(addr.state + ": " + addr.toStringExtended() );                          System.out.println(addr.state + ": " + addr.toStringExtended() );
185                          System.out.println(addr.getRuteString() );                          System.out.println(addr.getRuteString() );
186                                                    
187                          if (count++ > 15)                          if (count++ > 50)
188                                  return;                                  return;
189                  }                  }
190          }          }
# Line 208  public class AddressManager { Line 208  public class AddressManager {
208                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();
209                                    
210                  db.updateAddresses(updates);                  db.updateAddresses(updates);
211                    db.saveNewAddresses(inserts);
212    
213                                    
214                                    
# Line 226  public class AddressManager { Line 227  public class AddressManager {
227          private void visitSingle(AddressSourceEntry entry) {          private void visitSingle(AddressSourceEntry entry) {
228                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );
229                  if (gade == null) {                  if (gade == null) {
230                            unknownStreets.putIfAbsent(entry.gadeid, entry.vejnavn);
231                          createFromEntry(entry); // if we get here there was no match - so we need to create it                          createFromEntry(entry); // if we get here there was no match - so we need to create it
232                          return;                          return;
233                  }                  }
# Line 235  public class AddressManager { Line 237  public class AddressManager {
237                          createFromEntry(entry); // if we get here there was no match - so we need to create it                          createFromEntry(entry); // if we get here there was no match - so we need to create it
238                          return;                          return;
239                  }                  }
240                                    boolean found = false;
241                  for (Address addr : litraList) {                  for (Address addr : litraList) {
242                          if (addr.husnrbogstav.equals(entry.litra) ) {                          if (addr.husnrbogstav.equals(entry.litra) ) {
243                                  updateAddress(addr, entry);                                  updateAddress(addr, entry);
244                                  return; //Done for now - no need to look at the rest of the list                                  found = true; // 1 visit should be enough but as long as there's duplicates on gadeid+husnr+litra we will visit them all
245                                    //when the issue with duplicates is resolved this should be reverted to a return or break
246                          }                          }
247                  }                  }
248                                    if (found == false) {
249                  createFromEntry(entry); // if we get here there was no match - so we need to create it                          createFromEntry(entry); // if we get here there was no match - so we need to create it
250                    }
251          }          }
252                    
253          private void visitRange(AddressSourceEntry entry) {          private void visitRange(AddressSourceEntry entry) {
254                                    
255                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );
256                  if (gade == null) {                  if (gade == null) {
257                            unknownStreets.putIfAbsent(entry.gadeid, entry.vejnavn);
258                          System.out.println("[Range] Ukendt gadeID " + entry);                          System.out.println("[Range] Ukendt gadeID " + entry);
259                          return;                          return;
260                  }                  }
# Line 289  public class AddressManager { Line 294  public class AddressManager {
294                    
295          private void updateAddress(Address addr, AddressSourceEntry entry) {          private void updateAddress(Address addr, AddressSourceEntry entry) {
296                  if ( addr.distributor != null && addr.distributor.equals(entry.distributor) == false) {                  if ( addr.distributor != null && addr.distributor.equals(entry.distributor) == false) {
297                          afvisteEntries.add(entry);                          rejectedEntries.add(entry);
298                          System.out.println("Afviser " + entry);                          System.out.println("Afviser " + entry);
299                          return;                          return;
300                  }                  }
# Line 297  public class AddressManager { Line 302  public class AddressManager {
302    
303                                    
304                  if (entry.ugedage.mandag) {                  if (entry.ugedage.mandag) {
305                          addr.visitedMan = true;                          if (addr.visitedMan == false) {
306                          if (addr.ruteMandag == null) {                                  addr.visitedMan = true;
307                                  addr.stateMan = AddressState.OPENED;                                  if (addr.ruteMandag == null) {
308                                  addr.ruteMandag = entry.rute;                                          addr.stateMan = AddressState.OPENED;
                                 addr.korelisteMandag = entry.koreliste;  
                         } else {  
                                   
                                 if (StringUtils.equals(addr.ruteMandag, entry.rute) == false || StringUtils.equals(addr.korelisteMandag, entry.koreliste) == false) {  
                                         addr.stateMan = AddressState.MODIFIED;  
309                                          addr.ruteMandag = entry.rute;                                          addr.ruteMandag = entry.rute;
310                                          addr.korelisteMandag = entry.koreliste;                                                                          addr.korelisteMandag = entry.koreliste;
311                                  }                                  } else {
312                                            
313                                            if (StringUtils.equals(addr.ruteMandag, entry.rute) == false || StringUtils.equals(addr.korelisteMandag, entry.koreliste) == false) {
314                                                    addr.stateMan = AddressState.MODIFIED;
315                                                    addr.ruteMandag = entry.rute;
316                                                    addr.korelisteMandag = entry.koreliste;                                
317                                            }
318                                    }                              
319                            } else {
320                                    System.out.println( "Double visit monday " + addr);
321                          }                          }
322    
323                  }                  }
324                                    
325                                    
326                  if (entry.ugedage.tirsdag) {                  if (entry.ugedage.tirsdag) {
327                          addr.visitedTir = true;                          if (addr.visitedTir == false) {
328                          if (addr.ruteTirsdag == null) {                                  addr.visitedTir = true;
329                                  addr.stateTir = AddressState.OPENED;                                  if (addr.ruteTirsdag == null) {
330                                  addr.ruteTirsdag = entry.rute;                                          addr.stateTir = AddressState.OPENED;
                                 addr.korelisteTirsdag = entry.koreliste;  
                         } else {  
                                   
                                 if (StringUtils.equals(addr.ruteTirsdag, entry.rute) == false || StringUtils.equals(addr.korelisteTirsdag, entry.koreliste) == false) {  
                                         addr.stateTir = AddressState.MODIFIED;  
331                                          addr.ruteTirsdag = entry.rute;                                          addr.ruteTirsdag = entry.rute;
332                                          addr.korelisteTirsdag = entry.koreliste;                                                                                  addr.korelisteTirsdag = entry.koreliste;
333                                    } else {
334                                            
335                                            if (StringUtils.equals(addr.ruteTirsdag, entry.rute) == false || StringUtils.equals(addr.korelisteTirsdag, entry.koreliste) == false) {
336                                                    addr.stateTir = AddressState.MODIFIED;
337                                                    addr.ruteTirsdag = entry.rute;
338                                                    addr.korelisteTirsdag = entry.koreliste;                                        
339                                            }
340                                  }                                  }
341                          }                          } else {
342                                    System.out.println( "Double visit tuesday " + addr);
343                            }                              
344                  }                  }
345    
346                  if (entry.ugedage.onsdag) {                  if (entry.ugedage.onsdag) {
347                          addr.visitedOns = true;                          if (addr.visitedOns == false) {
348                          if (addr.ruteOnsdag == null) {                                  addr.visitedOns = true;
349                                  addr.stateOns = AddressState.OPENED;                                  if (addr.ruteOnsdag == null) {
350                                  addr.ruteOnsdag = entry.rute;                                          addr.stateOns = AddressState.OPENED;
                                 addr.korelisteOnsdag = entry.koreliste;  
                         } else {  
                                   
                                 if (StringUtils.equals(addr.ruteOnsdag, entry.rute) == false || StringUtils.equals(addr.korelisteOnsdag, entry.koreliste) == false) {  
                                         addr.stateOns = AddressState.MODIFIED;  
351                                          addr.ruteOnsdag = entry.rute;                                          addr.ruteOnsdag = entry.rute;
352                                          addr.korelisteOnsdag = entry.koreliste;                                                                          addr.korelisteOnsdag = entry.koreliste;
353                                    } else {
354                                            
355                                            if (StringUtils.equals(addr.ruteOnsdag, entry.rute) == false || StringUtils.equals(addr.korelisteOnsdag, entry.koreliste) == false) {
356                                                    addr.stateOns = AddressState.MODIFIED;
357                                                    addr.ruteOnsdag = entry.rute;
358                                                    addr.korelisteOnsdag = entry.koreliste;                                
359                                            }
360                                  }                                  }
361                          }                          } else {
362                                    System.out.println( "Double visit wednesday " + addr);
363                            }              
364                  }                  }
365    
366                                    
367                  if (entry.ugedage.torsdag) {                  if (entry.ugedage.torsdag) {
368                          addr.visitedTor = true;                          if (addr.visitedTor == false) {
369                          if (addr.ruteTorsdag == null) {                                  addr.visitedTor = true;
370                                  addr.stateTor = AddressState.OPENED;                                  if (addr.ruteTorsdag == null) {
371                                  addr.ruteTorsdag = entry.rute;                                          addr.stateTor = AddressState.OPENED;
                                 addr.korelisteTorsdag = entry.koreliste;  
                         } else {  
                                   
                                   
                                 if (StringUtils.equals(addr.ruteTorsdag, entry.rute) == false || StringUtils.equals(addr.korelisteTorsdag, entry.koreliste) == false) {  
                                         addr.stateTor = AddressState.MODIFIED;  
372                                          addr.ruteTorsdag = entry.rute;                                          addr.ruteTorsdag = entry.rute;
373                                          addr.korelisteTorsdag = entry.koreliste;                                                                                  addr.korelisteTorsdag = entry.koreliste;
374                                    } else {
375                                            
376                                            
377                                            if (StringUtils.equals(addr.ruteTorsdag, entry.rute) == false || StringUtils.equals(addr.korelisteTorsdag, entry.koreliste) == false) {
378                                                    addr.stateTor = AddressState.MODIFIED;
379                                                    addr.ruteTorsdag = entry.rute;
380                                                    addr.korelisteTorsdag = entry.koreliste;                                        
381                                            }
382                                  }                                  }
383                          }                          } else {
384                                    System.out.println( "Double visit thursday " + addr);
385                            }                                      
386                  }                  }
387    
388                                    
389                  if (entry.ugedage.fredag) {                  if (entry.ugedage.fredag) {
390                          addr.visitedFre = true;                          if (addr.visitedFre == false) {
391                          if (addr.ruteFredag == null) {                                  addr.visitedFre = true;
392                                  addr.stateFre = AddressState.OPENED;                                  if (addr.ruteFredag == null) {
393                                  addr.ruteFredag = entry.rute;                                          addr.stateFre = AddressState.OPENED;
                                 addr.korelisteFredag = entry.koreliste;  
                         } else {  
                                   
                                 if (StringUtils.equals(addr.ruteFredag, entry.rute) == false || StringUtils.equals(addr.korelisteFredag, entry.koreliste) == false) {  
                                         addr.stateFre = AddressState.MODIFIED;  
394                                          addr.ruteFredag = entry.rute;                                          addr.ruteFredag = entry.rute;
395                                          addr.korelisteFredag = entry.koreliste;                                                                          addr.korelisteFredag = entry.koreliste;
396                                    } else {
397                                            
398                                            if (StringUtils.equals(addr.ruteFredag, entry.rute) == false || StringUtils.equals(addr.korelisteFredag, entry.koreliste) == false) {
399                                                    addr.stateFre = AddressState.MODIFIED;
400                                                    addr.ruteFredag = entry.rute;
401                                                    addr.korelisteFredag = entry.koreliste;                                
402                                            }
403                                  }                                  }
404                          }                          } else {
405                                    System.out.println( "Double visit friday " + addr);
406                            }      
407                  }                  }
408    
409                                    
410                  if (entry.ugedage.lordag) {                  if (entry.ugedage.lordag) {
411                          addr.visitedLor = true;                          if (addr.visitedLor == false) {
412                          if (addr.ruteLordag == null) {                                  addr.visitedLor = true;
413                                  addr.stateLor = AddressState.OPENED;                                  if (addr.ruteLordag == null) {
414                                  addr.ruteLordag = entry.rute;                                          addr.stateLor = AddressState.OPENED;
                                 addr.korelisteLordag = entry.koreliste;  
                         } else {  
                                   
                                   
                                 if (StringUtils.equals(addr.ruteLordag, entry.rute) == false || StringUtils.equals(addr.korelisteLordag, entry.koreliste) == false) {  
                                         addr.stateLor = AddressState.MODIFIED;  
415                                          addr.ruteLordag = entry.rute;                                          addr.ruteLordag = entry.rute;
416                                          addr.korelisteLordag = entry.koreliste;                                                                          addr.korelisteLordag = entry.koreliste;
417                                    } else {
418                                            
419                                            
420                                            if (StringUtils.equals(addr.ruteLordag, entry.rute) == false || StringUtils.equals(addr.korelisteLordag, entry.koreliste) == false) {
421                                                    addr.stateLor = AddressState.MODIFIED;
422                                                    addr.ruteLordag = entry.rute;
423                                                    addr.korelisteLordag = entry.koreliste;                                
424                                            }
425                                  }                                  }
426                          }                          } else {
427                                    System.out.println( "Double visit saturday " + addr);
428                            }                                      
429                  }                  }
430    
431                                    
432                  if (entry.ugedage.sondag) {                  if (entry.ugedage.sondag) {
433                          addr.visitedSon = true;                          if (addr.visitedSon == false) {
434                          if (addr.ruteSondag == null) {                                  addr.visitedSon = true;
435                                  addr.stateSon = AddressState.OPENED;                                  if (addr.ruteSondag == null) {
436                                  addr.ruteSondag = entry.rute;                                          addr.stateSon = AddressState.OPENED;
                                 addr.korelisteSondag = entry.koreliste;  
                         } else {  
                                   
                                 if (StringUtils.equals(addr.ruteSondag, entry.rute) == false || StringUtils.equals(addr.korelisteSondag, entry.koreliste) == false) {  
                                         addr.stateSon = AddressState.MODIFIED;  
437                                          addr.ruteSondag = entry.rute;                                          addr.ruteSondag = entry.rute;
438                                          addr.korelisteSondag = entry.koreliste;                                                                          addr.korelisteSondag = entry.koreliste;
439                                    } else {
440                                            
441                                            if (StringUtils.equals(addr.ruteSondag, entry.rute) == false || StringUtils.equals(addr.korelisteSondag, entry.koreliste) == false) {
442                                                    addr.stateSon = AddressState.MODIFIED;
443                                                    addr.ruteSondag = entry.rute;
444                                                    addr.korelisteSondag = entry.koreliste;                                
445                                            }
446                                  }                                  }
447                          }                          } else {
448                                    System.out.println( "Double visit sunday " + addr);
449                            }                                      
450                  }                  }
451                                    
452                                    
453                                    
454                  addr.visited = true;                  //addr.visited = true;
455                  if (addr.state == AddressState.NOT_CHANGED) {                  if (addr.state == AddressState.NOT_CHANGED) {
456                          if (addr.distributor == null) {                          if (addr.distributor == null) {
457                                  addr.state = AddressState.OPENED;                                  addr.state = AddressState.OPENED;
# Line 432  public class AddressManager { Line 466  public class AddressManager {
466                          }                          }
467                  }                                }              
468                                    
469                    updateDbkBane(addr);
470                                    
471          }          }
472                    
473                    
474                    
475          private void createFromEntry(AddressSourceEntry entry) {          private void createFromEntry(AddressSourceEntry entry) {
476                    if (entry.husnr == 999) {
477                            return;
478                    }
479                    if (entry.kommunekode == 0 || entry.vejkode == 0) {
480                            return;
481                    }
482                    if (entry.kommunekode < 100) {
483                            return;
484                    }
485                    
486                    String gadeidStr = Integer.toString(entry.gadeid);
487                    if (gadeidStr.length() != 9) {
488                            return;
489                    }
490                    if (Short.parseShort(gadeidStr.substring(0, 4)) != entry.postnr) {
491                            return; //gadeid / postnr mismatch
492                    }
493                    
494                    
495                    
496                  System.out.println("Opretter adresse ud fra " + entry);                  System.out.println("Opretter adresse ud fra " + entry);
497                                    
498                  Address a = new Address();                  Address a = new Address();
# Line 451  public class AddressManager { Line 506  public class AddressManager {
506                  a.husnr = entry.husnr;                  a.husnr = entry.husnr;
507                  a.husnrbogstav = entry.litra;                  a.husnrbogstav = entry.litra;
508                  a.postnr = entry.postnr;                  a.postnr = entry.postnr;
509                  a.visited = true;                  //a.visited = true;
510                                    
511                  if (entry.ugedage.mandag) {                  if (entry.ugedage.mandag) {
512                          a.ruteMandag = entry.rute;                          a.ruteMandag = entry.rute;
# Line 482  public class AddressManager { Line 537  public class AddressManager {
537                          a.korelisteLordag = entry.koreliste;                          a.korelisteLordag = entry.koreliste;
538                  }                                }              
539                                    
540                    updateDbkBane(a);
541                    
542                  // Nu er det nye adresse object oprettet - nu skal det gemmes i søge strukturen og totallisten                  // Nu er det nye adresse object oprettet - nu skal det gemmes i søge strukturen og totallisten
543                                    
544    
# Line 503  public class AddressManager { Line 560  public class AddressManager {
560                                                                    
561          }          }
562                    
563            
564            
565             /*
566             DAO:
567             UPDATE fulddaekning.adressetabel
568             SET dbkbane = case
569                    when substr(korelisteMa,1,2) IN ('07','10','11','12','14','15','16','18','19','20') then 205 #DAO-BRA
570                 when substr(korelisteMa,1,2) BETWEEN 24 and 30 then 201 #DAO-Ovrige
571                 else 202 #dao syd (52-99=
572             END
573             WHERE distributor='DAO'
574             AND ruteMa is not null;
575    
576             FD: Altid 200
577             NS: Altid 204
578             BK: 195,196,197,198
579             */
580            
581            private void updateDbkBane(Address a) {
582                    List<Short> daoBane205 = Arrays.asList( new Short[] {7,10,11,12,12,14,15,16,18,19,20} );
583                    
584                    
585                    Short bane = null;
586                    
587                    switch (a.distributor) {
588                    case "BK":                      
589                            bane = dbkBaneMap.get(a.postnr);
590                            break;
591                    case "DAO":
592                            String koreliste = MiscUtils.firstNonNull(a.korelisteMandag,a.korelisteLordag, a.korelisteSondag); //DAO har kun 3 dækningstyper
593                            short first2 = Short.parseShort( koreliste.substring(0,2) );
594                            if ( daoBane205.contains(first2) ) {
595                                    bane = 205;
596                            } else if (first2 >= 24 && first2<=30) {
597                                    bane = 201;
598                            } else {
599                                    bane = 202;
600                            }
601                                    
602                            break;                  
603                    case "FD":
604                            bane = 200;
605                            break;
606                    case "NS":
607                            bane = 204;
608                            break;
609                    default:
610                            throw new RuntimeException("Ukendt distributor" + a.distributor); //Silence findBugs
611                    }
612                    
613                    if (bane == null) {
614                            throw new RuntimeException("Ukendt bane for postnr" + a.postnr);
615                    }
616                    
617                    if (a.dbkBane != bane) {
618                            a.dbkBane = bane;
619                            if (a.state ==AddressState.NOT_CHANGED) {
620                                    a.state = AddressState.MODIFIED;
621                            }
622                    }              
623            }
624            
625          public List<Address> getAddressList() {          public List<Address> getAddressList() {
626                  return Collections.unmodifiableList(addressList);                  return Collections.unmodifiableList(addressList);
627          }          }
628                    
629          public int getAfvistAntal() {          public Map<Integer,String> getUnknownStreets() {
630                  return afvisteEntries.size();                  return Collections.unmodifiableMap( unknownStreets );
631            }
632            
633            
634            
635            public int getRejectedCount() {
636                    return rejectedEntries.size();
637          }          }
638                    
639  }  }

Legend:
Removed from v.2845  
changed lines
  Added in v.2876

  ViewVC Help
Powered by ViewVC 1.1.20