Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
21464 kshitij.so 1
package com.spice.profitmandi.web.controller;
2
 
21468 kshitij.so 3
import java.util.ArrayList;
23585 tejbeer 4
import java.util.Collection;
5
import java.util.Collections;
6
import java.util.HashMap;
7
import java.util.HashSet;
8
import java.util.LinkedHashSet;
21468 kshitij.so 9
import java.util.List;
10
import java.util.Map;
23585 tejbeer 11
import java.util.Optional;
12
import java.util.Set;
13
import java.util.stream.Collector;
14
import java.util.stream.Collectors;
21464 kshitij.so 15
 
23585 tejbeer 16
import javax.annotation.PostConstruct;
21464 kshitij.so 17
import javax.servlet.http.HttpServletRequest;
23585 tejbeer 18
import javax.swing.SortOrder;
19
 
21505 kshitij.so 20
import org.apache.thrift.TException;
21
import org.apache.thrift.transport.TTransportException;
23585 tejbeer 22
import org.slf4j.Logger;
23
import org.slf4j.LoggerFactory;
21505 kshitij.so 24
import org.springframework.beans.factory.annotation.Autowired;
23585 tejbeer 25
import org.springframework.beans.factory.annotation.Value;
21464 kshitij.so 26
import org.springframework.http.MediaType;
27
import org.springframework.http.ResponseEntity;
28
import org.springframework.stereotype.Controller;
21702 ashik.ali 29
import org.springframework.transaction.annotation.Transactional;
23585 tejbeer 30
import org.springframework.ui.Model;
21514 kshitij.so 31
import org.springframework.web.bind.annotation.RequestBody;
21464 kshitij.so 32
import org.springframework.web.bind.annotation.RequestMapping;
33
import org.springframework.web.bind.annotation.RequestMethod;
34
import org.springframework.web.bind.annotation.RequestParam;
35
 
23585 tejbeer 36
import com.spice.profitmandi.common.enumuration.RechargeStatus;
37
import com.spice.profitmandi.common.enumuration.SchemeType;
21505 kshitij.so 38
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
23585 tejbeer 39
import com.spice.profitmandi.common.model.CustomPaymentOption;
40
import com.spice.profitmandi.common.model.OperatorType;
21464 kshitij.so 41
import com.spice.profitmandi.common.model.ProfitMandiConstants;
23585 tejbeer 42
import com.spice.profitmandi.common.model.RechargeCredential;
43
import com.spice.profitmandi.common.model.RechargeRequest;
44
import com.spice.profitmandi.common.model.RechargeResponse;
21468 kshitij.so 45
import com.spice.profitmandi.common.util.Utils;
22931 ashik.ali 46
import com.spice.profitmandi.common.web.util.ResponseSender;
23585 tejbeer 47
import com.spice.profitmandi.dao.entity.dtr.RechargeCommission;
48
import com.spice.profitmandi.dao.entity.dtr.RechargeOperator;
49
import com.spice.profitmandi.dao.entity.dtr.RechargeProvider;
50
import com.spice.profitmandi.dao.entity.dtr.RechargeTransaction;
21735 ashik.ali 51
import com.spice.profitmandi.dao.entity.dtr.User;
23273 ashik.ali 52
import com.spice.profitmandi.dao.entity.dtr.UserAccount;
21735 ashik.ali 53
import com.spice.profitmandi.dao.enumuration.dtr.AccountType;
23585 tejbeer 54
import com.spice.profitmandi.dao.enumuration.dtr.RechargeType;
55
import com.spice.profitmandi.dao.repository.GenericRepository;
56
import com.spice.profitmandi.dao.repository.dtr.RechargeCommissionRepository;
57
import com.spice.profitmandi.dao.repository.dtr.RechargeOperatorRepository;
58
import com.spice.profitmandi.dao.repository.dtr.RechargeProviderRepository;
59
import com.spice.profitmandi.dao.repository.dtr.RechargeTransactionRepository;
21735 ashik.ali 60
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
61
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
23115 ashik.ali 62
import com.spice.profitmandi.dao.repository.transaction.PendingRechargeCommissionRepository;
23585 tejbeer 63
import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;
64
import com.spice.profitmandi.service.recharge.RechargeService;
21735 ashik.ali 65
import com.spice.profitmandi.thrift.clients.PaymentClient;
21464 kshitij.so 66
import com.spice.profitmandi.thrift.clients.TransactionClient;
21514 kshitij.so 67
import com.spice.profitmandi.web.req.CreateRechargeRequest;
21505 kshitij.so 68
import com.spice.profitmandi.web.res.ConfirmRechargeResponse;
21514 kshitij.so 69
import com.spice.profitmandi.web.res.CreateRechargeResponse;
21534 kshitij.so 70
import com.spice.profitmandi.web.res.MyRechargesResponse;
21517 kshitij.so 71
import com.spice.profitmandi.web.res.RechargeResultPojo;
23585 tejbeer 72
import com.spice.profitmandi.dao.entity.transaction.UserWallet;
73
 
