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

  ViewVC Help
Powered by ViewVC 1.1.20