/[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 3012 by torben, Wed Apr 20 13:51:24 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.List;
5    import java.util.Map;
6    import java.util.Set;
7    import java.util.TreeMap;
8    import java.util.TreeSet;
9    
10    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  import dk.daoas.adressevedligehold.tasks.Task;  import dk.daoas.adressevedligehold.tasks.Task;
15    import dk.daoas.adressevedligehold.tasks.TaskLogger;
16    import dk.daoas.adressevedligehold.util.CountMap;
17    import dk.daoas.adressevedligehold.util.DeduplicateHelper;
18    import dk.daoas.adressevedligehold.util.TimingHelper;
19    
20  /*  /*
21   * Alle regioner: http://dawa.aws.dk/regioner/   * Alle regioner: http://dawa.aws.dk/regioner/
# Line 12  import dk.daoas.adressevedligehold.tasks Line 25  import dk.daoas.adressevedligehold.tasks
25    
26  public class DawaTask extends Task {  public class DawaTask extends Task {
27                    
28            final String kommentarTemplate = "Oprettet via DAWA";
29            
30            private TaskLogger logger = TaskLogger.getInstance();
31            
32          private short regionCode;          private short regionCode;
33          private String regionName;          private String regionName;
34                    
35          private Gson gson = new Gson();          
36            
37            DatabaseCoverageUpdate db = new DatabaseCoverageUpdate();
38            
39            DeduplicateHelper<String> dedup = new DeduplicateHelper<>();
40                    
41          public DawaTask(short regionCode, String regionName){          public DawaTask(short regionCode, String regionName){
42                  this.regionCode = regionCode;                            this.regionCode = regionCode;          
# Line 25  public class DawaTask extends Task { Line 46  public class DawaTask extends Task {
46    
47          @Override          @Override
48          protected void taskRun() throws Exception {          protected void taskRun() throws Exception {
49                  // TODO Auto-generated method stub                  TimingHelper timer = new TimingHelper();
50                            
51                    DawaWebservice dawa = new DawaWebservice();
52                    TreeMap<String, DawaGade> search = new TreeMap<>();
53                    
54                    // stage 1 - hent alle data                    
55                    List<Address> adresser = db.getAllAdresses();
56                    
57                    
58                    // stage 2 opbyg søge struktur        
59                    logger.info("Building search structure");
60    
61                    
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                    Map<String,Integer> kommuner = dawa.kommunerIRegion(regionCode);
75                    
76                    String subject = "DAWA indlæsning - " + regionName;
77                    
78                    StringBuilder headerSB = new StringBuilder();
79                    headerSB.append("<h1>Indlæsnings rapport for " + regionName + " </h1><br>");
80                    
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                            CountMap ukendteDAV = new CountMap();
99                            CountMap dobbeltGadeidDAV = new CountMap();
100                            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                                            String key = dav + " " + dawaAddr.vejnavn;
107                                            ukendteDAV.increment(key);
108                                            continue;
109                                    }
110                                    
111                                    if (gade.gadeids.size() != 1) {
112                                            String key = dav + " " + dawaAddr.vejnavn;
113                                            dobbeltGadeidDAV.increment(key);
114                                            continue;
115                                    }
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                            }
132                            logger.info("Address Search done - starting save to DB");
133                            
134                            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                            }
147                            
148                            totalAntalNye += saveOK.size();
149                            totalAntalFejl += saveFail.size();
150                            totalAntalUkendt += ukendteDAV.size();
151                            totalAntalDobbelt += dobbeltGadeidDAV.size();
152            
153                            
154                            sb.append("<h2>Kommune: " + kommunenavn + "</h2>\n");
155                            
156                            sb.append("Kommunekode: " + kommunekode + "<br>\n");
157                            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                            for (Map.Entry<String, Integer> dav : ukendteDAV.entrySet()) {                          
170                                    sb.append(dav.getKey() + " : " + dav.getValue() + "<br>\n");
171                            }
172                            
173                            sb.append("<h3>Dobbelt gadeid DAV:</h3>\n");
174                            for (Map.Entry<String, Integer> dav : dobbeltGadeidDAV.entrySet()) {                            
175                                    sb.append(dav.getKey() + " : " + dav.getValue() + "<br>\n");
176                            }                                              
177                    }
178                    
179                    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                    
185                    MailSender.sendMail(subject, headerSB.toString() + sb.toString() );
186    
187          }          }
188            
189            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            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    
212          @Override          @Override
213          public String getDescription() {          public String getDescription() {

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

  ViewVC Help
Powered by ViewVC 1.1.20