Subversion Repositories SmartDukaan

Rev

Rev 23628 | Rev 24261 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
23505 ashik.ali 1
package com.spice.profitmandi.web.controller;
2
 
23886 amit.gupta 3
import java.time.LocalDateTime;
23528 ashik.ali 4
import java.util.ArrayList;
23505 ashik.ali 5
import java.util.HashMap;
6
import java.util.HashSet;
7
import java.util.List;
8
import java.util.Map;
9
import java.util.Set;
10
 
11
import javax.servlet.http.HttpServletRequest;
12
 
23628 ashik.ali 13
import org.apache.logging.log4j.LogManager;
14
import org.apache.logging.log4j.Logger;
23505 ashik.ali 15
import org.springframework.beans.factory.annotation.Autowired;
16
import org.springframework.beans.factory.annotation.Value;
23628 ashik.ali 17
import org.springframework.http.ResponseEntity;
23505 ashik.ali 18
import org.springframework.stereotype.Controller;
19
import org.springframework.transaction.annotation.Transactional;
20
import org.springframework.ui.Model;
21
import org.springframework.web.bind.annotation.RequestBody;
22
import org.springframework.web.bind.annotation.RequestMapping;
23
import org.springframework.web.bind.annotation.RequestMethod;
24
import org.springframework.web.bind.annotation.RequestParam;
25
 
23628 ashik.ali 26
import com.spice.profitmandi.common.enumuration.ProviderBalanceFrom;
23505 ashik.ali 27
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
28
import com.spice.profitmandi.common.model.OperatorType;
29
import com.spice.profitmandi.common.model.ProfitMandiConstants;
23528 ashik.ali 30
import com.spice.profitmandi.common.model.RechargeCommissionRequest;
31
import com.spice.profitmandi.common.model.RechargeCredential;
23505 ashik.ali 32
import com.spice.profitmandi.common.model.RechargeRequest;
23628 ashik.ali 33
import com.spice.profitmandi.common.web.util.ResponseSender;
34
import com.spice.profitmandi.dao.entity.dtr.DailyRecharge;
23528 ashik.ali 35
import com.spice.profitmandi.dao.entity.dtr.RechargeCommission;
23505 ashik.ali 36
import com.spice.profitmandi.dao.entity.dtr.RechargeOperator;
23575 ashik.ali 37
import com.spice.profitmandi.dao.entity.dtr.RechargeProvider;
23628 ashik.ali 38
import com.spice.profitmandi.dao.entity.dtr.RechargeProviderCreditWalletHistory;
23505 ashik.ali 39
import com.spice.profitmandi.dao.entity.dtr.RechargeTransaction;
23548 ashik.ali 40
import com.spice.profitmandi.dao.entity.fofo.PaymentOption;
23505 ashik.ali 41
import com.spice.profitmandi.dao.enumuration.dtr.RechargeType;
23628 ashik.ali 42
import com.spice.profitmandi.dao.repository.dtr.DailyRechargeRepository;
23528 ashik.ali 43
import com.spice.profitmandi.dao.repository.dtr.RechargeCommissionRepository;
23505 ashik.ali 44
import com.spice.profitmandi.dao.repository.dtr.RechargeOperatorRepository;
23628 ashik.ali 45
import com.spice.profitmandi.dao.repository.dtr.RechargeProviderCreditWalletHistoryRepository;
23575 ashik.ali 46
import com.spice.profitmandi.dao.repository.dtr.RechargeProviderRepository;
23505 ashik.ali 47
import com.spice.profitmandi.dao.repository.dtr.RechargeTransactionRepository;
23548 ashik.ali 48
import com.spice.profitmandi.dao.repository.fofo.FofoPartnerPaymentOptionRepository;
49
import com.spice.profitmandi.dao.repository.fofo.PaymentOptionRepository;
23505 ashik.ali 50
import com.spice.profitmandi.service.recharge.RechargeService;
51
import com.spice.profitmandi.web.model.LoginDetails;
52
import com.spice.profitmandi.web.util.CookiesProcessor;
53
 