21468 kshitij.so 74
import in.shop2020.model.v1.order.DenominationType;
21464 kshitij.so 75
import in.shop2020.model.v1.order.DeviceNumberInfo;
21514 kshitij.so 76
import in.shop2020.model.v1.order.OrderType;
21468 kshitij.so 77
import in.shop2020.model.v1.order.RechargeDenomination;
21514 kshitij.so 78
import in.shop2020.model.v1.order.RechargeOrder;
79
import in.shop2020.model.v1.order.RechargeOrderStatus;
80
import in.shop2020.model.v1.order.TransactionServiceException;
23585 tejbeer 81
 
21514 kshitij.so 82
import in.shop2020.payments.Payment;
83
import in.shop2020.payments.PaymentException;
84
import in.shop2020.payments.PaymentStatus;
21464 kshitij.so 85
import io.swagger.annotations.ApiImplicitParam;
86
import io.swagger.annotations.ApiImplicitParams;
87
import io.swagger.annotations.ApiOperation;
88
 
89
@Controller
22040 amit.gupta 90
@Transactional(rollbackFor=Throwable.class)
21464 kshitij.so 91
public class RechargeController {
92
 
23585 tejbeer 93
	private static final Logger log=LoggerFactory.getLogger(RechargeController.class);
21514 kshitij.so 94
	private static final String HEADER_X_FORWARDED_FOR = "X-FORWARDED-FOR";
23101 amit.gupta 95
	private static final String X_REAL_IP = "X-Real-IP";
23585 tejbeer 96
	@Value("${oxigen.recharge.transaction.url}")
97
	private String oxigenRechargeTransactionUrl;
98
 
99
	@Value("${oxigen.recharge.enquiry.url}")
100
	private String oxigenRechargeEnquiryUrl;
101
 
102
	@Value("${oxigen.recharge.auth.key}")
103
	private String oxigenRechargeAuthKey;
104
 
105
	@Value("${oxigen.recharge.validation.url}")
106
	private String oxigenRechargeValidationUrl;
107
 
108
	@Value("${oxigen.recharge.validation.auth.key}")
109
	private String oxigenRechargeValidationAuthKey;
110
 
111
	@Value("${think.walnut.digital.recharge.transaction.mobile.url}")
112
	private String thinkWalnutDigitalRechargeTransactionMobileUrl;
113
 
114
	@Value("${think.walnut.digital.recharge.transaction.mobile.username}")
115
	private String thinkWalnutDigitalRechargeTransactionMobileUserName;
116
 
117
	@Value("${think.walnut.digital.recharge.transaction.mobile.password}")
118
	private String thinkWalnutDigitalRechargeTransactionMobilePassword;
119
 
120
	@Value("${think.walnut.digital.recharge.transaction.dth.url}")
121
	private String thinkWalnutDigitalRechargeTransactionDthUrl;
122
 
123
	@Value("${think.walnut.digital.recharge.transaction.dth.username}")
124
	private String thinkWalnutDigitalRechargeTransactionDthUserName;
125
 
126
	@Value("${think.walnut.digital.recharge.transaction.dth.password}")
127
	private String thinkWalnutDigitalRechargeTransactionDthPassword;
128
 
129
	@Value("${think.walnut.digital.recharge.enquiry.url}")
130
	private String thinkWalnutDigitalRechargeEnquiryUrl;
131
 
132
	@Value("${think.walnut.digital.recharge.enquiry.username}")
133
	private String thinkWalnutDigitalRechargeEnquiryUserName;
134
 
135
	@Value("${think.walnut.digital.recharge.enquiry.password}")
136
	private String thinkWalnutDigitalRechargeEnquiryPassword;
137
 
138
	@Value("${think.walnut.digital.recharge.auth.key}")
139
	private String thinkWalnutDigitalRechargeAuthKey;
140
 
21505 kshitij.so 141
	@Autowired
23585 tejbeer 142
	UserWalletRepository userWalletRepository;
143
 
144
	@Autowired
145
	private GenericRepository genericRepository;
146
 
147
	@Autowired
148
	private RechargeCommissionRepository rechargeCommissionRepository;
149
 
150
	@Autowired
22931 ashik.ali 151
	private UserAccountRepository userAccountRepository;
23585 tejbeer 152
 
153
	@Autowired
154
	private RechargeTransactionRepository rechargeTransactionRepository;
21514 kshitij.so 155
 
156
	@Autowired
23585 tejbeer 157
	private RechargeProviderRepository rechargeProviderRepository;
158
 
159
	@Autowired
22931 ashik.ali 160
	private UserRepository userRepository;
161
 
162
	@Autowired
23585 tejbeer 163
	private RechargeOperatorRepository rechargeOperatorRepository;
164
 
165
	@Autowired
166
	private RechargeService rechargeService;
167
 
168
	@Autowired
23115 ashik.ali 169
	private PendingRechargeCommissionRepository pendingRechargeCommissionRepository;
170
 
171
	@Autowired
22931 ashik.ali 172
	private ResponseSender<?> responseSender;
23585 tejbeer 173
 
174
	private RechargeCredential rechargeTransactionMobileCredential;
175
	private RechargeCredential rechargeTransactionDthCredential;
176
	private RechargeCredential thinkWalnutDigitalRechargeEnquiryCredential;
21514 kshitij.so 177
 
21464 kshitij.so 178
	@RequestMapping(value = ProfitMandiConstants.URL_GET_SERVICE_PROVIDER, method=RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)
179
	@ApiImplicitParams({
180
		@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", 
181
				required = true, dataType = "string", paramType = "header")
182
	})
