r89 - in trunk: magalie-persistence/src/main/java/com/franciaflex/magalie/persistence magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity magalie-services/src/main/java/com/franciaflex/magalie/services/service magalie-services/src/main/resources
Author: bleny Date: 2013-04-11 23:07:14 +0200 (Thu, 11 Apr 2013) New Revision: 89 Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revisions... Log: introduce fixedLocationsFirst in Article Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/StoredArticles.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Article.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java trunk/magalie-services/src/main/resources/fixtures.yaml trunk/magalie-services/src/main/resources/fixtures2.yaml Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/StoredArticles.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/StoredArticles.java 2013-04-11 20:24:53 UTC (rev 88) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/StoredArticles.java 2013-04-11 21:07:14 UTC (rev 89) @@ -5,6 +5,7 @@ import com.franciaflex.magalie.persistence.entity.Location; import com.franciaflex.magalie.persistence.entity.StoredArticle; import com.google.common.base.Function; +import com.google.common.base.Preconditions; import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Ordering; @@ -15,19 +16,19 @@ public class StoredArticles { - protected static class FixedLocationForArticleFirst implements Comparator<StoredArticle> { + /** + * Put fixed sites for given article first, or last according to the value of + * {@link com.franciaflex.magalie.persistence.entity.Article#isFixedLocationsFirst()} + */ + protected static class FixedLocationForArticle implements Comparator<StoredArticle> { - protected Article article; - - public FixedLocationForArticleFirst(Article article) { - this.article = article; - } - @Override public int compare(StoredArticle x, StoredArticle y) { + Article article = x.getArticle(); + Preconditions.checkArgument(article.equals(y.getArticle())); boolean xIsInFixedLocation = article.isFixedLocation(x.getLocation()); boolean yIsInFixedLocation = article.isFixedLocation(y.getLocation()); - return BooleanComparator.getTrueFirstComparator().compare(xIsInFixedLocation, yIsInFixedLocation); + return BooleanComparator.getBooleanComparator( ! article.isFixedLocationsFirst()).compare(xIsInFixedLocation, yIsInFixedLocation); } } @@ -94,14 +95,10 @@ return new AccessibleLocationFirst(magalieUser); } - public static Comparator<StoredArticle> fixedLocationForArticleFirstComparator(Article article) { - return new FixedLocationForArticleFirst(article); + public static Comparator<StoredArticle> fixedLocationForArticleComparator() { + return Ordering.from(new FixedLocationForArticle()).reverse(); } - public static Comparator<StoredArticle> fixedLocationForArticleLastComparator(Article article) { - return Ordering.from(new FixedLocationForArticleFirst(article)).reverse(); - } - public static Function<StoredArticle, Location> getLocationFunction() { return new GetLocationFunction(); } Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Article.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Article.java 2013-04-11 20:24:53 UTC (rev 88) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Article.java 2013-04-11 21:07:14 UTC (rev 89) @@ -22,6 +22,8 @@ protected String unit; + protected boolean fixedLocationsFirst; + @Override public String getId() { return id; @@ -79,4 +81,12 @@ } return isFixedLocation; } + + public boolean isFixedLocationsFirst() { + return fixedLocationsFirst; + } + + public void setFixedLocationsFirst(boolean fixedLocationsFirst) { + this.fixedLocationsFirst = fixedLocationsFirst; + } } Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-04-11 20:24:53 UTC (rev 88) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-04-11 21:07:14 UTC (rev 89) @@ -25,13 +25,14 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Ordering; -import com.google.common.collect.Sets; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.PriorityQueue; +import java.util.Queue; import java.util.Set; public class ArticleStorageService implements MagalieService { @@ -86,20 +87,25 @@ List<StoredArticle> storedArticles = getStoredArticles(building, article); - Ordering<StoredArticle> storedArticlesOrdering = - Ordering.compound( - Lists.newArrayList( - StoredArticles.fixedLocationForArticleLastComparator(article), - StoredArticles.locationWithLowestQuantityFirstComparator(), - StoredArticles.articleStoredInLocationsRequiringDriverLicenseFirstComparator() - ) - ); + Queue<StoredArticle> sortedStoredArticles = sortStoredArticlesByPriority(storedArticles); - Set<StoredArticle> sortedStoredArticles = - Sets.newTreeSet(storedArticlesOrdering); + StorageMovementOrder storageMovementOrder = buildStorageMovementOrder( + magalieUser, article, requestedQuantity, destinationLocation, bestEffortPolicy, sortedStoredArticles); - Iterables.addAll(sortedStoredArticles, storedArticles); + MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + StorageMovementOrderDao dao = persistenceContext.getStorageMovementOrderDao(); + + dao.persist(storageMovementOrder); + + persistenceContext.commit(); + + return storageMovementOrder; + + } + + protected StorageMovementOrder buildStorageMovementOrder(MagalieUser magalieUser, Article article, double requestedQuantity, Location destinationLocation, boolean bestEffortPolicy, Queue<StoredArticle> sortedStoredArticles) throws RequiredDriverLicenceException, UnavailableArticleException { + StorageMovementOrder storageMovementOrder = new StorageMovementOrder(); double quantity = 0; @@ -161,16 +167,30 @@ } - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + return storageMovementOrder; - StorageMovementOrderDao dao = persistenceContext.getStorageMovementOrderDao(); + } - dao.persist(storageMovementOrder); + protected Queue<StoredArticle> sortStoredArticlesByPriority(List<StoredArticle> storedArticles) { - persistenceContext.commit(); + Ordering<StoredArticle> orderingByPriority = Ordering.compound( + Lists.newArrayList( + StoredArticles.fixedLocationForArticleComparator(), + StoredArticles.locationWithLowestQuantityFirstComparator(), + StoredArticles.articleStoredInLocationsRequiringDriverLicenseFirstComparator() + ) + ); - return storageMovementOrder; + Queue<StoredArticle> storedArticlesByPriority = + new PriorityQueue<StoredArticle>( + storedArticles.size(), + orderingByPriority + ); + storedArticlesByPriority.addAll(storedArticles); + + return storedArticlesByPriority; + } public StorageMovementTask getStorageMovementTask(String storageMovementOrderId) { Modified: trunk/magalie-services/src/main/resources/fixtures.yaml =================================================================== --- trunk/magalie-services/src/main/resources/fixtures.yaml 2013-04-11 20:24:53 UTC (rev 88) +++ trunk/magalie-services/src/main/resources/fixtures.yaml 2013-04-11 21:07:14 UTC (rev 89) @@ -193,6 +193,7 @@ quantityInKanban: 50 unit: M description: Jonc Souple D5 + fixedLocationsFirst: false article2: &article2 !article @@ -203,6 +204,7 @@ quantityInKanban: 3 unit: PCE description: Moteur Oréa Slt 50 RTS 50/12 + fixedLocationsFirst: false article3: &article3 !article @@ -213,6 +215,7 @@ quantityInKanban: 50 unit: PCE description: Interface ASA/SOMFY + clip + fixedLocationsFirst: false article4: &article4 !article @@ -221,6 +224,7 @@ quantityInKanban: 20 unit: PCE description: Kit Tr.PM Fixe 122G D40Plat 10 + fixedLocationsFirst: false article5: &article5 !article @@ -231,6 +235,7 @@ quantityInKanban: 10 unit: B60 description: Caisson 2005 3F 6000 Brun + fixedLocationsFirst: false article6: &article6 !article @@ -241,6 +246,7 @@ quantityInKanban: 9 unit: PCE description: Ensemble SOLIRIS UNO + fixedLocationsFirst: false articles: - *article1 Modified: trunk/magalie-services/src/main/resources/fixtures2.yaml =================================================================== --- trunk/magalie-services/src/main/resources/fixtures2.yaml 2013-04-11 20:24:53 UTC (rev 88) +++ trunk/magalie-services/src/main/resources/fixtures2.yaml 2013-04-11 21:07:14 UTC (rev 89) @@ -128,6 +128,7 @@ quantityInKanban: 10 unit: kg description: very big screws + fixedLocationsFirst: false article2: &article2 !article @@ -136,6 +137,7 @@ quantityInKanban: 2 unit: box description: little buttons + fixedLocationsFirst: false article3: &article3 !article @@ -146,6 +148,7 @@ quantityInKanban: 50 unit: g description: magic powder + fixedLocationsFirst: false articles: - *article1
participants (1)
-
bleny@users.forge.codelutin.com