r588 - in trunk: faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service
Author: echatellier Date: 2014-08-22 17:08:31 +0200 (Fri, 22 Aug 2014) New Revision: 588 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/588 Log: fixes #5649: Erreur de calcul des quantit?\195?\169s par gamme Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java =================================================================== --- trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java 2014-08-22 14:07:53 UTC (rev 587) +++ trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java 2014-08-22 15:08:31 UTC (rev 588) @@ -419,26 +419,34 @@ return result; } - public Map<Range, Long[]> computeQuantitiesByRange(List<MailFolder> folders) { - String query = "SELECT range, " + - "SUM(rangeRow." + RangeRow.PROPERTY_PRODUCT_QUANTITY + ") AS prodQ, " + - "SUM(rangeRow." + RangeRow.PROPERTY_SAV_QUANTITY + ") AS savQ, " + - "SUM(rangeRow." + RangeRow.PROPERTY_QUOTATION_QUANTITY + ") AS quotQ " + - "FROM " + Email.class.getName() + " AS email " + - "INNER JOIN email." + Email.PROPERTY_RANGE_ROW + " AS rangeRow " + - "INNER JOIN rangeRow." + RangeRow.PROPERTY_RANGE + " AS range " + - "WHERE email." + Email.PROPERTY_MAIL_FOLDER + " IN :folders " + - "GROUP BY range " + - "ORDER BY range.label"; + public Map<String, Long[]> computeQuantitiesByRange(List<MailFolder> folders) { + // this has been modifier from + // SELECT range + // to + // SELECT range.topiaId + // do to bug https://hibernate.atlassian.net/browse/HHH-1615 that can be reproduced + // on sql server + + String query = "SELECT range." + Range.PROPERTY_TOPIA_ID + "," + + " SUM(rangeRow." + RangeRow.PROPERTY_PRODUCT_QUANTITY + ") AS prodQ," + + " SUM(rangeRow." + RangeRow.PROPERTY_SAV_QUANTITY + ") AS savQ," + + " SUM(rangeRow." + RangeRow.PROPERTY_QUOTATION_QUANTITY + ") AS quotQ" + + " FROM " + Email.class.getName() + " AS email " + + " INNER JOIN email." + Email.PROPERTY_RANGE_ROW + " AS rangeRow" + + " INNER JOIN rangeRow." + RangeRow.PROPERTY_RANGE + " AS range" + + " WHERE email." + Email.PROPERTY_MAIL_FOLDER + " IN :folders" + + " GROUP BY range." + Range.PROPERTY_TOPIA_ID + + " ORDER BY range.label"; + Map<String, Object> args = new HashMap<>(); args.put("folders", folders); - Map<Range, Long[]> result = new LinkedHashMap<>(); + Map<String, Long[]> result = new LinkedHashMap<>(); List<Object[]> queryResuts = findAll(query, args); for (Object[] queryResut : queryResuts) { - Range range = (Range) queryResut[0]; + String range = (String) queryResut[0]; Long[] sums = new Long[3]; sums[0] = (Long) queryResut[1]; sums[1] = (Long) queryResut[2]; Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-08-22 14:07:53 UTC (rev 587) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-08-22 15:08:31 UTC (rev 588) @@ -41,16 +41,16 @@ import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.MessagingException; -import com.franciaflex.faxtomail.services.service.exceptions.FolderNotReadableException; - import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; import org.apache.commons.io.FileUtils; @@ -82,6 +82,7 @@ import com.franciaflex.faxtomail.services.FaxToMailServiceSupport; import com.franciaflex.faxtomail.services.FaxToMailServiceUtils; import com.franciaflex.faxtomail.services.service.exceptions.AlreadyLockedMailException; +import com.franciaflex.faxtomail.services.service.exceptions.FolderNotReadableException; import com.franciaflex.faxtomail.services.service.exceptions.InvalidClientException; import com.franciaflex.faxtomail.services.service.imports.ArchiveImportBean; import com.franciaflex.faxtomail.services.service.imports.ArchiveImportModel; @@ -604,9 +605,20 @@ @Override public Map<Range, Long[]> computeQuantitiesByRange(MailFolder rootFolder) { + // get results by topia id List<MailFolder> folders = getChildrenRecursively(rootFolder); EmailTopiaDao emailDao = getPersistenceContext().getEmailDao(); - return emailDao.computeQuantitiesByRange(folders); + Map<String, Long[]> daoResult = emailDao.computeQuantitiesByRange(folders); + + // convert topiaId to entities + RangeTopiaDao rangeDao = getPersistenceContext().getRangeDao(); + Map<Range, Long[]> result = new LinkedHashMap<Range, Long[]>(); + for (Entry<String, Long[]> entry : daoResult.entrySet()) { + Range range = rangeDao.forTopiaIdEquals(entry.getKey()).findUnique(); + result.put(range, entry.getValue()); + } + + return result; } @Override
participants (1)
-
echatellier@users.forge.codelutin.com