Subversion Repositories SmartDukaan

Rev

Rev 8738 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020.serving.controllers;

import in.shop2020.config.ConfigException;
import in.shop2020.model.v1.order.RechargeOrder;
import in.shop2020.model.v1.order.RechargeOrderStatus;
import in.shop2020.model.v1.order.TransactionServiceException;
import in.shop2020.payments.Payment;
import in.shop2020.payments.PaymentException;
import in.shop2020.payments.PaymentStatus;
import in.shop2020.serving.utils.ebs.Base64;
import in.shop2020.serving.utils.ebs.RC4;
import in.shop2020.thrift.clients.PaymentClient;
import in.shop2020.thrift.clients.TransactionClient;
import in.shop2020.thrift.clients.UserClient;
import in.shop2020.thrift.clients.config.ConfigClient;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.TreeMap;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.apache.thrift.TException;

public class WalletOnlyPaymentController {
    private static Logger log = Logger.getLogger(Class.class);

    private static final String FLAG_KEY = "IsFlagged";
    private static final String TXN_KEY = "TransactionID";
    private static final String AUTH_TXN_ID = "AuthTxnId";

    private static String successUrl;
    private static String errorUrl;
    private static String rechargeResultUri;
    private RechargeOrder rechargeOrder = null;

    /**
     * The secret key used to decode RC4 encoded data.
     */
    private static String accountKey;

    private String redirectUrl;

    static{
        try {
            successUrl = ConfigClient.getClient().get("ebs_success_url");
            errorUrl = ConfigClient.getClient().get("ebs_error_url");
            rechargeResultUri = ConfigClient.getClient().get("recharge_success_url");
            accountKey = ConfigClient.getClient().get("ebs_secret_key");
        } catch (ConfigException e) {
            log.error("Unable to get success and error usr info from config server.");
        }
    }

    private Map<String, String> paymentParams = new TreeMap<String, String>();

    private String rechargeOrderId;

    private HttpServletRequest request;

    public String index() {
        StringBuffer data1 = new StringBuffer(rechargeOrderId);
        log.info("Received rechargeORder Id : " + data1.toString());
        //byte[] result = decodeRecvdData(data1);

        //String recvString = parseRecvdData(result);
        //updatePaymentParams(recvString);

        PaymentClient paymentServiceClient = null;
        TransactionClient transactionServiceClient = null;
        UserClient userServiceClient = null;
        try {
            paymentServiceClient = new PaymentClient();
            transactionServiceClient = new TransactionClient();
            userServiceClient = new UserClient();
        } catch (Exception e) {
            log.error("Unable to initialize one of the clients", e);
        }


        //long merchantPaymentId = Long.parseLong(paymentParams.get("MerchantRefNo"));
        //String gatewayPaymentId = paymentParams.get("PaymentID");
        //double amount = Double.parseDouble(paymentParams.get("Amount"));
//        String isFlagged = paymentParams.get(FLAG_KEY);
//        String gatewayTxnStatus = paymentParams.get("ResponseCode");
//        String description = paymentParams.get("ResponseMessage");
//        String authTxnId = paymentParams.get(TXN_KEY);

        Payment payment = null;
        Long txnId = null;
        try {
            //payment = paymentServiceClient.getClient().getPayment(merchantPaymentId);
            //txnId = payment.getMerchantTxnId();
            /**
             * CREATE PAYMENT
             */
            rechargeOrder = transactionServiceClient.getClient().getRechargeOrder(Long.parseLong(rechargeOrderId));
            
            List<Payment> payments = paymentServiceClient.getClient().getPaymentForRechargeTxnId(rechargeOrder.getTransactionId());
            if(payments.size() > 0) {
                throw new PaymentException(rechargeOrder.getId(), "Payment already exists for recharge");
            }
            Long merchantPaymentId = 0l;
            if (rechargeOrder.getWalletAmount() +  rechargeOrder.getCouponAmount() != rechargeOrder.getTotalAmount()) {
                log.error("Wallet amount : " + rechargeOrder.getWalletAmount() 
                        + ", coupon amount : " + rechargeOrder.getCouponAmount() + " and total amount : " + rechargeOrder.getTotalAmount());
                merchantPaymentId = paymentServiceClient.getClient().createPayment(rechargeOrder.getUserId(), rechargeOrder.getTotalAmount(), 8, rechargeOrder.getTransactionId(), true);
                paymentServiceClient.getClient().updatePaymentDetails(merchantPaymentId, "",
                        "", "0", "", "", "", "", "", PaymentStatus.FAILED, "", null);
                transactionServiceClient.getClient().updateRechargeOrderStatus(rechargeOrder.getId(),  RechargeOrderStatus.PAYMENT_FAILED);
            } else {
                merchantPaymentId = paymentServiceClient.getClient().createPayment(rechargeOrder.getUserId(), rechargeOrder.getTotalAmount(), 8, rechargeOrder.getTransactionId(), true);
                //Update payment status as authorized
                paymentServiceClient.getClient().updatePaymentDetails(merchantPaymentId, "",
                        "", "0", "", "", "", "", "", PaymentStatus.SUCCESS, "", null);
                transactionServiceClient.getClient().updateRechargeOrderStatus(rechargeOrder.getId(),  RechargeOrderStatus.PAYMENT_SUCCESSFUL);
            }
            this.redirectUrl = rechargeResultUri + "?paymentId=" + merchantPaymentId;
        } catch (PaymentException e) {
            log.error("Unable to mark the payment as authorized", e);
        } catch (TException e) {
            log.error("Unable to mark the payment as authorized", e);
        } catch (TransactionServiceException e) {
            // TODO Auto-generated catch block
            log.error("Unable to recharge");
        }

            //DataLogger.logData(EventType.PAYMENT_FAILURE, getSessionId(), userinfo.getUserId(), userinfo.getEmail(), Long.toString(merchantPaymentId), gatewayPaymentId,
            //        gatewayTxnStatus, description);
        log.info("User will be redirected to: " + this.redirectUrl);
        return "index";
    }

    public String getRedirectUrl(){
        return this.redirectUrl;
    }

    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }

    public Map<String, String> getPaymentParams() {
        return paymentParams;
    }


    public static String getRechargeResultUri() {
        return rechargeResultUri;
    }

    public String getRechargeOrderId() {
        return rechargeOrderId;
    }

    public void setRechargeOrderId(String rechargeOrderId) {
        this.rechargeOrderId = rechargeOrderId;
    }

}