Rev 24261 | Rev 26228 | Go to most recent revision | View as "text/plain" | Blame | Compare with Previous | Last modification | View Log | RSS feed
package com.spice.profitmandi.web.controller;import java.time.LocalDateTime;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;import javax.servlet.http.HttpServletRequest;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.http.ResponseEntity;import org.springframework.stereotype.Controller;import org.springframework.transaction.annotation.Transactional;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import com.spice.profitmandi.common.enumuration.ProviderBalanceFrom;import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;import com.spice.profitmandi.common.model.OperatorType;import com.spice.profitmandi.common.model.ProfitMandiConstants;import com.spice.profitmandi.common.model.RechargeCommissionRequest;import com.spice.profitmandi.common.model.RechargeCredential;import com.spice.profitmandi.common.model.RechargeRequest;import com.spice.profitmandi.common.web.util.ResponseSender;import com.spice.profitmandi.dao.entity.dtr.DailyRecharge;import com.spice.profitmandi.dao.entity.dtr.RechargeCommission;import com.spice.profitmandi.dao.entity.dtr.RechargeOperator;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.PaymentOption;import com.spice.profitmandi.dao.enumuration.dtr.RechargeType;import com.spice.profitmandi.dao.repository.dtr.DailyRechargeRepository;import com.spice.profitmandi.dao.repository.dtr.RechargeCommissionRepository;import com.spice.profitmandi.dao.repository.dtr.RechargeOperatorRepository;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.FofoPartnerPaymentOptionRepository;import com.spice.profitmandi.dao.repository.fofo.PaymentOptionRepository;import com.spice.profitmandi.service.recharge.RechargeService;import com.spice.profitmandi.web.model.LoginDetails;import com.spice.profitmandi.web.util.CookiesProcessor;@Controller@Transactional(rollbackFor=Throwable.class)public class RechargeController {private static final Logger LOGGER = LogManager.getLogger(RechargeController.class);private List<String> blockedRecharge = Arrays.asList();@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 RechargeService rechargeService;@Autowiredprivate RechargeOperatorRepository rechargeOperatorRepository;@Autowiredprivate RechargeProviderRepository rechargeProviderRepository;@Autowiredprivate RechargeTransactionRepository rechargeTransactionRepository;@Autowiredprivate RechargeCommissionRepository rechargeCommissionRepository;@Autowiredprivate PaymentOptionRepository paymentOptionRepository;@Autowiredprivate FofoPartnerPaymentOptionRepository fofoPartnerPaymentOptionRepository;@Autowiredprivate RechargeProviderCreditWalletHistoryRepository rechargeProviderCreditWalletHistoryRepository;@Autowiredprivate DailyRechargeRepository dailyRechargeRepository;@Autowiredprivate CookiesProcessor cookiesProcessor;@Autowiredprivate ResponseSender<?> responseSender;@RequestMapping(value = "/createRecharge", method = RequestMethod.GET)public String createRecharge(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.RECHARGE_TYPE) String rechargeTypeString, Model model) throws ProfitMandiBusinessException{//model.addAttribute("rechargeOperators", rechargeOperatorRepository.selectAllByRechargeType(RechargeType.MOBILE));//model.addAttribute("rechargeTypes", RechargeType.values());LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);RechargeType rechargeType = RechargeType.valueOf(rechargeTypeString);List<RechargeOperator> rechargeOperators = null;if(rechargeType == RechargeType.MOBILE) {model.addAttribute("operatorTypes", OperatorType.values());rechargeOperators = rechargeOperatorRepository.selectAllByOperatorType(OperatorType.PREPAID);}else {rechargeOperators = rechargeOperatorRepository.selectAllByRechargeType(rechargeType);}List<Integer> paymentOptionIds = fofoPartnerPaymentOptionRepository.selectPaymentOptionIdsByFofoId(loginDetails.getFofoId());List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(new HashSet<>(paymentOptionIds));model.addAttribute("paymentOptions", paymentOptions);model.addAttribute("rechargeOperators", rechargeOperators);return "create-recharge";}private Map<Integer, String> rechargeTransactionsToRechargeOperatorIdNameMap(List<RechargeTransaction> rechargeTransactions){Map<Integer, String> rechargeOperatorIdrechargeOperatorNameMap = new HashMap<>();if(rechargeTransactions.isEmpty()) {return rechargeOperatorIdrechargeOperatorNameMap;}Set<Integer> operatorIds = new HashSet<>();for(RechargeTransaction rechargeTransaction : rechargeTransactions) {operatorIds.add(rechargeTransaction.getOperatorId());}List<RechargeOperator> rechargeOperators = rechargeOperatorRepository.selectAllByIds(operatorIds);for(RechargeOperator rechargeOperator : rechargeOperators) {rechargeOperatorIdrechargeOperatorNameMap.put(rechargeOperator.getId(), rechargeOperator.getName());}return rechargeOperatorIdrechargeOperatorNameMap;}private Map<Integer, RechargeOperator> rechargeCommissionsOperatorIdRechargeOperatorMap(List<RechargeCommission> rechargeCommissions){Map<Integer, RechargeOperator> rechargeOperatorIdNameMap = new HashMap<>();if(rechargeCommissions.isEmpty()) {return rechargeOperatorIdNameMap;}Set<Integer> operatorIds = new HashSet<>();for(RechargeCommission rechargeCommission : rechargeCommissions) {operatorIds.add(rechargeCommission.getOperatorId());}List<RechargeOperator> rechargeOperators = rechargeOperatorRepository.selectAllByIds(operatorIds);for(RechargeOperator rechargeOperator : rechargeOperators) {rechargeOperatorIdNameMap.put(rechargeOperator.getId(), rechargeOperator);}return rechargeOperatorIdNameMap;}private Map<Integer, String> rechargeCommissionsProviderIdNameMap(List<RechargeCommission> rechargeCommissions){if(rechargeCommissions.isEmpty()) {return new HashMap<>();}Set<Integer> providerIds = new HashSet<>();for(RechargeCommission rechargeCommission : rechargeCommissions) {providerIds.add(rechargeCommission.getProviderId());}return providerIdNameMap(providerIds);}private Map<Integer, String> providerIdNameMap(Set<Integer> providerIds){Map<Integer, String> rechargeProviderIdNameMap = new HashMap<>();List<RechargeProvider> rechargeProviders = rechargeProviderRepository.selectAllByIds(providerIds);for(RechargeProvider rechargeProvider : rechargeProviders) {rechargeProviderIdNameMap.put(rechargeProvider.getId(), rechargeProvider.getName());}return rechargeProviderIdNameMap;}private Map<Integer, String> rechargeProviderCreditWalletHistoriesProviderIdNameMap(List<RechargeProviderCreditWalletHistory> rechargeProviderCreditWalletHistories){if(rechargeProviderCreditWalletHistories.isEmpty()) {return new HashMap<>();}Set<Integer> providerIds = new HashSet<>();for(RechargeProviderCreditWalletHistory rechargeProviderCreditWalletHistory : rechargeProviderCreditWalletHistories) {providerIds.add(rechargeProviderCreditWalletHistory.getProviderId());}return this.providerIdNameMap(providerIds);}private Map<Integer, String> dailyRechargesProviderIdNameMap(List<DailyRecharge> dailyRecharges){if(dailyRecharges.isEmpty()) {return new HashMap<>();}Set<Integer> providerIds = new HashSet<>();for(DailyRecharge dailyRecharge : dailyRecharges) {providerIds.add(dailyRecharge.getProviderId());}return this.providerIdNameMap(providerIds);}@RequestMapping(value = "/createRecharge", method = RequestMethod.POST)public String createRecharge(HttpServletRequest request, @RequestBody RechargeRequest rechargeRequest, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{LOGGER.info("Recharge request body {}", rechargeRequest);LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);RechargeCredential rechargeTransactionMobileCredential = new RechargeCredential();rechargeTransactionMobileCredential.setRechargeUrl(thinkWalnutDigitalRechargeTransactionMobileUrl);rechargeTransactionMobileCredential.setRechargeUserName(thinkWalnutDigitalRechargeUserName);rechargeTransactionMobileCredential.setRechargePassword(thinkWalnutDigitalRechargePassword);rechargeTransactionMobileCredential.setRechargeAuthKey(thinkWalnutDigitalRechargeAuthKey);RechargeCredential rechargeTransactionDthCredential = new RechargeCredential();rechargeTransactionDthCredential.setRechargeUrl(thinkWalnutDigitalRechargeTransactionDthUrl);rechargeTransactionDthCredential.setRechargeUserName(thinkWalnutDigitalRechargeUserName);rechargeTransactionDthCredential.setRechargePassword(thinkWalnutDigitalRechargePassword);rechargeTransactionDthCredential.setRechargeAuthKey(thinkWalnutDigitalRechargeAuthKey);if(blockedRecharge.contains(loginDetails.getEmailId())) {throw new ProfitMandiBusinessException("Recharge Provider", rechargeRequest.getOperatorId(), "We are experiencing some problem right now.");}rechargeService.doRecharge(oxigenRechargeTransactionUrl, oxigenRechargeAuthKey, oxigenRechargeValidationUrl,oxigenRechargeValidationAuthKey, rechargeTransactionMobileCredential, rechargeTransactionDthCredential, loginDetails.getFofoId(), rechargeRequest);RechargeType rechargeType = RechargeType.valueOf(rechargeRequest.getRechargeType());List<RechargeTransaction> rechargeTransactions = rechargeTransactionRepository.selectAllByRetailerIdAndType(loginDetails.getFofoId(), rechargeType, offset, limit);long size = rechargeTransactionRepository.selectCountByRetailerIdAndType(loginDetails.getFofoId(), rechargeType);Map<Integer, String> rechargeOperatorIdRechargeOperatorNameMap = this.rechargeTransactionsToRechargeOperatorIdNameMap(rechargeTransactions);model.addAttribute("rechargeTransactions", rechargeTransactions);model.addAttribute("rechargeOperatorIdRechargeOperatorNameMap", rechargeOperatorIdRechargeOperatorNameMap);model.addAttribute("start", offset + 1);model.addAttribute("size", size);if (rechargeTransactions.size() < limit){model.addAttribute("end", offset + rechargeTransactions.size());}else{model.addAttribute("end", offset + limit);}if(RechargeType.valueOf(rechargeRequest.getRechargeType()) == RechargeType.MOBILE) {return "mobile-recharges";}else {return "dth-recharges";}}@RequestMapping(value = "/checkStatus", method = RequestMethod.GET)public String checkStatus(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.REQUEST_ID) String requestId, @RequestParam(name = ProfitMandiConstants.RECHARGE_TYPE) String rechargeTypeString, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{LOGGER.info("RequestId [{}], rechargeType [{}]", requestId, rechargeTypeString);LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);RechargeCredential thinkWalnutDigitalRechargeEnquiryCredential = new RechargeCredential();thinkWalnutDigitalRechargeEnquiryCredential.setRechargeUrl(thinkWalnutDigitalRechargeEnquiryUrl);thinkWalnutDigitalRechargeEnquiryCredential.setRechargeUserName(thinkWalnutDigitalRechargeUserName);thinkWalnutDigitalRechargeEnquiryCredential.setRechargePassword(thinkWalnutDigitalRechargePassword);thinkWalnutDigitalRechargeEnquiryCredential.setRechargeAuthKey(thinkWalnutDigitalRechargeAuthKey);rechargeService.checkStatus(oxigenRechargeEnquiryUrl, oxigenRechargeAuthKey, thinkWalnutDigitalRechargeEnquiryCredential, loginDetails.getFofoId(), requestId);RechargeType rechargeType = RechargeType.valueOf(rechargeTypeString);List<RechargeTransaction> rechargeTransactions = rechargeTransactionRepository.selectAllByRetailerIdAndType(loginDetails.getFofoId(), rechargeType, offset, limit);//long size = rechargeTransactionRepository.selectCountByRetailerId(loginDetails.getFofoId());Map<Integer, String> rechargeOperatorIdRechargeOperatorNameMap = this.rechargeTransactionsToRechargeOperatorIdNameMap(rechargeTransactions);model.addAttribute("rechargeTransactions", rechargeTransactions);model.addAttribute("rechargeOperatorIdRechargeOperatorNameMap", rechargeOperatorIdRechargeOperatorNameMap);if(RechargeType.valueOf(rechargeTypeString) == RechargeType.MOBILE) {return "mobile-recharges-paginated";}else {return "dth-recharges-paginated";}}@RequestMapping(value = "/getRecharges", method = RequestMethod.GET)public String getRecharges(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.RECHARGE_TYPE) String rechargeTypeString, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);RechargeType rechargeType = RechargeType.valueOf(rechargeTypeString);List<RechargeTransaction> rechargeTransactions = rechargeTransactionRepository.selectAllByRetailerIdAndType(loginDetails.getFofoId(), rechargeType, offset, limit);long size = rechargeTransactionRepository.selectCountByRetailerIdAndType(loginDetails.getFofoId(), rechargeType);Map<Integer, String> rechargeOperatorIdRechargeOperatorNameMap = this.rechargeTransactionsToRechargeOperatorIdNameMap(rechargeTransactions);model.addAttribute("rechargeTransactions", rechargeTransactions);model.addAttribute("rechargeOperatorIdRechargeOperatorNameMap", rechargeOperatorIdRechargeOperatorNameMap);model.addAttribute("start", offset + 1);model.addAttribute("size", size);if (rechargeTransactions.size() < limit){model.addAttribute("end", offset + rechargeTransactions.size());}else{model.addAttribute("end", offset + limit);}if(RechargeType.valueOf(rechargeTypeString) == RechargeType.MOBILE) {return "mobile-recharges";}else {return "dth-recharges";}}@RequestMapping(value = "/getPaginatedRecharges", method = RequestMethod.GET)public String getPaginatedRecharges(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.RECHARGE_TYPE) String rechargeTypeString, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);RechargeType rechargeType = RechargeType.valueOf(rechargeTypeString);List<RechargeTransaction> rechargeTransactions = rechargeTransactionRepository.selectAllByRetailerIdAndType(loginDetails.getFofoId(), rechargeType, offset, limit);Map<Integer, String> rechargeOperatorIdRechargeOperatorNameMap = this.rechargeTransactionsToRechargeOperatorIdNameMap(rechargeTransactions);model.addAttribute("rechargeTransactions", rechargeTransactions);model.addAttribute("rechargeOperatorIdRechargeOperatorNameMap", rechargeOperatorIdRechargeOperatorNameMap);if(RechargeType.valueOf(rechargeTypeString) == RechargeType.MOBILE) {return "mobile-recharges-paginated";}else {return "dth-recharges-paginated";}}@RequestMapping(value = "/getRechargeOperators", method = RequestMethod.GET)public String getRechargeOperators(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.OPERATOR_TYPE) String operatorTypeString, Model model){//model.addAttribute("rechargeOperators", rechargeOperatorRepository.selectAllByRechargeType(RechargeType.MOBILE));//model.addAttribute("rechargeTypes", RechargeType.values());OperatorType operatorType = OperatorType.valueOf(operatorTypeString);List<RechargeOperator> rechargeOperators = rechargeOperatorRepository.selectAllByOperatorType(operatorType);model.addAttribute("rechargeOperators", rechargeOperators);return "recharge-operators";}@RequestMapping(value = "/getRechargeCommissionOperators", method = RequestMethod.GET)public String getRechargeCommissionOperators(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.OPERATOR_TYPE) String operatorTypeString, Model model) throws ProfitMandiBusinessException{//model.addAttribute("rechargeOperators", rechargeOperatorRepository.selectAllByRechargeType(RechargeType.MOBILE));//model.addAttribute("rechargeTypes", RechargeType.values());OperatorType operatorType = OperatorType.valueOf(operatorTypeString);List<RechargeOperator> rechargeOperators = rechargeOperatorRepository.selectAllByOperatorType(operatorType);List<Integer> rechargeOperatorIds = rechargeCommissionRepository.selectAllOperatorIds();if(!rechargeOperatorIds.isEmpty()) {rechargeOperators = this.filterRechargeOperators(rechargeOperators, rechargeOperatorIds);if(rechargeOperators.isEmpty()) {throw new ProfitMandiBusinessException(ProfitMandiConstants.OPERATOR_TYPE, operatorType, "RCHRG_1003");}}model.addAttribute("rechargeOperators", rechargeOperators);return "recharge-operators";}@RequestMapping(value = "/createRechargeCommission", method = RequestMethod.GET)public String createRechargeCommission(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.RECHARGE_TYPE) String rechargeTypeString, Model model) throws ProfitMandiBusinessException{//model.addAttribute("rechargeOperators", rechargeOperatorRepository.selectAllByRechargeType(RechargeType.MOBILE));//model.addAttribute("rechargeTypes", RechargeType.values());RechargeType rechargeType = RechargeType.valueOf(rechargeTypeString);List<RechargeOperator> rechargeOperators = null;if(rechargeType == RechargeType.MOBILE) {model.addAttribute("operatorTypes", OperatorType.values());rechargeOperators = rechargeOperatorRepository.selectAllByOperatorType(OperatorType.PREPAID);}else {rechargeOperators = rechargeOperatorRepository.selectAllByRechargeType(rechargeType);}List<Integer> rechargeOperatorIds = rechargeCommissionRepository.selectAllOperatorIds();if(!rechargeOperatorIds.isEmpty()) {rechargeOperators = this.filterRechargeOperators(rechargeOperators, rechargeOperatorIds);if(rechargeOperators.isEmpty()) {throw new ProfitMandiBusinessException(ProfitMandiConstants.RECHARGE_TYPE, rechargeType, "RCHRG_1003");}}model.addAttribute("rechargeOperators", rechargeOperators);return "create-recharge-commission";}private List<RechargeOperator> filterRechargeOperators(List<RechargeOperator> rechargeOperators, List<Integer> rechargeOperatorIds){List<RechargeOperator> filteredRechargeOperators = new ArrayList<>();for(RechargeOperator rechargeOperator : rechargeOperators) {if(!rechargeOperatorIds.contains(rechargeOperator.getId())) {filteredRechargeOperators.add(rechargeOperator);}}return filteredRechargeOperators;}@RequestMapping(value = "/createRechargeCommission", method = RequestMethod.POST)public String createRechargeCommission(HttpServletRequest request, @RequestBody RechargeCommissionRequest rechargeCommissionRequest, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{rechargeService.createRechargeCommission(rechargeCommissionRequest);List<RechargeCommission> rechargeCommissions = rechargeCommissionRepository.selectAllPaginated(offset, limit);long size = rechargeCommissionRepository.selectAllCount();Map<Integer, RechargeOperator> rechargeOperatorIdRechargeOperatorMap = this.rechargeCommissionsOperatorIdRechargeOperatorMap(rechargeCommissions);Map<Integer, String> rechargeProviderIdNameMap = this.rechargeCommissionsProviderIdNameMap(rechargeCommissions);model.addAttribute("rechargeCommissions", rechargeCommissions);model.addAttribute("rechargeOperatorIdRechargeOperatorMap", rechargeOperatorIdRechargeOperatorMap);model.addAttribute("rechargeProviderIdNameMap", rechargeProviderIdNameMap);model.addAttribute("start", offset + 1);model.addAttribute("size", size);if (rechargeCommissions.size() < limit){model.addAttribute("end", offset + rechargeCommissions.size());}else{model.addAttribute("end", offset + limit);}return "recharge-commissions";}@RequestMapping(value = "/getRechargeCommissions", method = RequestMethod.GET)public String getRechargeCommissions(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{//LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);//RechargeType rechargeType = RechargeType.valueOf(rechargeTypeString);List<RechargeCommission> rechargeCommissions = rechargeCommissionRepository.selectAllPaginated(offset, limit);long size = rechargeCommissionRepository.selectAllCount();Map<Integer, RechargeOperator> rechargeOperatorIdRechargeOperatorMap = this.rechargeCommissionsOperatorIdRechargeOperatorMap(rechargeCommissions);Map<Integer, String> rechargeProviderIdNameMap = this.rechargeCommissionsProviderIdNameMap(rechargeCommissions);model.addAttribute("rechargeCommissions", rechargeCommissions);model.addAttribute("rechargeOperatorIdRechargeOperatorMap", rechargeOperatorIdRechargeOperatorMap);model.addAttribute("rechargeProviderIdNameMap", rechargeProviderIdNameMap);model.addAttribute("start", offset + 1);model.addAttribute("size", size);if (rechargeCommissions.size() < limit){model.addAttribute("end", offset + rechargeCommissions.size());}else{model.addAttribute("end", offset + limit);}return "recharge-commissions";}@RequestMapping(value = "/getPaginatedRechargeCommissions", method = RequestMethod.GET)public String getPaginatedRechargeCommissions(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{//LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);//RechargeType rechargeType = RechargeType.valueOf(rechargeTypeString);List<RechargeCommission> rechargeCommissions = rechargeCommissionRepository.selectAllPaginated(offset, limit);Map<Integer, RechargeOperator> rechargeOperatorIdRechargeOperatorMap = this.rechargeCommissionsOperatorIdRechargeOperatorMap(rechargeCommissions);Map<Integer, String> rechargeProviderIdNameMap = this.rechargeCommissionsProviderIdNameMap(rechargeCommissions);model.addAttribute("rechargeCommissions", rechargeCommissions);model.addAttribute("rechargeOperatorIdRechargeOperatorMap", rechargeOperatorIdRechargeOperatorMap);model.addAttribute("rechargeProviderIdNameMap", rechargeProviderIdNameMap);return "recharge-commissions-paginated";}@RequestMapping(value = "/getRechargeCommissionByOperatorId", method = RequestMethod.GET)public String getRechargeCommissionByOperatorId(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.OPERATOR_ID) int operatorId, @RequestParam(name = ProfitMandiConstants.PROVIDER_ID) int providerId, Model model) throws ProfitMandiBusinessException{RechargeOperator rechargeOperator = rechargeOperatorRepository.selectById(operatorId);RechargeCommission rechargeCommission = rechargeCommissionRepository.selectByOperatorIdAndProviderId(operatorId, providerId);model.addAttribute("rechargeCommission", rechargeCommission);model.addAttribute("rechargeOperator", rechargeOperator);return "recharge-commission-details";}@RequestMapping(value = "/updateRechargeCommission", method = RequestMethod.PUT)public String updateRechargeCommission(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.OPERATOR_ID) int operatorId, @RequestParam(name = ProfitMandiConstants.PROVIDER_ID) int providerId, @RequestParam(name = ProfitMandiConstants.AMOUNT_TYPE) String amountTypeString, @RequestParam(name = ProfitMandiConstants.AMOUNT) float amount, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{rechargeService.updateRechargeCommission(operatorId, providerId, amountTypeString, amount);List<RechargeCommission> rechargeCommissions = rechargeCommissionRepository.selectAllPaginated(offset, limit);Map<Integer, RechargeOperator> rechargeOperatorIdRechargeOperatorMap = this.rechargeCommissionsOperatorIdRechargeOperatorMap(rechargeCommissions);Map<Integer, String> rechargeProviderIdNameMap = this.rechargeCommissionsProviderIdNameMap(rechargeCommissions);model.addAttribute("rechargeCommissions", rechargeCommissions);model.addAttribute("rechargeOperatorIdRechargeOperatorMap", rechargeOperatorIdRechargeOperatorMap);model.addAttribute("rechargeProviderIdNameMap", rechargeProviderIdNameMap);return "recharge-commissions-paginated";}@RequestMapping(value = "/getRechargeProviderBalance", method = RequestMethod.GET)public String getRechargeProviderBalance(HttpServletRequest request, Model model) throws ProfitMandiBusinessException{List<RechargeProvider> rechargeProviders = rechargeProviderRepository.selectAll();model.addAttribute("rechargeProviders", rechargeProviders);model.addAttribute("providerBalanceFroms", ProviderBalanceFrom.values());RechargeCredential thinkWalnutDigitalRechargeCredential = new RechargeCredential();thinkWalnutDigitalRechargeCredential.setRechargeUrl(thinkWalnutDigitalRechargeBalanceUrl);thinkWalnutDigitalRechargeCredential.setRechargeUserName(thinkWalnutDigitalRechargeUserName);thinkWalnutDigitalRechargeCredential.setRechargePassword(thinkWalnutDigitalRechargePassword);thinkWalnutDigitalRechargeCredential.setRechargeAuthKey(thinkWalnutDigitalRechargeAuthKey);model.addAttribute("rechargeProviderBalanceMaps", rechargeService.getRechargeProvidersBalance(oxigenRechargeTransactionUrl, oxigenRechargeAuthKey, thinkWalnutDigitalRechargeCredential));return "recharge-provider-balance";}@RequestMapping(value = "/getRechargeProviderWalletAddMoney", method = RequestMethod.GET)public String getRechargeProviderWalletAddMoney(HttpServletRequest request, Model model) throws ProfitMandiBusinessException{List<RechargeProvider> rechargeProviders = rechargeProviderRepository.selectAll();model.addAttribute("rechargeProviders", rechargeProviders);return "recharge-provider-wallet-add-money";}@RequestMapping(value = "/addMoneyToRechargeProviderWallet", method = RequestMethod.POST)public String createRechargeProviderWalletAddMoney(HttpServletRequest request,@RequestParam(name = ProfitMandiConstants.PROVIDER_ID) int providerId, @RequestParam(name = ProfitMandiConstants.AMOUNT) float amount,@RequestParam LocalDateTime receiveDateTime, @RequestParam(name = "offset", defaultValue = "0") int offset,@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{rechargeService.createRechargeProviderCreditWallet(providerId, amount, receiveDateTime);List<RechargeProviderCreditWalletHistory> rechargeProviderCreditWalletHistories = rechargeProviderCreditWalletHistoryRepository.selectAll(offset, limit);long size = rechargeProviderCreditWalletHistoryRepository.selectAllCount();Map<Integer, String> rechargeProviderIdNameMap = this.rechargeProviderCreditWalletHistoriesProviderIdNameMap(rechargeProviderCreditWalletHistories);model.addAttribute("rechargeProviderCreditWalletHistories", rechargeProviderCreditWalletHistories);model.addAttribute("rechargeProviderIdNameMap", rechargeProviderIdNameMap);model.addAttribute("start", offset + 1);model.addAttribute("size", size);if (rechargeProviderCreditWalletHistories.size() < limit){model.addAttribute("end", offset + rechargeProviderCreditWalletHistories.size());}else{model.addAttribute("end", offset + limit);}return "recharge-provider-wallet-add-moneys";}@RequestMapping(value = "/getRechargeProviderWalletAddMoneys", method = RequestMethod.GET)public String getRechargeProviderWalletAddMoney(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{List<RechargeProviderCreditWalletHistory> rechargeProviderCreditWalletHistories = rechargeProviderCreditWalletHistoryRepository.selectAll(offset, limit);long size = rechargeProviderCreditWalletHistoryRepository.selectAllCount();Map<Integer, String> rechargeProviderIdNameMap = this.rechargeProviderCreditWalletHistoriesProviderIdNameMap(rechargeProviderCreditWalletHistories);model.addAttribute("rechargeProviderCreditWalletHistories", rechargeProviderCreditWalletHistories);model.addAttribute("rechargeProviderIdNameMap", rechargeProviderIdNameMap);model.addAttribute("start", offset + 1);model.addAttribute("size", size);if (rechargeProviderCreditWalletHistories.size() < limit){model.addAttribute("end", offset + rechargeProviderCreditWalletHistories.size());}else{model.addAttribute("end", offset + limit);}return "recharge-provider-wallet-add-moneys";}@RequestMapping(value = "/getPaginatedRechargeProviderWalletAddMoneys", method = RequestMethod.GET)public String getPaginatedRechargeProviderWalletAddMoney(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{List<RechargeProviderCreditWalletHistory> rechargeProviderCreditWalletHistories = rechargeProviderCreditWalletHistoryRepository.selectAll(offset, limit);Map<Integer, String> rechargeProviderIdNameMap = this.rechargeProviderCreditWalletHistoriesProviderIdNameMap(rechargeProviderCreditWalletHistories);model.addAttribute("rechargeProviderCreditWalletHistories", rechargeProviderCreditWalletHistories);model.addAttribute("rechargeProviderIdNameMap", rechargeProviderIdNameMap);return "recharge-provider-wallet-add-moneys-paginated";}@RequestMapping(value = "/getDailyRecharges", method = RequestMethod.GET)public String getDailyRecharges(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{List<DailyRecharge> dailyRecharges = dailyRechargeRepository.selectAll(offset, limit);long size = dailyRechargeRepository.selectAllCount();Map<Integer, String> rechargeProviderIdNameMap = this.dailyRechargesProviderIdNameMap(dailyRecharges);model.addAttribute("dailyRecharges", dailyRecharges);model.addAttribute("rechargeProviderIdNameMap", rechargeProviderIdNameMap);model.addAttribute("start", offset + 1);model.addAttribute("size", size);if (dailyRecharges.size() < limit){model.addAttribute("end", offset + dailyRecharges.size());}else{model.addAttribute("end", offset + limit);}return "daily-recharges";}@RequestMapping(value = "/getPaginatedDailyRecharges", method = RequestMethod.GET)public String getPaginatedDailyRecharges(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{List<DailyRecharge> dailyRecharges = dailyRechargeRepository.selectAll(offset, limit);Map<Integer, String> rechargeProviderIdNameMap = this.dailyRechargesProviderIdNameMap(dailyRecharges);model.addAttribute("dailyRecharges", dailyRecharges);model.addAttribute("rechargeProviderIdNameMap", rechargeProviderIdNameMap);return "daily-recharges-paginated";}@RequestMapping(value = "/getBalanceByProviderId", method = RequestMethod.GET)public ResponseEntity<?> getBalanceByProviderId(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.PROVIDER_ID) int providerId, @RequestParam(name = ProfitMandiConstants.PROVIDER_BALANCE_FROM) ProviderBalanceFrom providerBalanceFrom) throws ProfitMandiBusinessException{RechargeCredential thinkWalnutDigitalRechargeCredential = new RechargeCredential();thinkWalnutDigitalRechargeCredential.setRechargeUrl(thinkWalnutDigitalRechargeBalanceUrl);thinkWalnutDigitalRechargeCredential.setRechargeUserName(thinkWalnutDigitalRechargeUserName);thinkWalnutDigitalRechargeCredential.setRechargePassword(thinkWalnutDigitalRechargePassword);thinkWalnutDigitalRechargeCredential.setRechargeAuthKey(thinkWalnutDigitalRechargeAuthKey);return responseSender.ok(rechargeService.checkBalance(oxigenRechargeTransactionUrl, oxigenRechargeAuthKey, thinkWalnutDigitalRechargeCredential, providerId, providerBalanceFrom));}}