Rev 27568 | Rev 27570 | Go to most recent revision | View as "text/plain" | Blame | Compare with Previous | Last modification | View Log | RSS feed
package com.smartdukaan.cron.scheduled;import java.time.LocalDate;import java.time.LocalDateTime;import java.util.List;import java.util.Map;import java.util.stream.Collectors;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import org.springframework.transaction.annotation.Transactional;import com.spice.profitmandi.dao.entity.fofo.InventoryItem;import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;import com.spice.profitmandi.dao.entity.fofo.SchemeInOut;import com.spice.profitmandi.dao.enumuration.catalog.SchemeType;import com.spice.profitmandi.dao.repository.fofo.InventoryItemRepository;import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;import com.spice.profitmandi.dao.repository.fofo.SchemeInOutRepository;import com.spice.profitmandi.service.user.RetailerService;;@Component@Transactional(rollbackFor = Throwable.class)public class InvestmentRelatedTasks {@AutowiredRetailerService retailerService;@AutowiredSchemeInOutRepository schemeInOutRepository;@AutowiredInventoryItemRepository inventoryItemRepository;@AutowiredPartnerDailyInvestmentRepository partnerDailyInvestmentRepository;public void payMonthlyInvestment() {LocalDate firstDateOfCurrentMonth = LocalDateTime.now().withDayOfMonth(1).toLocalDate();LocalDate startOfPreviousMonth = firstDateOfCurrentMonth.minusMonths(1);LocalDate lastOfPreviousMonth = firstDateOfCurrentMonth.minusDays(1);List<PartnerDailyInvestment> partnerDailyInvestments = partnerDailyInvestmentRepository.selectAll(startOfPreviousMonth, lastOfPreviousMonth);Map<Integer, Long> investmentMaintainedDaysMap = partnerDailyInvestments.stream().filter(x->x.getShortPercentage() <= 10).collect(Collectors.groupingBy(x->x.getFofoId(), Collectors.counting()));List<SchemeInOut> schemeInOuts = schemeInOutRepository.selectAllPending(SchemeType.INVESTMENT, startOfPreviousMonth.atStartOfDay(), firstDateOfCurrentMonth.atStartOfDay());Map<Integer, List<SchemeInOut>> inventoryItemIdSchemeMap = schemeInOuts.stream().collect(Collectors.groupingBy(x->x.getInventoryItemId()));List<InventoryItem> inventoryItems = inventoryItemRepository.selectByIds(inventoryItemIdSchemeMap.keySet());Map<Integer, List<Integer>> retailerInventoryItemIdMap = inventoryItems.stream().collect(Collectors.groupingBy(x->x.getFofoId(), Collectors.mapping(x->x.getId(), Collectors.toList())));System.out.println("fofoId\tInvestment Short Days\tEligible payout");for(Map.Entry<Integer, List<Integer>> retailerEntry : retailerInventoryItemIdMap.entrySet()) {int fofoId = retailerEntry.getKey();List<SchemeInOut> schemeInouts = retailerEntry.getValue().stream().map(x->inventoryItemIdSchemeMap.get(x)).flatMap(List::stream).collect(Collectors.toList());double totalAmount = schemeInouts.stream().filter(x->x.getRolledBackTimestamp()==null).collect(Collectors.summingDouble(x->x.getAmount()));long investmentMaintainedDays = investmentMaintainedDaysMap.get(fofoId);if(investmentMaintainedDays < 12) {totalAmount = totalAmount/2;} else if(investmentMaintainedDays < 8) {totalAmount = 0;}System.out.printf("%d\t%d\t%f%n", fofoId, investmentMaintainedDays, totalAmount);}}}