Subversion Repositories SmartDukaan

Rev

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