Subversion Repositories SmartDukaan

Rev

Rev 23585 | Rev 23592 | 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
	})
390
	public ResponseEntity<?>rechargeSummary (HttpServletRequest request ,@RequestParam(name = ProfitMandiConstants.RECHARGE_TYPE) String rechargeTypeString, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit)
391
		throws ProfitMandiBusinessException{
392
		int userId = (int)request.getAttribute(ProfitMandiConstants.USER_ID);
393
		int retailerId = userAccountRepository.selectRetailerIdByUserId(userId);
394
		RechargeType rechargeType = RechargeType.valueOf(rechargeTypeString);
395
		List<RechargeTransaction> rechargeTransactions =rechargeTransactionRepository.selectAllByRetailerIdAndType(retailerId, rechargeType, offset, limit);
396
		for (RechargeTransaction rechargeTransaction : rechargeTransactions) {
397
			 String operatorName=rechargeOperatorRepository.selectById(rechargeTransaction.getOperatorId()).getName();
398
			rechargeTransaction.setOperatorName(operatorName);
21514 kshitij.so 399
		}
23585 tejbeer 400
		if(RechargeType.valueOf(rechargeTypeString) == RechargeType.MOBILE) {
401
			return responseSender.ok(rechargeTransactions);
402
		}else {
403
			return responseSender.ok(rechargeTransactions);
21514 kshitij.so 404
		}
23585 tejbeer 405
 
21505 kshitij.so 406
	}
23585 tejbeer 407
 
408
	@RequestMapping(value = ProfitMandiConstants.URL_RECHARGE_COMMISSIONS , method=RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
409
	@ApiImplicitParams({
410
		@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", 
411
				required = true, dataType = "string", paramType = "header")
412
	})
413
	public ResponseEntity<?>rechargeCommissions (HttpServletRequest request,@RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "60") int limit)
414
		throws ProfitMandiBusinessException{
415
		List<RechargeCommission> rechargeCommissions = rechargeCommissionRepository.selectAllPaginated(offset, limit);
416
		for (RechargeCommission rechargeCommission : rechargeCommissions) {
417
			 String operatorName=rechargeOperatorRepository.selectById(rechargeCommission.getOperatorId()).getName();
418
			 RechargeType rechargeType=rechargeOperatorRepository.selectById(rechargeCommission.getOperatorId()).getRechargeType();
419
			 OperatorType operatorType=rechargeOperatorRepository.selectById(rechargeCommission.getOperatorId()).getOperatorType();
420
			 rechargeCommission.setOperatorName(operatorName);
421
			 rechargeCommission.setRechargeType(rechargeType);
422
			 rechargeCommission.setOperatorType(operatorType);
423
		}
424
		Map<Integer,RechargeCommission> commissionMap = rechargeCommissions.stream().collect(Collectors.groupingBy(RechargeCommission::getOperatorId, Collectors.collectingAndThen(
425
				Collectors.reducing((RechargeCommission d1,RechargeCommission d2) -> d1.getAmount() > d2.getAmount() ? d1 : d2),
426
				               Optional::get)));
427
 
428
		return responseSender.ok(commissionMap.values());
429
	}
430
 
431
	@PostConstruct  
432
	private void setRechargeEnquiryCredentials() {
433
		thinkWalnutDigitalRechargeEnquiryCredential = new RechargeCredential();
434
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargeUrl(thinkWalnutDigitalRechargeEnquiryUrl);
435
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargeUserName(thinkWalnutDigitalRechargeEnquiryUserName);
436
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargePassword(thinkWalnutDigitalRechargeEnquiryPassword);
437
		thinkWalnutDigitalRechargeEnquiryCredential.setRechargeAuthKey(thinkWalnutDigitalRechargeAuthKey);
438
	}
23587 tejbeer 439
 
440
	@RequestMapping(value = ProfitMandiConstants.URL_RECHARGE_RESULT , method=RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)
441
	@ApiImplicitParams({
442
		@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", 
443
				required = true, dataType = "string", paramType = "header")
444
	})
445
 
446
 