183
	@ApiOperation(value = "")
184
	public ResponseEntity<?> getServiceProvider(HttpServletRequest request, @RequestParam(value="deviceNumber") String deviceNumber, @RequestParam(value="rechargeType") String rechargeType){
185
		DeviceNumberInfo deviceInfo = null;
186
		TransactionClient tcl;
187
		try {
188
			tcl = new TransactionClient();
23585 tejbeer 189
			//deviceInfo = tcl.getClient().getServiceProviderForDevice(RechargeType.valueOf(rechargeType), deviceNumber.substring(0,4));
21464 kshitij.so 190
		} catch (Exception e) {
191
			log.error("Unable to get service provider for Device number " + deviceNumber + " and rechargeType : " +  rechargeType, e);
192
		}
22931 ashik.ali 193
		return responseSender.ok(deviceInfo);
21464 kshitij.so 194
	}
21505 kshitij.so 195
 
21468 kshitij.so 196
	@RequestMapping(value = ProfitMandiConstants.URL_GET_ALL_DENOMINATIONS, method=RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)
197
	@ApiImplicitParams({
198
		@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", 
199
				required = true, dataType = "string", paramType = "header")
200
	})
201
	@ApiOperation(value = "")
202
	public ResponseEntity<?> getAllDenominations(HttpServletRequest request, @RequestParam(value="operatorId") long operatorId, @RequestParam(value="circleCode") String circleCode, @RequestParam(value="denominationType") String denominationType){
203
		List<RechargeDenomination> rechargeDenominations = new ArrayList<RechargeDenomination>();
204
		TransactionClient tcl;
205
		try {
206
			tcl = new TransactionClient();
207
			rechargeDenominations =  tcl.getClient().getRechargeDenominations(operatorId, circleCode, DenominationType.valueOf(denominationType));
208
		} catch (Exception e) {
209
			log.error("Unable to get rechargeDenominations for operatorId " + operatorId + " and circleCode : " +  circleCode + " and DenominationType : " + denominationType, e);
210
		}
22931 ashik.ali 211
		return responseSender.ok(rechargeDenominations);
21468 kshitij.so 212
	}
21505 kshitij.so 213
 
23585 tejbeer 214
	@RequestMapping(value = ProfitMandiConstants.URL_MOBILE_OPERATORS, method=RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
21468 kshitij.so 215
	@ApiImplicitParams({
216
		@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", 
217
				required = true, dataType = "string", paramType = "header")
218
	})
23585 tejbeer 219
 
21468 kshitij.so 220
	@ApiOperation(value = "")
23585 tejbeer 221
	public ResponseEntity<?> getAllMobileOperators(HttpServletRequest request,@RequestParam(name = ProfitMandiConstants.OPERATOR_TYPE) OperatorType operatorType){
222
		Map<Integer, String> mobileProviderMap = new HashMap<>();
223
		List<RechargeOperator> rechargeOperators = rechargeOperatorRepository.selectAllByOperatorType(operatorType);
224
	//	List<RechargeOperator> rechargeOperators = rechargeOperatorRepository.selectAllByRechargeType(RechargeType.MOBILE);
225
		for(RechargeOperator rechargeOperator : rechargeOperators) {
226
		mobileProviderMap.put(rechargeOperator.getId(), rechargeOperator.getName());
227
	    }
22931 ashik.ali 228
		return responseSender.ok(mobileProviderMap);
21468 kshitij.so 229
	}
