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