54
@Controller
55
@Transactional(rollbackFor=Throwable.class)
56
public class RechargeController {
57
 
23628 ashik.ali 58
	private static final Logger LOGGER = LogManager.getLogger(RechargeController.class);
23505 ashik.ali 59
 
23575 ashik.ali 60
	@Value("${oxigen.recharge.transaction.url}")
61
	private String oxigenRechargeTransactionUrl;
23528 ashik.ali 62
 
23575 ashik.ali 63
	@Value("${oxigen.recharge.enquiry.url}")
64
	private String oxigenRechargeEnquiryUrl;
23505 ashik.ali 65
 
23575 ashik.ali 66
	@Value("${oxigen.recharge.auth.key}")
67
	private String oxigenRechargeAuthKey;
23528 ashik.ali 68
 
23575 ashik.ali 69
	@Value("${oxigen.recharge.validation.url}")
70
	private String oxigenRechargeValidationUrl;
23505 ashik.ali 71
 
23575 ashik.ali 72
	@Value("${oxigen.recharge.validation.auth.key}")
73
	private String oxigenRechargeValidationAuthKey;
23528 ashik.ali 74
 
23575 ashik.ali 75
	@Value("${think.walnut.digital.recharge.transaction.mobile.url}")
76
	private String thinkWalnutDigitalRechargeTransactionMobileUrl;
23505 ashik.ali 77
 
23575 ashik.ali 78
	@Value("${think.walnut.digital.recharge.transaction.dth.url}")
79
	private String thinkWalnutDigitalRechargeTransactionDthUrl;
23528 ashik.ali 80
 
23575 ashik.ali 81
	@Value("${think.walnut.digital.recharge.enquiry.url}")
82
	private String thinkWalnutDigitalRechargeEnquiryUrl;
23505 ashik.ali 83
 
23628 ashik.ali 84
	@Value("${think.walnut.digital.recharge.balance.url}")
85
	private String thinkWalnutDigitalRechargeBalanceUrl;
23575 ashik.ali 86
 
23628 ashik.ali 87
	@Value("${think.walnut.digital.recharge.username}")
88
	private String thinkWalnutDigitalRechargeUserName;
23575 ashik.ali 89
 
23628 ashik.ali 90
	@Value("${think.walnut.digital.recharge.password}")
91
	private String thinkWalnutDigitalRechargePassword;
92
 
23575 ashik.ali 93
	@Value("${think.walnut.digital.recharge.auth.key}")
94
	private String thinkWalnutDigitalRechargeAuthKey;
95
 
23505 ashik.ali 96
	@Autowired
97
	private RechargeService rechargeService;
98
 
99
	@Autowired
100
	private RechargeOperatorRepository rechargeOperatorRepository;
101
 
102
	@Autowired
23575 ashik.ali 103
	private RechargeProviderRepository rechargeProviderRepository;
104
 
105
	@Autowired
23505 ashik.ali 106
	private RechargeTransactionRepository rechargeTransactionRepository;
107
 
108
	@Autowired
23528 ashik.ali 109
	private RechargeCommissionRepository rechargeCommissionRepository;
110
 
111
	@Autowired
23548 ashik.ali 112
	private PaymentOptionRepository paymentOptionRepository;
113
 
114
	@Autowired
115
	private FofoPartnerPaymentOptionRepository fofoPartnerPaymentOptionRepository;
116
 
117
	@Autowired
23628 ashik.ali 118
	private RechargeProviderCreditWalletHistoryRepository rechargeProviderCreditWalletHistoryRepository;
119
 
120
	@Autowired
121
	private DailyRechargeRepository dailyRechargeRepository;
122
 
123
	@Autowired
23505 ashik.ali 124
	private CookiesProcessor cookiesProcessor;
125
 
23628 ashik.ali 126
	@Autowired
127
	private ResponseSender<?> responseSender;
128
 
23505 ashik.ali 129
	@RequestMapping(value = "/createRecharge", method = RequestMethod.GET)
23548 ashik.ali 130
	public String createRecharge(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.RECHARGE_TYPE) String rechargeTypeString, Model model) throws ProfitMandiBusinessException{
23505 ashik.ali 131
		//model.addAttribute("rechargeOperators", rechargeOperatorRepository.selectAllByRechargeType(RechargeType.MOBILE));
132
		//model.addAttribute("rechargeTypes", RechargeType.values());
23548 ashik.ali 133
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23505 ashik.ali 134
		RechargeType rechargeType = RechargeType.valueOf(rechargeTypeString);
135
		List<RechargeOperator> rechargeOperators = null;
136
		if(rechargeType == RechargeType.MOBILE) {
137
			model.addAttribute("operatorTypes", OperatorType.values());
138
			rechargeOperators = rechargeOperatorRepository.selectAllByOperatorType(OperatorType.PREPAID);
139
		}else {
140
			rechargeOperators = rechargeOperatorRepository.selectAllByRechargeType(rechargeType);
141
		}
23548 ashik.ali 142
 
143
		List<Integer> paymentOptionIds = fofoPartnerPaymentOptionRepository.selectPaymentOptionIdsByFofoId(loginDetails.getFofoId());
144
		List<PaymentOption> paymentOptions = paymentOptionRepository.selectByIds(new HashSet<>(paymentOptionIds));
145
		model.addAttribute("paymentOptions", paymentOptions);
23505 ashik.ali 146
		model.addAttribute("rechargeOperators", rechargeOperators);
147
		return "create-recharge";
148
	}
149
 
23528 ashik.ali 150
	private Map<Integer, String> rechargeTransactionsToRechargeOperatorIdNameMap(List<RechargeTransaction> rechargeTransactions){
23505 ashik.ali 151
		Map<Integer, String> rechargeOperatorIdrechargeOperatorNameMap = new HashMap<>();
152
		if(rechargeTransactions.isEmpty()) {
153
			return rechargeOperatorIdrechargeOperatorNameMap;
154
		}
155
		Set<Integer> operatorIds = new HashSet<>();
156
		for(RechargeTransaction rechargeTransaction : rechargeTransactions) {
157
			operatorIds.add(rechargeTransaction.getOperatorId());
158
		}
159
 
160
		List<RechargeOperator> rechargeOperators = rechargeOperatorRepository.selectAllByIds(operatorIds);
161
		for(RechargeOperator rechargeOperator : rechargeOperators) {
162
			rechargeOperatorIdrechargeOperatorNameMap.put(rechargeOperator.getId(), rechargeOperator.getName());
163
		}
164
		return rechargeOperatorIdrechargeOperatorNameMap;
165
	}