21505 kshitij.so 230
 
21468 kshitij.so 231
	@RequestMapping(value = ProfitMandiConstants.URL_DTH_OPERATORS, method=RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)
232
	@ApiImplicitParams({
233
		@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", 
234
				required = true, dataType = "string", paramType = "header")
235
	})
236
	@ApiOperation(value = "")
237
	public ResponseEntity<?> getAllDTHOperators(HttpServletRequest request){
23585 tejbeer 238
		Map<Integer, String> dthProviderMap = new HashMap<>();
239
		List<RechargeOperator> dthOperators = rechargeOperatorRepository.selectAllByRechargeType(RechargeType.DTH);
240
		for(RechargeOperator dthOperator : dthOperators) {
241
			dthProviderMap.put(dthOperator.getId(), dthOperator.getName());
242
		}
22931 ashik.ali 243
		return responseSender.ok(dthProviderMap);
23585 tejbeer 244
 
245
 
21468 kshitij.so 246
	}
247
 
21505 kshitij.so 248
	@RequestMapping(value = ProfitMandiConstants.URL_RECHARGE_CONFIRM, method=RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)
249
	@ApiImplicitParams({
250
		@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", 
251
				required = true, dataType = "string", paramType = "header")
252
	})
253
	@ApiOperation(value = "")
22931 ashik.ali 254
	public ResponseEntity<?> confirmRecharge(HttpServletRequest request, @RequestParam(value="rechargeAmount") long rechargeAmount)
255
		throws ProfitMandiBusinessException{
23115 ashik.ali 256
		int userId = (int)request.getAttribute(ProfitMandiConstants.USER_ID);
23273 ashik.ali 257
		UserAccount userAccount = null;
21505 kshitij.so 258
		UserWallet wallet = null;
259
		if (rechargeAmount <=0){
22931 ashik.ali 260
			return responseSender.badRequest(null);
21505 kshitij.so 261
		}
21514 kshitij.so 262
 
23273 ashik.ali 263
		userAccount = userAccountRepository.selectByUserIdType(userId, AccountType.saholic);
22931 ashik.ali 264
 
21505 kshitij.so 265
		try {
266
			TransactionClient tc = new TransactionClient();
23585 tejbeer 267
			//wallet = tc.getClient().getUserWallet(Long.valueOf(userAccount.getAccountKey()));
21505 kshitij.so 268
		} catch (NumberFormatException | TException e) {
22931 ashik.ali 269
			return responseSender.internalServerError(e);		
21505 kshitij.so 270
		}
21514 kshitij.so 271
 
21505 kshitij.so 272
		ConfirmRechargeResponse crr = new ConfirmRechargeResponse();
23585 tejbeer 273
		//crr.setWalletAmount(wallet.getAmount());
21505 kshitij.so 274
		crr.setWalletAmountLeft(wallet.getAmount() - rechargeAmount);
275
		crr.setCanProceed(true);
276
		if (crr.getWalletAmountLeft() < 0){
277
			crr.setCanProceed(false);
278
			crr.setReason("You don't have sufficient wallet balance");
279
		}
22931 ashik.ali 280
		return responseSender.ok(crr);
21505 kshitij.so 281
	}
23115 ashik.ali 282
 
283
	@RequestMapping(value = ProfitMandiConstants.URL_RECHARGE_PENDING_COMMISSION, method=RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)
284
	@ApiImplicitParams({
285
		@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", 
286
				required = true, dataType = "string", paramType = "header")
287
	})
288
	@ApiOperation(value = "")
289
	public ResponseEntity<?> getPendingRechargeCommission(HttpServletRequest request)
290
		throws ProfitMandiBusinessException{
291
		int userId = (int)request.getAttribute(ProfitMandiConstants.USER_ID);
292
		int retailerId = userAccountRepository.selectRetailerIdByUserId(userId);
293
		return responseSender.ok(pendingRechargeCommissionRepository.selectByRetailerId(retailerId));
294
	}
23585 tejbeer 295
 
