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

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

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

revision 2839 by torben, Mon Jan 25 06:18:21 2016 UTC revision 2855 by torben, Wed Jan 27 20:48:22 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;
9    import java.util.Map.Entry;
10  import java.util.TreeMap;  import java.util.TreeMap;
11    
12  import org.apache.commons.lang3.StringUtils;  import org.apache.commons.lang3.StringUtils;
# Line 14  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)
24    
25    
26    
27     */
28    
29  public class AddressManager {  public class AddressManager {
30                    
31                    
# Line 23  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> afvisteEntries = new ArrayList<AddressSourceEntry>();
37            
38            Map<Short,Short> dbkBaneMap = new TreeMap<Short,Short>();
39                    
40          public AddressManager() throws SQLException {          public AddressManager() throws SQLException {
41                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();
# Line 44  public class AddressManager { Line 56  public class AddressManager {
56                          Short husnr = shortHelper.getInstance( a.husnr );                          Short husnr = shortHelper.getInstance( a.husnr );
57                          TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( gadeid );                          TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( gadeid );
58                                                    
59                            if (a.dbkBane > 0 && a.postnr<=4999) {
60                                    Short bane = dbkBaneMap.get(a.postnr);
61                                    if (bane == null) {
62                                            dbkBaneMap.put(a.postnr, a.dbkBane);
63                                    }
64                            }
65                            
66                          if (gade == null) {                          if (gade == null) {
67                                  gade = new TreeMap<Short,ArrayList<Address>>();                                  gade = new TreeMap<Short,ArrayList<Address>>();
68                                  searchStructure.put(gadeid, gade);                                  searchStructure.put(gadeid, gade);
# Line 152  public class AddressManager { Line 171  public class AddressManager {
171                          if (addr.state == AddressState.NOT_CHANGED) {                          if (addr.state == AddressState.NOT_CHANGED) {
172                                  continue;                                  continue;
173                          }                          }
174                          if (addr.stateMan == AddressState.NOT_CHANGED || addr.stateMan == AddressState.CREATED) {                          /*if (addr.stateMan == AddressState.NOT_CHANGED || addr.stateMan == AddressState.CREATED) {
175                                  continue;                                  continue;
176                          }                          }*/
177                                                    
178                          if (addr.stateMan != AddressState.MODIFIED ) {                          if (addr.stateMan != AddressState.MODIFIED ) {
179                                  continue;                                  continue;
# Line 163  public class AddressManager { Line 182  public class AddressManager {
182                          System.out.println(addr.state + ": " + addr.toStringExtended() );                          System.out.println(addr.state + ": " + addr.toStringExtended() );
183                          System.out.println(addr.getRuteString() );                          System.out.println(addr.getRuteString() );
184                                                    
185                          if (count++ > 15)                          if (count++ > 50)
186                                  return;                                  return;
187                  }                  }
188          }          }
# Line 185  public class AddressManager { Line 204  public class AddressManager {
204                  }                  }
205                                    
206                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();                  DatabaseLayerImplementation db = new DatabaseLayerImplementation();
207                    
208                  db.updateAddresses(updates);                  db.updateAddresses(updates);
209    
210                    
211                                    
212                  System.out.println("Writeback done: elapsed " + timer.getElapsed() + "ms.");                  System.out.println("Writeback done: elapsed " + timer.getElapsed() + "ms.");
213          }          }
# Line 224  public class AddressManager { Line 246  public class AddressManager {
246                    
247          private void visitRange(AddressSourceEntry entry) {          private void visitRange(AddressSourceEntry entry) {
248                                    
249                  throw new UnsupportedOperationException("Not implemented yet");                  TreeMap<Short, ArrayList<Address>> gade = searchStructure.get( entry.gadeid );
250                    if (gade == null) {
251                            System.out.println("[Range] Ukendt gadeID " + entry);
252                            return;
253                    }
254                    
255                    for (Entry<Short, ArrayList<Address>> husnrEntry: gade.entrySet()) {
256                            
257                            short husnummer = husnrEntry.getKey();
258                            
259                            if ( (entry.husnr % 2) != (husnummer%2) ){ //lige/ulige skal passe sammen
260                                    continue;
261                            }
262                            
263                            if ( husnummer < entry.husnr || husnummer > entry.tilHusnr) {
264                                    continue;
265                            }
266                            
267                            ArrayList<Address> litraList = husnrEntry.getValue();
268                            
269                            /* a=adressetabel u=input
270                             * and (a.husnr>u.FraHusNr OR (a.husnr=u.FraHusNr AND a.HusnrBogstav >= u.FraBog))
271                             * AND (a.husnr<u.TilHusNr OR (a.husnr=u.TilHusNr AND a.HusnrBogstav <= u.TilBog))
272                             */
273                            
274                            
275                            for (Address addr: litraList) {
276                                    if (addr.husnr > entry.husnr || (addr.husnr == entry.husnr && addr.husnrbogstav.compareTo(entry.litra) >= 0 )) {
277                                            //Using nested IF instead of &&
278                                            if (addr.husnr < entry.tilHusnr || (addr.husnr == entry.tilHusnr && addr.husnrbogstav.compareTo(entry.tilLitra) <= 0 )) {
279                                                    updateAddress(addr, entry);
280                                            }                                      
281                                    }
282                            }
283                    }
284          }          }
285                    
286                    
# Line 236  public class AddressManager { Line 292  public class AddressManager {
292                          return;                          return;
293                  }                  }
294                                    
295                  addr.visited = true;  
                 if (addr.state == AddressState.NOT_CHANGED) {  
                         if (addr.distributor == null) {  
                                 addr.state = AddressState.OPENED;  
                                 addr.distributor = entry.distributor;  
                         } else {  
                                 addr.state = AddressState.MODIFIED;  
                         }  
                 }  