166
 
23528 ashik.ali 167
	private Map<Integer, RechargeOperator> rechargeCommissionsOperatorIdRechargeOperatorMap(List<RechargeCommission> rechargeCommissions){
168
		Map<Integer, RechargeOperator> rechargeOperatorIdNameMap = new HashMap<>();
169
		if(rechargeCommissions.isEmpty()) {
170
			return rechargeOperatorIdNameMap;
171
		}
172
		Set<Integer> operatorIds = new HashSet<>();
173
		for(RechargeCommission rechargeCommission : rechargeCommissions) {
174
			operatorIds.add(rechargeCommission.getOperatorId());
175
		}
176
 
177
		List<RechargeOperator> rechargeOperators = rechargeOperatorRepository.selectAllByIds(operatorIds);
178
		for(RechargeOperator rechargeOperator : rechargeOperators) {
179
			rechargeOperatorIdNameMap.put(rechargeOperator.getId(), rechargeOperator);
180
		}
181
		return rechargeOperatorIdNameMap;
182
	}
183
 
23575 ashik.ali 184
	private Map<Integer, String> rechargeCommissionsProviderIdNameMap(List<RechargeCommission> rechargeCommissions){
185
		if(rechargeCommissions.isEmpty()) {
23628 ashik.ali 186
			return new HashMap<>();
23575 ashik.ali 187
		}
188
		Set<Integer> providerIds = new HashSet<>();
189
		for(RechargeCommission rechargeCommission : rechargeCommissions) {
190
			providerIds.add(rechargeCommission.getProviderId());
191
		}
23628 ashik.ali 192
		return providerIdNameMap(providerIds);
193
	}
194
 
195
	private Map<Integer, String> providerIdNameMap(Set<Integer> providerIds){
196
		Map<Integer, String> rechargeProviderIdNameMap = new HashMap<>();
23575 ashik.ali 197
		List<RechargeProvider> rechargeProviders = rechargeProviderRepository.selectAllByIds(providerIds);
198
		for(RechargeProvider rechargeProvider : rechargeProviders) {
199
			rechargeProviderIdNameMap.put(rechargeProvider.getId(), rechargeProvider.getName());
200
		}
201
		return rechargeProviderIdNameMap;
202
	}
203
 
23628 ashik.ali 204
	private Map<Integer, String> rechargeProviderCreditWalletHistoriesProviderIdNameMap(List<RechargeProviderCreditWalletHistory> rechargeProviderCreditWalletHistories){
205
		if(rechargeProviderCreditWalletHistories.isEmpty()) {
206
			return new HashMap<>();
207
		}
208
		Set<Integer> providerIds = new HashSet<>();
209
		for(RechargeProviderCreditWalletHistory rechargeProviderCreditWalletHistory : rechargeProviderCreditWalletHistories) {
210
			providerIds.add(rechargeProviderCreditWalletHistory.getProviderId());
211
		}
212
		return this.providerIdNameMap(providerIds);
213
	}
214
 
215
	private Map<Integer, String> dailyRechargesProviderIdNameMap(List<DailyRecharge> dailyRecharges){
216
		if(dailyRecharges.isEmpty()) {
217
			return new HashMap<>();
218
		}
219
		Set<Integer> providerIds = new HashSet<>();
220
		for(DailyRecharge dailyRecharge : dailyRecharges) {
221
			providerIds.add(dailyRecharge.getProviderId());
222
		}
223
		return this.providerIdNameMap(providerIds);
224
	}
225
 
23505 ashik.ali 226
	@RequestMapping(value = "/createRecharge", method = RequestMethod.POST)