296
	private RechargeRequest convertRechargeRequest (CreateRechargeRequest createRechargeRequest ){
297
		RechargeRequest rr= new RechargeRequest();
298
		rr.setAmount(createRechargeRequest.getRechargeAmount());
299
		rr.setOperatorId((int) createRechargeRequest.getOperatorId());
300
		rr.setOperatorType(createRechargeRequest.getPlan());
301
		rr.setReferenceNumber(createRechargeRequest.getNumber());
302
		rr.setRechargeType(createRechargeRequest.getRechargeType());
303
 
304
		Set<CustomPaymentOption> pp = new LinkedHashSet<>();
305
		CustomPaymentOption cpo = new CustomPaymentOption();
306
		cpo.setPaymentOption("cash");
307
		cpo.setPaymentOptionId(1);
308
		cpo.setAmount(createRechargeRequest.getRechargeAmount());
309
		pp.add(cpo);
310
		rr.setPaymentOptions(pp);
311
	    return rr;
312
	}
313
 
314
	@PostConstruct  
315
	private void setRechargeCredentials() {
316
		rechargeTransactionMobileCredential = new RechargeCredential();
317
		rechargeTransactionMobileCredential.setRechargeUrl(thinkWalnutDigitalRechargeTransactionMobileUrl);
318
		rechargeTransactionMobileCredential.setRechargeUserName(thinkWalnutDigitalRechargeTransactionMobileUserName);
319
		rechargeTransactionMobileCredential.setRechargePassword(thinkWalnutDigitalRechargeTransactionMobilePassword);
320
		rechargeTransactionMobileCredential.setRechargeAuthKey(thinkWalnutDigitalRechargeAuthKey);
321
 
322
		rechargeTransactionDthCredential = new RechargeCredential();
323
		rechargeTransactionDthCredential.setRechargeUrl(thinkWalnutDigitalRechargeTransactionDthUrl);
324
		rechargeTransactionDthCredential.setRechargeUserName(thinkWalnutDigitalRechargeTransactionDthUserName);
325
		rechargeTransactionDthCredential.setRechargePassword(thinkWalnutDigitalRechargeTransactionDthPassword);
326
		rechargeTransactionDthCredential.setRechargeAuthKey(thinkWalnutDigitalRechargeAuthKey);
327
	}
328
 
23587 tejbeer 329
	@RequestMapping(value = ProfitMandiConstants.URL_CREATE_RECHARGE , method=RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)
330
	@ApiImplicitParams({
331
		@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", 
332
				required = true, dataType = "string", paramType = "header")
333
	})
23585 tejbeer 334
 
22931 ashik.ali 335
	public ResponseEntity<?> createRecharge(HttpServletRequest request, @RequestBody CreateRechargeRequest createRechargeRequest)
336
		throws ProfitMandiBusinessException{
23585 tejbeer 337
		int userId = (int)request.getAttribute(ProfitMandiConstants.USER_ID);
338
		int retailerId = userAccountRepository.selectRetailerIdByUserId(userId);
21514 kshitij.so 339
		String ipAddress  = remoteAddr(request);
23585 tejbeer 340
 
341
	    CreateRechargeResponse crr =  new CreateRechargeResponse();
342
 
343
	    UserAccount userAccount = null;
344
	    UserWallet wallet = null;
345
		wallet = userWalletRepository.selectByRetailerId(retailerId);
346
 
21514 kshitij.so 347
		if (createRechargeRequest.getRechargeAmount() <=0){
348
			crr.setReason("Illegal recharge amount");
349
			crr.setResult(false);
22931 ashik.ali 350
			return responseSender.badRequest(crr);
21514 kshitij.so 351
		}
352
 
353
		if (wallet.getAmount() < createRechargeRequest.getRechargeAmount()){
354
			crr.setReason("You don't have sufficient wallet balance.");
355
			crr.setResult(false);
22931 ashik.ali 356
			return responseSender.badRequest(crr);
21514 kshitij.so 357
		}
358
 
359
		User user = null;
360
		try {
361
			user = userRepository.selectById(userId);
362
		} catch (ProfitMandiBusinessException e) {
363
			log.error("Unable to get user",e);
364
			crr.setReason("We are experiencing some problem right now.");
365
			crr.setResult(false);
22931 ashik.ali 366
			return responseSender.internalServerError(e);
21514 kshitij.so 367
		}
368
 
23585 tejbeer 369
 
370
		RechargeRequest rechargeRequest = convertRechargeRequest(createRechargeRequest);
21514 kshitij.so 371
 
23585 tejbeer 372
		RechargeResponse rechargeResponse = rechargeService.doRecharge(oxigenRechargeTransactionUrl, oxigenRechargeAuthKey, oxigenRechargeValidationUrl,
373
				oxigenRechargeValidationAuthKey, rechargeTransactionMobileCredential, rechargeTransactionDthCredential, retailerId, rechargeRequest);
374
 
375
		crr.setResult(rechargeResponse.getStatus().equals(RechargeStatus.SUCCESS));
376
		crr.setRequestId(rechargeResponse.getRequestId());
377
 
378
		if(RechargeType.valueOf(rechargeRequest.getRechargeType()) == RechargeType.MOBILE) {
379
		 return responseSender.ok(crr);
380
		}else {
381
			 return responseSender.ok(crr);
21514 kshitij.so 382
		}
23585 tejbeer 383
	}
