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

  ViewVC Help
Powered by ViewVC 1.1.20