227
	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{
23528 ashik.ali 228
		LOGGER.info("Recharge request body {}", rechargeRequest);
23505 ashik.ali 229
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23575 ashik.ali 230
 
23559 ashik.ali 231
		RechargeCredential rechargeTransactionMobileCredential = new RechargeCredential();
23575 ashik.ali 232
		rechargeTransactionMobileCredential.setRechargeUrl(thinkWalnutDigitalRechargeTransactionMobileUrl);
23628 ashik.ali 233
		rechargeTransactionMobileCredential.setRechargeUserName(thinkWalnutDigitalRechargeUserName);
234
		rechargeTransactionMobileCredential.setRechargePassword(thinkWalnutDigitalRechargePassword);
23575 ashik.ali 235
		rechargeTransactionMobileCredential.setRechargeAuthKey(thinkWalnutDigitalRechargeAuthKey);
23528 ashik.ali 236
 
23559 ashik.ali 237
		RechargeCredential rechargeTransactionDthCredential = new RechargeCredential();
23575 ashik.ali 238
		rechargeTransactionDthCredential.setRechargeUrl(thinkWalnutDigitalRechargeTransactionDthUrl);
23628 ashik.ali 239
		rechargeTransactionDthCredential.setRechargeUserName(thinkWalnutDigitalRechargeUserName);
240
		rechargeTransactionDthCredential.setRechargePassword(thinkWalnutDigitalRechargePassword);
23575 ashik.ali 241
		rechargeTransactionDthCredential.setRechargeAuthKey(thinkWalnutDigitalRechargeAuthKey);
23528 ashik.ali 242
 
23575 ashik.ali 243
		rechargeService.doRecharge(oxigenRechargeTransactionUrl, oxigenRechargeAuthKey, oxigenRechargeValidationUrl,
244
				oxigenRechargeValidationAuthKey, rechargeTransactionMobileCredential, rechargeTransactionDthCredential, loginDetails.getFofoId(), rechargeRequest);
23505 ashik.ali 245
		RechargeType rechargeType = RechargeType.valueOf(rechargeRequest.getRechargeType());
246
		List<RechargeTransaction> rechargeTransactions = rechargeTransactionRepository.selectAllByRetailerIdAndType(loginDetails.getFofoId(), rechargeType, offset, limit);
247
		long size = rechargeTransactionRepository.selectCountByRetailerIdAndType(loginDetails.getFofoId(), rechargeType);
23528 ashik.ali 248
		Map<Integer, String> rechargeOperatorIdRechargeOperatorNameMap = this.rechargeTransactionsToRechargeOperatorIdNameMap(rechargeTransactions);
23505 ashik.ali 249
		model.addAttribute("rechargeTransactions", rechargeTransactions);
250
		model.addAttribute("rechargeOperatorIdRechargeOperatorNameMap", rechargeOperatorIdRechargeOperatorNameMap);
251
		model.addAttribute("start", offset + 1);
252
		model.addAttribute("size", size);
253
		if (rechargeTransactions.size() < limit){
254
			model.addAttribute("end", offset + rechargeTransactions.size());
255
		}else{
256
			model.addAttribute("end", offset + limit);
257
		}
258
		if(RechargeType.valueOf(rechargeRequest.getRechargeType()) == RechargeType.MOBILE) {
259
			return "mobile-recharges";
260
		}else {
261
			return "dth-recharges";
262
		}
263
	}
264
 
265
	@RequestMapping(value = "/checkStatus", method = RequestMethod.GET)
266
	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{
267
		LOGGER.info("RequestId [{}], rechargeType [{}]", requestId, rechargeTypeString);
268
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23575 ashik.ali 269
		RechargeCredential thinkWalnutDigitalRechargeEnquiryCredential = new RechargeCredential();
270
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargeUrl(thinkWalnutDigitalRechargeEnquiryUrl);
23628 ashik.ali 271
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargeUserName(thinkWalnutDigitalRechargeUserName);
272
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargePassword(thinkWalnutDigitalRechargePassword);
23575 ashik.ali 273
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargeAuthKey(thinkWalnutDigitalRechargeAuthKey);
274
		rechargeService.checkStatus(oxigenRechargeEnquiryUrl, oxigenRechargeAuthKey, thinkWalnutDigitalRechargeEnquiryCredential, loginDetails.getFofoId(), requestId);
23505 ashik.ali 275
		RechargeType rechargeType = RechargeType.valueOf(rechargeTypeString);
276
		List<RechargeTransaction> rechargeTransactions = rechargeTransactionRepository.selectAllByRetailerIdAndType(loginDetails.getFofoId(), rechargeType, offset, limit);
277
		//long size = rechargeTransactionRepository.selectCountByRetailerId(loginDetails.getFofoId());
23528 ashik.ali 278
		Map<Integer, String> rechargeOperatorIdRechargeOperatorNameMap = this.rechargeTransactionsToRechargeOperatorIdNameMap(rechargeTransactions);
23505 ashik.ali 279
		model.addAttribute("rechargeTransactions", rechargeTransactions);
280
		model.addAttribute("rechargeOperatorIdRechargeOperatorNameMap", rechargeOperatorIdRechargeOperatorNameMap);
281
 
282
		if(RechargeType.valueOf(rechargeTypeString) == RechargeType.MOBILE) {
283
			return "mobile-recharges-paginated";
284
		}else {
285
			return "dth-recharges-paginated";
286
		}
287
	}
288
 
289
	@RequestMapping(value = "/getRecharges", method = RequestMethod.GET)
290
	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{
291
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
292
		RechargeType rechargeType = RechargeType.valueOf(rechargeTypeString);
293
		List<RechargeTransaction> rechargeTransactions = rechargeTransactionRepository.selectAllByRetailerIdAndType(loginDetails.getFofoId(), rechargeType, offset, limit);
294
		long size = rechargeTransactionRepository.selectCountByRetailerIdAndType(loginDetails.getFofoId(), rechargeType);
23528 ashik.ali 295
		Map<Integer, String> rechargeOperatorIdRechargeOperatorNameMap = this.rechargeTransactionsToRechargeOperatorIdNameMap(rechargeTransactions);
23505 ashik.ali 296
		model.addAttribute("rechargeTransactions", rechargeTransactions);
297
		model.addAttribute("rechargeOperatorIdRechargeOperatorNameMap", rechargeOperatorIdRechargeOperatorNameMap);
298
		model.addAttribute("start", offset + 1);
299
		model.addAttribute("size", size);
300
		if (rechargeTransactions.size() < limit){
301
			model.addAttribute("end", offset + rechargeTransactions.size());
302
		}else{
303
			model.addAttribute("end", offset + limit);
304
		}
305
		if(RechargeType.valueOf(rechargeTypeString) == RechargeType.MOBILE) {
306
			return "mobile-recharges";
307
		}else {
308
			return "dth-recharges";
309
		}
310
	}