384
 
385
	@RequestMapping(value = ProfitMandiConstants.URL_RECHARGE_SUMMARY , method=RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
386
	@ApiImplicitParams({
387
		@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", 
388
				required = true, dataType = "string", paramType = "header")
389
	})
23592 tejbeer 390
	public ResponseEntity<?>rechargeSummary (HttpServletRequest request , @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit)
23585 tejbeer 391
		throws ProfitMandiBusinessException{
392
		int userId = (int)request.getAttribute(ProfitMandiConstants.USER_ID);
393
		int retailerId = userAccountRepository.selectRetailerIdByUserId(userId);
23592 tejbeer 394
		//RechargeType rechargeType = RechargeType.valueOf(rechargeTypeString);
395
		List<RechargeTransaction> rechargeTransactions =rechargeTransactionRepository.selectAllByRetailerId(retailerId, offset, limit);
23585 tejbeer 396
		for (RechargeTransaction rechargeTransaction : rechargeTransactions) {
397
			 String operatorName=rechargeOperatorRepository.selectById(rechargeTransaction.getOperatorId()).getName();
398
			rechargeTransaction.setOperatorName(operatorName);
21514 kshitij.so 399
		}
23592 tejbeer 400
 
23585 tejbeer 401
			return responseSender.ok(rechargeTransactions);
23592 tejbeer 402
 
23585 tejbeer 403
 
21505 kshitij.so 404
	}
23585 tejbeer 405
 
406
	@RequestMapping(value = ProfitMandiConstants.URL_RECHARGE_COMMISSIONS , method=RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
407
	@ApiImplicitParams({
408
		@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", 
409
				required = true, dataType = "string", paramType = "header")
410
	})
411
	public ResponseEntity<?>rechargeCommissions (HttpServletRequest request,@RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "60") int limit)
412
		throws ProfitMandiBusinessException{
413
		List<RechargeCommission> rechargeCommissions = rechargeCommissionRepository.selectAllPaginated(offset, limit);
414
		for (RechargeCommission rechargeCommission : rechargeCommissions) {
415
			 String operatorName=rechargeOperatorRepository.selectById(rechargeCommission.getOperatorId()).getName();
416
			 RechargeType rechargeType=rechargeOperatorRepository.selectById(rechargeCommission.getOperatorId()).getRechargeType();
417
			 OperatorType operatorType=rechargeOperatorRepository.selectById(rechargeCommission.getOperatorId()).getOperatorType();
418
			 rechargeCommission.setOperatorName(operatorName);
419
			 rechargeCommission.setRechargeType(rechargeType);
420
			 rechargeCommission.setOperatorType(operatorType);
421
		}
422
		Map<Integer,RechargeCommission> commissionMap = rechargeCommissions.stream().collect(Collectors.groupingBy(RechargeCommission::getOperatorId, Collectors.collectingAndThen(
423
				Collectors.reducing((RechargeCommission d1,RechargeCommission d2) -> d1.getAmount() > d2.getAmount() ? d1 : d2),
424
				               Optional::get)));
425
 
426
		return responseSender.ok(commissionMap.values());
427
	}
428
 
429
	@PostConstruct  
430
	private void setRechargeEnquiryCredentials() {
431
		thinkWalnutDigitalRechargeEnquiryCredential = new RechargeCredential();
432
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargeUrl(thinkWalnutDigitalRechargeEnquiryUrl);
433
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargeUserName(thinkWalnutDigitalRechargeEnquiryUserName);
434
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargePassword(thinkWalnutDigitalRechargeEnquiryPassword);
435
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargeAuthKey(thinkWalnutDigitalRechargeAuthKey);
436
	}
23587 tejbeer 437
 
438
	@RequestMapping(value = ProfitMandiConstants.URL_RECHARGE_RESULT , method=RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)
439
	@ApiImplicitParams({
440
		@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", 
441
				required = true, dataType = "string", paramType = "header")
442
	})
443
 
444
 
