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

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

  ViewVC Help
Powered by ViewVC 1.1.20