311
 
312
	@RequestMapping(value = "/getPaginatedRecharges", method = RequestMethod.GET)
313
	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{
314
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
315
		RechargeType rechargeType = RechargeType.valueOf(rechargeTypeString);
316
		List<RechargeTransaction> rechargeTransactions = rechargeTransactionRepository.selectAllByRetailerIdAndType(loginDetails.getFofoId(), rechargeType, offset, limit);
23528 ashik.ali 317
		Map<Integer, String> rechargeOperatorIdRechargeOperatorNameMap = this.rechargeTransactionsToRechargeOperatorIdNameMap(rechargeTransactions);
23505 ashik.ali 318
		model.addAttribute("rechargeTransactions", rechargeTransactions);
319
		model.addAttribute("rechargeOperatorIdRechargeOperatorNameMap", rechargeOperatorIdRechargeOperatorNameMap);
320
		if(RechargeType.valueOf(rechargeTypeString) == RechargeType.MOBILE) {
321
			return "mobile-recharges-paginated";
322
		}else {
323
			return "dth-recharges-paginated";
324
		}
325
	}
326
 
23528 ashik.ali 327
	@RequestMapping(value = "/getRechargeOperators", method = RequestMethod.GET)
328
	public String getRechargeOperators(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.OPERATOR_TYPE) String operatorTypeString, Model model){
23505 ashik.ali 329
		//model.addAttribute("rechargeOperators", rechargeOperatorRepository.selectAllByRechargeType(RechargeType.MOBILE));
330
		//model.addAttribute("rechargeTypes", RechargeType.values());
331
		OperatorType operatorType = OperatorType.valueOf(operatorTypeString);
332
		List<RechargeOperator> rechargeOperators = rechargeOperatorRepository.selectAllByOperatorType(operatorType);
333
		model.addAttribute("rechargeOperators", rechargeOperators);
334
		return "recharge-operators";
335
	}
336
 
23528 ashik.ali 337
	@RequestMapping(value = "/getRechargeCommissionOperators", method = RequestMethod.GET)
338
	public String getRechargeCommissionOperators(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.OPERATOR_TYPE) String operatorTypeString, Model model) throws ProfitMandiBusinessException{
339
		//model.addAttribute("rechargeOperators", rechargeOperatorRepository.selectAllByRechargeType(RechargeType.MOBILE));
340
		//model.addAttribute("rechargeTypes", RechargeType.values());
341
		OperatorType operatorType = OperatorType.valueOf(operatorTypeString);
342
		List<RechargeOperator> rechargeOperators = rechargeOperatorRepository.selectAllByOperatorType(operatorType);
343
		List<Integer> rechargeOperatorIds = rechargeCommissionRepository.selectAllOperatorIds();
344
		if(!rechargeOperatorIds.isEmpty()) {
345
			rechargeOperators = this.filterRechargeOperators(rechargeOperators, rechargeOperatorIds);
346
			if(rechargeOperators.isEmpty()) {
347
				throw new ProfitMandiBusinessException(ProfitMandiConstants.OPERATOR_TYPE, operatorType, "RCHRG_1003");
348
			}
349
		}
350
		model.addAttribute("rechargeOperators", rechargeOperators);
351
		return "recharge-operators";
352
	}
23505 ashik.ali 353
 
23528 ashik.ali 354
	@RequestMapping(value = "/createRechargeCommission", method = RequestMethod.GET)
355
	public String createRechargeCommission(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.RECHARGE_TYPE) String rechargeTypeString, Model model) throws ProfitMandiBusinessException{
356
		//model.addAttribute("rechargeOperators", rechargeOperatorRepository.selectAllByRechargeType(RechargeType.MOBILE));
357
		//model.addAttribute("rechargeTypes", RechargeType.values());
358
 
359
		RechargeType rechargeType = RechargeType.valueOf(rechargeTypeString);
360
		List<RechargeOperator> rechargeOperators = null;
361
		if(rechargeType == RechargeType.MOBILE) {
362
			model.addAttribute("operatorTypes", OperatorType.values());
363
			rechargeOperators = rechargeOperatorRepository.selectAllByOperatorType(OperatorType.PREPAID);
364
		}else {
365
			rechargeOperators = rechargeOperatorRepository.selectAllByRechargeType(rechargeType);
366
		}
367
		List<Integer> rechargeOperatorIds = rechargeCommissionRepository.selectAllOperatorIds();
368
		if(!rechargeOperatorIds.isEmpty()) {
369
			rechargeOperators = this.filterRechargeOperators(rechargeOperators, rechargeOperatorIds);
370
			if(rechargeOperators.isEmpty()) {
371
				throw new ProfitMandiBusinessException(ProfitMandiConstants.RECHARGE_TYPE, rechargeType, "RCHRG_1003");
372
			}
373
		}
374
		model.addAttribute("rechargeOperators", rechargeOperators);
375
		return "create-recharge-commission";
376
	}
