Subversion Repositories SmartDukaan

Rev

Rev 22009 | Rev 22101 | 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;
22014 ashik.ali 14
import com.spice.profitmandi.dao.entity.catalog.TagListing;
21801 ashik.ali 15
import com.spice.profitmandi.dao.entity.user.Address;
22014 ashik.ali 16
import com.spice.profitmandi.dao.repository.catalog.PinCodeTagRepository;
17
import com.spice.profitmandi.dao.repository.catalog.RetailerTagRepository;
18
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
21801 ashik.ali 19
import com.spice.profitmandi.dao.repository.dtr.RetailerRegisteredAddressRepository;
20
import com.spice.profitmandi.dao.repository.user.AddressRepository;
21
import com.spice.profitmandi.service.tag.TagService;
22
 
21895 ashik.ali 23
@Component
21801 ashik.ali 24
public class PricingServiceImpl implements PricingService{
25
 
26
	@Autowired
27
	RetailerRegisteredAddressRepository retailerRegisteredAddressRepository;
28
 
29
	@Autowired
30
	AddressRepository addressRepository;
31
 
32
	@Autowired
33
	PinCodeTagRepository pinCodeTagRepository;
34
 
35
	@Autowired
36
	TagService tagService;
37
 
38
	@Autowired
39
	RetailerTagRepository retailerTagRepository;
40
 
41
	@Autowired
42
	TagListingRepository tagListingRepository;
43
 
21867 ashik.ali 44
	@SuppressWarnings("unchecked")
21801 ashik.ali 45
	@Override
21926 ashik.ali 46
	public Map<Integer, Float> getPrice(Set<Integer> itemIds, int retailerId) {
47
		Map<Integer, Float> itemIdPrice = this.preparePriceDefaultValues(itemIds);
21801 ashik.ali 48
		int addressId;
49
		try {
21867 ashik.ali 50
 
21801 ashik.ali 51
			addressId = retailerRegisteredAddressRepository.selectAddressIdByRetailerId(retailerId);
52
			Address retailerAddress = addressRepository.selectById(addressId);
53
			Set<Integer> pinCodeTagIds = tagService.getFofoTagIdsByPinCode(retailerAddress.getPinCode());
22009 ashik.ali 54
			Set<Integer> pinNegativeTagIds = tagService.getPinCodeNegativeTagIds();
55
			Set<Integer> pinCodeIntersection = new HashSet<>(CollectionUtils.intersection(pinCodeTagIds, pinNegativeTagIds));
56
 
57
			Set<Integer> filterPinCodeTagIds = new HashSet<>(CollectionUtils.subtract(pinNegativeTagIds, pinCodeIntersection));
21867 ashik.ali 58
			Set<Integer> pinPositiveTagIds = tagService.getPinCodePositiveTagIds();
22009 ashik.ali 59
			filterPinCodeTagIds.addAll(pinPositiveTagIds);
21867 ashik.ali 60
			if(filterPinCodeTagIds.isEmpty()){
21926 ashik.ali 61
				return itemIdPrice;
21867 ashik.ali 62
			}
22009 ashik.ali 63
			Set<Integer> retailerTagIds = tagService.getUserTagIdsByTagIds(filterPinCodeTagIds);
64
			Set<Integer> userNegativeTagIds = tagService.getUserNegativeTagIds();
65
			Set<Integer> userIntersection = new HashSet<>(CollectionUtils.intersection(retailerTagIds, userNegativeTagIds));
66
			Set<Integer> filterUserTagIds = new HashSet<>(CollectionUtils.subtract(userNegativeTagIds, userIntersection));
21867 ashik.ali 67
			Set<Integer> userPositiveTagIds = tagService.getUserPositiveTagIds();
22009 ashik.ali 68
			filterUserTagIds.addAll(userPositiveTagIds);
21867 ashik.ali 69
			if(filterUserTagIds.isEmpty()){
21926 ashik.ali 70
				return itemIdPrice;
21867 ashik.ali 71
			}
21870 ashik.ali 72
			List<TagListing> tagListings = tagListingRepository.selectByItemIdsAndTagIds(itemIds, filterUserTagIds);
21926 ashik.ali 73
 
21801 ashik.ali 74
			if(tagListings.isEmpty()){
21926 ashik.ali 75
				return itemIdPrice;
21801 ashik.ali 76
			}
77
			for(TagListing tagListing : tagListings){
21926 ashik.ali 78
				if(itemIdPrice.get(tagListing.getItemId()) > tagListing.getSellingPrice()){
79
					itemIdPrice.put(tagListing.getItemId(), tagListing.getSellingPrice());
21801 ashik.ali 80
				}
81
			}
82
		} catch (ProfitMandiBusinessException e) {
83
			e.printStackTrace();
84
		}
21926 ashik.ali 85
		return itemIdPrice;
21801 ashik.ali 86
	}
87
 
21926 ashik.ali 88
	private Map<Integer, Float> preparePriceDefaultValues(Set<Integer> itemIds){
89
		Map<Integer, Float> itemIdPrice = new HashMap<>(itemIds.size());
90
		for(int itemId : itemIds){
91
			itemIdPrice.put(itemId, Float.MAX_VALUE);
92
		}
93
		return itemIdPrice;
94
	}
95
 
21801 ashik.ali 96
}