23585 tejbeer 447
	public ResponseEntity<?> rechargeResult(HttpServletRequest request, @RequestParam(value="requestId") String requestId ) throws ProfitMandiBusinessException{
21517 kshitij.so 448
		RechargeOrder rechargeOrder = null;
449
		RechargeResultPojo rrp = null;
23585 tejbeer 450
 
451
 
452
		//RechargeResponse rr =  new RechargeResponse();
453
		//String requestId = rr.getRequestId();
454
		int userId = (int)request.getAttribute(ProfitMandiConstants.USER_ID);
455
	    int retailerId = userAccountRepository.selectRetailerIdByUserId(userId);
456
 
457
		RechargeResponse rechargeResponse = rechargeService.checkStatus(oxigenRechargeEnquiryUrl, oxigenRechargeAuthKey, thinkWalnutDigitalRechargeEnquiryCredential,retailerId , requestId);
458
		return responseSender.ok(rechargeResponse);
459
 
460
		/* try {
21517 kshitij.so 461
			tc = new TransactionClient();
23585 tejbeer 462
			//rechargeOrder = tc.getClient().getRechargeOrder(rechargeOrderId);
21517 kshitij.so 463
		} catch (TransactionServiceException | TException e) {
464
			// return with internal server error
465
			e.printStackTrace();
466
			rrp = new RechargeResultPojo();
467
			rrp.setIsError(true);
468
			rrp.setDetailDisplayMessage("We are experiencing some problem right now.");
22931 ashik.ali 469
			return responseSender.internalServerError(e);
21517 kshitij.so 470
		}
471
		if (rechargeOrder == null){
472
			rrp = new RechargeResultPojo();
473
			rrp.setIsError(true);
474
			rrp.setDetailDisplayMessage("Recharge order doesnot exist in our system.");
22931 ashik.ali 475
			return responseSender.badRequest(rrp);
21517 kshitij.so 476
		}
477
		String[] os = Utils.getOrderStatus(rechargeOrder.getStatus());
478
		rrp = new RechargeResultPojo();
479
		rrp.setRechargeDeviceNumber(rechargeOrder.getDeviceNumber());
480
		rrp.setRechargeDisplayId(rechargeOrder.getDisplayId());
481
		rrp.setTotalAmount(rechargeOrder.getTotalAmount() + "");
482
		rrp.setRechargeProvider(Utils.getProvider(rechargeOrder.getOperatorId()));
483
		rrp.setIsError(Boolean.parseBoolean(os[0]));
484
		rrp.setRechargeStatus(os[1]);
485
		rrp.setDetailDisplayMessage(os[2]);
21523 kshitij.so 486
		if (rechargeOrder.getStatus().equals(RechargeOrderStatus.RECHARGE_UNKNOWN)){
21517 kshitij.so 487
			rrp.setPoll(true);
23585 tejbeer 488
		}*/
489
 
21517 kshitij.so 490
	}
21514 kshitij.so 491
 
21517 kshitij.so 492
	@RequestMapping(value = ProfitMandiConstants.URL_POLL_RECHARGE , method=RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)
493
	@ApiImplicitParams({
494
		@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", 
495
				required = true, dataType = "string", paramType = "header")
496
	})
21519 kshitij.so 497
	public ResponseEntity<?> pollRechargeResult(HttpServletRequest request, @RequestParam(value="rechargeOrderId") long rechargeOrderId, @RequestParam(value="finalCall") boolean finalCall){
21517 kshitij.so 498
		TransactionClient transactionServiceClient = null;
499
		RechargeOrder t_rechargeOrder = null;
500
		RechargeResultPojo rrp = null;
501
		try{
502
			transactionServiceClient = new TransactionClient();
503
			t_rechargeOrder = transactionServiceClient.getClient().getRcgOrderStatus(rechargeOrderId, finalCall);
504
		}
505
		catch(Exception e){
506
			rrp = new RechargeResultPojo();
507
			rrp.setRechargeStatus("");
22931 ashik.ali 508
			return responseSender.internalServerError(e);
21517 kshitij.so 509
		}
510
		if (t_rechargeOrder == null){
511
			rrp = new RechargeResultPojo();
512
			rrp.setRechargeStatus("");
22931 ashik.ali 513
			return responseSender.badRequest(new RechargeResultPojo());
21517 kshitij.so 514
		}
515
		rrp = new RechargeResultPojo();
22411 amit.gupta 516
		String[] os = Utils.getOrderStatus(t_rechargeOrder.getStatus());
517
		rrp.setIsError(Boolean.parseBoolean(os[0]));
518
		rrp.setRechargeStatus(os[1]);
519
		rrp.setDetailDisplayMessage(os[2]);
22931 ashik.ali 520
		return responseSender.ok(rrp);
21517 kshitij.so 521
	}
21534 kshitij.so 522
 
523
	@RequestMapping(value = ProfitMandiConstants.URL_MY_RECHARGES , method=RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
524
	@ApiImplicitParams({
525
		@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", 
526
				required = true, dataType = "string", paramType = "header")
527
	})
