Subversion Repositories SmartDukaan

Rev

Rev 34384 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
33873 ranu 1
package com.spice.profitmandi.dao.cart;
2
 
3
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
4
import com.spice.profitmandi.dao.entity.catalog.Item;
5
import com.spice.profitmandi.dao.entity.fofo.FofoOpeningStock;
6
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
7
import com.spice.profitmandi.dao.model.PoAndGrnPendingPartnerStockModel;
8
import com.spice.profitmandi.dao.model.SoldAllCatalogitemQtyByPartnerModel;
9
import com.spice.profitmandi.dao.model.SoldFocusedItemPartnerWiseModel;
10
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
11
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
12
import com.spice.profitmandi.dao.repository.fofo.CurrentInventorySnapshotRepository;
13
import com.spice.profitmandi.dao.repository.fofo.FofoOpeningStockRepository;
14
import com.spice.profitmandi.model.WarehouseItemQtyModel;
15
import com.spice.profitmandi.service.inventory.SaholicInventoryService;
16
import org.apache.logging.log4j.LogManager;
17
import org.apache.logging.log4j.Logger;
18
import org.hibernate.Session;
19
import org.hibernate.SessionFactory;
20
import org.springframework.beans.factory.annotation.Autowired;
21
import org.springframework.stereotype.Component;
22
 
23
import javax.persistence.TypedQuery;
24
import java.time.LocalDateTime;
25
import java.util.*;
26
import java.util.stream.Collectors;
27
 
