Subversion Repositories SmartDukaan

Rev

Rev 33393 | Rev 34035 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
31906 amit.gupta 1
package com.spice.profitmandi.service.inventory;
2
 
33243 ranu 3
import com.spice.profitmandi.common.model.ItemIdQuantity;
31906 amit.gupta 4
import com.spice.profitmandi.dao.entity.inventory.PartnerAgeingModel;
5
import com.spice.profitmandi.dao.repository.fofo.ActivatedImeiRepository;
33243 ranu 6
import org.apache.logging.log4j.LogManager;
7
import org.apache.logging.log4j.Logger;
31906 amit.gupta 8
import org.hibernate.Session;
9
import org.hibernate.SessionFactory;
10
import org.springframework.beans.factory.annotation.Autowired;
11
import org.springframework.stereotype.Component;
12
 
13
import javax.persistence.TypedQuery;
33243 ranu 14
import java.util.*;
31906 amit.gupta 15
import java.util.stream.Collectors;
16
 
17
 
18
@Component
19
public class AgeingServiceImpl implements AgeingService {
20
 
21
    @Autowired
22
    ActivatedImeiRepository activatedImeiRepository;
23
    @Autowired
24
    private SessionFactory sessionFactory;
33243 ranu 25
    private static final Logger LOGGER = LogManager.getLogger(AgeingService.class);
33393 amit.gupta 26
 
31906 amit.gupta 27
    @Override
28
    public Map<String, AgeingModel> getAllAgeingForSecondary() {
29
        Session session = sessionFactory.getCurrentSession();
30
        final TypedQuery<AgeingModel> typedQuerySimilar = session.createNamedQuery("BrandAgeingLimit.imeisToSecondaryAlert", AgeingModel.class);
31
        List<AgeingModel> ageingModels = typedQuerySimilar.getResultList();
32
        return ageingModels.stream().collect(Collectors.toMap(x -> x.getSerialNumber(), x -> x, (u, v) -> u.getInvoiceDate().isBefore(v.getInvoiceDate()) ? u : v));
33
    }
34
 
35
    @Override
33243 ranu 36
    public Map<String, AgeingModel> getAllAgeingForWarehouseBilling(int vendorWarehouseId, List<Integer> itemIds) {
37
        Session session = sessionFactory.getCurrentSession();
38
        final TypedQuery<AgeingModel> typedQuerySimilar = session.createNamedQuery("BrandAgeingLimit.imeisToSecondaryForWarehouseBilling", AgeingModel.class);
39
        typedQuerySimilar.setParameter("itemIds", itemIds);
40
        typedQuerySimilar.setParameter("vendorWarehouseId", vendorWarehouseId);
41
        List<AgeingModel> ageingModels = typedQuerySimilar.getResultList();
42
        return ageingModels.stream().collect(Collectors.toMap(x -> x.getSerialNumber(), x -> x, (u, v) -> u.getInvoiceDate().isBefore(v.getInvoiceDate()) ? u : v));
43
    }
44
 
45
    @Override
46
    public Map<Integer, Map<Integer, List<AgeingModel>>> getAgeingForWarehouseBilling(int vendorWarehouseId, List<ItemIdQuantity> itemIdQuantityList) {
47
        Map<String, AgeingModel> serialNumberAgeingModelMap = this.getAllAgeingForWarehouseBilling(vendorWarehouseId, itemIdQuantityList.stream().map(ItemIdQuantity::getItemId).collect(Collectors.toList()));
48
 
49
        Map<Integer, Map<Integer, List<AgeingModel>>> itemAgeingDaysModelMap = serialNumberAgeingModelMap.values().stream()
50
                .collect(Collectors.groupingBy(AgeingModel::getItemId,
51
                        Collectors.groupingBy(AgeingModel::getExceedDays, () -> new TreeMap<>(Comparator.reverseOrder()), Collectors.toList())));
52
 
53
 
33393 amit.gupta 54
        if (!itemAgeingDaysModelMap.isEmpty()) {
55
            for (ItemIdQuantity itemIdQuantity : itemIdQuantityList) {
33243 ranu 56
                Map<Integer, List<AgeingModel>> daysImeisMap = itemAgeingDaysModelMap.get(itemIdQuantity.getItemId());
57
                int quantity = itemIdQuantity.getQuantity();
33783 ranu 58
                int count = 0;
33243 ranu 59
 
60
                Iterator<Map.Entry<Integer, List<AgeingModel>>> iter = daysImeisMap.entrySet().iterator();
61
                while (iter.hasNext()) {
62
                    Map.Entry<Integer, List<AgeingModel>> entry = iter.next();
33783 ranu 63
                    if (count >= quantity) {
64
                        LOGGER.info("Removing iterator - {}, {}", count, quantity);
33243 ranu 65
                        iter.remove();
66
                    }
67
                    count += entry.getValue().size();
68
                }
69
            }
70
 
71
        }
72
        return itemAgeingDaysModelMap;
73
    }
74
 
75
 
76
    @Override
31906 amit.gupta 77
    public List<PartnerAgeingModel> getAllAgeingForTertiary() {
78
        Session session = sessionFactory.getCurrentSession();
79
        final TypedQuery<PartnerAgeingModel> imeisToTertiaryQuery = session.createNamedQuery("BrandAgeingLimit.imeisToTertiaryAlert", PartnerAgeingModel.class);
80
        return imeisToTertiaryQuery.getResultList();
81
    }
82
 
83
    @Override
84
    public List<PartnerAgeingModel> filterAgedInventory(Set<Integer> inventoryItemIds) {
85
        Session session = sessionFactory.getCurrentSession();
86
        final TypedQuery<PartnerAgeingModel> imeisToTertiaryQuery = session.createNamedQuery("BrandAgeingLimit.getByInventoryItemIds", PartnerAgeingModel.class);
87
        imeisToTertiaryQuery.setParameter("inventoryItemIds", inventoryItemIds);
88
        return imeisToTertiaryQuery.getResultList();
89
 
90
    }
91
}