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

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

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

revision 3002 by torben, Mon Apr 18 18:56:35 2016 UTC revision 3070 by torben, Fri Jul 22 09:53:45 2016 UTC
# Line 1  Line 1 
1  package dk.daoas.adressevedligehold.dawa;  package dk.daoas.adressevedligehold.dawa;
2    
3  import com.google.gson.Gson;  import java.util.ArrayList;
4    import java.util.Collections;
5    import java.util.List;
6    import java.util.Map;
7    import java.util.Map.Entry;
8    import java.util.TreeMap;
9    
10    import com.google.common.base.Splitter;
11    
12    import dk.daoas.adressevedligehold.MailSender;
13    import dk.daoas.adressevedligehold.beans.Address;
14    import dk.daoas.adressevedligehold.beans.Address.AddressState;
15    import dk.daoas.adressevedligehold.db.DatabaseCoverageUpdate;
16  import dk.daoas.adressevedligehold.tasks.Task;  import dk.daoas.adressevedligehold.tasks.Task;
17    import dk.daoas.adressevedligehold.tasks.TaskLogger;
18    import dk.daoas.adressevedligehold.util.CountMap;
19    import dk.daoas.adressevedligehold.util.DeduplicateHelper;
20    import dk.daoas.adressevedligehold.util.TimingHelper;
21    
22  /*  /*
23   * Alle regioner: http://dawa.aws.dk/regioner/   * Alle regioner: http://dawa.aws.dk/regioner/
# Line 12  import dk.daoas.adressevedligehold.tasks Line 27  import dk.daoas.adressevedligehold.tasks
27    
28  public class DawaTask extends Task {  public class DawaTask extends Task {
29                    
30            final static String KOMMENTAR_TEMPLATE = "Oprettet via DAWA";
31            
32            private TaskLogger logger = TaskLogger.getInstance();
33            
34          private short regionCode;          private short regionCode;
35          private String regionName;          private String regionName;
36                    
37          private Gson gson = new Gson();          int antalBehandlede = 0;
38            int antalKommuner = 0;
39            
40            
41            DeduplicateHelper<String> dedup = new DeduplicateHelper<>();
42            
43            
44            
45                    
46          public DawaTask(short regionCode, String regionName){          public DawaTask(short regionCode, String regionName){
47                  this.regionCode = regionCode;                            this.regionCode = regionCode;          
# Line 25  public class DawaTask extends Task { Line 51  public class DawaTask extends Task {
51    
52          @Override          @Override
53          protected void taskRun() throws Exception {          protected void taskRun() throws Exception {
54                  // TODO Auto-generated method stub                  TimingHelper timer = new TimingHelper();
55                                    
56                    DatabaseCoverageUpdate db = new DatabaseCoverageUpdate();
57                    
58                    DawaWebservice dawa = new DawaWebservice();
59                    TreeMap<String, DawaGade> search = new TreeMap<>();
60                    
61                    // stage 1 - hent alle data                    
62                    List<Address> adresser = db.getAllAdresses();
63                    
64                    
65                    // stage 2 opbyg søge struktur        
66                    logger.info("Building search structure");
67    
68                    
69                    for (Address addr : adresser) {
70                            String dav = getDAVid(addr);
71                            DawaGade gade = search.get(dav);
72                            if (gade == null) {
73                                    gade = new DawaGade();
74                                    search.put(dav, gade);
75                            }
76                            gade.gadeids.add( addr.gadeid );
77                            gade.adresser.add(addr);                        
78                    }
79                    logger.info("Build search structure done");
80                    
81                    Map<String,Integer> kommuner = dawa.kommunerIRegion(regionCode);
82                    
83                    String subject = "DAWA indlæsning - " + regionName;
84                    
85                    StringBuilder headerSB = new StringBuilder();
86                    headerSB.append("<h1>Indlæsnings rapport for " + regionName + " </h1><br>");
87                    
88                    List<Address> totalNye = new ArrayList<>();
89                    List<Address> totalFejl = new ArrayList<>();
90                    CountMap totalUkendtDAV = new CountMap();
91                    CountMap totalDobbeltDav = new CountMap();
92                    
93                    
94                    
95                    antalKommuner = kommuner.size();
96                    
97                    
98                    StringBuilder sb = new StringBuilder();
99                    
100                    for (Map.Entry<String, Integer> entry : kommuner.entrySet()) {
101                            int kommunekode = entry.getValue();
102                            String kommunenavn = entry.getKey();
103                            
104                            logger.info("Behandler: " + kommunekode + " " + kommunenavn);
105                    
106                            
107                            List<Address> dawaListe = dawa.adresserIKommune(kommunekode);
108                            // stage 3 søg        
109                            CountMap ukendteDAV = new CountMap();
110                            CountMap dobbeltGadeidDAV = new CountMap();
111                            List<Address> nyeAdresser = new ArrayList<>();
112                            
113                            for (Address dawaAddr : dawaListe) {
114                                    String dav = getDAVid(dawaAddr);
115                                    DawaGade gade = search.get(dav);
116                                    if (gade == null) {
117                                            String key = dav + " " + dawaAddr.vejnavn;
118                                            ukendteDAV.increment(key);
119                                            continue;
120                                    }
121                                    
122                                    if (gade.gadeids.size() != 1) {
123                                            String key = dav + " " + dawaAddr.vejnavn;
124                                            dobbeltGadeidDAV.increment(key);
125                                            continue;
126                                    }
127                                    
128                                    boolean fundet = false;
129                                    for (Address target : gade.adresser) {
130                                            if ( target.husnr == dawaAddr.husnr && target.husnrbogstav.equals(dawaAddr.husnrbogstav) ) {
131                                                    fundet = true;
132                                                    break;
133                                            }      
134                                    }
135                                    
136                                    if (fundet == false) {
137                                            dawaAddr.gadeid = gade.gadeids.iterator().next();
138                                            dawaAddr.state = AddressState.CREATED;
139                                            dawaAddr.kommentar = KOMMENTAR_TEMPLATE;
140                                            nyeAdresser.add(dawaAddr);
141                                    }                      
142                            }
143                            logger.info("Address Search done - starting save to DB");
144                            
145                            db.saveNewAddresses(nyeAdresser);
146                            
147                            logger.info("Save to db done - adding to report mail");
148                            
149                            List<Address> saveOK = new ArrayList<>();
150                            List<Address> saveFail = new ArrayList<>();
151                            for (Address a : nyeAdresser) {
152                                    if (a.state == AddressState.CREATE_FAIL) {
153                                            saveFail.add(a);
154                                    } else {
155                                            saveOK.add(a);
156                                    }
157                            }
158                            
159                            totalNye.addAll(saveOK);
160                            totalFejl.addAll(saveFail);
161                            
162                            totalUkendtDAV.putAll(ukendteDAV);
163                            totalDobbeltDav.putAll(dobbeltGadeidDAV);
164                    
165                            
166                            antalBehandlede++;
167            
168                            
169                            sb.append("<h2>Kommune: " + kommunenavn + "</h2>\n");
170                            
171                            sb.append("Kommunekode: " + kommunekode + "<br>\n");
172                            sb.append("Antal Inserts: " + saveOK.size() + "<br>\n");
173                            sb.append("Antal insert fails: " + saveFail.size() + "<br>\n");
174                            sb.append("Antal ukendte dav: " + ukendteDAV.size() + "<br>\n");
175                            sb.append("Antal dobbelt gadeid dav: " + dobbeltGadeidDAV.size() + "<br>\n");
176                    }
177                    
178                    logger.info("Sendingreport mail");
179                    
180                    headerSB.append("Antal Inserts: " + totalNye.size() + "<br>\n");
181                    headerSB.append("Antal insert fails: " + totalFejl.size() + "<br>\n");
182                    headerSB.append("Antal ukendte dav: " + totalUkendtDAV.size() + "<br>\n");
183                    headerSB.append("Antal dobbelt gadeid dav: " + totalDobbeltDav.size() + "<br>\n");
184                    headerSB.append("Elapsed: " + timer.getElapsed() + " ms.<br>\n");
185                    
186                    Map<String,String> attachments = new TreeMap<>();
187                    attachments.put("saveok.csv", buildAddressFile(totalNye) );
188                    attachments.put("savefailed.csv", buildAddressFile(totalFejl) );
189                    
190                    attachments.put("ukendte_dav.csv", buildDavFile(totalUkendtDAV) );
191                    attachments.put("dobbelt_dav_gadeid.csv", buildDavFile(totalDobbeltDav) );
192                    
193                    
194                    MailSender.sendMailWithAttachments(subject, headerSB.toString() + sb.toString(), attachments);
195    
196                    
197                    //Cleaning
198                    dedup.clear();
199            }
200            
201            private String buildDavFile(CountMap dav) {
202                    StringBuilder sb = new StringBuilder();
203                    
204                    sb.append("DAVid;Vejnavn;Antal\r\n");
205                    for ( Entry<String,Integer> entry : dav.entrySet()) {
206                            
207                            List<String> split = Splitter.on(' ').limit(2).splitToList(entry.getKey());
208                            sb.append( split.get(0) ).append(";");//DAVid
209                            sb.append( split.get(1) ).append(";");//vejnavn
210                            
211                            sb.append( entry.getValue() ).append("\r\n");//vejnavn
212                            
213                    }
214                    
215                    return sb.toString();
216            }
217            
218            private String buildAddressFile(List<Address> addr) {
219                    
220                    Collections.sort(addr); //brug dens egen compareTo funktion
221                    
222                    StringBuilder sb = new StringBuilder();
223                                    
224                    sb.append("GadeID;Postnr;Kom.kode;Vejkode;Vejnavn;Husnr;Litra\r\n");
225                    for (Address a: addr) {
226                            sb.append(a.gadeid).append(";");
227                            sb.append(a.postnr).append(";");
228                            sb.append(a.kommunekode).append(";");
229                            sb.append(a.vejkode).append(";");
230                            sb.append(a.vejnavn).append(";");
231                            sb.append(a.husnr).append(";");
232                            sb.append(a.husnrbogstav).append("\r\n");
233                    }
234                    return sb.toString();
235                    
236            }
237            
238            
239            String getDAVid(Address addr) {
240                    String dav = String.format("%04d%03d%04d", addr.postnr, addr.kommunekode, addr.vejkode);
241                    
242                    return dedup.getInstance(dav);
243          }          }
244    
245          @Override          @Override
# Line 41  public class DawaTask extends Task { Line 254  public class DawaTask extends Task {
254    
255          @Override          @Override
256          public double getPercentCompleted() {          public double getPercentCompleted() {
257                  return 0;                  if (antalKommuner == 0) {
258                            return 0;      
259                    }
260                    
261                    return  (antalBehandlede / ((double)antalKommuner) ) * 100.0;
262                    
263          }          }
264                    
265    

Legend:
Removed from v.3002  
changed lines
  Added in v.3070

  ViewVC Help
Powered by ViewVC 1.1.20