Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
21801 ashik.ali 1
package com.spice.profitmandi.service.pricing;
2
 
21926 ashik.ali 3
import java.util.HashMap;
21801 ashik.ali 4
import java.util.HashSet;
5
import java.util.List;
21926 ashik.ali 6
import java.util.Map;
21801 ashik.ali 7
import java.util.Set;
8
 
21867 ashik.ali 9
import org.apache.commons.collections.CollectionUtils;
21801 ashik.ali 10
import org.springframework.beans.factory.annotation.Autowired;
21895 ashik.ali 11
import org.springframework.stereotype.Component;
21801 ashik.ali 12
 
13
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
22216 ashik.ali 14
import com.spice.profitmandi.common.model.ProfitMandiConstants;
22014 ashik.ali 15
import com.spice.profitmandi.dao.entity.catalog.TagListing;
22216 ashik.ali 16
import com.spice.profitmandi.dao.entity.dtr.GadgetCopsInsuranceCalc;
21801 ashik.ali 17
import com.spice.profitmandi.dao.entity.user.Address;
22014 ashik.ali 18
import com.spice.profitmandi.dao.repository.catalog.PinCodeTagRepository;
19
import com.spice.profitmandi.dao.repository.catalog.RetailerTagRepository;
20
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
22216 ashik.ali 21
import com.spice.profitmandi.dao.repository.dtr.GadgetCopsInsuranceCalcRepository;
22
import com.spice.profitmandi.dao.repository.dtr.InsuranceProviderRepository;
21801 ashik.ali 23
import com.spice.profitmandi.dao.repository.dtr.RetailerRegisteredAddressRepository;
24
import com.spice.profitmandi.dao.repository.user.AddressRepository;
25
import com.spice.profitmandi.service.tag.TagService;
26
 
