Rev 34035 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package com.spice.profitmandi.service.inventory;import com.spice.profitmandi.common.model.ItemIdQuantity;import com.spice.profitmandi.dao.entity.inventory.PartnerAgeingModel;import com.spice.profitmandi.dao.repository.fofo.ActivatedImeiRepository;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import javax.persistence.TypedQuery;import java.util.*;import java.util.stream.Collectors;@Componentpublic class AgeingServiceImpl implements AgeingService {@AutowiredActivatedImeiRepository activatedImeiRepository;@Autowiredprivate SessionFactory sessionFactory;private static final Logger LOGGER = LogManager.getLogger(AgeingServiceImpl.class);@Overridepublic Map<String, AgeingModel> getAllAgeingForSecondary() {Session session = sessionFactory.getCurrentSession();final TypedQuery<AgeingModel> typedQuerySimilar = session.createNamedQuery("BrandAgeingLimit.imeisToSecondaryAlert", AgeingModel.class);List<AgeingModel> ageingModels = typedQuerySimilar.getResultList();return ageingModels.stream().collect(Collectors.toMap(x -> x.getSerialNumber(), x -> x, (u, v) -> u.getInvoiceDate().isBefore(v.getInvoiceDate()) ? u : v));}@Overridepublic Map<String, AgeingModel> getAllAgeingForWarehouseBilling(int vendorWarehouseId, List<Integer> itemIds) {Session session = sessionFactory.getCurrentSession();final TypedQuery<AgeingModel> typedQuerySimilar = session.createNamedQuery("BrandAgeingLimit.imeisToSecondaryForWarehouseBilling", AgeingModel.class);typedQuerySimilar.setParameter("itemIds", itemIds);typedQuerySimilar.setParameter("vendorWarehouseId", vendorWarehouseId);List<AgeingModel> ageingModels = typedQuerySimilar.getResultList();return ageingModels.stream().collect(Collectors.toMap(x -> x.getSerialNumber(), x -> x, (u, v) -> u.getInvoiceDate().isBefore(v.getInvoiceDate()) ? u : v));}@Overridepublic Map<Integer, Map<Integer, List<AgeingModel>>> getAgeingForWarehouseBilling(int vendorWarehouseId, List<ItemIdQuantity> itemIdQuantityList) {Map<String, AgeingModel> serialNumberAgeingModelMap = this.getAllAgeingForWarehouseBilling(vendorWarehouseId, itemIdQuantityList.stream().map(ItemIdQuantity::getItemId).collect(Collectors.toList()));Map<Integer, Map<Integer, List<AgeingModel>>> itemAgeingDaysModelMap = serialNumberAgeingModelMap.values().stream().collect(Collectors.groupingBy(AgeingModel::getItemId,Collectors.groupingBy(AgeingModel::getExceedDays, () -> new TreeMap<>(Comparator.reverseOrder()), Collectors.toList())));if (!itemAgeingDaysModelMap.isEmpty()) {for (ItemIdQuantity itemIdQuantity : itemIdQuantityList) {Map<Integer, List<AgeingModel>> daysImeisMap = itemAgeingDaysModelMap.get(itemIdQuantity.getItemId());int quantity = itemIdQuantity.getQuantity();int count = 0;Iterator<Map.Entry<Integer, List<AgeingModel>>> iter = daysImeisMap.entrySet().iterator();while (iter.hasNext()) {Map.Entry<Integer, List<AgeingModel>> entry = iter.next();if (count >= quantity) {LOGGER.info("Removing iterator - {}, {}", count, quantity);iter.remove();}count += entry.getValue().size();}}}return itemAgeingDaysModelMap;}@Overridepublic List<PartnerAgeingModel> getAllAgeingForTertiary() {Session session = sessionFactory.getCurrentSession();final TypedQuery<PartnerAgeingModel> imeisToTertiaryQuery = session.createNamedQuery("BrandAgeingLimit.imeisToTertiaryAlert", PartnerAgeingModel.class);return imeisToTertiaryQuery.getResultList();}@Overridepublic List<PartnerAgeingModel> filterAgedInventory(Set<Integer> inventoryItemIds) {Session session = sessionFactory.getCurrentSession();final TypedQuery<PartnerAgeingModel> imeisToTertiaryQuery = session.createNamedQuery("BrandAgeingLimit.getByInventoryItemIds", PartnerAgeingModel.class);imeisToTertiaryQuery.setParameter("inventoryItemIds", inventoryItemIds);return imeisToTertiaryQuery.getResultList();}@Overridepublic List<CatalogAgingModel> getCatalogsAgingByWarehouse(Set<Integer> catalogItemIds, int warehouseId) {Session session = sessionFactory.getCurrentSession();final TypedQuery<CatalogAgingModel> catalogAgingModelTypedQuery = session.createNamedQuery("CatalogAgingByWarehouse", CatalogAgingModel.class);catalogAgingModelTypedQuery.setParameter("catalogItemIds", catalogItemIds);catalogAgingModelTypedQuery.setParameter("warehouseId", warehouseId);return catalogAgingModelTypedQuery.getResultList();}}