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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3059 - (hide 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 torben 3022 package dk.daoas.adressevedligehold.coveragefileupload;
2 torben 2838
3 torben 3058 import java.util.ArrayList;
4 torben 3059 import java.util.Collections;
5 torben 3058 import java.util.Comparator;
6 torben 2838 import java.util.HashMap;
7     import java.util.List;
8 torben 2873 import java.util.Map.Entry;
9 torben 2838
10 torben 3058 import org.apache.commons.lang3.builder.CompareToBuilder;
11    
12 torben 2953 import dk.daoas.adressevedligehold.MailSender;
13 torben 2838 import dk.daoas.adressevedligehold.beans.Address;
14     import dk.daoas.adressevedligehold.beans.Address.AddressState;
15 torben 2905 import dk.daoas.adressevedligehold.tasks.TaskLogger;
16 torben 2838 import dk.daoas.adressevedligehold.util.TimingHelper;
17    
18 torben 2840 /*
19 torben 2950 *
20 torben 2840 */
21    
22 torben 2838 public class AddressReport {
23 torben 2953
24 torben 2860 static class NumEntry {
25 torben 2838 int open = 0;
26     int closed = 0;
27     int modified = 0;
28     int created = 0;
29 torben 2953
30 torben 2838 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 torben 2860 static class WeekEntry {
46 torben 2838 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 torben 2953
54 torben 2838 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 torben 2953
64 torben 2838 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 torben 2953
75 torben 2905 private static TaskLogger logger = TaskLogger.getInstance();
76 torben 2953
77 torben 2839 AddressManager addrManager;
78 torben 2838 List<Address> addressList;
79     int entryCount;
80     EntryUgedage ugedage;
81     AddressSource source;
82     TimingHelper timer;
83     boolean writeBack;
84 torben 2924 int duplicateCount;
85 torben 2949
86 torben 2953
87 torben 2924 public AddressReport(AddressManager addrManager, int entryCount, EntryUgedage ugedage, AddressSource source, TimingHelper timer, boolean writeBack, int duplicateCount ) {
88 torben 2839 this.addrManager = addrManager;
89 torben 2838 addressList = addrManager.getAddressList();
90     this.entryCount = entryCount;
91     this.ugedage = ugedage;
92     this.source = source;
93     this.timer = timer;
94     this.writeBack = writeBack;
95 torben 2924 this.duplicateCount = duplicateCount;
96 torben 2838 }
97 torben 2953
98 torben 2838 public void sendRapport() {
99 torben 2905 logger.info("Sending mail");
100 torben 2953
101 torben 2838 String reportData = getReportData();
102     String subject = "Indlæsnings rapport for " + source.getDistributor();
103 torben 3044
104     String newOpenCloseAttachment = getAttachement();
105 torben 2953
106 torben 3044 MailSender.sendMailWithAttachment(subject, reportData, "Details.csv", newOpenCloseAttachment);
107 torben 2953
108 torben 2838 }
109 torben 2953
110    
111    
112 torben 2838 public String getReportData() {
113 torben 2953
114 torben 2838 WeekEntry total = new WeekEntry();
115     HashMap<Short, WeekEntry> postnrEntries = new HashMap<Short,WeekEntry>();
116 torben 2953
117 torben 2876 int createFailCount = 0;
118 torben 2953
119 torben 2894 int antalUdenGadeid = 0;
120 torben 2838 int antalUdenKommunekode = 0;
121     int antalUdenLatitude = 0;
122     int antalUdenDBKBane = 0;
123 torben 2953
124 torben 2838 // first gather the intel
125     for (Address a : addressList) {
126 torben 2953
127 torben 2876 if (a.state == AddressState.CREATE_FAIL) {
128     createFailCount++;
129     continue;
130     }
131 torben 2953
132 torben 2894 if (a.gadeid == 0) {
133     antalUdenGadeid++;
134     }
135 torben 2953
136 torben 2876 if (a.kommunekode == 0 || a.vejkode == 0) {
137 torben 2838 antalUdenKommunekode++;
138     }
139 torben 2953
140 torben 2838 if (a.latitude == 0 || a.longitude == 0) {
141     antalUdenLatitude++;
142     }
143 torben 2953
144 torben 2838 if (a.state == AddressState.NOT_CHANGED) {
145     continue;
146     }
147     if (a.dbkBane == 0) {
148     antalUdenDBKBane++;
149     }
150 torben 2953
151 torben 2838 WeekEntry weekEntry = postnrEntries.get(a.postnr);
152     if (weekEntry == null) {
153     weekEntry = new WeekEntry();
154     postnrEntries.put(a.postnr, weekEntry);
155     }
156 torben 2876
157 torben 2953
158    
159 torben 2838 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 torben 2953
170 torben 2838 }
171     }
172     for (WeekEntry w : postnrEntries.values()) {
173     total.incrementFromOther(w);
174     }
175 torben 2953
176 torben 2838 StringBuilder sb = new StringBuilder();
177 torben 2953
178 torben 2838 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 torben 2868 sb.append("Antal afviste: " ).append( addrManager.getRejectedCount() ).append("<br>");
184 torben 2924 sb.append("Antal dubletter: " ).append( duplicateCount ).append("<br>");
185 torben 2876 sb.append("Antal fejlede inserts: ").append(createFailCount).append("<br>");
186 torben 2865 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 torben 2953
196 torben 2838 sb.append("<h2>Data Mangler</h2>\n");
197     sb.append("<pre>");
198     sb.append("Mangler kommune/vejkode: ").append(antalUdenKommunekode).append("\n");
199 torben 2894 sb.append("Mangler gadeid: ").append(antalUdenGadeid).append("\n");
200 torben 2838 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 torben 2953
205    
206 torben 2838 sb.append("<h2>Ændrings oversigt</h2>\n");
207     sb.append("<table>");
208 torben 2953
209 torben 2838 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 torben 2873 sb.append("</table>");
215 torben 2953
216 torben 2873 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 torben 2953
225    
226 torben 2838 sb.append("</table><br>\n");
227 torben 2953
228 torben 2838 return sb.toString();
229     }
230 torben 3044
231     public String getAttachement() {
232     StringBuilder sb = new StringBuilder();
233     sb.append("Status;Gadeid;Post;Vejnavn;Husnr;Litra\r\n");
234    
235 torben 3058 ArrayList<Address> attachmentData = new ArrayList<Address>();
236 torben 3044 for (Address a : addressList) {
237 torben 3058 if (a.state == AddressState.CLOSED || a.state == AddressState.CREATED || a.state == AddressState.OPENED) {
238     attachmentData.add(a);
239     }
240     }
241    
242 torben 3059 Collections.sort(attachmentData, new AttachmentComparator());
243 torben 3058
244     for (Address a : attachmentData) {
245 torben 3044 switch (a.state) {
246     case CLOSED:
247 torben 3058 sb.append("Closed;");
248 torben 3044 break;
249     case CREATED:
250 torben 3058 sb.append("Created;");
251 torben 3044 break;
252     case OPENED:
253 torben 3058 sb.append("Opened;");
254 torben 3044 break;
255     default:
256     break;
257     }
258 torben 3058
259     //tilføj resten af dataene
260     sb.append( a.gadeid + ";" + a.postnr + ";" + a.vejnavn + ";" + a.husnr + ";" + a.husnrbogstav + "\r\n");
261 torben 3044 }
262    
263     return sb.toString();
264     }
265 torben 3058
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 torben 2838 }

  ViewVC Help
Powered by ViewVC 1.1.20