296                                    
297                  if (entry.ugedage.mandag) {                  if (entry.ugedage.mandag) {
298                          addr.visitedMan = true;                          if (addr.visitedMan == false) {
299                          if (addr.ruteMandag == null) {                                  addr.visitedMan = true;
300                                  addr.stateMan = AddressState.OPENED;                                  if (addr.ruteMandag == null) {
301                                  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;  
302                                          addr.ruteMandag = entry.rute;                                          addr.ruteMandag = entry.rute;
303                                          addr.korelisteMandag = entry.koreliste;                                                                          addr.korelisteMandag = entry.koreliste;
304                                  }                                  } else {
305                                            
306                                            if (StringUtils.equals(addr.ruteMandag, entry.rute) == false || StringUtils.equals(addr.korelisteMandag, entry.koreliste) == false) {
307                                                    addr.stateMan = AddressState.MODIFIED;
308                                                    addr.ruteMandag = entry.rute;
309                                                    addr.korelisteMandag = entry.koreliste;                                
310                                            }
311                                    }                              
312                            } else {
313                                    System.out.println( "Double visit monday " + addr);
314                          }                          }
315    
316                  }                  }
317                                    
318                                    
319                  if (entry.ugedage.tirsdag) {                  if (entry.ugedage.tirsdag) {
320                          addr.visitedTir = true;                          if (addr.visitedTir == false) {
321                          if (addr.ruteTirsdag == null) {                                  addr.visitedTir = true;
322                                  addr.stateTir = AddressState.OPENED;                                  if (addr.ruteTirsdag == null) {
323                                  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;  
324                                          addr.ruteTirsdag = entry.rute;                                          addr.ruteTirsdag = entry.rute;
325                                          addr.korelisteTirsdag = entry.koreliste;                                                                                  addr.korelisteTirsdag = entry.koreliste;
326                                    } else {
327                                            
328                                            if (StringUtils.equals(addr.ruteTirsdag, entry.rute) == false || StringUtils.equals(addr.korelisteTirsdag, entry.koreliste) == false) {
329                                                    addr.stateTir = AddressState.MODIFIED;
330                                                    addr.ruteTirsdag = entry.rute;
331                                                    addr.korelisteTirsdag = entry.koreliste;                                        
332                                            }
333                                  }                                  }
334                          }                          } else {
335                                    System.out.println( "Double visit tuesday " + addr);
336                            }                              
337                  }                  }
338    
339                  if (entry.ugedage.onsdag) {                  if (entry.ugedage.onsdag) {
340                          addr.visitedOns = true;                          if (addr.visitedOns == false) {
341                          if (addr.ruteOnsdag == null) {                                  addr.visitedOns = true;
342                                  addr.stateOns = AddressState.OPENED;                                  if (addr.ruteOnsdag == null) {
343                                  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;  
344                                          addr.ruteOnsdag = entry.rute;                                          addr.ruteOnsdag = entry.rute;
345                                          addr.korelisteOnsdag = entry.koreliste;                                                                          addr.korelisteOnsdag = entry.koreliste;
346                                    } else {
347                                            
348                                            if (StringUtils.equals(addr.ruteOnsdag, entry.rute) == false || StringUtils.equals(addr.korelisteOnsdag, entry.koreliste) == false) {
349                                                    addr.stateOns = AddressState.MODIFIED;
350                                                    addr.ruteOnsdag = entry.rute;
351                                                    addr.korelisteOnsdag = entry.koreliste;                                
352                                            }
353                                  }                                  }
354                          }                          } else {
355                                    System.out.println( "Double visit wednesday " + addr);
356                            }              
357                  }                  }
358    
359                                    
360                  if (entry.ugedage.torsdag) {                  if (entry.ugedage.torsdag) {
361                          addr.visitedTor = true;                          if (addr.visitedTor == false) {
362                          if (addr.ruteTorsdag == null) {                                  addr.visitedTor = true;
363                                  addr.stateTor = AddressState.OPENED;                                  if (addr.ruteTorsdag == null) {
364                                  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;  
365                                          addr.ruteTorsdag = entry.rute;                                          addr.ruteTorsdag = entry.rute;
366                                          addr.korelisteTorsdag = entry.koreliste;                                                                                  addr.korelisteTorsdag = entry.koreliste;
367                                    } else {
368                                            
369                                            
370                                            if (StringUtils.equals(addr.ruteTorsdag, entry.rute) == false || StringUtils.equals(addr.korelisteTorsdag, entry.koreliste) == false) {
371                                                    addr.stateTor = AddressState.MODIFIED;
372                                                    addr.ruteTorsdag = entry.rute;
373                                                    addr.korelisteTorsdag = entry.koreliste;                                        
374                                            }
375                                  }                                  }
376                          }                          } else {
377                                    System.out.println( "Double visit thursday " + addr);
378                            }                                      
379                  }                  }
380    
381                                    
382                  if (entry.ugedage.fredag) {                  if (entry.ugedage.fredag) {
383                          addr.visitedFre = true;                          if (addr.visitedFre == false) {
384                          if (addr.ruteFredag == null) {                                  addr.visitedFre = true;
385                                  addr.stateFre = AddressState.OPENED;                                  if (addr.ruteFredag == null) {
386                                  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;  
387                                          addr.ruteFredag = entry.rute;                                          addr.ruteFredag = entry.rute;
388                                          addr.korelisteFredag = entry.koreliste;                                                                          addr.korelisteFredag = entry.koreliste;
389                                    } else {
390                                            
391                                            if (StringUtils.equals(addr.ruteFredag, entry.rute) == false || StringUtils.equals(addr.korelisteFredag, entry.koreliste) == false) {
392                                                    addr.stateFre = AddressState.MODIFIED;
393                                                    addr.ruteFredag = entry.rute;
394                                                    addr.korelisteFredag = entry.koreliste;                                
395                                            }
396                                  }                                  }
397                          }                          } else {
398                                    System.out.println( "Double visit friday " + addr);
399                            }      
400                  }                  }
401    
402                                    
403                  if (entry.ugedage.lordag) {                  if (entry.ugedage.lordag) {
404                          addr.visitedLor = true;                          if (addr.visitedLor == false) {
405                          if (addr.ruteLordag == null) {                                  addr.visitedLor = true;
406                                  addr.stateLor = AddressState.OPENED;                                  if (addr.ruteLordag == null) {
407                                  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;  
408                                          addr.ruteLordag = entry.rute;                                          addr.ruteLordag = entry.rute;
409                                          addr.korelisteLordag = entry.koreliste;                                                                          addr.korelisteLordag = entry.koreliste;
410                                    } else {
411                                            
412                                            
413                                            if (StringUtils.equals(addr.ruteLordag, entry.rute) == false || StringUtils.equals(addr.korelisteLordag, entry.koreliste) == false) {
414                                                    addr.stateLor = AddressState.MODIFIED;
415                                                    addr.ruteLordag = entry.rute;
416                                                    addr.korelisteLordag = entry.koreliste;                                
417                                            }
418                                  }                                  }
419                          }                          } else {
420                                    System.out.println( "Double visit saturday " + addr);
421                            }                                      
422                  }                  }
423    
424                                    
425                  if (entry.ugedage.sondag) {                  if (entry.ugedage.sondag) {
426                          addr.visitedSon = true;                          if (addr.visitedSon == false) {
427                          if (addr.ruteSondag == null) {                                  addr.visitedSon = true;
428                                  addr.stateSon = AddressState.OPENED;                                  if (addr.ruteSondag == null) {
429                                  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;  
430                                          addr.ruteSondag = entry.rute;                                          addr.ruteSondag = entry.rute;
431                                          addr.korelisteSondag = entry.koreliste;                                                                          addr.korelisteSondag = entry.koreliste;
432                                    } else {
433                                            
434                                            if (StringUtils.equals(addr.ruteSondag, entry.rute) == false || StringUtils.equals(addr.korelisteSondag, entry.koreliste) == false) {
435                                                    addr.stateSon = AddressState.MODIFIED;
436                                                    addr.ruteSondag = entry.rute;
437                                                    addr.korelisteSondag = entry.koreliste;                                
438                                            }
439                                  }                                  }
440                          }                          } else {
441                                    System.out.println( "Double visit sunday " + addr);
442                            }                                      
443                  }                  }
   