28
@Component
29
public class SmartCartServiceImpl implements SmartCartService {
30
 
31
    private static final Set<Integer> tagIds = new HashSet<>(Arrays.asList(4));
32
 
33
    private static final Logger logger = LogManager.getLogger(SmartCartServiceImpl.class);
34
 
35
    @Autowired
36
    SessionFactory sessionFactory;
37
 
38
    @Autowired
39
    ItemRepository itemRepository;
40
 
41
 
42
    @Autowired
43
    CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
44
 
45
    @Autowired
46
    FofoOpeningStockRepository fofoOpeningStockRepository;
47
 
48
 
49
    @Autowired
50
    private FofoStoreRepository fofoStoreRepository;
51
 
52
    @Autowired
53
    private SaholicInventoryService saholicInventoryService;
54
 
55
    @Override
56
    public List<SoldFocusedItemPartnerWiseModel> getAllSoldFocusModelByPartner(int fofoId, LocalDateTime orderDate){
57
        Session session = sessionFactory.getCurrentSession();
58
        final TypedQuery<SoldFocusedItemPartnerWiseModel> typedQuerySimilar = session.createNamedQuery("Focused.soldFocusItemByPartner", SoldFocusedItemPartnerWiseModel.class);
59
 
60
        typedQuerySimilar.setParameter("fofoId", fofoId);
61
        typedQuerySimilar.setParameter("orderDate", orderDate);
62
 
63
        return typedQuerySimilar.getResultList();
64
    }
65
 
66
    @Override
67
    public List<SoldAllCatalogitemQtyByPartnerModel> getAllSoldCatalogItemByPartner(int fofoId, LocalDateTime startOfday, LocalDateTime endOfDay){
68
        Session session = sessionFactory.getCurrentSession();
69
        final TypedQuery<SoldAllCatalogitemQtyByPartnerModel> typedQuerySimilar = session.createNamedQuery("FofoOrder.soldAllItemByToday", SoldAllCatalogitemQtyByPartnerModel.class);
70
 
71
        typedQuerySimilar.setParameter("fofoId", fofoId);
72
        typedQuerySimilar.setParameter("startOfDay", startOfday);
73
        typedQuerySimilar.setParameter("endOfDay", endOfDay);
74
 
75
        return typedQuerySimilar.getResultList();
76
    }
77
 
78
    @Override
79
    public List<PoAndGrnPendingPartnerStockModel> getAllGrnPendingAndPoPartnerStock(int fofoId){
80
        Session session = sessionFactory.getCurrentSession();
81
        final TypedQuery<PoAndGrnPendingPartnerStockModel> typedQuerySimilar = session.createNamedQuery("Order.partnerStockPoAndGrnPending", PoAndGrnPendingPartnerStockModel.class);
82
 
83
        typedQuerySimilar.setParameter("fofoId", fofoId);
84
 
85
        return typedQuerySimilar.getResultList();
86
    }
87
 
88
    @Override
89
    public void addOpeningStock(int itemId, int fofoId, int quantity) throws ProfitMandiBusinessException{
90
        int catalogId = itemRepository.selectById(itemId).getCatalogItemId();
91
        FofoOpeningStock fofoOpeningStock = fofoOpeningStockRepository.findByFofoIdAndCatalogId(fofoId,catalogId);
92
        if(fofoOpeningStock !=null){
93
            int updatedQty = fofoOpeningStock.getCurrentQty() + quantity;
94
            fofoOpeningStock.setCurrentQty(updatedQty);
95
        }
96
 
97
    }
98
 
99
    @Override
100
    public void minusOpeningStock(int itemId, int fofoId, int quantity) throws ProfitMandiBusinessException{
101
        int catalogId = itemRepository.selectById(itemId).getCatalogItemId();
102
        FofoOpeningStock fofoOpeningStock = fofoOpeningStockRepository.findByFofoIdAndCatalogId(fofoId,catalogId);
103
        if(fofoOpeningStock !=null){
104
            int updatedQty = fofoOpeningStock.getCurrentQty() - quantity;
105
            fofoOpeningStock.setCurrentQty(updatedQty);
106
        }
107
 
108
 
109
    }
110
 
111
    @Override
112
    public Set<Integer> getAllItemIdsForSmartCartOfPartner(int fofoId) throws ProfitMandiBusinessException {
113
        List<FofoOpeningStock> fofoOpeningStocks = fofoOpeningStockRepository.selectAllByFofoId(fofoId);
114
 
115
        List<FofoOpeningStock> filteredFofoOpeningStocks = fofoOpeningStocks.stream()
116
                .filter(stock -> stock.getCurrentQty() < stock.getOpeningQty())
117
                .collect(Collectors.toList());
118
 
119
        logger.info("filteredFofoOpeningStocks {}",filteredFofoOpeningStocks);
120
 
121
        if(filteredFofoOpeningStocks.size() > 0) {
122
            Set<Integer> filteredCatalogIds = filteredFofoOpeningStocks.stream().map(x -> x.getCatalogId()).collect(Collectors.toSet());
123
 
124
 
125
            List<Item> soldItems = itemRepository.selectAllByCatalogIds(filteredCatalogIds);
126
 
127
            List<Integer> soldItemIds = soldItems.stream().map(x -> x.getId()).collect(Collectors.toList());
128
 
129
//        now logic start for check our (smart dukaan) stock item
130
 
131
            FofoStore fofoStore = fofoStoreRepository.selectByRetailerId(fofoId);
132
 
133
            Map<Integer, List<WarehouseItemQtyModel>> itemQtyMap = saholicInventoryService.getSaholicStock(fofoStore.getWarehouseId(), soldItemIds);
134
 
135
 
136
            // Collect items where availability is greater than 0
137
            Set<Integer> saholicStockItemIds = itemQtyMap.entrySet().stream()
138
                    .filter(entry -> entry.getValue().stream().anyMatch(x -> x.getNetAvailability() > 0))
139
                    .map(Map.Entry::getKey)
140
                    .collect(Collectors.toSet());
141
 
142
            if (saholicStockItemIds.size() > 0) {
143
                List<Item> items = itemRepository.selectByIds(saholicStockItemIds);
144
 
145
                Set<Integer> saholictStockCatalogIds = items.stream().map(x -> x.getCatalogItemId()).collect(Collectors.toSet());
146
 
147
 
148
                return saholictStockCatalogIds;
149
            } else {
150
 
151
                return new HashSet<>();
152
            }
153
          } else {
154
            return new HashSet<>();
155
         }
156
        }
157
 
158
 
159
 
160
 
161
}
162
 
163
 
164