Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
27561 amit.gupta 1
package com.smartdukaan.cron.scheduled;
2
 
3
import java.time.LocalDate;
4
import java.time.LocalDateTime;
5
import java.util.List;
6
import java.util.Map;
7
import java.util.Set;
8
import java.util.stream.Collectors;
9
 
10
import org.springframework.beans.factory.annotation.Autowired;
11
import org.springframework.stereotype.Component;
12
import org.springframework.transaction.annotation.Transactional;
13
 
14
import com.jcraft.jsch.Logger;
15
import com.spice.profitmandi.common.model.CustomRetailer;
16
import com.spice.profitmandi.dao.entity.fofo.InventoryItem;
17
import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;
18
import com.spice.profitmandi.dao.entity.fofo.SchemeInOut;
19
import com.spice.profitmandi.dao.enumuration.catalog.SchemeType;
20
import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;
21
import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;
22
import com.spice.profitmandi.dao.repository.fofo.SchemeInOutRepository;
23
import com.spice.profitmandi.service.user.RetailerService;;
24
 
25
@Component
26
@Transactional(rollbackFor = Throwable.class)
27
public class InvestmentRelatedTasks {
28
	@Autowired
29
	RetailerService retailerService;
30
	@Autowired
31
	SchemeInOutRepository schemeInOutRepository;
32
 
33
	@Autowired
34
	InventoryItemRepository inventoryItemRepository;
35
 
36
	@Autowired
37
	PartnerDailyInvestmentRepository partnerDailyInvestmentRepository;
38
 
39
	void payMonthlyInvestment() {
40
		LocalDate firstDateOfCurrentMonth = LocalDateTime.now().withDayOfMonth(1).toLocalDate();
41
		LocalDate startOfPreviousMonth = firstDateOfCurrentMonth.minusMonths(1);
42
		LocalDate lastOfPreviousMonth = firstDateOfCurrentMonth.minusDays(1);
43
		List<PartnerDailyInvestment> partnerDailyInvestments = partnerDailyInvestmentRepository.selectAll(startOfPreviousMonth, lastOfPreviousMonth);
44
		Map<Integer, Long> investmentShortDaysMap = partnerDailyInvestments.stream().filter(x->x.getShortPercentage() > 10).collect(Collectors.groupingBy(x->x.getFofoId(), Collectors.counting()));
45
		List<SchemeInOut> schemeInOuts = schemeInOutRepository.selectAllPending(SchemeType.INVESTMENT, startOfPreviousMonth.atStartOfDay(), firstDateOfCurrentMonth.atStartOfDay());
46
		Map<Integer, List<SchemeInOut>> inventoryItemIdSchemeMap = schemeInOuts.stream().collect(Collectors.groupingBy(x->x.getInventoryItemId()));
47
		List<InventoryItem> inventoryItems = inventoryItemRepository.selectByIds(inventoryItemIdSchemeMap.keySet());
48
		Map<Integer, List<Integer>> retailerInventoryItemIdMap = inventoryItems.stream()
49
				.collect(Collectors.groupingBy(x->x.getFofoId(), Collectors.mapping(x->x.getId(), Collectors.toList())));
50
		for(Map.Entry<Integer, List<Integer>> retailerEntry : retailerInventoryItemIdMap.entrySet()) {
51
			int fofoId = retailerEntry.getKey();
52
			System.out.print("fofoId\tInvestment Short Days\tEligible payout");
53
			List<SchemeInOut> schemeInouts = retailerEntry.getValue().stream().map(x->inventoryItemIdSchemeMap.get(x)).flatMap(List::stream).collect(Collectors.toList());
54
			double totalAmount = schemeInouts.stream().filter(x->x.getRolledBackTimestamp()!=null).collect(Collectors.summingDouble(x->x.getAmount()));
55
			long daysShort = investmentShortDaysMap.get(fofoId);
56
			if(daysShort >= 12) {
57
				//do nothing
58
			} else if(daysShort >= 8) {
59
				totalAmount = totalAmount/2;
60
			} else {
61
				totalAmount = 0;
62
			}
63
			System.out.printf("%d\t%d\t%f%n", fofoId, daysShort, totalAmount);
64
		}
65
	}
66
}