22931 ashik.ali 528
	public ResponseEntity<?> myRecharges(HttpServletRequest request, @RequestParam(value="offset") int offset, @RequestParam(value="limit") int limit) throws ProfitMandiBusinessException{
21534 kshitij.so 529
		TransactionClient tc=null;
530
		int userId = (int)request.getAttribute("userId");
23273 ashik.ali 531
		UserAccount userAccount;
21534 kshitij.so 532
		List<RechargeOrder> rechargeOrders = null;
22931 ashik.ali 533
 
23273 ashik.ali 534
		userAccount = userAccountRepository.selectByUserIdType(userId, AccountType.saholic);
22931 ashik.ali 535
 
21534 kshitij.so 536
		try {
537
			tc = new TransactionClient();
23273 ashik.ali 538
			rechargeOrders = tc.getClient().getPaginatedRechargeOrders(Long.valueOf(userAccount.getAccountKey()), offset, limit);
21534 kshitij.so 539
		} catch (Exception e) {
540
			log.error("Unable to get recharge order list",e);
22931 ashik.ali 541
			return responseSender.internalServerError(e);
21534 kshitij.so 542
		}
543
		List<MyRechargesResponse> myRechargesList = new ArrayList<MyRechargesResponse>();
544
		for (RechargeOrder rechargeOrder : rechargeOrders){
545
			MyRechargesResponse rp = new MyRechargesResponse();
23585 tejbeer 546
		/*	if(rechargeOrder.getRechargeType() == RechargeType.MOBILE){
21534 kshitij.so 547
        		rp.setOperator(Utils.getProvider(rechargeOrder.getOperatorId()));
548
        		rp.setOperatorType("MOBILE");
549
        	}
550
        	if(rechargeOrder.getRechargeType() == RechargeType.DTH){
551
        		rp.setOperator(Utils.getProvider(rechargeOrder.getOperatorId()));
552
        		rp.setOperatorType("DTH");
23585 tejbeer 553
        	}*/
21534 kshitij.so 554
        	rp.setOrderId(rechargeOrder.getId());
555
        	rp.setOperatorId(rechargeOrder.getOperatorId());
556
        	rp.setDate(rechargeOrder.getCreationTimestamp());
557
        	rp.setNumber(rechargeOrder.getDeviceNumber());
558
        	rp.setAmount(rechargeOrder.getTotalAmount());
559
        	rp.setStatus(Utils.getRechargeDisplayStatus(rechargeOrder.getStatus()));
560
        	rp.setDisplayOrderId(rechargeOrder.getDisplayId());
561
        	myRechargesList.add(rp);
562
		}
22931 ashik.ali 563
		return responseSender.ok(myRechargesList);
21534 kshitij.so 564
	}
21517 kshitij.so 565
 
21534 kshitij.so 566
 
21514 kshitij.so 567
	private String remoteAddr(HttpServletRequest request) {
568
		String remoteAddr = "";
569
		String x;
23101 amit.gupta 570
		x = request.getHeader(X_REAL_IP);
571
		log.info("Value of X_REAL_IP is [{}]", x);
21514 kshitij.so 572
		if (x != null && !x.isEmpty()) {
573
			remoteAddr = x;
574
			int idx = remoteAddr.lastIndexOf(',');
575
			if (idx > -1) {
576
				remoteAddr = remoteAddr.substring(idx + 1).trim();
577
			}
578
		} else {
579
			remoteAddr = request.getRemoteAddr();
23100 amit.gupta 580
			log.info("Value of remoteAddr is [{}]", remoteAddr);
21514 kshitij.so 581
		}
582
		return remoteAddr;
583
	}
584
 
23585 tejbeer 585
	/*private String validateRecharge(RechargeType rechargeType, String number, long operatorId, String ipAddress){
21514 kshitij.so 586
		TransactionClient tcl;
587
		try {
588
			tcl = new TransactionClient();
23585 tejbeer 589
		//	String result = tcl.getClient().validateRecharge(rechargeType, number, operatorId, ipAddress);
590
			//log.info("validateRecharge Called" + number + " and rechargeType : " +  rechargeType + ", IP:" + ipAddress + ", Operator:" + operatorId + ", Result:" + result);
591
			//return result;
21514 kshitij.so 592
		} catch (Exception e) {
593
			log.error("Unable to get service provider for Device number " + number + " and rechargeType : " +  rechargeType, e);
594
		}
595
		return "Oops! There seems to be a problem. Please try after some time";
23585 tejbeer 596
	}*/
21514 kshitij.so 597
 
598
 
21464 kshitij.so 599
}