18 |
|
|
19 |
import dk.daoas.daoadresseservice.admin.ServiceConfig; |
import dk.daoas.daoadresseservice.admin.ServiceConfig; |
20 |
import dk.daoas.daoadresseservice.beans.Address; |
import dk.daoas.daoadresseservice.beans.Address; |
21 |
|
import dk.daoas.daoadresseservice.beans.Address.RoutingInfo; |
22 |
import dk.daoas.daoadresseservice.beans.AliasBean; |
import dk.daoas.daoadresseservice.beans.AliasBean; |
23 |
import dk.daoas.daoadresseservice.beans.DataStatisticsBean; |
import dk.daoas.daoadresseservice.beans.DataStatisticsBean; |
24 |
import dk.daoas.daoadresseservice.beans.ExtendedBean; |
import dk.daoas.daoadresseservice.beans.ExtendedBean; |
152 |
|
|
153 |
/* |
/* |
154 |
* Hvis der ikke er direkte hits, prøver vi at skære ord af vejnavn |
* Hvis der ikke er direkte hits, prøver vi at skære ord af vejnavn |
155 |
* |
**/ |
|
* <strike>Denne sektion er MEGET experimental da den øger antallet af kald til google/OSM væsentligt</strike>*/ |
|
156 |
if (gadeident == null) { |
if (gadeident == null) { |
157 |
final int MAX_TRIES = 4; |
final int MAX_TRIES = 4; |
158 |
|
|
285 |
|
|
286 |
|
|
287 |
// Brug OpenStreetMap før vi prøver google |
// Brug OpenStreetMap før vi prøver google |
288 |
// For google har en request limit, det har OSM ikke! |
// google har en hard request limit, men OSM har en fair usage policy! |
289 |
if ( gadeident == null && useExternal) { |
if ( gadeident == null && useExternal) { |
290 |
String vej = osmHelper.proposeStreetName(request, result); |
String vej = osmHelper.proposeStreetName(request, result); |
291 |
gadeident = helperWrapper(vej, request.streetNames, helperSearchKey); |
gadeident = helperWrapper(vej, request.streetNames, helperSearchKey); |
447 |
for (ExtendedBean eb : extDao) { |
for (ExtendedBean eb : extDao) { |
448 |
|
|
449 |
Address orgAddress = idAddressMap.get(eb.orgId); |
Address orgAddress = idAddressMap.get(eb.orgId); |
450 |
if (orgAddress == null) |
if (orgAddress == null) { |
451 |
continue; |
continue; |
452 |
|
} |
453 |
|
|
454 |
if (orgAddress.daekningsType != DaekningsType.DAEKNING_IKKEDAEKKET) { |
/*if (orgAddress.daekningsType != DaekningsType.DAEKNING_IKKEDAEKKET) { |
455 |
//kan være at adressen er blevet markeret dækket og - find-nærmeste data ikke er opdateret i mellemtiden |
//kan være at adressen er blevet markeret dækket og - find-nærmeste data ikke er opdateret i mellemtiden |
456 |
continue; |
continue; |
457 |
} |
}*/ |
458 |
|
|
459 |
Address targetAddress = idAddressMap.get(eb.targetId); |
Address targetAddress = idAddressMap.get(eb.targetId); |
460 |
if (targetAddress == null) { |
if (targetAddress == null) { |
472 |
continue; |
continue; |
473 |
} |
} |
474 |
|
|
|
orgAddress.extTarget = targetAddress; |
|
|
orgAddress.extAfstand = eb.afstand; |
|
475 |
|
|
476 |
boolean covered = false; |
|
477 |
|
short modifyCounter = 0; |
478 |
|
|
479 |
if (targetAddress.distributor.equals("DAO")) { |
if (targetAddress.distributor.equals("DAO")) { |
480 |
orgAddress.ruteMandag = calculateExtendedDaoRoute(eb, targetAddress); |
modifyCounter += updateRoutingExtendedDAO(eb, orgAddress.routingMandag, targetAddress.routingMandag, ruteHelper); |
481 |
orgAddress.ruteMandag = ruteHelper.getInstance(orgAddress.ruteMandag); |
modifyCounter += updateRoutingExtendedDAO(eb, orgAddress.routingTirsdag, targetAddress.routingTirsdag, ruteHelper); |
482 |
|
modifyCounter += updateRoutingExtendedDAO(eb, orgAddress.routingOnsdag, targetAddress.routingOnsdag, ruteHelper); |
483 |
if (orgAddress.ruteMandag != null) { |
modifyCounter += updateRoutingExtendedDAO(eb, orgAddress.routingTorsdag, targetAddress.routingTorsdag, ruteHelper); |
484 |
orgAddress.korelisteMandag = targetAddress.korelisteMandag; |
modifyCounter += updateRoutingExtendedDAO(eb, orgAddress.routingFredag, targetAddress.routingFredag, ruteHelper); |
485 |
covered = true; |
modifyCounter += updateRoutingExtendedDAO(eb, orgAddress.routingLordag, targetAddress.routingLordag, ruteHelper); |
486 |
} |
modifyCounter += updateRoutingExtendedDAO(eb, orgAddress.routingSondag, targetAddress.routingSondag, ruteHelper); |
487 |
} |
} |
488 |
|
|
489 |
if (targetAddress.distributor.equals("BK")) { |
if (targetAddress.distributor.equals("BK")) { |
490 |
orgAddress.korelisteMandag = calculateExtendedBkKoreliste(eb, targetAddress); |
modifyCounter += updateRoutingExtendedBK(eb, orgAddress.routingMandag, targetAddress.routingMandag, ruteHelper); |
491 |
orgAddress.korelisteMandag = korelisteHelper.getInstance(orgAddress.korelisteMandag); |
modifyCounter += updateRoutingExtendedBK(eb, orgAddress.routingTirsdag, targetAddress.routingTirsdag, ruteHelper); |
492 |
|
modifyCounter += updateRoutingExtendedBK(eb, orgAddress.routingOnsdag, targetAddress.routingOnsdag, ruteHelper); |
493 |
if (orgAddress.korelisteMandag != null) { |
modifyCounter += updateRoutingExtendedBK(eb, orgAddress.routingTorsdag, targetAddress.routingTorsdag, ruteHelper); |
494 |
orgAddress.ruteMandag = targetAddress.ruteMandag; |
modifyCounter += updateRoutingExtendedBK(eb, orgAddress.routingFredag, targetAddress.routingFredag, ruteHelper); |
495 |
covered = true; |
modifyCounter += updateRoutingExtendedBK(eb, orgAddress.routingLordag, targetAddress.routingLordag, ruteHelper); |
496 |
} |
modifyCounter += updateRoutingExtendedBK(eb, orgAddress.routingSondag, targetAddress.routingSondag, ruteHelper); |
497 |
|
} |
498 |
|
|
499 |
|
|
500 |
|
if (modifyCounter > 0) { |
501 |
|
orgAddress.extTarget = targetAddress; |
502 |
|
orgAddress.extAfstand = eb.afstand; |
503 |
} |
} |
504 |
|
|
505 |
if (covered) { //Kopier resten af felterne |
if (modifyCounter>0 && orgAddress.daekningsType == DaekningsType.DAEKNING_IKKEDAEKKET) { //Kopier resten af felterne |
506 |
orgAddress.daekningsType = DaekningsType.DAEKNING_UDVIDET; |
orgAddress.daekningsType = DaekningsType.DAEKNING_UDVIDET; |
507 |
orgAddress.dbkBane = targetAddress.dbkBane; |
orgAddress.dbkBane = targetAddress.dbkBane; |
508 |
|
|
528 |
|
|
529 |
Map<Short,HundredePctBean> hundredePct = db.get100PctList(); |
Map<Short,HundredePctBean> hundredePct = db.get100PctList(); |
530 |
for (Address addr : alleAdresser) { |
for (Address addr : alleAdresser) { |
531 |
if (addr.daekningsType != DaekningsType.DAEKNING_IKKEDAEKKET) { |
|
|
continue; |
|
|
} |
|
532 |
|
|
533 |
if (addr.distributor != null && addr.distributor.equals("LUKKET")) { |
if (addr.distributor != null && addr.distributor.equals("LUKKET")) { |
534 |
continue; |
continue; |
535 |
} |
} |
536 |
|
|
537 |
|
|
538 |
HundredePctBean bean = hundredePct.get(addr.postnr); |
HundredePctBean bean = hundredePct.get(addr.postnr); |
540 |
continue; |
continue; |
541 |
} |
} |
542 |
|
|
543 |
addr.daekningsType = DaekningsType.DAEKNING_100PCT; |
short modifyCounter = 0; |
544 |
addr.ruteMandag = bean.rute; |
modifyCounter += updateRouting100Pct(bean, addr.routingMandag); |
545 |
addr.korelisteMandag = bean.koreliste; |
modifyCounter += updateRouting100Pct(bean, addr.routingTirsdag); |
546 |
addr.dbkBane = bean.dbkBane; |
modifyCounter += updateRouting100Pct(bean, addr.routingOnsdag); |
547 |
addr.distributor = bean.distributor; |
modifyCounter += updateRouting100Pct(bean, addr.routingTorsdag); |
548 |
|
modifyCounter += updateRouting100Pct(bean, addr.routingFredag); |
549 |
|
modifyCounter += updateRouting100Pct(bean, addr.routingLordag); |
550 |
|
modifyCounter += updateRouting100Pct(bean, addr.routingSondag); |
551 |
|
|
552 |
|
|
553 |
|
if (addr.daekningsType == DaekningsType.DAEKNING_IKKEDAEKKET && modifyCounter>0) { |
554 |
|
addr.daekningsType = DaekningsType.DAEKNING_100PCT; |
555 |
|
addr.dbkBane = bean.dbkBane; |
556 |
|
addr.distributor = bean.distributor; |
557 |
|
} |
558 |
|
|
559 |
|
|
560 |
|
|
561 |
} |
} |
562 |
|
|
563 |
//////////////////////////////////////////////////////////////////////////////////// |
//////////////////////////////////////////////////////////////////////////////////// |
603 |
System.out.println("Build Completed"); |
System.out.println("Build Completed"); |
604 |
|
|
605 |
} |
} |
606 |
|
|
607 |
|
|
608 |
|
public short updateRoutingExtendedBK(ExtendedBean bean, RoutingInfo source, RoutingInfo target, DeduplicateHelper<String> ruteHelper) { |
609 |
|
if (source.rute != null) { |
610 |
|
return 0; |
611 |
|
} |
612 |
|
|
613 |
|
source.rute = calculateExtendedBkRoute(bean, target); |
614 |
|
source.rute = ruteHelper.getInstance(source.rute); |
615 |
|
|
616 |
|
if (source.rute != null) { |
617 |
|
source.koreliste = target.koreliste; |
618 |
|
return 1; |
619 |
|
} else { |
620 |
|
return 0; |
621 |
|
} |
622 |
|
} |
623 |
|
|
624 |
|
public short updateRoutingExtendedDAO(ExtendedBean bean, RoutingInfo source, RoutingInfo target, DeduplicateHelper<String> ruteHelper) { |
625 |
|
if (source.rute != null) { |
626 |
|
return 0; |
627 |
|
} |
628 |
|
|
629 |
|
source.rute = calculateExtendedDaoRoute(bean, target); |
630 |
|
source.rute = ruteHelper.getInstance(source.rute); |
631 |
|
|
632 |
|
if (source.rute != null) { |
633 |
|
source.koreliste = target.koreliste; |
634 |
|
return 1; |
635 |
|
} else { |
636 |
|
return 0; |
637 |
|
} |
638 |
|
|
639 |
|
} |
640 |
|
|
641 |
|
public short updateRouting100Pct(HundredePctBean bean, RoutingInfo routing) { |
642 |
|
if (routing.rute == null) { |
643 |
|
routing.rute = bean.rute; |
644 |
|
routing.koreliste = bean.koreliste; |
645 |
|
return 1; |
646 |
|
} else { |
647 |
|
return 0; |
648 |
|
} |
649 |
|
} |
650 |
|
|
651 |
public DataStatisticsBean getStatistics() { |
public DataStatisticsBean getStatistics() { |
652 |
return stats; |
return stats; |
663 |
} |
} |
664 |
|
|
665 |
|
|
666 |
private String calculateExtendedDaoRoute(ExtendedBean eb, Address targetAddress) { |
private String calculateExtendedDaoRoute(ExtendedBean eb, RoutingInfo targetRoute) { |
667 |
if (targetAddress.ruteMandag == null) { //hvis targetAdress.rute er null så er adressen ikke dækket alligevel |
if (targetRoute.rute == null) { //hvis targetAdress.rute er null så er adressen ikke dækket alligevel |
668 |
|
return null; |
669 |
|
} |
670 |
|
|
671 |
|
if (eb.transport == null) { |
672 |
|
System.out.println("NULL transport type ved rute " + targetRoute.rute ); |
673 |
return null; |
return null; |
674 |
} |
} |
675 |
|
|
677 |
switch( eb.transport) { |
switch( eb.transport) { |
678 |
case "cykel": |
case "cykel": |
679 |
if (eb.afstand < 0.151) { |
if (eb.afstand < 0.151) { |
680 |
return "." + targetAddress.ruteMandag; |
return "." + targetRoute.rute; |
681 |
} else if (eb.afstand < 0.501) { |
} else if (eb.afstand < 0.501) { |
682 |
return ".." + targetAddress.ruteMandag; |
return ".." + targetRoute.rute; |
683 |
} else if (eb.afstand < 0.701) { |
} else if (eb.afstand < 0.701) { |
684 |
return "..." + targetAddress.ruteMandag; |
return "..." + targetRoute.rute; |
685 |
} else if (eb.afstand < 1.001) { |
} else if (eb.afstand < 1.001) { |
686 |
return "...." + targetAddress.ruteMandag; |
return "...." + targetRoute.rute; |
687 |
} |
} |
688 |
break; |
break; |
689 |
case "scooter": |
case "scooter": |
690 |
if (eb.afstand < 0.151) { |
if (eb.afstand < 0.151) { |
691 |
return "." + targetAddress.ruteMandag; |
return "." + targetRoute.rute; |
692 |
} else if (eb.afstand < 0.801) { |
} else if (eb.afstand < 0.801) { |
693 |
return ".." + targetAddress.ruteMandag; |
return ".." + targetRoute.rute; |
694 |
} else if (eb.afstand < 1.201) { |
} else if (eb.afstand < 1.201) { |
695 |
return "..." + targetAddress.ruteMandag; |
return "..." + targetRoute.rute; |
696 |
} else if (eb.afstand < 2.101) { |
} else if (eb.afstand < 2.101) { |
697 |
return "...." + targetAddress.ruteMandag; |
return "...." + targetRoute.rute; |
698 |
} |
} |
699 |
break; |
break; |
700 |
case "bil": |
case "bil": |
701 |
if (eb.afstand < 0.151) { |
if (eb.afstand < 0.151) { |
702 |
return "." + targetAddress.ruteMandag; |
return "." + targetRoute.rute; |
703 |
} else if (eb.afstand < 1.001) { |
} else if (eb.afstand < 1.001) { |
704 |
return ".." + targetAddress.ruteMandag; |
return ".." + targetRoute.rute; |
705 |
} else if (eb.afstand < 1.601) { |
} else if (eb.afstand < 1.601) { |
706 |
return "..." + targetAddress.ruteMandag; |
return "..." + targetRoute.rute; |
707 |
} else if (eb.afstand < 2.601) { |
} else if (eb.afstand < 2.601) { |
708 |
return "...." + targetAddress.ruteMandag; |
return "...." + targetRoute.rute; |
709 |
} |
} |
710 |
break; |
break; |
711 |
default: |
default: |
723 |
} |
} |
724 |
|
|
725 |
/////////////////////////////////////////////////////////// |
/////////////////////////////////////////////////////////// |
726 |
private String calculateExtendedBkKoreliste(ExtendedBean eb, Address targetAddress) { |
|
727 |
if (targetAddress.ruteMandag == null) { //hvis targetAdress.rute er null så er adressen ikke dækket alligevel |
|
728 |
|
private String calculateExtendedBkRoute(ExtendedBean eb, RoutingInfo targetRoute) { |
729 |
|
if (targetRoute.rute == null) { //hvis targetAdress.rute er null så er adressen ikke dækket alligevel |
730 |
return null; |
return null; |
731 |
} |
} |
732 |
|
|
736 |
} else { |
} else { |
737 |
inject = ".."; |
inject = ".."; |
738 |
} |
} |
739 |
return AddressUtils.injectIntoBk(targetAddress.korelisteMandag, inject); |
return inject + targetRoute.rute; |
740 |
} |
} |
741 |
|
|
742 |
|
|