377
 
378
	private List<RechargeOperator> filterRechargeOperators(List<RechargeOperator> rechargeOperators, List<Integer> rechargeOperatorIds){
379
		List<RechargeOperator> filteredRechargeOperators = new ArrayList<>();
380
		for(RechargeOperator rechargeOperator : rechargeOperators) {
381
			if(!rechargeOperatorIds.contains(rechargeOperator.getId())) {
382
				filteredRechargeOperators.add(rechargeOperator);
383
			}
384
		}
385
		return filteredRechargeOperators;
386
	}
387
 
388
	@RequestMapping(value = "/createRechargeCommission", method = RequestMethod.POST)
389
	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{
390
		rechargeService.createRechargeCommission(rechargeCommissionRequest);
391
		List<RechargeCommission> rechargeCommissions = rechargeCommissionRepository.selectAllPaginated(offset, limit);
392
		long size = rechargeCommissionRepository.selectAllCount();
393
		Map<Integer, RechargeOperator> rechargeOperatorIdRechargeOperatorMap = this.rechargeCommissionsOperatorIdRechargeOperatorMap(rechargeCommissions);
23575 ashik.ali 394
		Map<Integer, String> rechargeProviderIdNameMap = this.rechargeCommissionsProviderIdNameMap(rechargeCommissions);
23528 ashik.ali 395
		model.addAttribute("rechargeCommissions", rechargeCommissions);
396
		model.addAttribute("rechargeOperatorIdRechargeOperatorMap", rechargeOperatorIdRechargeOperatorMap);
23575 ashik.ali 397
		model.addAttribute("rechargeProviderIdNameMap", rechargeProviderIdNameMap);
23528 ashik.ali 398
		model.addAttribute("start", offset + 1);
399
		model.addAttribute("size", size);
400
		if (rechargeCommissions.size() < limit){
401
			model.addAttribute("end", offset + rechargeCommissions.size());
402
		}else{
403
			model.addAttribute("end", offset + limit);
404
		}
405
		return "recharge-commissions";
406
	}
407
 
408
	@RequestMapping(value = "/getRechargeCommissions", method = RequestMethod.GET)
