Rev 6336 | Rev 6443 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.serving.controllers;import in.shop2020.datalogger.EventType;import in.shop2020.model.v1.order.OrderType;import in.shop2020.model.v1.order.RechargeCoupon;import in.shop2020.model.v1.order.RechargeOrder;import in.shop2020.model.v1.order.RechargeOrderStatus;import in.shop2020.model.v1.order.RechargePlan;import in.shop2020.model.v1.order.RechargeType;import in.shop2020.model.v1.order.UserWallet;import in.shop2020.model.v1.user.User;import in.shop2020.model.v1.user.UserContextException;import in.shop2020.serving.utils.DesEncrypter;import in.shop2020.serving.utils.Utils;import in.shop2020.thrift.clients.HelperClient;import in.shop2020.thrift.clients.TransactionClient;import in.shop2020.thrift.clients.UserClient;import in.shop2020.utils.DataLogger;import in.shop2020.utils.Mail;import java.util.ArrayList;import java.util.List;import java.util.Random;import nl.captcha.Captcha;import org.apache.log4j.Logger;import org.apache.struts2.convention.annotation.Result;import org.apache.struts2.convention.annotation.Results;import org.apache.thrift.TException;import org.apache.thrift.transport.TTransportException;@Results({@Result(name="recharge-pay-options-redirect", type="redirectAction", params = {"actionName" , "recharge-pay-options", "rechargeOrderId", "${rechargeOrderId}"}),@Result(name="create-recharge-redirect", type="redirectAction", params = {"actionName" , "wallet-only-payment", "rechargeOrderId", "${rechargeOrderId}"}),@Result(name="recharge-redirect", type="redirectAction", params = {"actionName" , "recharge", "error", "${errorMessage}"})})public class ConfirmController extends BaseController{/****/private static final long serialVersionUID = 1L;private long rechargeOrderId = 0;private String amount = "";private String walletAmountUsed = "0";private String operator = "";private String number = "";private String email = "";private String rechargeType = "";private DesEncrypter desEncrypter = new DesEncrypter("saholic");private List<String> couponIds = null;private List<RechargeCoupon> coupons = null;private String userId;private String message = "";private String errorMessage = "";private String totalAmount = "";private String plan = "";private String circleCode;private static final String chars = "abcdefghijklmonpqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";private static final Random random = new Random();private static final int LENGTH = 10;private static Logger log = Logger.getLogger(Class.class);public String index() {return "index";}public String create() {errorMessage = validateRecharge();if(!errorMessage.equals("SUCCESS")){DataLogger.logData(EventType.PROVIDER_FETCH_FAILURE, getSessionId(), userinfo.getUserId(), userinfo.getEmail(),rechargeType.toString(), number, operator);return "recharge-redirect";}setErrorMessage("");setTotalAmount(amount);if(userinfo.isLoggedIn()) {setUserId("" + userinfo.getUserId());try {TransactionClient tc = new TransactionClient();UserWallet wallet = tc.getClient().getUserWallet(userinfo.getUserId());long amountA = 0;if(wallet.getAmount() == 0){setMessage("Your RechargeWallet is empty.");} else if ((amountA = wallet.getAmount() - Long.parseLong(amount)) >= 0) {setAmount("0");setMessage("You now have Rs. " + amountA + " left in your RechargeWallet.");setWalletAmountUsed("" + (wallet.getAmount() - amountA));} else {setAmount("" + (0-amountA));setMessage("You have used all the amount in your RechargeWallet.");setWalletAmountUsed(("" + wallet.getAmount()));}} catch (Exception e) {log.error("Unable to get user wallet", e);}} else {long tempUserId = createUserAndSendMail(email);if(tempUserId == -1){errorMessage = "Oops! There seems to be a problem. Please try after some time";return "recharge-redirect";} else {setUserId("" + tempUserId);}}return index();}public String validateRecharge(){TransactionClient tcl;try {tcl = new TransactionClient();return tcl.getClient().validateRecharge(RechargeType.findByValue(Integer.parseInt(this.rechargeType)), number, Long.parseLong(operator));} catch (Exception e) {log.error("Unable to get service provider for Device number " + number + " and rechargeType : " + rechargeType, e);}return "Oops! There seems to be a problem. Please try after some time";}public boolean shouldPromptForWallet(){if(!isLoggedIn()) {try {TransactionClient tc = new TransactionClient();UserWallet wallet = tc.getClient().getUserWallet(Long.parseLong(userId));if(wallet.getAmount() != 0) {return true;}} catch (Exception e) {log.error("Unable to get wallet for userId : " + userId, e);}}return false;}public String createRecharge(){if (amount.equals("0")) {if (!verifyCaptcha()) {setErrorMessage("Invalid captcha. Try Again.");log.info("Invalid captcha error msg has been added");return index();}}try {TransactionClient tc = new TransactionClient();List<RechargePlan> plans = tc.getClient().getPlansForOperator(Long.parseLong(operator));List<String> planNameList = new ArrayList<String>();if (plans == null || plans.isEmpty()) {setPlan("");} else {for (RechargePlan tempPlan : plans) {planNameList.add(tempPlan.getName());}if (!planNameList.contains(plan)) {errorMessage = "Oops! There seems to be a problem. Please try after some time";log.warn("OperatorId : " + operator + " and plan : " + plan + " do not match");return "recharge-redirect";}}RechargeOrder rechargeOrder = new RechargeOrder();rechargeOrder.setTotalAmount(Long.parseLong(totalAmount));rechargeOrder.setUserEmailId(email);rechargeOrder.setUserId(Long.parseLong(userId));rechargeOrder.setDeviceNumber(number);rechargeOrder.setPlan(plan);rechargeOrder.setOperatorId(Long.parseLong(operator));rechargeOrder.setRechargeType(RechargeType.findByValue(Integer.parseInt(rechargeType)));rechargeOrder.setStatus(RechargeOrderStatus.PAYMENT_PENDING);rechargeOrder.setOrderType(OrderType.B2C);rechargeOrder.setWalletAmount(Long.parseLong(getWalletAmountUsed()));TransactionClient tc1 = new TransactionClient();rechargeOrder = tc1.getClient().createRechargeOrder(rechargeOrder);setRechargeOrderId(rechargeOrder.getId());} catch (Exception e) {log.error("Unable to create recharge order", e);errorMessage = "Oops! There seems to be a problem. Please try after some time";return "recharge-redirect";}if(amount.equals("0")) {return "create-recharge-redirect";} else {return "recharge-pay-options-redirect";}}private boolean verifyCaptcha() {String cookieCaptchaAnswer = getCookie(Captcha.NAME, true, "saholic");String captchaReceived = (String) request.getParameter("captcha_response_field");if (captchaReceived.equalsIgnoreCase(cookieCaptchaAnswer)) {try {DataLogger.logData(EventType.CAPTCHA_SUCCESS, getSessionId(), userinfo.getUserId(), userinfo.getEmail());} catch (Exception e1) {log.warn("Unable to log orders through the datalogger", e1);}return true;}else {try {DataLogger.logData(EventType.CAPTCHA_FAILED, getSessionId(), userinfo.getUserId(), userinfo.getEmail());} catch (Exception e1) {log.warn("Unable to log orders through the datalogger", e1);}return false;}}private static String generateNewPassword() {char[] buf = new char[LENGTH];for (int i = 0; i < buf.length; i++) {buf[i] = chars.charAt(random.nextInt(chars.length()));}return new String(buf);}private long createUserAndSendMail(String email) {User user = null;String password = null;try{UserClient ucl = new UserClient();user = ucl.getClient().getUserByEmail(email);if(user.getUserId() == -1) {user.setEmail(email);password = generateNewPassword();String encryptedPassword = desEncrypter.encrypt(password);user.setPassword(encryptedPassword);user.setCommunicationEmail(email);UserClient userContextServiceClient = new UserClient();in.shop2020.model.v1.user.UserContextService.Client userClient = userContextServiceClient.getClient();user = userClient.createUser(user);List<String> toList = new ArrayList<String>();toList.add(email);HelperClient helperServiceClient = null;helperServiceClient = new HelperClient();in.shop2020.utils.HelperService.Client client = helperServiceClient.getClient();Mail mail = new Mail();mail.setSubject("Saholic Registration successful");mail.setTo(toList);mail.setData("Your have successfully registered with Saholic.com. Your user name is: " + email + " and your password is: " + password);client.sendMail(mail);}}catch (UserContextException ux){return -1;} catch (TTransportException e) {return -1;} catch (TException e) {return -1;} catch (Exception e) {log.error("Unexpected error while mailing the new password");return -1;}return user.getUserId();}public String getOperatorName() {String operatorName = null;if(rechargeType.equals("1")){operatorName = Utils.getMobileProvidersMap().get(Long.parseLong(operator));}if(rechargeType.equals("2")){operatorName = Utils.getDthProvidersMap().get(Long.parseLong(operator));}if(operatorName == null){operatorName = "N/A";}return operatorName;}public String getAmount() {return amount;}public void setAmount(String amount) {this.amount = amount;}public void setDthamount(String amount) {this.amount = amount;}public String getOperator() {return operator;}public void setOperator(String operator) {this.operator = operator;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public void setDthnumber(String dthnumber) {this.number = dthnumber;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public void setCouponIds(List<String> couponIds) {this.couponIds = couponIds;}public List<String> getCouponIds() {return couponIds;}public void setCoupons(List<RechargeCoupon> coupons) {this.coupons = coupons;}public List<RechargeCoupon> getCoupons() {return coupons;}public String getRechargeType() {return rechargeType;}public void setRechargeType(String rechargeType) {this.rechargeType = rechargeType;}public String getUserId() {return userId;}public void setUserId(String userId) {this.userId = userId;}public boolean isLoggedIn() {return userinfo.isLoggedIn();}public void setMessage(String message) {this.message = message;}public String getMessage() {return message;}public long getRechargeOrderId() {return rechargeOrderId;}public void setRechargeOrderId(long l) {this.rechargeOrderId = l;}public String getTotalAmount() {return totalAmount;}public void setTotalAmount(String amount) {this.totalAmount = amount;}public String getWalletAmountUsed() {return walletAmountUsed;}public void setWalletAmountUsed(String walletAmountUsed) {this.walletAmountUsed = walletAmountUsed;}public String getPlan() {return plan;}public void setPlan(String plan) {this.plan = plan;}public String getErrorMessage() {return errorMessage;}public void setErrorMessage(String errorMessage) {this.errorMessage = errorMessage;}public String getCircleCode() {return circleCode;}public void setCircleCode(String circleCode) {this.circleCode = circleCode;}}