Subversion Repositories SmartDukaan

Rev

Rev 22014 | Rev 22216 | 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
 
44
	@Override
21926 ashik.ali 45
	public Map<Integer, Float> getPrice(Set<Integer> itemIds, int retailerId) {
22101 ashik.ali 46
		return getMopOrSellingPrice(itemIds, retailerId, false);
47
	}
48
 
49
	private Map<Integer, Float> preparePriceDefaultValues(Set<Integer> itemIds){
50
		Map<Integer, Float> itemIdPrice = new HashMap<>(itemIds.size());
51
		for(int itemId : itemIds){
52
			itemIdPrice.put(itemId, Float.MAX_VALUE);
53
		}
54
		return itemIdPrice;
55
	}
56
 
57
	@SuppressWarnings("unchecked")
58
	public Map<Integer, Float> getMopOrSellingPrice(Set<Integer> itemIds, int retailerId, boolean mop){
21926 ashik.ali 59
		Map<Integer, Float> itemIdPrice = this.preparePriceDefaultValues(itemIds);
21801 ashik.ali 60
		int addressId;
61
		try {
21867 ashik.ali 62
 
21801 ashik.ali 63
			addressId = retailerRegisteredAddressRepository.selectAddressIdByRetailerId(retailerId);
64
			Address retailerAddress = addressRepository.selectById(addressId);
65
			Set<Integer> pinCodeTagIds = tagService.getFofoTagIdsByPinCode(retailerAddress.getPinCode());
22009 ashik.ali 66
			Set<Integer> pinNegativeTagIds = tagService.getPinCodeNegativeTagIds();
67
			Set<Integer> pinCodeIntersection = new HashSet<>(CollectionUtils.intersection(pinCodeTagIds, pinNegativeTagIds));
68
 
69
			Set<Integer> filterPinCodeTagIds = new HashSet<>(CollectionUtils.subtract(pinNegativeTagIds, pinCodeIntersection));
21867 ashik.ali 70
			Set<Integer> pinPositiveTagIds = tagService.getPinCodePositiveTagIds();
22009 ashik.ali 71
			filterPinCodeTagIds.addAll(pinPositiveTagIds);
21867 ashik.ali 72
			if(filterPinCodeTagIds.isEmpty()){
21926 ashik.ali 73
				return itemIdPrice;
21867 ashik.ali 74
			}
22009 ashik.ali 75
			Set<Integer> retailerTagIds = tagService.getUserTagIdsByTagIds(filterPinCodeTagIds);
76
			Set<Integer> userNegativeTagIds = tagService.getUserNegativeTagIds();
77
			Set<Integer> userIntersection = new HashSet<>(CollectionUtils.intersection(retailerTagIds, userNegativeTagIds));
78
			Set<Integer> filterUserTagIds = new HashSet<>(CollectionUtils.subtract(userNegativeTagIds, userIntersection));
21867 ashik.ali 79
			Set<Integer> userPositiveTagIds = tagService.getUserPositiveTagIds();
22009 ashik.ali 80
			filterUserTagIds.addAll(userPositiveTagIds);
21867 ashik.ali 81
			if(filterUserTagIds.isEmpty()){
21926 ashik.ali 82
				return itemIdPrice;
21867 ashik.ali 83
			}
21870 ashik.ali 84
			List<TagListing> tagListings = tagListingRepository.selectByItemIdsAndTagIds(itemIds, filterUserTagIds);
21926 ashik.ali 85
 
21801 ashik.ali 86
			if(tagListings.isEmpty()){
21926 ashik.ali 87
				return itemIdPrice;
21801 ashik.ali 88
			}
89
			for(TagListing tagListing : tagListings){
21926 ashik.ali 90
				if(itemIdPrice.get(tagListing.getItemId()) > tagListing.getSellingPrice()){
22101 ashik.ali 91
					itemIdPrice.put(tagListing.getItemId(), mop ? tagListing.getMop(): tagListing.getSellingPrice());
21801 ashik.ali 92
				}
93
			}
94
		} catch (ProfitMandiBusinessException e) {
95
			e.printStackTrace();
96
		}
21926 ashik.ali 97
		return itemIdPrice;
21801 ashik.ali 98
	}
99
 
22101 ashik.ali 100
	@Override
101
	public Map<Integer, Float> getMopPrice(Set<Integer> itemIds, int retailerId) {
102
		return getMopOrSellingPrice(itemIds, retailerId, true);
21926 ashik.ali 103
	}
104
 
21801 ashik.ali 105
}