--- dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/AddressReport.java 2016/01/28 10:57:26 2860 +++ dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/coveragefileupload/AddressReport.java 2016/07/06 09:52:51 3061 @@ -1,33 +1,33 @@ -package dk.daoas.adressevedligehold; +package dk.daoas.adressevedligehold.coveragefileupload; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.List; -import java.util.Properties; +import java.util.Map.Entry; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.Session; -import javax.mail.Transport; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMessage; +import org.apache.commons.lang3.builder.CompareToBuilder; +import dk.daoas.adressevedligehold.MailSender; import dk.daoas.adressevedligehold.beans.Address; import dk.daoas.adressevedligehold.beans.Address.AddressState; +import dk.daoas.adressevedligehold.tasks.TaskLogger; import dk.daoas.adressevedligehold.util.TimingHelper; /* - * TODO: detail rapport pr postnr - * TODO: ved mangel oversigten - skeln mellem om det er nye/CREATED eller om det er gamle kendte adresser + * */ public class AddressReport { - + static class NumEntry { int open = 0; int closed = 0; int modified = 0; int created = 0; - + public void updateFromState(AddressState st) { if (st == AddressState.OPENED) open++; @@ -51,7 +51,7 @@ NumEntry fre = new NumEntry(); NumEntry lor = new NumEntry(); NumEntry son = new NumEntry(); - + public void incrementFromOther(WeekEntry other) { man.updateFromOther(other.man); tir.updateFromOther(other.tir); @@ -61,7 +61,7 @@ lor.updateFromOther(other.lor); son.updateFromOther(other.son); } - + public void incrementCreated() { man.created++; tir.created++; @@ -72,7 +72,9 @@ son.created++; } } - + + private static TaskLogger logger = TaskLogger.getInstance(); + AddressManager addrManager; List
addressList; int entryCount; @@ -80,9 +82,10 @@ AddressSource source; TimingHelper timer; boolean writeBack; - - //TODO: Afviste adresser - 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 ) { this.addrManager = addrManager; addressList = addrManager.getAddressList(); this.entryCount = entryCount; @@ -90,85 +93,70 @@ this.source = source; this.timer = timer; this.writeBack = writeBack; - + this.duplicateCount = duplicateCount; } - + public void sendRapport() { - System.out.println("Sending mail"); - + logger.info("Sending mail"); + String reportData = getReportData(); String subject = "Indlæsnings rapport for " + source.getDistributor(); - AddressReport.sendMail(subject, reportData); - - } - - 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) { - System.out.println("Unable to send report mail " + e.getMessage() ); - } + String newOpenCloseAttachment = getAttachement(); + + MailSender.sendMailWithAttachment(subject, reportData, "Details.csv", newOpenCloseAttachment); + } - - + + + public String getReportData() { - + WeekEntry total = new WeekEntry(); HashMap postnrEntries = new HashMap(); - - - int antalUdenKommunekodeNy = 0; + + int createFailCount = 0; + + int antalUdenGadeid = 0; int antalUdenKommunekode = 0; int antalUdenLatitude = 0; int antalUdenDBKBane = 0; - + // first gather the intel for (Address a : addressList) { - if (a.kommunekode == 0 || a.vejkode == 0) { - if (a.state == AddressState.CREATED) { - antalUdenKommunekodeNy++; - } - + + if (a.state == AddressState.CREATE_FAIL) { + createFailCount++; + continue; + } + + if (a.gadeid == 0) { + antalUdenGadeid++; + } + + if (a.kommunekode == 0 || a.vejkode == 0) { antalUdenKommunekode++; } - + if (a.latitude == 0 || a.longitude == 0) { antalUdenLatitude++; } - + if (a.state == AddressState.NOT_CHANGED) { continue; } if (a.dbkBane == 0) { antalUdenDBKBane++; } - + WeekEntry weekEntry = postnrEntries.get(a.postnr); if (weekEntry == null) { weekEntry = new WeekEntry(); postnrEntries.put(a.postnr, weekEntry); } - - + + + if (a.state == AddressState.CREATED) { weekEntry.incrementCreated(); } else { @@ -179,44 +167,123 @@ weekEntry.fre.updateFromState(a.stateFre); weekEntry.lor.updateFromState(a.stateLor); weekEntry.son.updateFromState(a.stateSon); - + } } for (WeekEntry w : postnrEntries.values()) { total.incrementFromOther(w); } - + StringBuilder sb = new StringBuilder(); - + sb.append("

Indlæsnings rapport for " + source.getDistributor() + "

"); sb.append("Filnavn: ").append( source.getFilename() ).append("
"); sb.append("Tidsforbrug: ").append( timer.getElapsed() ).append("ms.
"); sb.append("Skriv til DB: ").append( writeBack ).append("
"); sb.append("Antal entries: " ).append( entryCount ).append("
"); - sb.append("Antal afviste: " ).append( addrManager.getAfvistAntal() ).append("
"); - + sb.append("Antal afviste: " ).append( addrManager.getRejectedCount() ).append("
"); + sb.append("Antal dubletter: " ).append( duplicateCount ).append("
"); + sb.append("Antal fejlede inserts: ").append(createFailCount).append("
"); + sb.append("Filen indeholder data til: "); + if (ugedage.mandag) sb.append("Mandag, "); + if (ugedage.tirsdag) sb.append("Tirsdag, "); + if (ugedage.onsdag) sb.append("Onsdag, "); + if (ugedage.torsdag) sb.append("Torsdag, "); + if (ugedage.fredag) sb.append("Fredag, "); + if (ugedage.lordag) sb.append("Lørdag, "); + if (ugedage.sondag) sb.append("Søndag, "); + sb.append("
"); + sb.append("

Data Mangler

\n"); sb.append("
");
 		sb.append("Mangler kommune/vejkode: ").append(antalUdenKommunekode).append("\n");
+		sb.append("Mangler gadeid: ").append(antalUdenGadeid).append("\n");
 		sb.append("Mangler DBK bane: ").append(antalUdenDBKBane).append("\n");
 		sb.append("Mangler latitude/longitude: ").append(antalUdenLatitude).append("\n");
 		sb.append("
"); - - + + sb.append("

Ændrings oversigt

\n"); sb.append(""); - + sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); + sb.append("
 MandagTirsdagOnsdagTorsdagFredagLørdagSøndag
Oprettet:").append(total.man.created).append("").append(total.tir.created).append("").append(total.ons.created).append("").append(total.tor.created).append("").append(total.fre.created).append("").append(total.lor.created).append("").append(total.son.created).append("
Åbnet:").append(total.man.open).append("").append(total.tir.open).append("").append(total.ons.open).append("").append(total.tor.open).append("").append(total.fre.open).append("").append(total.lor.open).append("").append(total.son.open).append("
Ændret:").append(total.man.modified).append("").append(total.tir.modified).append("").append(total.ons.modified).append("").append(total.tor.modified).append("").append(total.fre.modified).append("").append(total.lor.modified).append("").append(total.son.modified).append("
Lukket:").append(total.man.closed).append("").append(total.tir.closed).append("").append(total.ons.closed).append("").append(total.tor.closed).append("").append(total.fre.closed).append("").append(total.lor.closed).append("").append(total.son.closed).append("
"); + + sb.append("
"); + sb.append("

Nye/Ukendte gader

"); + sb.append(""); + sb.append(""); + for( Entry unknownStreet : addrManager.getUnknownStreets().entrySet() ) { + sb.append(""); + } + sb.append("
GadeidVejnavn
").append(unknownStreet.getKey()).append("").append(unknownStreet.getValue()).append("
"); + + sb.append("
\n"); + + return sb.toString(); + } + + public String getAttachement() { + StringBuilder sb = new StringBuilder(); + sb.append("Status;Gadeid;Post;Vejnavn;Husnr;Litra\r\n"); + ArrayList
attachmentData = new ArrayList
(); + for (Address a : addressList) { + if (a.state == AddressState.CLOSED || a.state == AddressState.CREATED || a.state == AddressState.OPENED) { + attachmentData.add(a); + } + } - sb.append("
\n"); + Collections.sort(attachmentData, new AttachmentComparator()); + + for (Address a : attachmentData) { + switch (a.state) { + case CLOSED: + sb.append("Closed;"); + break; + case CREATED: + sb.append("Created;"); + break; + case OPENED: + sb.append("Opened;"); + break; + default: + break; + } + + //tilføj resten af dataene + sb.append( a.gadeid + ";" + a.postnr + ";" + a.vejnavn + ";" + a.husnr + ";" + a.husnrbogstav + "\r\n"); + } return sb.toString(); } + + + /* + * Serializable is to silence findbugs + */ + static class AttachmentComparator implements Comparator
, Serializable { + private static final long serialVersionUID = 1L; + + @Override + public int compare(Address a1, Address a2) { + + + //Brug apache commons lang3 + return new CompareToBuilder() + .append(a1.state, a2.state) + .append(a1.postnr, a2.postnr) + .append(a1.vejnavn, a2.vejnavn) + .append(a1.husnr, a2.husnr) + .append(a1.husnrbogstav, a2.husnrbogstav) + .toComparison(); + } + + } }