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

Annotation of /dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/dawa/DawaTask.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3012 - (hide annotations) (download)
Wed Apr 20 13:51:24 2016 UTC (8 years, 1 month ago) by torben
File size: 6767 byte(s)


1 torben 3002 package dk.daoas.adressevedligehold.dawa;
2    
3 torben 3003 import java.util.ArrayList;
4     import java.util.List;
5 torben 3006 import java.util.Map;
6 torben 3003 import java.util.Set;
7     import java.util.TreeMap;
8     import java.util.TreeSet;
9 torben 3002
10 torben 3003 import dk.daoas.adressevedligehold.MailSender;
11     import dk.daoas.adressevedligehold.beans.Address;
12     import dk.daoas.adressevedligehold.beans.Address.AddressState;
13     import dk.daoas.adressevedligehold.db.DatabaseCoverageUpdate;
14 torben 3002 import dk.daoas.adressevedligehold.tasks.Task;
15 torben 3003 import dk.daoas.adressevedligehold.tasks.TaskLogger;
16 torben 3012 import dk.daoas.adressevedligehold.util.CountMap;
17 torben 3003 import dk.daoas.adressevedligehold.util.DeduplicateHelper;
18 torben 3006 import dk.daoas.adressevedligehold.util.TimingHelper;
19 torben 3002
20     /*
21     * Alle regioner: http://dawa.aws.dk/regioner/
22     * Enkelt region: http://dawa.aws.dk/regioner/{region}
23     */
24    
25    
26     public class DawaTask extends Task {
27    
28 torben 3003 final String kommentarTemplate = "Oprettet via DAWA";
29    
30     private TaskLogger logger = TaskLogger.getInstance();
31    
32 torben 3002 private short regionCode;
33     private String regionName;
34    
35    
36 torben 3003
37     DatabaseCoverageUpdate db = new DatabaseCoverageUpdate();
38    
39     DeduplicateHelper<String> dedup = new DeduplicateHelper<>();
40    
41 torben 3002 public DawaTask(short regionCode, String regionName){
42     this.regionCode = regionCode;
43     this.regionName = regionName;
44    
45     }
46    
47     @Override
48     protected void taskRun() throws Exception {
49 torben 3006 TimingHelper timer = new TimingHelper();
50    
51 torben 3003 DawaWebservice dawa = new DawaWebservice();
52 torben 3006 TreeMap<String, DawaGade> search = new TreeMap<>();
53 torben 3003
54 torben 3006 // stage 1 - hent alle data
55 torben 3003 List<Address> adresser = db.getAllAdresses();
56    
57    
58     // stage 2 opbyg søge struktur
59     logger.info("Building search structure");
60 torben 3006
61 torben 3003
62     for (Address addr : adresser) {
63     String dav = getDAVid(addr);
64     DawaGade gade = search.get(dav);
65     if (gade == null) {
66     gade = new DawaGade();
67     search.put(dav, gade);
68     }
69     gade.gadeids.add( addr.gadeid );
70     gade.adresser.add(addr);
71     }
72     logger.info("Build search structure done");
73    
74 torben 3006 Map<String,Integer> kommuner = dawa.kommunerIRegion(regionCode);
75 torben 3003
76 torben 3008 String subject = "DAWA indlæsning - " + regionName;
77 torben 3006
78     StringBuilder headerSB = new StringBuilder();
79 torben 3008 headerSB.append("<h1>Indlæsnings rapport for " + regionName + " </h1><br>");
80 torben 3006
81     int totalAntalNye = 0;
82     int totalAntalFejl = 0;
83     int totalAntalUkendt = 0;
84     int totalAntalDobbelt = 0;
85    
86    
87     StringBuilder sb = new StringBuilder();
88    
89     for (Map.Entry<String, Integer> entry : kommuner.entrySet()) {
90     int kommunekode = entry.getValue();
91     String kommunenavn = entry.getKey();
92    
93     logger.info("Behandler: " + kommunekode + " " + kommunenavn);
94    
95    
96     List<Address> dawaListe = dawa.adresserIKommune(kommunekode);
97     // stage 3 søg
98 torben 3012 CountMap ukendteDAV = new CountMap();
99     CountMap dobbeltGadeidDAV = new CountMap();
100 torben 3006 List<Address> nyeAdresser = new ArrayList<>();
101    
102     for (Address dawaAddr : dawaListe) {
103     String dav = getDAVid(dawaAddr);
104     DawaGade gade = search.get(dav);
105     if (gade == null) {
106 torben 3012 String key = dav + " " + dawaAddr.vejnavn;
107     ukendteDAV.increment(key);
108 torben 3006 continue;
109     }
110    
111     if (gade.gadeids.size() != 1) {
112 torben 3012 String key = dav + " " + dawaAddr.vejnavn;
113     dobbeltGadeidDAV.increment(key);
114     continue;
115 torben 3006 }
116    
117     boolean fundet = false;
118     for (Address target : gade.adresser) {
119     if ( target.husnr == dawaAddr.husnr && target.husnrbogstav.equals(dawaAddr.husnrbogstav) ) {
120     fundet = true;
121     break;
122     }
123     }
124    
125     if (fundet == false) {
126     dawaAddr.gadeid = gade.gadeids.iterator().next();
127     dawaAddr.state = AddressState.CREATED;
128     dawaAddr.kommentar = kommentarTemplate;
129     nyeAdresser.add(dawaAddr);
130     }
131 torben 3003 }
132 torben 3006 logger.info("Address Search done - starting save to DB");
133 torben 3003
134 torben 3006 db.saveNewAddresses(nyeAdresser);
135    
136     logger.info("Save to db done - sending report mail");
137    
138     List<Address> saveOK = new ArrayList<>();
139     List<Address> saveFail = new ArrayList<>();
140     for (Address a : nyeAdresser) {
141     if (a.state == AddressState.CREATE_FAIL) {
142     saveFail.add(a);
143     } else {
144     saveOK.add(a);
145     }
146 torben 3003 }
147    
148 torben 3006 totalAntalNye += saveOK.size();
149     totalAntalFejl += saveFail.size();
150     totalAntalUkendt += ukendteDAV.size();
151     totalAntalDobbelt += dobbeltGadeidDAV.size();
152    
153    
154 torben 3008 sb.append("<h2>Kommune: " + kommunenavn + "</h2>\n");
155 torben 3009
156     sb.append("Kommunekode: " + kommunekode + "<br>\n");
157 torben 3006 sb.append("Antal Inserts: " + saveOK.size() + "<br>\n");
158     sb.append("Antal insert fails: " + saveFail.size() + "<br>\n");
159     sb.append("Antal ukendte dav: " + ukendteDAV.size() + "<br>\n");
160     sb.append("Antal dobbelt gadeid dav: " + dobbeltGadeidDAV.size() + "<br>\n");
161    
162     sb.append("<h3>Adresser ok:</h3>\n");
163     addressTable(sb, saveOK);
164    
165     sb.append("<h3>SQL INSERT fejl:</h3>\n");
166     addressTable(sb, saveFail);
167    
168     sb.append("<h3>Ukendte DAV:</h3>\n");
169 torben 3012 for (Map.Entry<String, Integer> dav : ukendteDAV.entrySet()) {
170     sb.append(dav.getKey() + " : " + dav.getValue() + "<br>\n");
171 torben 3003 }
172    
173 torben 3006 sb.append("<h3>Dobbelt gadeid DAV:</h3>\n");
174 torben 3012 for (Map.Entry<String, Integer> dav : dobbeltGadeidDAV.entrySet()) {
175     sb.append(dav.getKey() + " : " + dav.getValue() + "<br>\n");
176     }
177 torben 3003 }
178    
179 torben 3006 headerSB.append("Antal Inserts: " + totalAntalNye + "<br>\n");
180     headerSB.append("Antal insert fails: " + totalAntalFejl + "<br>\n");
181     headerSB.append("Antal ukendte dav: " + totalAntalUkendt + "<br>\n");
182     headerSB.append("Antal dobbelt gadeid dav: " + totalAntalDobbelt + "<br>\n");
183     headerSB.append("Elapsed: " + timer.getElapsed() + " ms.<br>\n");
184 torben 3003
185 torben 3006 MailSender.sendMail(subject, headerSB.toString() + sb.toString() );
186 torben 3002
187     }
188 torben 3003
189 torben 3005 private void addressTable(StringBuilder sb, List<Address> addr) {
190     sb.append("<table border=0>\n");
191     sb.append("<tr><th>GadeID</th><th>Postnr</th><th>Kom.kode</th><th>Vejkode</th><th>Vejnavn</th><th>Husnr<th><th>Litra</th></tr>");
192     for (Address a: addr) {
193     sb.append("<tr>");
194     sb.append("<td>&nbsp;").append(a.gadeid).append(" </td>");
195     sb.append("<td>&nbsp;").append(a.postnr).append(" </td>");
196     sb.append("<td>&nbsp;").append(a.kommunekode).append(" </td>");
197     sb.append("<td>&nbsp;").append(a.vejkode).append(" </td>");
198     sb.append("<td>&nbsp;").append(a.vejnavn).append(" </td>");
199     sb.append("<td>&nbsp;").append(a.husnr).append(" </td>");
200     sb.append("<td>&nbsp;").append(a.husnrbogstav).append(" </td>");
201     }
202     sb.append("</table><br>\n");
203    
204     }
205    
206 torben 3003 String getDAVid(Address addr) {
207     String dav = String.format("%04d%03d%04d", addr.postnr, addr.kommunekode, addr.vejkode);
208    
209     return dedup.getInstance(dav);
210     }
211 torben 3002
212     @Override
213     public String getDescription() {
214     return "DawaTask";
215     }
216    
217     @Override
218     public String getDetail() {
219     return "Region: " + regionCode + "/" + regionName;
220     }
221    
222     @Override
223     public double getPercentCompleted() {
224     return 0;
225     }
226    
227    
228    
229     }

  ViewVC Help
Powered by ViewVC 1.1.20