/[projects]/dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/coveragefileupload/AddressReport.java
ViewVC logotype

Diff of /dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/coveragefileupload/AddressReport.java

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

dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/AddressReport.java revision 2924 by torben, Fri Feb 5 08:01:18 2016 UTC dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/coveragefileupload/AddressReport.java revision 3059 by torben, Wed Jul 6 09:47:59 2016 UTC
# Line 1  Line 1 
1  package dk.daoas.adressevedligehold;  package dk.daoas.adressevedligehold.coveragefileupload;
2    
3    import java.util.ArrayList;
4    import java.util.Collections;
5    import java.util.Comparator;
6  import java.util.HashMap;  import java.util.HashMap;
7  import java.util.List;  import java.util.List;
8  import java.util.Map.Entry;  import java.util.Map.Entry;
 import java.util.Properties;  
9    
10  import javax.mail.Message;  import org.apache.commons.lang3.builder.CompareToBuilder;
 import javax.mail.MessagingException;  
 import javax.mail.Session;  
 import javax.mail.Transport;  
 import javax.mail.internet.InternetAddress;  
 import javax.mail.internet.MimeMessage;  
11    
12    import dk.daoas.adressevedligehold.MailSender;
13  import dk.daoas.adressevedligehold.beans.Address;  import dk.daoas.adressevedligehold.beans.Address;
14  import dk.daoas.adressevedligehold.beans.Address.AddressState;  import dk.daoas.adressevedligehold.beans.Address.AddressState;
15  import dk.daoas.adressevedligehold.tasks.TaskLogger;  import dk.daoas.adressevedligehold.tasks.TaskLogger;
16  import dk.daoas.adressevedligehold.util.TimingHelper;  import dk.daoas.adressevedligehold.util.TimingHelper;
17    
18  /*  /*
19   * TODO: detail rapport pr postnr   *
  * TODO: ved mangel oversigten - skeln mellem om det er nye/CREATED eller om det er gamle kendte adresser  
20   */   */
21    
22  public class AddressReport {  public class AddressReport {
23            
24          static class NumEntry {          static class NumEntry {
25                  int open = 0;                  int open = 0;
26                  int closed = 0;                  int closed = 0;
27                  int modified = 0;                  int modified = 0;
28                  int created = 0;                  int created = 0;
29                    
30                  public void updateFromState(AddressState st) {                  public void updateFromState(AddressState st) {
31                          if (st == AddressState.OPENED)                          if (st == AddressState.OPENED)
32                                  open++;                                  open++;
# Line 53  public class AddressReport { Line 50  public class AddressReport {
50                  NumEntry fre = new NumEntry();                  NumEntry fre = new NumEntry();
51                  NumEntry lor = new NumEntry();                  NumEntry lor = new NumEntry();
52                  NumEntry son = new NumEntry();                  NumEntry son = new NumEntry();
53                    
54                  public void incrementFromOther(WeekEntry other) {                  public void incrementFromOther(WeekEntry other) {
55                          man.updateFromOther(other.man);                          man.updateFromOther(other.man);
56                          tir.updateFromOther(other.tir);                          tir.updateFromOther(other.tir);
# Line 63  public class AddressReport { Line 60  public class AddressReport {
60                          lor.updateFromOther(other.lor);                          lor.updateFromOther(other.lor);
61                          son.updateFromOther(other.son);                          son.updateFromOther(other.son);
62                  }                  }
63                    
64                  public void incrementCreated() {                  public void incrementCreated() {
65                          man.created++;                          man.created++;
66                          tir.created++;                          tir.created++;
# Line 74  public class AddressReport { Line 71  public class AddressReport {
71                          son.created++;                          son.created++;
72                  }                  }
73          }          }
74            
75          private static TaskLogger logger = TaskLogger.getInstance();          private static TaskLogger logger = TaskLogger.getInstance();
76            
77          AddressManager addrManager;          AddressManager addrManager;
78          List<Address> addressList;          List<Address> addressList;
79          int entryCount;          int entryCount;
# Line 85  public class AddressReport { Line 82  public class AddressReport {
82          TimingHelper timer;          TimingHelper timer;
83          boolean writeBack;          boolean writeBack;
84          int duplicateCount;          int duplicateCount;
85            
86          //TODO: Afviste adresser  
87          public AddressReport(AddressManager addrManager, int entryCount, EntryUgedage ugedage, AddressSource source, TimingHelper timer, boolean writeBack, int duplicateCount ) {          public AddressReport(AddressManager addrManager, int entryCount, EntryUgedage ugedage, AddressSource source, TimingHelper timer, boolean writeBack, int duplicateCount ) {
88                  this.addrManager = addrManager;                  this.addrManager = addrManager;
89                  addressList = addrManager.getAddressList();                  addressList = addrManager.getAddressList();
# Line 97  public class AddressReport { Line 94  public class AddressReport {
94                  this.writeBack = writeBack;                  this.writeBack = writeBack;
95                  this.duplicateCount = duplicateCount;                  this.duplicateCount = duplicateCount;
96          }          }
97            
98          public void sendRapport() {          public void sendRapport() {
99                  logger.info("Sending mail");                  logger.info("Sending mail");
100                    
101                  String reportData = getReportData();                  String reportData = getReportData();
102                  String subject = "Indlæsnings rapport for " + source.getDistributor();                  String subject = "Indlæsnings rapport for " + source.getDistributor();
103                                    
104                  AddressReport.sendMail(subject, reportData);                  String newOpenCloseAttachment = getAttachement();
105                    
106          }                  MailSender.sendMailWithAttachment(subject, reportData, "Details.csv", newOpenCloseAttachment);
107            
         public static void sendMail(String subject, String htmlBody) {  
                Properties props = new Properties();  
                 props.put("mail.smtp.host", "10.30.1.28");  
                 //props.put("mail.smtp.host", "192.168.12.10");  
                   
                 try {  
                         // create some properties and get the default Session  
                         Session session = Session.getDefaultInstance(props, null);  
                         session.setDebug(false);  
                           
                         MimeMessage msg = new MimeMessage(session);  
                                 msg.setFrom( new InternetAddress("no-reply@daoas.dk") );  
                                   
                                   
                                 msg.setRecipient(Message.RecipientType.TO, new InternetAddress("thn@daoas.dk") );//TODO: mulighed for at ændre modtager mail  
                                 msg.setSubject( subject );                        
                                 msg.setContent(htmlBody, "text/html; charset=utf-8");  
                                   
                                 Transport.send(msg);  
                                   
                           
                 } catch (MessagingException e) {  
                                 logger.warning("Unable to send report mail ", e );  
                         }                
108          }          }
109            
110            
111    
112          public String getReportData() {          public String getReportData() {
113            
114                  WeekEntry total = new WeekEntry();                  WeekEntry total = new WeekEntry();
115                  HashMap<Short, WeekEntry> postnrEntries = new HashMap<Short,WeekEntry>();                  HashMap<Short, WeekEntry> postnrEntries = new HashMap<Short,WeekEntry>();
116                    
117                  int createFailCount = 0;                  int createFailCount = 0;
118                    
119                  int antalUdenGadeid = 0;                  int antalUdenGadeid = 0;
120                  int antalUdenKommunekode = 0;                  int antalUdenKommunekode = 0;
121                  int antalUdenLatitude = 0;                  int antalUdenLatitude = 0;
122                  int antalUdenDBKBane = 0;                  int antalUdenDBKBane = 0;
123                    
124                  // first gather the intel                  // first gather the intel
125                  for (Address a : addressList) {                  for (Address a : addressList) {
126                            
127                          if (a.state == AddressState.CREATE_FAIL) {                          if (a.state == AddressState.CREATE_FAIL) {
128                                  createFailCount++;                                  createFailCount++;
129                                  continue;                                                        continue;                      
130                          }                          }
131                            
132                          if (a.gadeid == 0) {                          if (a.gadeid == 0) {
133                                  antalUdenGadeid++;                                  antalUdenGadeid++;
134                          }                          }
135                            
136                          if (a.kommunekode == 0 || a.vejkode == 0) {                                                      if (a.kommunekode == 0 || a.vejkode == 0) {                            
137                                  antalUdenKommunekode++;                                  antalUdenKommunekode++;
138                          }                          }
139                            
140                          if (a.latitude == 0 || a.longitude == 0) {                          if (a.latitude == 0 || a.longitude == 0) {
141                                  antalUdenLatitude++;                                  antalUdenLatitude++;
142                          }                          }
143                            
144                          if (a.state == AddressState.NOT_CHANGED) {                          if (a.state == AddressState.NOT_CHANGED) {
145                                  continue;                                  continue;
146                          }                          }
147                          if (a.dbkBane == 0) {                          if (a.dbkBane == 0) {
148                                  antalUdenDBKBane++;                                  antalUdenDBKBane++;
149                          }                          }
150                            
151                          WeekEntry weekEntry = postnrEntries.get(a.postnr);                          WeekEntry weekEntry = postnrEntries.get(a.postnr);
152                          if (weekEntry == null) {                          if (weekEntry == null) {
153                                  weekEntry = new WeekEntry();                                  weekEntry = new WeekEntry();
154                                  postnrEntries.put(a.postnr, weekEntry);                                  postnrEntries.put(a.postnr, weekEntry);
155                          }                          }
                           
156    
157                            
158    
159                          if (a.state == AddressState.CREATED) {                          if (a.state == AddressState.CREATED) {
160                                  weekEntry.incrementCreated();                                  weekEntry.incrementCreated();
161                          } else {                          } else {
# Line 192  public class AddressReport { Line 166  public class AddressReport {
166                                  weekEntry.fre.updateFromState(a.stateFre);                                  weekEntry.fre.updateFromState(a.stateFre);
167                                  weekEntry.lor.updateFromState(a.stateLor);                                  weekEntry.lor.updateFromState(a.stateLor);
168                                  weekEntry.son.updateFromState(a.stateSon);                                  weekEntry.son.updateFromState(a.stateSon);
169                                    
170                          }                                                }                      
171                  }                  }
172                  for (WeekEntry w : postnrEntries.values()) {                  for (WeekEntry w : postnrEntries.values()) {
173                          total.incrementFromOther(w);                          total.incrementFromOther(w);
174                  }                  }
175                    
176                  StringBuilder sb = new StringBuilder();                  StringBuilder sb = new StringBuilder();
177                    
178                  sb.append("<h1>Indlæsnings rapport for " + source.getDistributor() + " </h1>");                  sb.append("<h1>Indlæsnings rapport for " + source.getDistributor() + " </h1>");
179                  sb.append("Filnavn: ").append( source.getFilename() ).append("<br>");                  sb.append("Filnavn: ").append( source.getFilename() ).append("<br>");
180                  sb.append("Tidsforbrug: ").append( timer.getElapsed() ).append("ms. <br>");                  sb.append("Tidsforbrug: ").append( timer.getElapsed() ).append("ms. <br>");
# Line 218  public class AddressReport { Line 192  public class AddressReport {
192                  if (ugedage.lordag) sb.append("Lørdag, ");                  if (ugedage.lordag) sb.append("Lørdag, ");
193                  if (ugedage.sondag) sb.append("Søndag, ");                  if (ugedage.sondag) sb.append("Søndag, ");
194                  sb.append("<br>");                  sb.append("<br>");
195                    
196                  sb.append("<h2>Data Mangler</h2>\n");                  sb.append("<h2>Data Mangler</h2>\n");
197                  sb.append("<pre>");                  sb.append("<pre>");
198                  sb.append("Mangler kommune/vejkode: ").append(antalUdenKommunekode).append("\n");                  sb.append("Mangler kommune/vejkode: ").append(antalUdenKommunekode).append("\n");
# Line 226  public class AddressReport { Line 200  public class AddressReport {
200                  sb.append("Mangler DBK bane: ").append(antalUdenDBKBane).append("\n");                  sb.append("Mangler DBK bane: ").append(antalUdenDBKBane).append("\n");
201                  sb.append("Mangler latitude/longitude: ").append(antalUdenLatitude).append("\n");                  sb.append("Mangler latitude/longitude: ").append(antalUdenLatitude).append("\n");
202                  sb.append("</pre>");                  sb.append("</pre>");
                   
203    
204                    
205    
206                  sb.append("<h2>Ændrings oversigt</h2>\n");                  sb.append("<h2>Ændrings oversigt</h2>\n");
207                  sb.append("<table>");                  sb.append("<table>");
208                    
209                  sb.append("<tr><td>&nbsp;</td><td>Mandag</td><td>Tirsdag</td><td>Onsdag</td><td>Torsdag</td><td>Fredag</td><td>Lørdag</td><td>Søndag</td></tr>");                  sb.append("<tr><td>&nbsp;</td><td>Mandag</td><td>Tirsdag</td><td>Onsdag</td><td>Torsdag</td><td>Fredag</td><td>Lørdag</td><td>Søndag</td></tr>");
210                  sb.append("<tr><td>Oprettet:</td><td>").append(total.man.created).append("</td><td>").append(total.tir.created).append("</td><td>").append(total.ons.created).append("</td><td>").append(total.tor.created).append("</td><td>").append(total.fre.created).append("</td><td>").append(total.lor.created).append("</td><td>").append(total.son.created).append("</td></tr>");                  sb.append("<tr><td>Oprettet:</td><td>").append(total.man.created).append("</td><td>").append(total.tir.created).append("</td><td>").append(total.ons.created).append("</td><td>").append(total.tor.created).append("</td><td>").append(total.fre.created).append("</td><td>").append(total.lor.created).append("</td><td>").append(total.son.created).append("</td></tr>");
211                  sb.append("<tr><td>Åbnet:</td><td>").append(total.man.open).append("</td><td>").append(total.tir.open).append("</td><td>").append(total.ons.open).append("</td><td>").append(total.tor.open).append("</td><td>").append(total.fre.open).append("</td><td>").append(total.lor.open).append("</td><td>").append(total.son.open).append("</td></tr>");                  sb.append("<tr><td>Åbnet:</td><td>").append(total.man.open).append("</td><td>").append(total.tir.open).append("</td><td>").append(total.ons.open).append("</td><td>").append(total.tor.open).append("</td><td>").append(total.fre.open).append("</td><td>").append(total.lor.open).append("</td><td>").append(total.son.open).append("</td></tr>");
212                  sb.append("<tr><td>Ændret:</td><td>").append(total.man.modified).append("</td><td>").append(total.tir.modified).append("</td><td>").append(total.ons.modified).append("</td><td>").append(total.tor.modified).append("</td><td>").append(total.fre.modified).append("</td><td>").append(total.lor.modified).append("</td><td>").append(total.son.modified).append("</td></tr>");                  sb.append("<tr><td>Ændret:</td><td>").append(total.man.modified).append("</td><td>").append(total.tir.modified).append("</td><td>").append(total.ons.modified).append("</td><td>").append(total.tor.modified).append("</td><td>").append(total.fre.modified).append("</td><td>").append(total.lor.modified).append("</td><td>").append(total.son.modified).append("</td></tr>");
213                  sb.append("<tr><td>Lukket:</td><td>").append(total.man.closed).append("</td><td>").append(total.tir.closed).append("</td><td>").append(total.ons.closed).append("</td><td>").append(total.tor.closed).append("</td><td>").append(total.fre.closed).append("</td><td>").append(total.lor.closed).append("</td><td>").append(total.son.closed).append("</td></tr>");                  sb.append("<tr><td>Lukket:</td><td>").append(total.man.closed).append("</td><td>").append(total.tir.closed).append("</td><td>").append(total.ons.closed).append("</td><td>").append(total.tor.closed).append("</td><td>").append(total.fre.closed).append("</td><td>").append(total.lor.closed).append("</td><td>").append(total.son.closed).append("</td></tr>");
214                  sb.append("</table>");                  sb.append("</table>");
215                    
216                  sb.append("<br>");                  sb.append("<br>");
217                  sb.append("<h2>Nye/Ukendte gader</h2>");                  sb.append("<h2>Nye/Ukendte gader</h2>");
218                  sb.append("<table>");                  sb.append("<table>");
# Line 247  public class AddressReport { Line 221  public class AddressReport {
221                          sb.append("<tr><td>").append(unknownStreet.getKey()).append("</td><td>").append(unknownStreet.getValue()).append("</td></tr>");                          sb.append("<tr><td>").append(unknownStreet.getKey()).append("</td><td>").append(unknownStreet.getValue()).append("</td></tr>");
222                  }                  }
223                  sb.append("</table>");                  sb.append("</table>");
224    
225    
226                    sb.append("</table><br>\n");
227    
228                    return sb.toString();
229            }
230            
231            public String getAttachement() {
232                    StringBuilder sb = new StringBuilder();
233                    sb.append("Status;Gadeid;Post;Vejnavn;Husnr;Litra\r\n");
234                                    
235                    ArrayList<Address> attachmentData = new ArrayList<Address>();
236                    for (Address a : addressList) {
237                            if (a.state == AddressState.CLOSED || a.state == AddressState.CREATED || a.state == AddressState.OPENED) {
238                                    attachmentData.add(a);
239                            }
240                    }
241                                    
242                  sb.append("</table><br>\n");                  Collections.sort(attachmentData, new AttachmentComparator());          
243                    
244                    for (Address a : attachmentData) {
245                            switch (a.state) {
246                            case CLOSED:
247                                    sb.append("Closed;");
248                                    break;                          
249                            case CREATED:
250                                    sb.append("Created;");
251                                    break;                          
252                            case OPENED:
253                                    sb.append("Opened;");
254                                    break;
255                            default:
256                                    break;
257                            }
258                            
259                            //tilføj resten af dataene
260                            sb.append( a.gadeid + ";" + a.postnr + ";" + a.vejnavn + ";" + a.husnr + ";" + a.husnrbogstav + "\r\n");
261                    }
262                                    
263                  return sb.toString();                  return sb.toString();
264          }          }
265            
266            class AttachmentComparator implements Comparator<Address> {
267    
268                    @Override
269                    public int compare(Address a1, Address a2) {
270                            
271                            
272                            //Brug apache commons lang3
273                            return new CompareToBuilder()
274                                    .append(a1.state, a2.state)
275                                    .append(a1.postnr, a2.postnr)
276                                    .append(a1.vejnavn, a2.vejnavn)
277                                    .append(a1.husnr, a2.husnr)
278                                    .append(a1.husnrbogstav, a2.husnrbogstav)
279                                    .toComparison();
280                            }
281                    
282            }
283  }  }

Legend:
Removed from v.2924  
changed lines
  Added in v.3059

  ViewVC Help
Powered by ViewVC 1.1.20