23585 tejbeer 445
	public ResponseEntity<?> rechargeResult(HttpServletRequest request, @RequestParam(value="requestId") String requestId ) throws ProfitMandiBusinessException{
21517 kshitij.so 446
		RechargeOrder rechargeOrder = null;
447
		RechargeResultPojo rrp = null;
23585 tejbeer 448
 
449
 
450
		//RechargeResponse rr =  new RechargeResponse();
451
		//String requestId = rr.getRequestId();
452
		int userId = (int)request.getAttribute(ProfitMandiConstants.USER_ID);
453
	    int retailerId = userAccountRepository.selectRetailerIdByUserId(userId);
454
 
455
		RechargeResponse rechargeResponse = rechargeService.checkStatus(oxigenRechargeEnquiryUrl, oxigenRechargeAuthKey, thinkWalnutDigitalRechargeEnquiryCredential,retailerId , requestId);
456
		return responseSender.ok(rechargeResponse);
457
 
458
		/* try {
21517 kshitij.so 459
			tc = new TransactionClient();
23585 tejbeer 460
			//rechargeOrder = tc.getClient().getRechargeOrder(rechargeOrderId);
21517 kshitij.so 461
		} catch (TransactionServiceException | TException e) {
462
			// return with internal server error
463
			e.printStackTrace();
464
			rrp = new RechargeResultPojo();
465
			rrp.setIsError(true);
466
			rrp.setDetailDisplayMessage("We are experiencing some problem right now.");
22931 ashik.ali 467
			return responseSender.internalServerError(e);
21517 kshitij.so 468
		}
469
		if (rechargeOrder == null){
470
			rrp = new RechargeResultPojo();
471
			rrp.setIsError(true);
472
			rrp.setDetailDisplayMessage("Recharge order doesnot exist in our system.");
22931 ashik.ali 473
			return responseSender.badRequest(rrp);
21517 kshitij.so 474
		}
475
		String[] os = Utils.getOrderStatus(rechargeOrder.getStatus());
476
		rrp = new RechargeResultPojo();
477
		rrp.setRechargeDeviceNumber(rechargeOrder.getDeviceNumber());
478
		rrp.setRechargeDisplayId(rechargeOrder.getDisplayId());
479
		rrp.setTotalAmount(rechargeOrder.getTotalAmount() + "");
480
		rrp.setRechargeProvider(Utils.getProvider(rechargeOrder.getOperatorId()));
481
		rrp.setIsError(Boolean.parseBoolean(os[0]));
482
		rrp.setRechargeStatus(os[1]);
483
		rrp.setDetailDisplayMessage(os[2]);
21523 kshitij.so 484
		if (rechargeOrder.getStatus().equals(RechargeOrderStatus.RECHARGE_UNKNOWN)){
21517 kshitij.so 485
			rrp.setPoll(true);
23585 tejbeer 486
		}*/
487
 
21517 kshitij.so 488
	}
21514 kshitij.so 489
 
21517 kshitij.so 490
	@RequestMapping(value = ProfitMandiConstants.URL_POLL_RECHARGE , method=RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)
491
	@ApiImplicitParams({
492
		@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", 
493
				required = true, dataType = "string", paramType = "header")
494
	})
21519 kshitij.so 495
	public ResponseEntity<?> pollRechargeResult(HttpServletRequest request, @RequestParam(value="rechargeOrderId") long rechargeOrderId, @RequestParam(value="finalCall") boolean finalCall){
21517 kshitij.so 496
		TransactionClient transactionServiceClient = null;
497
		RechargeOrder t_rechargeOrder = null;
498
		RechargeResultPojo rrp = null;
499
		try{
500
			transactionServiceClient = new TransactionClient();
501
			t_rechargeOrder = transactionServiceClient.getClient().getRcgOrderStatus(rechargeOrderId, finalCall);
502
		}
503
		catch(Exception e){
504
			rrp = new RechargeResultPojo();
505
			rrp.setRechargeStatus("");
22931 ashik.ali 506
			return responseSender.internalServerError(e);
21517 kshitij.so 507
		}
508
		if (t_rechargeOrder == null){
509
			rrp = new RechargeResultPojo();
510
			rrp.setRechargeStatus("");
22931 ashik.ali 511
			return responseSender.badRequest(new RechargeResultPojo());
21517 kshitij.so 512
		}
513
		rrp = new RechargeResultPojo();
22411 amit.gupta 514
		String[] os = Utils.getOrderStatus(t_rechargeOrder.getStatus());
515
		rrp.setIsError(Boolean.parseBoolean(os[0]));
516
		rrp.setRechargeStatus(os[1]);
517
		rrp.setDetailDisplayMessage(os[2]);
22931 ashik.ali 518
		return responseSender.ok(rrp);
21517 kshitij.so 519
	}
21534 kshitij.so 520
 
521
	@RequestMapping(value = ProfitMandiConstants.URL_MY_RECHARGES , method=RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
522
	@ApiImplicitParams({
523
		@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", 
524
				required = true, dataType = "string", paramType = "header")
525
	})
