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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3059 - (show annotations) (download)
Wed Jul 6 09:47:59 2016 UTC (7 years, 10 months ago) by torben
File size: 9445 byte(s)
Must be able to compile on jdk7
1 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;
7 import java.util.List;
8 import java.util.Map.Entry;
9
10 import org.apache.commons.lang3.builder.CompareToBuilder;
11
12 import dk.daoas.adressevedligehold.MailSender;
13 import dk.daoas.adressevedligehold.beans.Address;
14 import dk.daoas.adressevedligehold.beans.Address.AddressState;
15 import dk.daoas.adressevedligehold.tasks.TaskLogger;
16 import dk.daoas.adressevedligehold.util.TimingHelper;
17
18 /*
19 *
20 */
21
22 public class AddressReport {
23
24 static class NumEntry {
25 int open = 0;
26 int closed = 0;
27 int modified = 0;
28 int created = 0;
29
30 public void updateFromState(AddressState st) {
31 if (st == AddressState.OPENED)
32 open++;
33 if (st == AddressState.MODIFIED)
34 modified++;
35 if (st == AddressState.CLOSED)
36 closed++;
37 }
38 public void updateFromOther(NumEntry other) {
39 this.open += other.open;
40 this.modified += other.modified;
41 this.closed += other.closed;
42 this.created += other.created;
43 }
44 }
45 static class WeekEntry {
46 NumEntry man = new NumEntry();
47 NumEntry tir = new NumEntry();
48 NumEntry ons = new NumEntry();
49 NumEntry tor = new NumEntry();
50 NumEntry fre = new NumEntry();
51 NumEntry lor = new NumEntry();
52 NumEntry son = new NumEntry();
53
54 public void incrementFromOther(WeekEntry other) {
55 man.updateFromOther(other.man);
56 tir.updateFromOther(other.tir);
57 ons.updateFromOther(other.ons);
58 tor.updateFromOther(other.tor);
59 fre.updateFromOther(other.fre);
60 lor.updateFromOther(other.lor);
61 son.updateFromOther(other.son);
62 }
63
64 public void incrementCreated() {
65 man.created++;
66 tir.created++;
67 ons.created++;
68 tor.created++;
69 fre.created++;
70 lor.created++;
71 son.created++;
72 }
73 }
74
75 private static TaskLogger logger = TaskLogger.getInstance();
76
77 AddressManager addrManager;
78 List<Address> addressList;
79 int entryCount;
80 EntryUgedage ugedage;
81 AddressSource source;
82 TimingHelper timer;
83 boolean writeBack;
84 int duplicateCount;
85
86
87 public AddressReport(AddressManager addrManager, int entryCount, EntryUgedage ugedage, AddressSource source, TimingHelper timer, boolean writeBack, int duplicateCount ) {
88 this.addrManager = addrManager;
89 addressList = addrManager.getAddressList();
90 this.entryCount = entryCount;
91 this.ugedage = ugedage;
92 this.source = source;
93 this.timer = timer;
94 this.writeBack = writeBack;
95 this.duplicateCount = duplicateCount;
96 }
97
98 public void sendRapport() {
99 logger.info("Sending mail");
100
101 String reportData = getReportData();
102 String subject = "Indlæsnings rapport for " + source.getDistributor();
103
104 String newOpenCloseAttachment = getAttachement();
105
106 MailSender.sendMailWithAttachment(subject, reportData, "Details.csv", newOpenCloseAttachment);
107
108 }
109
110
111
112 public String getReportData() {
113
114 WeekEntry total = new WeekEntry();
115 HashMap<Short, WeekEntry> postnrEntries = new HashMap<Short,WeekEntry>();
116
117 int createFailCount = 0;
118
119 int antalUdenGadeid = 0;
120 int antalUdenKommunekode = 0;
121 int antalUdenLatitude = 0;
122 int antalUdenDBKBane = 0;
123
124 // first gather the intel
125 for (Address a : addressList) {
126
127 if (a.state == AddressState.CREATE_FAIL) {
128 createFailCount++;
129 continue;
130 }
131
132 if (a.gadeid == 0) {
133 antalUdenGadeid++;
134 }
135
136 if (a.kommunekode == 0 || a.vejkode == 0) {
137 antalUdenKommunekode++;
138 }
139
140 if (a.latitude == 0 || a.longitude == 0) {
141 antalUdenLatitude++;
142 }
143
144 if (a.state == AddressState.NOT_CHANGED) {
145 continue;
146 }
147 if (a.dbkBane == 0) {
148 antalUdenDBKBane++;
149 }
150
151 WeekEntry weekEntry = postnrEntries.get(a.postnr);
152 if (weekEntry == null) {
153 weekEntry = new WeekEntry();
154 postnrEntries.put(a.postnr, weekEntry);
155 }
156
157
158
159 if (a.state == AddressState.CREATED) {
160 weekEntry.incrementCreated();
161 } else {
162 weekEntry.man.updateFromState(a.stateMan);
163 weekEntry.tir.updateFromState(a.stateTir);
164 weekEntry.ons.updateFromState(a.stateOns);
165 weekEntry.tor.updateFromState(a.stateTor);
166 weekEntry.fre.updateFromState(a.stateFre);
167 weekEntry.lor.updateFromState(a.stateLor);
168 weekEntry.son.updateFromState(a.stateSon);
169
170 }
171 }
172 for (WeekEntry w : postnrEntries.values()) {
173 total.incrementFromOther(w);
174 }
175
176 StringBuilder sb = new StringBuilder();
177
178 sb.append("<h1>Indlæsnings rapport for " + source.getDistributor() + " </h1>");
179 sb.append("Filnavn: ").append( source.getFilename() ).append("<br>");
180 sb.append("Tidsforbrug: ").append( timer.getElapsed() ).append("ms. <br>");
181 sb.append("Skriv til DB: ").append( writeBack ).append("<br>");
182 sb.append("Antal entries: " ).append( entryCount ).append("<br>");
183 sb.append("Antal afviste: " ).append( addrManager.getRejectedCount() ).append("<br>");
184 sb.append("Antal dubletter: " ).append( duplicateCount ).append("<br>");
185 sb.append("Antal fejlede inserts: ").append(createFailCount).append("<br>");
186 sb.append("Filen indeholder data til: ");
187 if (ugedage.mandag) sb.append("Mandag, ");
188 if (ugedage.tirsdag) sb.append("Tirsdag, ");
189 if (ugedage.onsdag) sb.append("Onsdag, ");
190 if (ugedage.torsdag) sb.append("Torsdag, ");
191 if (ugedage.fredag) sb.append("Fredag, ");
192 if (ugedage.lordag) sb.append("Lørdag, ");
193 if (ugedage.sondag) sb.append("Søndag, ");
194 sb.append("<br>");
195
196 sb.append("<h2>Data Mangler</h2>\n");
197 sb.append("<pre>");
198 sb.append("Mangler kommune/vejkode: ").append(antalUdenKommunekode).append("\n");
199 sb.append("Mangler gadeid: ").append(antalUdenGadeid).append("\n");
200 sb.append("Mangler DBK bane: ").append(antalUdenDBKBane).append("\n");
201 sb.append("Mangler latitude/longitude: ").append(antalUdenLatitude).append("\n");
202 sb.append("</pre>");
203
204
205
206 sb.append("<h2>Ændrings oversigt</h2>\n");
207 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>");
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>");
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>");
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>");
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>");
214 sb.append("</table>");
215
216 sb.append("<br>");
217 sb.append("<h2>Nye/Ukendte gader</h2>");
218 sb.append("<table>");
219 sb.append("<tr><th>Gadeid</th><th>Vejnavn</th></tr>");
220 for( Entry<Integer,String> unknownStreet : addrManager.getUnknownStreets().entrySet() ) {
221 sb.append("<tr><td>").append(unknownStreet.getKey()).append("</td><td>").append(unknownStreet.getValue()).append("</td></tr>");
222 }
223 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 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();
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 }

  ViewVC Help
Powered by ViewVC 1.1.20