r1997 - in trunk: wao-persistence/src/main/java/fr/ifremer/wao/entity wao-services/src/main/java/fr/ifremer/wao/services/service wao-web/src/main/webapp/WEB-INF/content/obsmer
Author: bleny Date: 2014-06-05 13:46:30 +0200 (Thu, 05 Jun 2014) New Revision: 1997 Url: http://forge.codelutin.com/projects/wao/repository/revisions/1997 Log: refs #4493 add contact state statistics Added: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/CompanySynthesis.java Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactTopiaDao.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSynthesis.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SynthesisService.java trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/synthesis.jsp Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactTopiaDao.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactTopiaDao.java 2014-06-05 08:42:00 UTC (rev 1996) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/entity/ContactTopiaDao.java 2014-06-05 11:46:30 UTC (rev 1997) @@ -315,10 +315,10 @@ String hql = hqlAndParametersBuilder.getHql(); - hql = "select c.sampleRow.company.name, count(c.topiaId) " + hql + " group by c.sampleRow.company.name order by c.sampleRow.company.name"; + hql = "select c.sampleRow.company.topiaId, count(c.topiaId) " + hql + " group by c.sampleRow.company.topiaId"; if (log.isDebugEnabled()) { - log.debug("query count by company" + hql); + log.debug("query count by company '" + hql + "'"); } List<Object[]> findAll = findAll(hql, hqlAndParametersBuilder.getHqlParameters()); @@ -344,18 +344,53 @@ Map<String, Double> complianceBoardingIndicator = new LinkedHashMap<>(); for (Map.Entry<String, Long> entry : countContactsByCompany.entrySet()) { - String companyName = entry.getKey(); + String companyId = entry.getKey(); Long contactsCount = entry.getValue(); - Long contactsWithComplianceCount = countContactsWithComplianceByCompany.get(companyName); + Long contactsWithComplianceCount = countContactsWithComplianceByCompany.get(companyId); if (contactsWithComplianceCount == null) { contactsWithComplianceCount = 0l; } Double ratio = contactsWithComplianceCount.doubleValue() / contactsCount.doubleValue(); - complianceBoardingIndicator.put(companyName, ratio); + complianceBoardingIndicator.put(companyId, ratio); } return complianceBoardingIndicator; } + + public Map<String, Map<ContactState, Long>> getContactStatesStatistics(ContactsFilter filter) { + + HqlAndParametersBuilder<Contact> hqlAndParametersBuilder = toContactHqlAndParametersBuilder(filter); + + String hql = hqlAndParametersBuilder.getHql(); + + hql = "select c.sampleRow.company.topiaId, c.state, count(c.topiaId) " + hql + " group by c.sampleRow.company.topiaId, c.state"; + + List<Object[]> rows = findAll(hql, hqlAndParametersBuilder.getHqlParameters()); + + Map<String, Map<ContactState, Long>> contactStatesStatistics = new LinkedHashMap<>(); + + for (Object[] row : rows) { + + String companyId = (String) row[0]; + int contactStateOrdinal = (int) row[1]; + Long count = (Long) row[2]; + + Map<ContactState, Long> companyStatistics = contactStatesStatistics.get(companyId); + if (companyStatistics == null) { + companyStatistics = new TreeMap<>(); + for (ContactState aContactState : ContactState.getAllowedStates(filter.getSampleRowFilter().getObsProgram())) { + companyStatistics.put(aContactState, 0L); + } + contactStatesStatistics.put(companyId, companyStatistics); + } + + ContactState contactState = ContactState.valueOf(contactStateOrdinal); + companyStatistics.put(contactState, count); + } + + return contactStatesStatistics; + } + } Added: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/CompanySynthesis.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/CompanySynthesis.java (rev 0) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/CompanySynthesis.java 2014-06-05 11:46:30 UTC (rev 1997) @@ -0,0 +1,49 @@ +package fr.ifremer.wao.services.service; + +import fr.ifremer.wao.entity.ContactState; + +import java.io.Serializable; +import java.util.Map; + +public class CompanySynthesis implements Serializable { + + protected String companyId; + + protected String companyName; + + protected Double complianceBoardingIndicator; + + protected Map<ContactState, Long> contactsStatesStatistics; + + public String getCompanyId() { + return companyId; + } + + public void setCompanyId(String companyId) { + this.companyId = companyId; + } + + public String getCompanyName() { + return companyName; + } + + public void setCompanyName(String companyName) { + this.companyName = companyName; + } + + public Double getComplianceBoardingIndicator() { + return complianceBoardingIndicator; + } + + public void setComplianceBoardingIndicator(Double complianceBoardingIndicator) { + this.complianceBoardingIndicator = complianceBoardingIndicator; + } + + public Map<ContactState, Long> getContactsStatesStatistics() { + return contactsStatesStatistics; + } + + public void setContactsStatesStatistics(Map<ContactState, Long> contactsStatesStatistics) { + this.contactsStatesStatistics = contactsStatesStatistics; + } +} Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSynthesis.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSynthesis.java 2014-06-05 08:42:00 UTC (rev 1996) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerSynthesis.java 2014-06-05 11:46:30 UTC (rev 1997) @@ -3,8 +3,11 @@ import fr.ifremer.wao.entity.Boat; import fr.ifremer.wao.services.utils.BarChartData; +import java.util.HashMap; +import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; +import java.util.TreeMap; public class ObsMerSynthesis { @@ -22,10 +25,14 @@ protected int validBoardingsCount; - protected Map<String, Double> complianceBoardingIndicator; + protected Map<String, CompanySynthesis> companySyntheses = new HashMap<>(); protected Set<String> sampleRowIds; + public Map<String, CompanySynthesis> getCompanySyntheses() { + return companySyntheses; + } + public BarChartData getExpectedVsActualObservationsByMonthsBarChartData() { return expectedVsActualObservationsByMonthsBarChartData; } @@ -82,11 +89,13 @@ this.validBoardingsCount = validBoardingsCount; } - public void setComplianceBoardingIndicator(Map<String, Double> complianceBoardingIndicator) { - this.complianceBoardingIndicator = complianceBoardingIndicator; - } - public Map<String, Double> getComplianceBoardingIndicator() { + Map<String, Double> complianceBoardingIndicator = new TreeMap(); + for (CompanySynthesis companySynthesis : companySyntheses.values()) { + complianceBoardingIndicator.put( + companySynthesis.getCompanyName(), + companySynthesis.getComplianceBoardingIndicator()); + } return complianceBoardingIndicator; } @@ -97,4 +106,25 @@ public Set<String> getSampleRowIds() { return sampleRowIds; } + + public CompanySynthesis getCompanySynthesis(String companyId) { + CompanySynthesis companySynthesis = companySyntheses.get(companyId); + if (companySynthesis == null) { + companySynthesis = new CompanySynthesis(); + companySynthesis.setCompanyId(companyId); + companySyntheses.put(companyId, companySynthesis); + } + return companySynthesis; + } + + public Set<CompanySynthesis> getCompanySynthesesOrderedByName() { + Map<String, CompanySynthesis> companySynthesesOrderedByName = new TreeMap(); + for (CompanySynthesis companySynthesis : companySyntheses.values()) { + companySynthesesOrderedByName.put( + companySynthesis.getCompanyName(), + companySynthesis); + } + return new LinkedHashSet<>(companySynthesesOrderedByName.values()); + } + } Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SynthesisService.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SynthesisService.java 2014-06-05 08:42:00 UTC (rev 1996) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/SynthesisService.java 2014-06-05 11:46:30 UTC (rev 1997) @@ -4,6 +4,8 @@ import fr.ifremer.wao.ContactsFilter; import fr.ifremer.wao.WaoUtils; import fr.ifremer.wao.entity.Boat; +import fr.ifremer.wao.entity.Company; +import fr.ifremer.wao.entity.ContactState; import fr.ifremer.wao.entity.ContactTopiaDao; import fr.ifremer.wao.entity.SampleRowTopiaDao; import fr.ifremer.wao.entity.SynthesisId; @@ -59,6 +61,14 @@ setComplianceBoardingIndicator(obsMerSynthesis, filter); + setContactStatesStatistics(obsMerSynthesis, filter); + + for (CompanySynthesis companySynthesis : obsMerSynthesis.getCompanySyntheses().values()) { + String companyId = companySynthesis.getCompanyId(); + Company company = getCompanyDao().findByTopiaId(companyId); + companySynthesis.setCompanyName(company.getName()); + } + cache.put(filter, obsMerSynthesis); } @@ -67,13 +77,29 @@ } + protected void setContactStatesStatistics(ObsMerSynthesis obsMerSynthesis, ContactsFilter filter) { + + ContactTopiaDao dao = getContactDao(); + + Map<String, Map<ContactState, Long>> contactStatesStatistics = dao.getContactStatesStatistics(filter); + + for (Map.Entry<String, Map<ContactState, Long>> entry : contactStatesStatistics.entrySet()) { + CompanySynthesis companySynthesis = obsMerSynthesis.getCompanySynthesis(entry.getKey()); + companySynthesis.setContactsStatesStatistics(entry.getValue()); + } + + } + protected void setComplianceBoardingIndicator(ObsMerSynthesis obsMerSynthesis, ContactsFilter filter) { ContactTopiaDao dao = getContactDao(); Map<String, Double> complianceBoardingIndicator = dao.getComplianceBoardingIndicator(filter); - obsMerSynthesis.setComplianceBoardingIndicator(complianceBoardingIndicator); + for (Map.Entry<String, Double> entry : complianceBoardingIndicator.entrySet()) { + CompanySynthesis companySynthesis = obsMerSynthesis.getCompanySynthesis(entry.getKey()); + companySynthesis.setComplianceBoardingIndicator(entry.getValue()); + } } Modified: trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/synthesis.jsp =================================================================== --- trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/synthesis.jsp 2014-06-05 08:42:00 UTC (rev 1996) +++ trunk/wao-web/src/main/webapp/WEB-INF/content/obsmer/synthesis.jsp 2014-06-05 11:46:30 UTC (rev 1997) @@ -113,22 +113,19 @@ </tr> </thead> <tbody> - <s:iterator value="synthesis.complianceBoardingIndicator"> + <s:iterator value="synthesis.companySynthesesOrderedByName"> <tr> <td> - <s:property value="key"/> + <s:property value="companyName"/> </td> <td> - <s:property value="value * 100"/> % + <s:property value="complianceBoardingIndicator * 100"/> % </td> </tr> </s:iterator> </tbody> </table> - <s:if test="authenticatedWaoUser.authorizedToViewOtherCompanies"> - </s:if> - </article> <article> @@ -136,6 +133,35 @@ <s:text name="SynthesisId.IND_CONTACT_STATE"/> </h2> + <table class="table"> + <thead> + <tr> + <th> + <s:text name="wao.ui.entity.Company"/> + </th> + <s:iterator value="synthesis.companySynthesesOrderedByName.iterator.next().contactsStatesStatistics.keySet()" var="contactState"> + <th> + <s:text name="%{#contactState.i18nKey}"/> + </th> + </s:iterator> + </tr> + </thead> + <tbody> + <s:iterator value="synthesis.companySynthesesOrderedByName"> + <tr> + <td> + <s:property value="companyName"/> + </td> + <s:iterator value="contactsStatesStatistics"> + <td> + <s:property value="value"/> + </td> + </s:iterator> + </tr> + </s:iterator> + </tbody> + </table> + </article> <article>
participants (1)
-
bleny@users.forge.codelutin.com