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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2938 - (show annotations) (download)
Fri Feb 12 22:44:24 2016 UTC (8 years, 3 months ago) by torben
File size: 9196 byte(s)
PMD
1 package dk.daoas.adressevedligehold;
2
3 import java.util.HashMap;
4 import java.util.List;
5 import java.util.Map.Entry;
6 import java.util.Properties;
7
8 import javax.mail.Message;
9 import javax.mail.MessagingException;
10 import javax.mail.Session;
11 import javax.mail.Transport;
12 import javax.mail.internet.InternetAddress;
13 import javax.mail.internet.MimeMessage;
14
15 import dk.daoas.adressevedligehold.beans.Address;
16 import dk.daoas.adressevedligehold.beans.Address.AddressState;
17 import dk.daoas.adressevedligehold.tasks.TaskLogger;
18 import dk.daoas.adressevedligehold.util.TimingHelper;
19
20 /*
21 * TODO: detail rapport pr postnr
22 * TODO: ved mangel oversigten - skeln mellem om det er nye/CREATED eller om det er gamle kendte adresser
23 */
24
25 public class AddressReport {
26
27 static class NumEntry {
28 int open = 0;
29 int closed = 0;
30 int modified = 0;
31 int created = 0;
32
33 public void updateFromState(AddressState st) {
34 if (st == AddressState.OPENED)
35 open++;
36 if (st == AddressState.MODIFIED)
37 modified++;
38 if (st == AddressState.CLOSED)
39 closed++;
40 }
41 public void updateFromOther(NumEntry other) {
42 this.open += other.open;
43 this.modified += other.modified;
44 this.closed += other.closed;
45 this.created += other.created;
46 }
47 }
48 static class WeekEntry {
49 NumEntry man = new NumEntry();
50 NumEntry tir = new NumEntry();
51 NumEntry ons = new NumEntry();
52 NumEntry tor = new NumEntry();
53 NumEntry fre = new NumEntry();
54 NumEntry lor = new NumEntry();
55 NumEntry son = new NumEntry();
56
57 public void incrementFromOther(WeekEntry other) {
58 man.updateFromOther(other.man);
59 tir.updateFromOther(other.tir);
60 ons.updateFromOther(other.ons);
61 tor.updateFromOther(other.tor);
62 fre.updateFromOther(other.fre);
63 lor.updateFromOther(other.lor);
64 son.updateFromOther(other.son);
65 }
66
67 public void incrementCreated() {
68 man.created++;
69 tir.created++;
70 ons.created++;
71 tor.created++;
72 fre.created++;
73 lor.created++;
74 son.created++;
75 }
76 }
77
78 private static TaskLogger logger = TaskLogger.getInstance();
79
80 AddressManager addrManager;
81 List<Address> addressList;
82 int entryCount;
83 EntryUgedage ugedage;
84 AddressSource source;
85 TimingHelper timer;
86 boolean writeBack;
87 int duplicateCount;
88
89 //TODO: Afviste adresser
90 public AddressReport(AddressManager addrManager, int entryCount, EntryUgedage ugedage, AddressSource source, TimingHelper timer, boolean writeBack, int duplicateCount ) {
91 this.addrManager = addrManager;
92 addressList = addrManager.getAddressList();
93 this.entryCount = entryCount;
94 this.ugedage = ugedage;
95 this.source = source;
96 this.timer = timer;
97 this.writeBack = writeBack;
98 this.duplicateCount = duplicateCount;
99 }
100
101 public void sendRapport() {
102 logger.info("Sending mail");
103
104 String reportData = getReportData();
105 String subject = "Indlæsnings rapport for " + source.getDistributor();
106
107 AddressReport.sendMail(subject, reportData);
108
109 }
110
111 public static void sendMail(String subject, String htmlBody) {
112 Properties props = new Properties();
113 props.put("mail.smtp.host", "mail.dao.int");
114 //props.put("mail.smtp.host", "192.168.12.10");
115
116 try {
117 // create some properties and get the default Session
118 Session session = Session.getDefaultInstance(props, null);
119 session.setDebug(false);
120
121 MimeMessage msg = new MimeMessage(session);
122 msg.setFrom( new InternetAddress("no-reply@daoas.dk") );
123
124
125 msg.setRecipient(Message.RecipientType.TO, new InternetAddress("thn@daoas.dk") );//TODO: mulighed for at ændre modtager mail
126 msg.setSubject( subject );
127 msg.setContent(htmlBody, "text/html; charset=utf-8");
128
129 Transport.send(msg);
130
131
132 } catch (MessagingException e) {
133 logger.warning("Unable to send report mail ", e );
134 }
135 }
136
137
138 public String getReportData() {
139
140 WeekEntry total = new WeekEntry();
141 HashMap<Short, WeekEntry> postnrEntries = new HashMap<Short,WeekEntry>();
142
143 int createFailCount = 0;
144
145 int antalUdenGadeid = 0;
146 int antalUdenKommunekode = 0;
147 int antalUdenLatitude = 0;
148 int antalUdenDBKBane = 0;
149
150 // first gather the intel
151 for (Address a : addressList) {
152
153 if (a.state == AddressState.CREATE_FAIL) {
154 createFailCount++;
155 continue;
156 }
157
158 if (a.gadeid == 0) {
159 antalUdenGadeid++;
160 }
161
162 if (a.kommunekode == 0 || a.vejkode == 0) {
163 antalUdenKommunekode++;
164 }
165
166 if (a.latitude == 0 || a.longitude == 0) {
167 antalUdenLatitude++;
168 }
169
170 if (a.state == AddressState.NOT_CHANGED) {
171 continue;
172 }
173 if (a.dbkBane == 0) {
174 antalUdenDBKBane++;
175 }
176
177 WeekEntry weekEntry = postnrEntries.get(a.postnr);
178 if (weekEntry == null) {
179 weekEntry = new WeekEntry();
180 postnrEntries.put(a.postnr, weekEntry);
181 }
182
183
184
185 if (a.state == AddressState.CREATED) {
186 weekEntry.incrementCreated();
187 } else {
188 weekEntry.man.updateFromState(a.stateMan);
189 weekEntry.tir.updateFromState(a.stateTir);
190 weekEntry.ons.updateFromState(a.stateOns);
191 weekEntry.tor.updateFromState(a.stateTor);
192 weekEntry.fre.updateFromState(a.stateFre);
193 weekEntry.lor.updateFromState(a.stateLor);
194 weekEntry.son.updateFromState(a.stateSon);
195
196 }
197 }
198 for (WeekEntry w : postnrEntries.values()) {
199 total.incrementFromOther(w);
200 }
201
202 StringBuilder sb = new StringBuilder();
203
204 sb.append("<h1>Indlæsnings rapport for " + source.getDistributor() + " </h1>");
205 sb.append("Filnavn: ").append( source.getFilename() ).append("<br>");
206 sb.append("Tidsforbrug: ").append( timer.getElapsed() ).append("ms. <br>");
207 sb.append("Skriv til DB: ").append( writeBack ).append("<br>");
208 sb.append("Antal entries: " ).append( entryCount ).append("<br>");
209 sb.append("Antal afviste: " ).append( addrManager.getRejectedCount() ).append("<br>");
210 sb.append("Antal dubletter: " ).append( duplicateCount ).append("<br>");
211 sb.append("Antal fejlede inserts: ").append(createFailCount).append("<br>");
212 sb.append("Filen indeholder data til: ");
213 if (ugedage.mandag) sb.append("Mandag, ");
214 if (ugedage.tirsdag) sb.append("Tirsdag, ");
215 if (ugedage.onsdag) sb.append("Onsdag, ");
216 if (ugedage.torsdag) sb.append("Torsdag, ");
217 if (ugedage.fredag) sb.append("Fredag, ");
218 if (ugedage.lordag) sb.append("Lørdag, ");
219 if (ugedage.sondag) sb.append("Søndag, ");
220 sb.append("<br>");
221
222 sb.append("<h2>Data Mangler</h2>\n");
223 sb.append("<pre>");
224 sb.append("Mangler kommune/vejkode: ").append(antalUdenKommunekode).append("\n");
225 sb.append("Mangler gadeid: ").append(antalUdenGadeid).append("\n");
226 sb.append("Mangler DBK bane: ").append(antalUdenDBKBane).append("\n");
227 sb.append("Mangler latitude/longitude: ").append(antalUdenLatitude).append("\n");
228 sb.append("</pre>");
229
230
231
232 sb.append("<h2>Ændrings oversigt</h2>\n");
233 sb.append("<table>");
234
235 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>");
236 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>");
237 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>");
238 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>");
239 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>");
240 sb.append("</table>");
241
242 sb.append("<br>");
243 sb.append("<h2>Nye/Ukendte gader</h2>");
244 sb.append("<table>");
245 sb.append("<tr><th>Gadeid</th><th>Vejnavn</th></tr>");
246 for( Entry<Integer,String> unknownStreet : addrManager.getUnknownStreets().entrySet() ) {
247 sb.append("<tr><td>").append(unknownStreet.getKey()).append("</td><td>").append(unknownStreet.getValue()).append("</td></tr>");
248 }
249 sb.append("</table>");
250
251
252 sb.append("</table><br>\n");
253
254 return sb.toString();
255 }
256 }

  ViewVC Help
Powered by ViewVC 1.1.20