22931 ashik.ali 526
	public ResponseEntity<?> myRecharges(HttpServletRequest request, @RequestParam(value="offset") int offset, @RequestParam(value="limit") int limit) throws ProfitMandiBusinessException{
21534 kshitij.so 527
		TransactionClient tc=null;
528
		int userId = (int)request.getAttribute("userId");
23273 ashik.ali 529
		UserAccount userAccount;
21534 kshitij.so 530
		List<RechargeOrder> rechargeOrders = null;
22931 ashik.ali 531
 
23273 ashik.ali 532
		userAccount = userAccountRepository.selectByUserIdType(userId, AccountType.saholic);
22931 ashik.ali 533
 
21534 kshitij.so 534
		try {
535
			tc = new TransactionClient();
23273 ashik.ali 536
			rechargeOrders = tc.getClient().getPaginatedRechargeOrders(Long.valueOf(userAccount.getAccountKey()), offset, limit);
21534 kshitij.so 537
		} catch (Exception e) {
538
			log.error("Unable to get recharge order list",e);
22931 ashik.ali 539
			return responseSender.internalServerError(e);
21534 kshitij.so 540
		}
541
		List<MyRechargesResponse> myRechargesList = new ArrayList<MyRechargesResponse>();
542
		for (RechargeOrder rechargeOrder : rechargeOrders){
543
			MyRechargesResponse rp = new MyRechargesResponse();
23585 tejbeer 544
		/*	if(rechargeOrder.getRechargeType() == RechargeType.MOBILE){
21534 kshitij.so 545
        		rp.setOperator(Utils.getProvider(rechargeOrder.getOperatorId()));
546
        		rp.setOperatorType("MOBILE");
547
        	}
548
        	if(rechargeOrder.getRechargeType() == RechargeType.DTH){
549
        		rp.setOperator(Utils.getProvider(rechargeOrder.getOperatorId()));
550
        		rp.setOperatorType("DTH");
23585 tejbeer 551
        	}*/
21534 kshitij.so 552
        	rp.setOrderId(rechargeOrder.getId());
553
        	rp.setOperatorId(rechargeOrder.getOperatorId());
554
        	rp.setDate(rechargeOrder.getCreationTimestamp());
555
        	rp.setNumber(rechargeOrder.getDeviceNumber());
556
        	rp.setAmount(rechargeOrder.getTotalAmount());
557
        	rp.setStatus(Utils.getRechargeDisplayStatus(rechargeOrder.getStatus()));
558
        	rp.setDisplayOrderId(rechargeOrder.getDisplayId());
559
        	myRechargesList.add(rp);
560
		}
22931 ashik.ali 561
		return responseSender.ok(myRechargesList);
21534 kshitij.so 562
	}
21517 kshitij.so 563
 
21534 kshitij.so 564
 
21514 kshitij.so 565
	private String remoteAddr(HttpServletRequest request) {
566
		String remoteAddr = "";
567
		String x;
23101 amit.gupta 568
		x = request.getHeader(X_REAL_IP);
569
		log.info("Value of X_REAL_IP is [{}]", x);
21514 kshitij.so 570
		if (x != null && !x.isEmpty()) {
571
			remoteAddr = x;
572
			int idx = remoteAddr.lastIndexOf(',');
573
			if (idx > -1) {
574
				remoteAddr = remoteAddr.substring(idx + 1).trim();
575
			}
576
		} else {
577
			remoteAddr = request.getRemoteAddr();
23100 amit.gupta 578
			log.info("Value of remoteAddr is [{}]", remoteAddr);
21514 kshitij.so 579
		}
580
		return remoteAddr;
581
	}
582
 
23585 tejbeer 583
	/*private String validateRecharge(RechargeType rechargeType, String number, long operatorId, String ipAddress){
21514 kshitij.so 584
		TransactionClient tcl;
585
		try {
586
			tcl = new TransactionClient();
23585 tejbeer 587
		//	String result = tcl.getClient().validateRecharge(rechargeType, number, operatorId, ipAddress);
588
			//log.info("validateRecharge Called" + number + " and rechargeType : " +  rechargeType + ", IP:" + ipAddress + ", Operator:" + operatorId + ", Result:" + result);
589
			//return result;
21514 kshitij.so 590
		} catch (Exception e) {
591
			log.error("Unable to get service provider for Device number " + number + " and rechargeType : " +  rechargeType, e);
592
		}
593
		return "Oops! There seems to be a problem. Please try after some time";
23585 tejbeer 594
	}*/
21514 kshitij.so 595
 
596
 
21464 kshitij.so 597
}