Subversion Repositories SmartDukaan

Rev

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