Subversion Repositories SmartDukaan

Rev

Rev 31906 | Rev 33393 | 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);
31906 amit.gupta 26
    @Override
27
    public Map<String, AgeingModel> getAllAgeingForSecondary() {
28
        Session session = sessionFactory.getCurrentSession();
29
        final TypedQuery<AgeingModel> typedQuerySimilar = session.createNamedQuery("BrandAgeingLimit.imeisToSecondaryAlert", AgeingModel.class);
30
        List<AgeingModel> ageingModels = typedQuerySimilar.getResultList();
31
        return ageingModels.stream().collect(Collectors.toMap(x -> x.getSerialNumber(), x -> x, (u, v) -> u.getInvoiceDate().isBefore(v.getInvoiceDate()) ? u : v));
32
    }
33
 
34
    @Override
33243 ranu 35
    public Map<String, AgeingModel> getAllAgeingForWarehouseBilling(int vendorWarehouseId, List<Integer> itemIds) {
36
        Session session = sessionFactory.getCurrentSession();
37
        final TypedQuery<AgeingModel> typedQuerySimilar = session.createNamedQuery("BrandAgeingLimit.imeisToSecondaryForWarehouseBilling", AgeingModel.class);
38
        typedQuerySimilar.setParameter("itemIds", itemIds);
39
        typedQuerySimilar.setParameter("vendorWarehouseId", vendorWarehouseId);
40
        List<AgeingModel> ageingModels = typedQuerySimilar.getResultList();
41
        return ageingModels.stream().collect(Collectors.toMap(x -> x.getSerialNumber(), x -> x, (u, v) -> u.getInvoiceDate().isBefore(v.getInvoiceDate()) ? u : v));
42
    }
43
 
44
    @Override
45
    public Map<Integer, Map<Integer, List<AgeingModel>>> getAgeingForWarehouseBilling(int vendorWarehouseId, List<ItemIdQuantity> itemIdQuantityList) {
46
        Map<String, AgeingModel> serialNumberAgeingModelMap = this.getAllAgeingForWarehouseBilling(vendorWarehouseId, itemIdQuantityList.stream().map(ItemIdQuantity::getItemId).collect(Collectors.toList()));
47
 
48
        Map<Integer, Map<Integer, List<AgeingModel>>> itemAgeingDaysModelMap = serialNumberAgeingModelMap.values().stream()
49
                .collect(Collectors.groupingBy(AgeingModel::getItemId,
50
                        Collectors.groupingBy(AgeingModel::getExceedDays, () -> new TreeMap<>(Comparator.reverseOrder()), Collectors.toList())));
51
 
52
 
53
        for (ItemIdQuantity itemIdQuantity : itemIdQuantityList) {
54
            int count;
55
            if (!itemAgeingDaysModelMap.isEmpty()) {
56
                Map<Integer, List<AgeingModel>> daysImeisMap = itemAgeingDaysModelMap.get(itemIdQuantity.getItemId());
57
                int quantity = itemIdQuantity.getQuantity();
58
                count = 0;
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();
63
                    if (count > quantity) {
64
                        iter.remove();
65
                    }
66
                    count += entry.getValue().size();
67
                }
68
            }
69
 
70
        }
71
        return itemAgeingDaysModelMap;
72
    }
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
}