/[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 3003 by torben, Tue Apr 19 12:36:31 2016 UTC revision 3072 by torben, Tue Jul 26 06:30:11 2016 UTC
# Line 1  Line 1 
1  package dk.daoas.adressevedligehold.dawa;  package dk.daoas.adressevedligehold.dawa;
2    
3  import java.util.ArrayList;  import java.util.ArrayList;
4    import java.util.Collections;
5  import java.util.List;  import java.util.List;
6  import java.util.Set;  import java.util.Map;
7    import java.util.Map.Entry;
8  import java.util.TreeMap;  import java.util.TreeMap;
9  import java.util.TreeSet;  
10    import com.google.common.base.Splitter;
11    
12  import dk.daoas.adressevedligehold.MailSender;  import dk.daoas.adressevedligehold.MailSender;
13  import dk.daoas.adressevedligehold.beans.Address;  import dk.daoas.adressevedligehold.beans.Address;
# Line 12  import dk.daoas.adressevedligehold.beans Line 15  import dk.daoas.adressevedligehold.beans
15  import dk.daoas.adressevedligehold.db.DatabaseCoverageUpdate;  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;  import dk.daoas.adressevedligehold.tasks.TaskLogger;
18    import dk.daoas.adressevedligehold.util.CountMap;
19  import dk.daoas.adressevedligehold.util.DeduplicateHelper;  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 22  import dk.daoas.adressevedligehold.util. Line 27  import dk.daoas.adressevedligehold.util.
27    
28  public class DawaTask extends Task {  public class DawaTask extends Task {
29                    
30          final String kommentarTemplate = "Oprettet via DAWA";          final static String KOMMENTAR_TEMPLATE = "Oprettet via DAWA";
31                    
32          private TaskLogger logger = TaskLogger.getInstance();          private TaskLogger logger = TaskLogger.getInstance();
33                    
34          private short regionCode;          int antalBehandlede = 0;
35          private String regionName;          int antalKommuner = 0;
36                    
37                    
38            String status = "";
39                    
40          DatabaseCoverageUpdate db = new DatabaseCoverageUpdate();          DeduplicateHelper<String> dedup = new DeduplicateHelper<>();
41                    
         DeduplicateHelper<String> dedup = new DeduplicateHelper<>();  
42                    
43          public DawaTask(short regionCode, String regionName){          
44                  this.regionCode = regionCode;                    public DawaTask(){              
                 this.regionName = regionName;  
                   
45          }          }
46    
47          @Override          @Override
48          protected void taskRun() throws Exception {          protected void taskRun() throws Exception {
49                    TimingHelper timer = new TimingHelper();
50                                    
51                    DatabaseCoverageUpdate db = new DatabaseCoverageUpdate();
52                                    
                 int kommunekode = 615;  
                 String kommunenavn = "Horsens";  
                   
                 // stage 1 - hent alle data              
53                  DawaWebservice dawa = new DawaWebservice();                  DawaWebservice dawa = new DawaWebservice();
54                  List<Address> dawaListe = dawa.lookup(kommunekode);                  TreeMap<String, DawaGade> search = new TreeMap<>();
55                                    
56                    // stage 1 - hent alle data
57                    status = "Henter Data";
58                  List<Address> adresser = db.getAllAdresses();                  List<Address> adresser = db.getAllAdresses();
59                                    
60                                    
61                                    // stage 2 opbyg søge struktur
62                  // stage 2 opbyg søge struktur                          status = "Bygger søgestruktur";
63                  logger.info("Building search structure");                  logger.info("Building search structure");
64                  TreeMap<String, DawaGade> search = new TreeMap<>();  
65                                    
66                  for (Address addr : adresser) {                  for (Address addr : adresser) {
67                          String dav = getDAVid(addr);                          String dav = getDAVid(addr);
# Line 71  public class DawaTask extends Task { Line 75  public class DawaTask extends Task {
75                  }                  }
76                  logger.info("Build search structure done");                  logger.info("Build search structure done");
77                                    
78                  // stage 3 søg                          Map<String,Integer> kommuner = dawa.kommuner();
                 Set<String> ukendteDAV = new TreeSet<>();  
                 Set<String> dobbeltGadeidDAV = new TreeSet<>();  
                 List<Address> nyeAdresser = new ArrayList<>();  
79                                    
80                  for (Address dawaAddr : dawaListe) {                  String subject = "DAWA indlæsning";
81                          String dav = getDAVid(dawaAddr);                  
82                          DawaGade gade = search.get(dav);                  StringBuilder headerSB = new StringBuilder();
83                          if (gade == null) {                  headerSB.append("<h1>DAWA Indlæsnings rapport</h1><br>");
84                                  ukendteDAV.add(dav + " " + dawaAddr.vejnavn);                  
85                                  continue;                  List<Address> totalNye = new ArrayList<>();
86                          }                  List<Address> totalFejl = new ArrayList<>();
87                    CountMap totalUkendtDAV = new CountMap();
88                    CountMap totalDobbeltDav = new CountMap();
89                    
90                    
91                    
92                    antalKommuner = kommuner.size();
93                    
94                    
95                    StringBuilder sb = new StringBuilder();
96                    
97                    for (Map.Entry<String, Integer> entry : kommuner.entrySet()) {
98                            int kommunekode = entry.getValue();
99                            String kommunenavn = entry.getKey();
100                            
101                                                    
102                          if (gade.gadeids.size() != 1) {                          status = "Behandler: " + kommunenavn;
103                                  dobbeltGadeidDAV.add(dav + " " + dawaAddr.vejnavn);                          logger.info("Behandler: " + kommunekode + " " + kommunenavn);
104                    
105                            
106                            List<Address> dawaListe = dawa.adresserIKommune(kommunekode);
107                            // stage 3 søg        
108                            CountMap ukendteDAV = new CountMap();
109                            CountMap dobbeltGadeidDAV = new CountMap();
110                            List<Address> nyeAdresser = new ArrayList<>();
111                            
112                            for (Address dawaAddr : dawaListe) {
113                                    String dav = getDAVid(dawaAddr);
114                                    DawaGade gade = search.get(dav);
115                                    if (gade == null) {
116                                            String key = dav + " " + dawaAddr.vejnavn;
117                                            ukendteDAV.increment(key);
118                                            continue;
119                                    }
120                                    
121                                    if (gade.gadeids.size() != 1) {
122                                            String key = dav + " " + dawaAddr.vejnavn;
123                                            dobbeltGadeidDAV.increment(key);
124                                            continue;
125                                    }
126                                    
127                                    boolean fundet = false;
128                                    for (Address target : gade.adresser) {
129                                            if ( target.husnr == dawaAddr.husnr && target.husnrbogstav.equals(dawaAddr.husnrbogstav) ) {
130                                                    fundet = true;
131                                                    break;
132                                            }      
133                                    }
134                                    
135                                    if (fundet == false) {
136                                            dawaAddr.gadeid = gade.gadeids.iterator().next();
137                                            dawaAddr.state = AddressState.CREATED;
138                                            dawaAddr.kommentar = KOMMENTAR_TEMPLATE;
139                                            nyeAdresser.add(dawaAddr);
140                                    }                      
141                          }                          }
142                            logger.info("Address Search done - starting save to DB");
143                                                    
144                          boolean fundet = false;                          db.saveNewAddresses(nyeAdresser);
145                          for (Address target : gade.adresser) {                          
146                                  if ( target.husnr == dawaAddr.husnr && target.husnrbogstav.equals(dawaAddr.husnrbogstav) ) {                          logger.info("Save to db done - adding to report mail");
147                                          fundet = true;                          
148                                          break;                          List<Address> saveOK = new ArrayList<>();
149                                  }                                List<Address> saveFail = new ArrayList<>();
150                            for (Address a : nyeAdresser) {
151                                    if (a.state == AddressState.CREATE_FAIL) {
152                                            saveFail.add(a);
153                                    } else {
154                                            saveOK.add(a);
155                                    }
156                          }                          }
157                                                    
158                          if (fundet == false) {                          totalNye.addAll(saveOK);
159                                  dawaAddr.gadeid = gade.gadeids.iterator().next();                          totalFejl.addAll(saveFail);
160                                  dawaAddr.state = AddressState.CREATED;                          
161                                  dawaAddr.kommentar = kommentarTemplate;                          totalUkendtDAV.putAll(ukendteDAV);
162                                  nyeAdresser.add(dawaAddr);                          totalDobbeltDav.putAll(dobbeltGadeidDAV);
163                          }                                        
164                            
165                            antalBehandlede++;
166            
167                            
168                            sb.append("<h2>Kommune: " + kommunenavn + "</h2>\n");
169                            
170                            sb.append("Kommunekode: " + kommunekode + "<br>\n");
171                            sb.append("Antal Inserts: " + saveOK.size() + "<br>\n");
172                            sb.append("Antal insert fails: " + saveFail.size() + "<br>\n");
173                            sb.append("Antal ukendte dav: " + ukendteDAV.size() + "<br>\n");
174                            sb.append("Antal dobbelt gadeid dav: " + dobbeltGadeidDAV.size() + "<br>\n");
175                  }                  }
                 logger.info("Address Search done - starting save to DB");  
176                                    
177                  db.saveNewAddresses(nyeAdresser);                  logger.info("Sendingreport mail");
178                                    
179                  logger.info("Save to db done - sending report mail");                  headerSB.append("Antal Inserts: " + totalNye.size() + "<br>\n");
180                    headerSB.append("Antal insert fails: " + totalFejl.size() + "<br>\n");
181                    headerSB.append("Antal ukendte dav: " + totalUkendtDAV.size() + "<br>\n");
182                    headerSB.append("Antal dobbelt gadeid dav: " + totalDobbeltDav.size() + "<br>\n");
183                    headerSB.append("Elapsed: " + timer.getElapsed() + " ms.<br>\n");
184                                    
185                  List<Address> saveOK = new ArrayList<>();                  Map<String,String> attachments = new TreeMap<>();
186                  List<Address> saveFail = new ArrayList<>();                  attachments.put("saveok.csv", buildAddressFile(totalNye) );
187                  for (Address a : nyeAdresser) {                  attachments.put("savefailed.csv", buildAddressFile(totalFejl) );
                         if (a.state == AddressState.CREATE_FAIL) {  
                                 saveFail.add(a);  
                         } else {  
                                 saveOK.add(a);  
                         }  
                 }  
188                                    
189                  String subject = "DAWA indlæsning done";                  attachments.put("ukendte_dav.csv", buildDavFile(totalUkendtDAV) );
190                    attachments.put("dobbelt_dav_gadeid.csv", buildDavFile(totalDobbeltDav) );
191                                    
192                    
193                    MailSender.sendMailWithAttachments(subject, headerSB.toString() + sb.toString(), attachments);
194    
195                    
196                    //Cleaning
197                    dedup.clear();
198                    status = "";
199            }
200            
201            private String buildDavFile(CountMap dav) {
202                  StringBuilder sb = new StringBuilder();                  StringBuilder sb = new StringBuilder();
                 sb.append("<h1>Indlæsnings rapport for " + regionName + " / " + regionCode + " </h1><br>");  
203                                    
204                  sb.append("<h2>Kommune: " + kommunenavn + " / " + kommunekode + "</h2><br>\n");                  sb.append("DAVid;Vejnavn;Antal\r\n");
205                  sb.append("<h3>Adresser ok:</h3><br>\n");                  for ( Entry<String,Integer> entry : dav.entrySet()) {
206                  for (Address a: saveOK) {                          
207                          sb.append(a.toString() + "<br>\n");                          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                  sb.append("<h3>SQL INSERT fejl:</h3><br>\n");                  return sb.toString();
216                  for (Address a: saveFail) {          }
217                          sb.append(a.toString() + "<br>\n");          
218                  }          private String buildAddressFile(List<Address> addr) {
219                                    
220                  sb.append("<h3>Ukendte DAV:</h3><br>\n");                  Collections.sort(addr); //brug dens egen compareTo funktion
                 for (String dav : ukendteDAV) {  
                         sb.append(dav + "<br>\n");  
                 }  
221                                    
222                  sb.append("<h3>Dobbelt gadeid DAV:</h3><br>\n");                  StringBuilder sb = new StringBuilder();
223                  for (String dav : dobbeltGadeidDAV) {                                  
224                          sb.append(dav + "<br>\n");                  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                                    
                 MailSender.sendMail(subject, sb.toString() );  
   
   
236          }          }
237                    
238            
239          String getDAVid(Address addr) {          String getDAVid(Address addr) {
240                  String dav = String.format("%04d%03d%04d", addr.postnr, addr.kommunekode, addr.vejkode);                  String dav = String.format("%04d%03d%04d", addr.postnr, addr.kommunekode, addr.vejkode);
241                                    
# Line 163  public class DawaTask extends Task { Line 249  public class DawaTask extends Task {
249    
250          @Override          @Override
251          public String getDetail() {          public String getDetail() {
252                  return "Region: " + regionCode + "/" + regionName;                  return status;
253          }          }
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.3003  
changed lines
  Added in v.3072

  ViewVC Help
Powered by ViewVC 1.1.20