21895 ashik.ali 27
@Component
21801 ashik.ali 28
public class PricingServiceImpl implements PricingService{
29
 
30
	@Autowired
31
	RetailerRegisteredAddressRepository retailerRegisteredAddressRepository;
32
 
33
	@Autowired
34
	AddressRepository addressRepository;
35
 
36
	@Autowired
37
	PinCodeTagRepository pinCodeTagRepository;
38
 
39
	@Autowired
40
	TagService tagService;
41
 
42
	@Autowired
43
	RetailerTagRepository retailerTagRepository;
44
 
45
	@Autowired
46
	TagListingRepository tagListingRepository;
47
 
22216 ashik.ali 48
	@Autowired
49
	InsuranceProviderRepository insuranceProviderRepository;
50
 
51
	@Autowired
52
	GadgetCopsInsuranceCalcRepository gadgetCopsInsuranceCalcRepository;
53
 
21801 ashik.ali 54
	@Override
22216 ashik.ali 55
	public Map<Integer, Float> getPrices(Set<Integer> itemIds, int retailerId) {
22101 ashik.ali 56
		return getMopOrSellingPrice(itemIds, retailerId, false);
57
	}
58
 
59
	private Map<Integer, Float> preparePriceDefaultValues(Set<Integer> itemIds){
60
		Map<Integer, Float> itemIdPrice = new HashMap<>(itemIds.size());
61
		for(int itemId : itemIds){
62
			itemIdPrice.put(itemId, Float.MAX_VALUE);
63
		}
64
		return itemIdPrice;
65
	}
66
 
67
	@SuppressWarnings("unchecked")
68
	public Map<Integer, Float> getMopOrSellingPrice(Set<Integer> itemIds, int retailerId, boolean mop){
21926 ashik.ali 69
		Map<Integer, Float> itemIdPrice = this.preparePriceDefaultValues(itemIds);
21801 ashik.ali 70
		int addressId;
71
		try {
21867 ashik.ali 72
 
21801 ashik.ali 73
			addressId = retailerRegisteredAddressRepository.selectAddressIdByRetailerId(retailerId);
74
			Address retailerAddress = addressRepository.selectById(addressId);
75
			Set<Integer> pinCodeTagIds = tagService.getFofoTagIdsByPinCode(retailerAddress.getPinCode());
22009 ashik.ali 76
			Set<Integer> pinNegativeTagIds = tagService.getPinCodeNegativeTagIds();
77
			Set<Integer> pinCodeIntersection = new HashSet<>(CollectionUtils.intersection(pinCodeTagIds, pinNegativeTagIds));
78
 
79
			Set<Integer> filterPinCodeTagIds = new HashSet<>(CollectionUtils.subtract(pinNegativeTagIds, pinCodeIntersection));
21867 ashik.ali 80
			Set<Integer> pinPositiveTagIds = tagService.getPinCodePositiveTagIds();
22009 ashik.ali 81
			filterPinCodeTagIds.addAll(pinPositiveTagIds);
21867 ashik.ali 82
			if(filterPinCodeTagIds.isEmpty()){
21926 ashik.ali 83
				return itemIdPrice;
21867 ashik.ali 84
			}
22009 ashik.ali 85
			Set<Integer> retailerTagIds = tagService.getUserTagIdsByTagIds(filterPinCodeTagIds);
86
			Set<Integer> userNegativeTagIds = tagService.getUserNegativeTagIds();
87
			Set<Integer> userIntersection = new HashSet<>(CollectionUtils.intersection(retailerTagIds, userNegativeTagIds));
88
			Set<Integer> filterUserTagIds = new HashSet<>(CollectionUtils.subtract(userNegativeTagIds, userIntersection));
21867 ashik.ali 89
			Set<Integer> userPositiveTagIds = tagService.getUserPositiveTagIds();
22009 ashik.ali 90
			filterUserTagIds.addAll(userPositiveTagIds);
21867 ashik.ali 91
			if(filterUserTagIds.isEmpty()){
21926 ashik.ali 92
				return itemIdPrice;
21867 ashik.ali 93
			}
21870 ashik.ali 94
			List<TagListing> tagListings = tagListingRepository.selectByItemIdsAndTagIds(itemIds, filterUserTagIds);
21926 ashik.ali 95
 
21801 ashik.ali 96
			if(tagListings.isEmpty()){
21926 ashik.ali 97
				return itemIdPrice;
21801 ashik.ali 98
			}
99
			for(TagListing tagListing : tagListings){
21926 ashik.ali 100
				if(itemIdPrice.get(tagListing.getItemId()) > tagListing.getSellingPrice()){
22101 ashik.ali 101
					itemIdPrice.put(tagListing.getItemId(), mop ? tagListing.getMop(): tagListing.getSellingPrice());
21801 ashik.ali 102
				}
103
			}
104
		} catch (ProfitMandiBusinessException e) {
105
			e.printStackTrace();
106
		}
21926 ashik.ali 107
		return itemIdPrice;
21801 ashik.ali 108
	}
109
 
22101 ashik.ali 110
	@Override
22216 ashik.ali 111
	public Map<Integer, Float> getMopPrices(Set<Integer> itemIds, int retailerId) {
22101 ashik.ali 112
		return getMopOrSellingPrice(itemIds, retailerId, true);
21926 ashik.ali 113
	}
22216 ashik.ali 114
 
115
	@Override
116
	public Map<Float, GadgetCopsInsuranceCalc> getInsurancePrices(Set<Float> prices, String providerName) throws ProfitMandiBusinessException{
117
		insuranceProviderRepository.selectByName(providerName);
118
		Map<Float, GadgetCopsInsuranceCalc> pricesMap = new HashMap<>();
119
		if(ProfitMandiConstants.GADGET_COPS.equals(providerName)){
120
			List<GadgetCopsInsuranceCalc> gadgetCopsInsuranceCalcs = gadgetCopsInsuranceCalcRepository.selectAll();
121
			for(GadgetCopsInsuranceCalc gadgetCopsInsuranceCalc : gadgetCopsInsuranceCalcs){
122
				for(float price : prices){
123
					if(gadgetCopsInsuranceCalc.getPriceRangeMin()<= price && gadgetCopsInsuranceCalc.getPriceRangeMax() >= price){
124
						pricesMap.put(price, gadgetCopsInsuranceCalc);
125
					}
126
				}
127
			}
128
		}else{
129
			throw new ProfitMandiBusinessException(ProfitMandiConstants.PROVIDER_NAME, providerName, "");
130
		}
131
		return pricesMap;
132
	}
21926 ashik.ali 133
 
21801 ashik.ali 134
}