444                                    
445                                    
446                    
447                    addr.visited = true;
448                    if (addr.state == AddressState.NOT_CHANGED) {
449                            if (addr.distributor == null) {
450                                    addr.state = AddressState.OPENED;
451                                    addr.distributor = entry.distributor;
452                            } else {
453                                    if (addr.stateMan != AddressState.NOT_CHANGED || addr.stateTir != AddressState.NOT_CHANGED
454                                                    || addr.stateOns != AddressState.NOT_CHANGED || addr.stateTor != AddressState.NOT_CHANGED
455                                                    || addr.stateFre != AddressState.NOT_CHANGED || addr.stateLor != AddressState.NOT_CHANGED || addr.stateSon != AddressState.NOT_CHANGED ){
456                                            
457                                            addr.state = AddressState.MODIFIED;    
458                                    }
459                            }
460                    }              
461                    
462                    updateDbkBane(addr);
463                    
464          }          }
465                    
466                    
467                    
468          private void createFromEntry(AddressSourceEntry entry) {          private void createFromEntry(AddressSourceEntry entry) {
469                    if (entry.husnr == 999) {
470                            return;
471                    }
472                    if (entry.kommunekode == 0 || entry.vejkode == 0) {
473                            return;
474                    }
475                    if (entry.kommunekode < 100) {
476                            return;
477                    }
478                    if (Short.parseShort(Integer.toString(entry.gadeid).substring(0, 4)) != entry.postnr) {
479                            return; //gadeid / postnr mismatch
480                    }
481                    
482                    
483                    
484                  System.out.println("Opretter adresse ud fra " + entry);                  System.out.println("Opretter adresse ud fra " + entry);
485                                    
486                  Address a = new Address();                  Address a = new Address();
# Line 416  public class AddressManager { Line 525  public class AddressManager {
525                          a.korelisteLordag = entry.koreliste;                          a.korelisteLordag = entry.koreliste;
526                  }                                }              
527                                    
528                    updateDbkBane(a);
529                    
530                  // 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
531                                    
532    
# Line 437  public class AddressManager { Line 548  public class AddressManager {
548                                                                    
549          }          }
550                    
551            
552            
553             /*
554             DAO:
555             UPDATE fulddaekning.adressetabel
556             SET dbkbane = case
557                    when substr(korelisteMa,1,2) IN ('07','10','11','12','14','15','16','18','19','20') then 205 #DAO-BRA
558                 when substr(korelisteMa,1,2) BETWEEN 24 and 30 then 201 #DAO-Ovrige
559                 else 202 #dao syd (52-99=
560             END
561             WHERE distributor='DAO'
562             AND ruteMa is not null;
563    
564             FD: Altid 200
565             NS: Altid 204
566             BK: 195,196,197,198
567             */
568            
569            private void updateDbkBane(Address a) {
570                    List<Short> daoBane205 = Arrays.asList( new Short[] {7,10,11,12,12,14,15,16,18,19,20} );
571                    
572                    
573                    Short bane = null;
574                    
575                    switch (a.distributor) {
576                    case "BK":                      
577                            bane = dbkBaneMap.get(a.postnr);
578                            break;
579                    case "DAO":
580                            String koreliste = MiscUtils.firstNonNull(a.korelisteMandag,a.korelisteLordag, a.korelisteSondag); //DAO har kun 3 dækningstyper
581                            short first2 = Short.parseShort( koreliste.substring(0,2) );
582                            if ( daoBane205.contains(first2) ) {
583                                    bane = 205;
584                            } else if (first2 >= 24 && first2<=30) {
585                                    bane = 201;
586                            } else {
587                                    bane = 202;
588                            }
589                                    
590                            break;                  
591                    case "FD":
592                            bane = 200;
593                            break;
594                    case "NS":
595                            bane = 204;
596                            break;                  
597                    }
598                    
599                    if (bane == null) {
600                            throw new RuntimeException("Ukendt bane for postnr" + a.postnr);
601                    }
602                    
603                    if (a.dbkBane != bane) {
604                            a.dbkBane = bane;
605                            if (a.state ==AddressState.NOT_CHANGED) {
606                                    a.state = AddressState.MODIFIED;
607                            }
608                    }              
609            }
610            
611          public List<Address> getAddressList() {          public List<Address> getAddressList() {
612                  return Collections.unmodifiableList(addressList);                  return Collections.unmodifiableList(addressList);
613          }          }
614                    
615            
616            
617          public int getAfvistAntal() {          public int getAfvistAntal() {
618                  return afvisteEntries.size();                  return afvisteEntries.size();
619          }          }

Legend:
Removed from v.2839  
changed lines
  Added in v.2855

  ViewVC Help
Powered by ViewVC 1.1.20