Rev 26228 | View as "text/plain" | Blame | Compare with Previous | Last modification | View Log | RSS feed
package com.spice.profitmandi.web.controller;import com.spice.profitmandi.common.enumuration.RechargeStatus;import com.spice.profitmandi.common.enumuration.SchemeType;import com.spice.profitmandi.common.model.RechargeCredential;import com.spice.profitmandi.common.web.client.RestClient;import com.spice.profitmandi.dao.entity.dtr.DailyRecharge;import com.spice.profitmandi.dao.entity.dtr.RechargeProvider;import com.spice.profitmandi.dao.entity.dtr.RechargeProviderCreditWalletHistory;import com.spice.profitmandi.dao.entity.dtr.RechargeTransaction;import com.spice.profitmandi.dao.entity.fofo.FofoOrder;import com.spice.profitmandi.dao.entity.fofo.Purchase;import com.spice.profitmandi.dao.repository.dtr.DailyRechargeRepository;import com.spice.profitmandi.dao.repository.dtr.RechargeProviderCreditWalletHistoryRepository;import com.spice.profitmandi.dao.repository.dtr.RechargeProviderRepository;import com.spice.profitmandi.dao.repository.dtr.RechargeTransactionRepository;import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;import com.spice.profitmandi.dao.repository.fofo.PurchaseRepository;import com.spice.profitmandi.service.recharge.provider.OxigenRechargeProviderService;import com.spice.profitmandi.service.recharge.provider.ThinkWalnutDigitalRechargeProviderService;import com.spice.profitmandi.service.scheme.SchemeService;import com.spice.profitmandi.web.util.MVCResponseSender;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Controller;import org.springframework.transaction.annotation.Transactional;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import javax.servlet.http.HttpServletRequest;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.temporal.ChronoUnit;import java.util.*;import java.util.stream.Collectors;@Controller@Transactional(rollbackFor = Throwable.class)public class CronController {@Value("${oxigen.recharge.transaction.url}")private String oxigenRechargeTransactionUrl;@Value("${oxigen.recharge.enquiry.url}")private String oxigenRechargeEnquiryUrl;@Value("${oxigen.recharge.auth.key}")private String oxigenRechargeAuthKey;@Value("${oxigen.recharge.validation.url}")private String oxigenRechargeValidationUrl;@Value("${oxigen.recharge.validation.auth.key}")private String oxigenRechargeValidationAuthKey;@Value("${think.walnut.digital.recharge.transaction.mobile.url}")private String thinkWalnutDigitalRechargeTransactionMobileUrl;@Value("${think.walnut.digital.recharge.transaction.dth.url}")private String thinkWalnutDigitalRechargeTransactionDthUrl;@Value("${think.walnut.digital.recharge.enquiry.url}")private String thinkWalnutDigitalRechargeEnquiryUrl;@Value("${think.walnut.digital.recharge.balance.url}")private String thinkWalnutDigitalRechargeBalanceUrl;@Value("${think.walnut.digital.recharge.username}")private String thinkWalnutDigitalRechargeUserName;@Value("${think.walnut.digital.recharge.password}")private String thinkWalnutDigitalRechargePassword;@Value("${think.walnut.digital.recharge.auth.key}")private String thinkWalnutDigitalRechargeAuthKey;@Autowiredprivate PurchaseRepository purchaseRepository;@Autowiredprivate SchemeService schemeService;@Autowiredprivate RechargeTransactionRepository rechargeTransactionRepository;@Autowiredprivate RechargeProviderCreditWalletHistoryRepository rechargeProviderCreditWalletHistoryRepository;@Autowiredprivate FofoOrderRepository fofoOrderRepository;@Autowiredprivate ThinkWalnutDigitalRechargeProviderService thinkWalnutDigitalRechargeProviderService;@Autowiredprivate OxigenRechargeProviderService oxigenRechargeProviderService;@Autowiredprivate RechargeProviderRepository rechargeProviderRepository;@Autowiredprivate DailyRechargeRepository dailyRechargeRepository;@Autowiredprivate RestClient restClient;@Autowiredprivate MVCResponseSender mvcResponseSender;@Value("${prod}")private boolean prod;private static final Logger LOGGER = LogManager.getLogger(CronController.class);public void executeJob() throws Exception {if (prod) {String uri = "/cron/process-schemes";restClient.get(SchemeType.HTTP, "localhost", 8080, uri, null);}}@RequestMapping(value = "/cron/daily-generation", method = RequestMethod.GET)public void executeDailRechargeGeneration() {List<RechargeProviderCreditWalletHistory> allCreditHistory = rechargeProviderCreditWalletHistoryRepository.selectAll(0, 2000);List<RechargeProvider> rechargeProviders = rechargeProviderRepository.selectAll();rechargeProviders.stream().forEach(x -> x.setAmount(0));rechargeProviders.stream().forEach(x -> {Map<LocalDate, List<RechargeProviderCreditWalletHistory>> dateWiseProviderCreditsMap = allCreditHistory.stream().filter(z->z.getProviderId()==x.getId()).collect(Collectors.groupingBy(x1 -> x1.getReceiveTimestamp().toLocalDate()));LOGGER.info("dateWiseProviderCreditsMap -- {}",dateWiseProviderCreditsMap);LocalDate endDate = LocalDate.now().plusDays(1);float previousDayClosing = 0;LocalDate date = LocalDate.of(2018, 4, 6);while (date.isBefore(endDate)) {List<RechargeTransaction> dateWiseRechargeTransactions = rechargeTransactionRepository.selectAllBetweenTimestamp(Arrays.asList(RechargeStatus.values()), date.atStartOfDay(),date.plusDays(1).atStartOfDay());List<RechargeTransaction> successfulTransactions = dateWiseRechargeTransactions.stream().filter(y -> y.getStatus().equals(RechargeStatus.SUCCESS)).collect(Collectors.toList());float dailyAmount = 0;float totalCommission = 0;for (RechargeTransaction rechargeTransaction : successfulTransactions) {if (rechargeTransaction.getProviderId() == x.getId()) {dailyAmount += rechargeTransaction.getAmount();totalCommission += rechargeTransaction.getCommission();}}List<RechargeProviderCreditWalletHistory> rechargeHistoryList = dateWiseProviderCreditsMap.get(date);float dailyWalletRecharge = 0;if(rechargeHistoryList!=null) {for (RechargeProviderCreditWalletHistory rechargeProviderCreditWalletHistory : rechargeHistoryList) {if (rechargeProviderCreditWalletHistory.getProviderId() == x.getId()) {dailyWalletRecharge += rechargeProviderCreditWalletHistory.getAmount();}}}if (dailyAmount > 0 || dailyWalletRecharge > 0) {DailyRecharge dailyRecharge = null;try {dailyRecharge = dailyRechargeRepository.selectByProviderIdAndCreateDate(x.getId(), date);} catch(Exception e) {LOGGER.info("Could not find Recharge entry");}if (dailyRecharge == null) {dailyRecharge = new DailyRecharge();dailyRecharge.setCreateDate(date);}dailyRecharge.setOpeningBalance(previousDayClosing);dailyRecharge.setProviderId(x.getId());dailyRecharge.setWalletRechargeAmount(dailyWalletRecharge);dailyRecharge.setTotalAmount(dailyAmount);dailyRecharge.setTotalCommission(totalCommission);float closingBalance = dailyRecharge.getOpeningBalance() + dailyWalletRecharge - dailyAmount;dailyRecharge.setClosingBalance(closingBalance);dailyRechargeRepository.persist(dailyRecharge);x.setAmount(x.getAmount() + dailyRecharge.getClosingBalance() - dailyRecharge.getOpeningBalance());previousDayClosing = dailyRecharge.getClosingBalance();}date = date.plusDays(1);}rechargeProviderRepository.persist(x);});}@RequestMapping(value = "/cron/reconcile-recharge", method = RequestMethod.GET)public String reconcileRecharge(Model model) throws Exception {LocalDateTime fromDate = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS).minusDays(30);LocalDateTime toDate = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS);List<RechargeStatus> nonSuccessRechargeStatuses = new ArrayList<>(Arrays.asList(RechargeStatus.values()));LOGGER.info("nonSuccessRechargeStatuses {} ", nonSuccessRechargeStatuses);nonSuccessRechargeStatuses.remove(RechargeStatus.SUCCESS);nonSuccessRechargeStatuses.remove(RechargeStatus.FAILED);RechargeCredential thinkWalnutDigitalRechargeEnquiryCredential = new RechargeCredential();thinkWalnutDigitalRechargeEnquiryCredential.setRechargeUrl(thinkWalnutDigitalRechargeEnquiryUrl);thinkWalnutDigitalRechargeEnquiryCredential.setRechargeUserName(thinkWalnutDigitalRechargeUserName);thinkWalnutDigitalRechargeEnquiryCredential.setRechargePassword(thinkWalnutDigitalRechargePassword);thinkWalnutDigitalRechargeEnquiryCredential.setRechargeAuthKey(thinkWalnutDigitalRechargeAuthKey);Map<String, RechargeStatus> requestRechargeStatusChanged = new HashMap<>();List<RechargeTransaction> rechargeTransactions = rechargeTransactionRepository.selectAllBetweenTimestamp(nonSuccessRechargeStatuses, fromDate, toDate);for (RechargeTransaction rechargeTransaction : rechargeTransactions) {try {int providerId = rechargeTransaction.getProviderId();if (providerId == 2) {thinkWalnutDigitalRechargeProviderService.doCheckStatusRequest(thinkWalnutDigitalRechargeEnquiryCredential, rechargeTransaction);}if (rechargeTransaction.getStatus().equals(RechargeStatus.SUCCESS)|| rechargeTransaction.getStatus().equals(RechargeStatus.FAILED)) {requestRechargeStatusChanged.put(rechargeTransaction.getRequestId(),rechargeTransaction.getStatus());}} catch (Exception e) {LOGGER.info("Could not check status for Request {}", rechargeTransaction.getRequestId());}}model.addAttribute("response1", mvcResponseSender.createResponseString(requestRechargeStatusChanged));return "response";}@RequestMapping(value = "/cron/process-schemes", method = RequestMethod.GET)public String createScheme(HttpServletRequest request, Model model) throws Exception {LocalDateTime fromDate = LocalDateTime.now().minusDays(45);LOGGER.info("Started execution at {}", LocalDateTime.now());List<Purchase> purchases = purchaseRepository.selectFromPurchaseCompleteDate(fromDate);for (Purchase purchase : purchases) {try {schemeService.processSchemeIn(purchase.getId(), purchase.getFofoId());} catch (Exception e) {LOGGER.error("Error while processing purchase {} for scheme In ", purchase.getId());e.printStackTrace();}}List<FofoOrder> fofoOrders = fofoOrderRepository.selectFromSaleDate(fromDate);for (FofoOrder fofoOrder : fofoOrders) {try {schemeService.processSchemeOut(fofoOrder.getId(), fofoOrder.getFofoId());} catch (Exception e) {LOGGER.error("Error while processing sale order {} for scheme Out", fofoOrder.getId());}}model.addAttribute("response1", mvcResponseSender.createResponseString(true));return "response";}}