409
	public String getRechargeCommissions(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{
410
		//LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
411
		//RechargeType rechargeType = RechargeType.valueOf(rechargeTypeString);
412
		List<RechargeCommission> rechargeCommissions = rechargeCommissionRepository.selectAllPaginated(offset, limit);
413
		long size = rechargeCommissionRepository.selectAllCount();
414
		Map<Integer, RechargeOperator> rechargeOperatorIdRechargeOperatorMap = this.rechargeCommissionsOperatorIdRechargeOperatorMap(rechargeCommissions);
23575 ashik.ali 415
		Map<Integer, String> rechargeProviderIdNameMap = this.rechargeCommissionsProviderIdNameMap(rechargeCommissions);
23528 ashik.ali 416
		model.addAttribute("rechargeCommissions", rechargeCommissions);
417
		model.addAttribute("rechargeOperatorIdRechargeOperatorMap", rechargeOperatorIdRechargeOperatorMap);
23575 ashik.ali 418
		model.addAttribute("rechargeProviderIdNameMap", rechargeProviderIdNameMap);
23528 ashik.ali 419
		model.addAttribute("start", offset + 1);
420
		model.addAttribute("size", size);
421
		if (rechargeCommissions.size() < limit){
422
			model.addAttribute("end", offset + rechargeCommissions.size());
423
		}else{
424
			model.addAttribute("end", offset + limit);
425
		}
426
		return "recharge-commissions";
427
	}
428
 
429
	@RequestMapping(value = "/getPaginatedRechargeCommissions", method = RequestMethod.GET)
430
	public String getPaginatedRechargeCommissions(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{
431
		//LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
432
		//RechargeType rechargeType = RechargeType.valueOf(rechargeTypeString);
433
		List<RechargeCommission> rechargeCommissions = rechargeCommissionRepository.selectAllPaginated(offset, limit);
434
		Map<Integer, RechargeOperator> rechargeOperatorIdRechargeOperatorMap = this.rechargeCommissionsOperatorIdRechargeOperatorMap(rechargeCommissions);
23575 ashik.ali 435
		Map<Integer, String> rechargeProviderIdNameMap = this.rechargeCommissionsProviderIdNameMap(rechargeCommissions);
23528 ashik.ali 436
		model.addAttribute("rechargeCommissions", rechargeCommissions);
437
		model.addAttribute("rechargeOperatorIdRechargeOperatorMap", rechargeOperatorIdRechargeOperatorMap);
23575 ashik.ali 438
		model.addAttribute("rechargeProviderIdNameMap", rechargeProviderIdNameMap);
23528 ashik.ali 439
		return "recharge-commissions-paginated";
440
	}
441
 
442
	@RequestMapping(value = "/getRechargeCommissionByOperatorId", method = RequestMethod.GET)
23575 ashik.ali 443
	public String getRechargeCommissionByOperatorId(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.OPERATOR_ID) int operatorId, @RequestParam(name = ProfitMandiConstants.PROVIDER_ID) int providerId, Model model)  throws ProfitMandiBusinessException{
23528 ashik.ali 444
		RechargeOperator rechargeOperator = rechargeOperatorRepository.selectById(operatorId);
23575 ashik.ali 445
		RechargeCommission rechargeCommission = rechargeCommissionRepository.selectByOperatorIdAndProviderId(operatorId, providerId);
23528 ashik.ali 446
		model.addAttribute("rechargeCommission", rechargeCommission);
447
		model.addAttribute("rechargeOperator", rechargeOperator);
448
		return "recharge-commission-details";
449
	}
450
 
451
	@RequestMapping(value = "/updateRechargeCommission", method = RequestMethod.PUT)
23575 ashik.ali 452
	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{
453
		rechargeService.updateRechargeCommission(operatorId, providerId, amountTypeString, amount);
23528 ashik.ali 454
		List<RechargeCommission> rechargeCommissions = rechargeCommissionRepository.selectAllPaginated(offset, limit);
455
		Map<Integer, RechargeOperator> rechargeOperatorIdRechargeOperatorMap = this.rechargeCommissionsOperatorIdRechargeOperatorMap(rechargeCommissions);
23575 ashik.ali 456
		Map<Integer, String> rechargeProviderIdNameMap = this.rechargeCommissionsProviderIdNameMap(rechargeCommissions);
23528 ashik.ali 457
		model.addAttribute("rechargeCommissions", rechargeCommissions);
458
		model.addAttribute("rechargeOperatorIdRechargeOperatorMap", rechargeOperatorIdRechargeOperatorMap);
23575 ashik.ali 459
		model.addAttribute("rechargeProviderIdNameMap", rechargeProviderIdNameMap);
23528 ashik.ali 460
		return "recharge-commissions-paginated";
461
	}
462
 
23628 ashik.ali 463
	@RequestMapping(value = "/getRechargeProviderBalance", method = RequestMethod.GET)
464
	public String getRechargeProviderBalance(HttpServletRequest request, Model model) throws ProfitMandiBusinessException{
465
		List<RechargeProvider> rechargeProviders = rechargeProviderRepository.selectAll();
466
		model.addAttribute("rechargeProviders", rechargeProviders);
467
		model.addAttribute("providerBalanceFroms", ProviderBalanceFrom.values());
468
		RechargeCredential thinkWalnutDigitalRechargeCredential = new RechargeCredential();
469
		thinkWalnutDigitalRechargeCredential.setRechargeUrl(thinkWalnutDigitalRechargeBalanceUrl);
470
		thinkWalnutDigitalRechargeCredential.setRechargeUserName(thinkWalnutDigitalRechargeUserName);
471
		thinkWalnutDigitalRechargeCredential.setRechargePassword(thinkWalnutDigitalRechargePassword);
472
		thinkWalnutDigitalRechargeCredential.setRechargeAuthKey(thinkWalnutDigitalRechargeAuthKey);
473
		model.addAttribute("rechargeProviderBalanceMaps", rechargeService.getRechargeProvidersBalance(oxigenRechargeTransactionUrl, oxigenRechargeAuthKey, thinkWalnutDigitalRechargeCredential));
474
		return "recharge-provider-balance";
475
	}
23528 ashik.ali 476
 
23628 ashik.ali 477
	@RequestMapping(value = "/getRechargeProviderWalletAddMoney", method = RequestMethod.GET)
478
	public String getRechargeProviderWalletAddMoney(HttpServletRequest request, Model model) throws ProfitMandiBusinessException{
479
		List<RechargeProvider> rechargeProviders = rechargeProviderRepository.selectAll();
480
		model.addAttribute("rechargeProviders", rechargeProviders);
481
		return "recharge-provider-wallet-add-money";
482
	}
483
 
484
	@RequestMapping(value = "/addMoneyToRechargeProviderWallet", method = RequestMethod.POST)
23886 amit.gupta 485
	public String createRechargeProviderWalletAddMoney(HttpServletRequest request, 
486
			@RequestParam(name = ProfitMandiConstants.PROVIDER_ID) int providerId, @RequestParam(name = ProfitMandiConstants.AMOUNT) float amount, 
487
			@RequestParam LocalDateTime receiveDateTime, @RequestParam(name = "offset", defaultValue = "0") int offset, 
488
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{
489
		rechargeService.createRechargeProviderCreditWallet(providerId, amount, receiveDateTime);
23628 ashik.ali 490
		List<RechargeProviderCreditWalletHistory> rechargeProviderCreditWalletHistories = rechargeProviderCreditWalletHistoryRepository.selectAll(offset, limit);
491
		long size = rechargeProviderCreditWalletHistoryRepository.selectAllCount();
492
		Map<Integer, String> rechargeProviderIdNameMap = this.rechargeProviderCreditWalletHistoriesProviderIdNameMap(rechargeProviderCreditWalletHistories);
493
		model.addAttribute("rechargeProviderCreditWalletHistories", rechargeProviderCreditWalletHistories);
494
		model.addAttribute("rechargeProviderIdNameMap", rechargeProviderIdNameMap);
495
		model.addAttribute("start", offset + 1);
496
		model.addAttribute("size", size);
497
		if (rechargeProviderCreditWalletHistories.size() < limit){
498
			model.addAttribute("end", offset + rechargeProviderCreditWalletHistories.size());
499
		}else{
500
			model.addAttribute("end", offset + limit);
501
		}
502
		return "recharge-provider-wallet-add-moneys";
503
	}
504
 
505
	@RequestMapping(value = "/getRechargeProviderWalletAddMoneys", method = RequestMethod.GET)
506
	public String getRechargeProviderWalletAddMoney(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{
507
		List<RechargeProviderCreditWalletHistory> rechargeProviderCreditWalletHistories = rechargeProviderCreditWalletHistoryRepository.selectAll(offset, limit);
508
		long size = rechargeProviderCreditWalletHistoryRepository.selectAllCount();
509
		Map<Integer, String> rechargeProviderIdNameMap = this.rechargeProviderCreditWalletHistoriesProviderIdNameMap(rechargeProviderCreditWalletHistories);
510
		model.addAttribute("rechargeProviderCreditWalletHistories", rechargeProviderCreditWalletHistories);
511
		model.addAttribute("rechargeProviderIdNameMap", rechargeProviderIdNameMap);
512
		model.addAttribute("start", offset + 1);
513
		model.addAttribute("size", size);
514
		if (rechargeProviderCreditWalletHistories.size() < limit){
515
			model.addAttribute("end", offset + rechargeProviderCreditWalletHistories.size());
516
		}else{
517
			model.addAttribute("end", offset + limit);
518
		}
519
		return "recharge-provider-wallet-add-moneys";
520
	}
521
 
522
	@RequestMapping(value = "/getPaginatedRechargeProviderWalletAddMoneys", method = RequestMethod.GET)
523
	public String getPaginatedRechargeProviderWalletAddMoney(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{
524
		List<RechargeProviderCreditWalletHistory> rechargeProviderCreditWalletHistories = rechargeProviderCreditWalletHistoryRepository.selectAll(offset, limit);
525
		Map<Integer, String> rechargeProviderIdNameMap = this.rechargeProviderCreditWalletHistoriesProviderIdNameMap(rechargeProviderCreditWalletHistories);
526
		model.addAttribute("rechargeProviderCreditWalletHistories", rechargeProviderCreditWalletHistories);
527
		model.addAttribute("rechargeProviderIdNameMap", rechargeProviderIdNameMap);
528
		return "recharge-provider-wallet-add-moneys-paginated";
529
	}
530
 
531
 
532
	@RequestMapping(value = "/getDailyRecharges", method = RequestMethod.GET)
533
	public String getDailyRecharges(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{
534
		List<DailyRecharge> dailyRecharges = dailyRechargeRepository.selectAll(offset, limit);
535
		long size = dailyRechargeRepository.selectAllCount();
536
		Map<Integer, String> rechargeProviderIdNameMap = this.dailyRechargesProviderIdNameMap(dailyRecharges);
537
		model.addAttribute("dailyRecharges", dailyRecharges);
538
		model.addAttribute("rechargeProviderIdNameMap", rechargeProviderIdNameMap);
539
		model.addAttribute("start", offset + 1);
540
		model.addAttribute("size", size);
541
		if (dailyRecharges.size() < limit){
542
			model.addAttribute("end", offset + dailyRecharges.size());
543
		}else{
544
			model.addAttribute("end", offset + limit);
545
		}
546
		return "daily-recharges";
547
	}
548
 
549
	@RequestMapping(value = "/getPaginatedDailyRecharges", method = RequestMethod.GET)
550
	public String getPaginatedDailyRecharges(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{
551
		List<DailyRecharge> dailyRecharges = dailyRechargeRepository.selectAll(offset, limit);
552
		Map<Integer, String> rechargeProviderIdNameMap = this.dailyRechargesProviderIdNameMap(dailyRecharges);
553
		model.addAttribute("dailyRecharges", dailyRecharges);
554
		model.addAttribute("rechargeProviderIdNameMap", rechargeProviderIdNameMap);
555
		return "daily-recharges-paginated";
556
	}
557
 
558
	@RequestMapping(value = "/getBalanceByProviderId", method = RequestMethod.GET)
559
	public ResponseEntity<?> getBalanceByProviderId(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.PROVIDER_ID) int providerId, @RequestParam(name = ProfitMandiConstants.PROVIDER_BALANCE_FROM) ProviderBalanceFrom providerBalanceFrom) throws ProfitMandiBusinessException{
560
		RechargeCredential thinkWalnutDigitalRechargeCredential = new RechargeCredential();
561
		thinkWalnutDigitalRechargeCredential.setRechargeUrl(thinkWalnutDigitalRechargeBalanceUrl);
562
		thinkWalnutDigitalRechargeCredential.setRechargeUserName(thinkWalnutDigitalRechargeUserName);
563
		thinkWalnutDigitalRechargeCredential.setRechargePassword(thinkWalnutDigitalRechargePassword);
564
		thinkWalnutDigitalRechargeCredential.setRechargeAuthKey(thinkWalnutDigitalRechargeAuthKey);
565
		return responseSender.ok(rechargeService.checkBalance(oxigenRechargeTransactionUrl, oxigenRechargeAuthKey, thinkWalnutDigitalRechargeCredential, providerId, providerBalanceFrom));
566
	}
23505 ashik.ali 567
}