Subversion Repositories SmartDukaan

Rev

Rev 14642 | Rev 14644 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020;

import in.shop2020.model.v1.order.OrderSource;
import in.shop2020.model.v1.order.OrderStatus;
import in.shop2020.thrift.clients.TransactionClient;
import in.shop2020.utils.GmailUtils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.mail.MessagingException;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;



public class SnapdealOrderStatusReconciliation{
        private static Logger logger;
        
        static String emailFromAddress;
        static String password;
        static GmailUtils mailer;
        static String sendTo[];
        
        static {
                emailFromAddress = "build-staging@shop2020.in";
                password = "shop2020";
                mailer = new GmailUtils();
                sendTo = new String[] { "kshitij.sood@shop2020.in", "manish.sharma@shop2020.in", "amit.gupta@shop2020.in" };
        }

        public static void main(String[] args) throws UnsupportedEncodingException, MessagingException{
                try{
                        logger = LoggerFactory.getLogger(SnapdealOrderStatusReconciliation.class);
                        /*List<OrderStatus> statuses = new ArrayList<OrderStatus>();
                        statuses.add(OrderStatus.SHIPPED_FROM_WH);
                        statuses.add(OrderStatus.SHIPPED_TO_LOGST);*/

                        Map<String,List<List<String>>> orderDataMap = new HashMap<String,List<List<String>>>();
                        List<List<String>> deliveredOrderDataList = new ArrayList<List<String>>();
                        List<List<String>> cancelledOrderDataList = new ArrayList<List<String>>();
                        long minCreationDate = 0l;
                        long currentTime = System.currentTimeMillis();

                        Calendar cal = Calendar.getInstance();
                        cal.add(Calendar.DAY_OF_MONTH, -60);
                        minCreationDate = cal.getTimeInMillis();
                        /*TransactionClient tsc = null;
                        try {
                                tsc = new TransactionClient();
                                minCreationDate = tsc.getClient().getMinCreatedTimeStampUndeliveredOrdersForSource(OrderSource.SNAPDEAL.getValue());
                                minCreationDate = 1393612200000l;
                        } catch (Exception e) {
                                logger.error("Unable to establish connection to the transaction service while getting Minimum Order Created Timstamp for Undelivered Orders ", e);
                        }//Dec 14, 2013 12:00:00 AM  1383291412000l
                         */
                        SimpleDateFormat snapdealDateFormat = new SimpleDateFormat("yyyy/MM/dd");
                        SimpleDateFormat gotSnapdealDateFormat = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss aaa");
                        SimpleDateFormat ourDBDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        String startDate= "";
                        Date start_date = new Date(minCreationDate);
                        Date end_date = new Date(currentTime);
                        if(minCreationDate > 0l){
                                startDate = snapdealDateFormat.format(new Date(minCreationDate));
                        }
                        else{
                                startDate = snapdealDateFormat.format(new Date(currentTime));
                        }
                        logger.info("Snapdeal Order Recon Start Date .. "+startDate);
                        //startDate = startDate.replace("-", "%2F");

                        String endDate = snapdealDateFormat.format(new Date(System.currentTimeMillis()));
                        logger.info("Snapdeal Order Recon End Date .. "+endDate);
                        //endDate = endDate.replace("-", "%2F");


                        HttpClient client = new DefaultHttpClient();

                        HttpGet get = new HttpGet("http://selleraccounts.snapdeal.com/keymaker/login");
                        HttpResponse response = null;
                        try {
                                response = client.execute(get);
                        } catch (Exception e) {
                                e.printStackTrace();
                                throw new Exception("Excption while login to snapdeal panel");
                        } 
                        BufferedReader rd = null;
                        try {
                                rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                        } catch (Exception e1) {
                                e1.printStackTrace();
                                throw new Exception("Excption while reading login response");
                        } 
                        String line = "";
                        StringBuffer sb = new StringBuffer();
                        try {
                                while ((line = rd.readLine()) != null) {
                                        sb.append(line);
                                        //System.out.println(line);
                                }
                        } catch (IOException e) {
                                e.printStackTrace();
                                throw new Exception("Excption while reading login response");
                        }
                        int i= sb.toString().indexOf("name=\"lt\" value=");
                        char[] charArray = sb.toString().toCharArray();
                        String lt = "";
                        int j=0;
                        for(j=i+16;j<=charArray.length;j++){

                                if(charArray[j]==' '){
                                        break;
                                }
                        }
                        lt = sb.substring(i+17,j-1);
                        System.out.println("LT VALUE " + lt);
                        i= sb.toString().indexOf("name=\"execution\" value=");
                        charArray = sb.toString().toCharArray();

                        String ex = "";
                        j=0;
                        for(j=i+24;j<=charArray.length;j++){
                                if(charArray[j]==' '){
                                        break;
                                }
                        }
                        ex = sb.substring(i+24,j-1);
                        System.out.println("EXECUTION VALUE " + ex);    



                        HttpPost post = new HttpPost("http://selleraccounts.snapdeal.com/login?service=http%3A%2F%2Fshipping.snapdeal.com%2Fj_spring_cas_security_check");
                        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                        //nameValuePairs.add(new BasicNameValuePair("username",
                        //"khushal.bhatia@saholic.com"));
                        nameValuePairs.add(new BasicNameValuePair("username",
                        "saholic-snapdeal@saholic.com"));
                        //nameValuePairs.add(new BasicNameValuePair("password",
                        //"sonline"));
                        nameValuePairs.add(new BasicNameValuePair("password",
                        "snapsaholic"));
                        nameValuePairs.add(new BasicNameValuePair("_eventId","submit"));
                        nameValuePairs.add(new BasicNameValuePair("execution",ex));
                        nameValuePairs.add(new BasicNameValuePair("lt",lt));
                        nameValuePairs.add(new BasicNameValuePair("submit","LOGIN"));
                        post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));
                        //response = null;
                        try {
                                response = client.execute(post);
                        } catch (Exception e) {
                                logger.error("Unable to get Http Response for snapdeal seller portal login", e);
                        }
                        try {
                                rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                        } catch (Exception e1) {
                                logger.error("Unable to read Http Response for snapdeal seller portal login", e1);
                                throw new Exception("Unable to read Http Response for snapdeal seller portal login");
                        } 

                        //Striline = "";
                        try {
                                while ((line = rd.readLine()) != null) {
                                        System.out.println(line);
                                }
                        } catch (Exception e) {
                                logger.error("Unable to extract Http Response for snapdeal seller portal login", e);
                                throw new Exception("Unable to extract Http Response for snapdeal seller portal login");
                        }
                        
                        get = new HttpGet("http://shipping.snapdeal.com/vendor/ONESHIP/product-shipment/pendingOrders/40?fulfillmentModelCode=ONESHIP");
                        try {
                                response = client.execute(get);
                        } catch (ClientProtocolException e) {
                                e.printStackTrace();
                        } catch (IOException e) {
                                e.printStackTrace();
                        }

                        rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                        
                        while((line=rd.readLine())!=null){
                        }
                        
                        

                        JSONArray jsonDataObj = null;
                        JSONArray jsonDataShip = null;
                        String line1 = "";

                        for(long start = start_date.getTime(); start < end_date.getTime();){
                                long end = start + 604800000l;
                                if(end > end_date.getTime()){
                                        end = end_date.getTime();
                                }
                                startDate = snapdealDateFormat.format(new Date(start));
                                endDate = snapdealDateFormat.format(new Date(end));

                                logger.info("==== Start Date.."+startDate+"\n");
                                logger.info("==== End Date.."+endDate+"\n");


                                /*logger.info("Getting Delivery Information for DropShip Snapdeal Orders");
                                //http://shipping.snapdeal.com/vendor/ONESHIP/product-shipment/shippedData/fetch?statusCode=COURIER_DELIVERED&dispatchCategoryId=0&startDate=2014%2F04%2F01&endDate=2014%2F04%2F07&statusColumn=deliveredOn
                                String dropshipUrl = "http://shipping.snapdeal.com/vendor/DROPSHIP/product-shipment/shippedData/fetch/?startDate="+startDate+"&endDate="+endDate+"&statusCode=COURIER_DELIVERED&statusColumn=deliveredOn&dispatchCategoryId=0";
                                logger.info("Drop Ship Url "+dropshipUrl);

                                get = new HttpGet(dropshipUrl);

                                try {
                                        response = client.execute(get);
                                } catch (Exception e) {
                                        logger.error("Unable to get Http Response for snapdeal dropship delivered orders", e);
                                } 

                                try {
                                        rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                                } catch (Exception e) {
                                        logger.error("Unable to read Http Response for snapdeal dropship delivered orders", e);
                                } 


                                try {

                                        String resP = rd.readLine();
                                        jsonDataObj = new JSONArray("["+resP+"]");
                                        JSONObject j1 = (JSONObject)jsonDataObj.get(0);
                                        jsonDataShip = new JSONArray(j1.get("jsonDataString").toString());
                                } catch (Exception e) {
                                        logger.error("Unable to extract Http Response for snapdeal dropship delivered orders", e);
                                } 


                                if(jsonDataShip!=null && jsonDataShip.length()>0){
                                        for(i=0; i< jsonDataShip.length(); i++){
                                                JSONObject jsonObj = null;
                                                try {
                                                        jsonObj = jsonDataShip.getJSONObject(i);

                                                        if(jsonObj!=null){
                                                                String subOrderCode =(String) jsonObj.get("suborderCode");
                                                                String referenceNumber =(String) jsonObj.get("referenceCode");
                                                                String deliveryDate =(String) jsonObj.get("deliveredOn");
                                                                logger.info("Snapdeal Dropship Order Details...suborderCode... "+subOrderCode+" ...referenceNumber... "+ referenceNumber+ " ...deliveryDate... "+ deliveryDate);
                                                                deliveryDate = ourDBDateFormat.format(gotSnapdealDateFormat.parse(deliveryDate).getTime());
                                                                List<String> deliveredOrdelList = new ArrayList<String>();
                                                                deliveredOrdelList.add(referenceNumber);
                                                                deliveredOrdelList.add(subOrderCode);
                                                                deliveredOrdelList.add(deliveryDate);
                                                                deliveredOrderDataList.add(deliveredOrdelList);
                                                        }
                                                } catch (Exception e) {
                                                        logger.error("Unable to add delivered order details for updation regarding snapdeal dropship delivered orders", e);
                                                }
                                        }
                                }*/

                                logger.info("Getting Delivery Information for OneShip Snapdeal Orders");
                                //statusCode=CLD&dispatchCategoryId=0&startDate=2013%2F11%2F01&endDate=2013%2F11%2F07&statusColumn=cancelledOn
                                String oneShipUrl = "http://shipping.snapdeal.com/vendor/ONESHIP/product-shipment/shippedData/fetch/?startDate="+startDate+"&endDate="+endDate+"&statusCode=COURIER_DELIVERED&statusColumn=deliveredOn&dispatchCategoryId=0";
                                logger.info("One Ship Url "+oneShipUrl);
                                
                                post = new HttpPost("http://shipping.snapdeal.com/vendor/ONESHIP/product-shipment/shippedData/fetch");
                                nameValuePairs = new ArrayList<NameValuePair>();
                                nameValuePairs.add(new BasicNameValuePair("startDate",startDate));
                                nameValuePairs.add(new BasicNameValuePair("endDate",endDate));
                                nameValuePairs.add(new BasicNameValuePair("statusColumn","deliveredOn"));
                                nameValuePairs.add(new BasicNameValuePair("queryType","CREATED"));
                                nameValuePairs.add(new BasicNameValuePair("statusCode","COURIER_DELIVERED"));
                                post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));
                                

                                try {
                                        response = client.execute(post);
                                } catch (Exception e) {
                                        logger.error("Unable to get Http Response for snapdeal oneship delivered orders", e);
                                        throw new Exception("Unable to get Http Response for snapdeal oneship delivered orders");
                                } 

                                try {
                                        rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                                } catch (Exception e) {
                                        logger.error("Unable to read Http Response for snapdeal oneship delivered orders", e);
                                        throw new Exception("Unable to read Http Response for snapdeal oneship delivered orders");
                                }

                                try {
                                        String resP;
                                        while((resP=rd.readLine())!=null){
                                                if(resP!=null && !resP.isEmpty()){
                                                        System.out.println("Response... "+resP);
                                                        jsonDataObj = new JSONArray("["+resP+"]");
                                                        JSONObject j1 = (JSONObject)jsonDataObj.get(0);
                                                        jsonDataShip = new JSONArray(j1.get("shippedDataDTOs").toString());
                                                }
                                        }
                                } catch (Exception e) {
                                        logger.error("Unable to extract Http Response for snapdeal oneship delivered orders", e);
                                        throw new Exception("Unable to extract Http Response for snapdeal oneship delivered orders");
                                }

                                if(jsonDataShip!=null && jsonDataShip.length()>0){
                                        for(i=0; i< jsonDataShip.length(); i++){
                                                JSONObject jsonObj = null;
                                                try {
                                                        jsonObj = jsonDataShip.getJSONObject(i);

                                                        if(jsonObj!=null){
                                                                String subOrderCode =(String) jsonObj.get("suborderCode");
                                                                String referenceNumber =(String) jsonObj.get("referenceCode");
                                                                Long deliveryDate =(Long) jsonObj.get("deliveredOn");
                                                                logger.info("Snapdeal Oneship Order Details...suborderCode... "+subOrderCode+" ...referenceNumber... "+ referenceNumber+ " ...deliveryDate... "+ deliveryDate);
                                                                String deliveryDateStr = ourDBDateFormat.format(new Date(deliveryDate));
                                                                List<String> deliveredOrdelList = new ArrayList<String>();
                                                                deliveredOrdelList.add(referenceNumber);
                                                                deliveredOrdelList.add(subOrderCode);
                                                                deliveredOrdelList.add(deliveryDateStr);

                                                                deliveredOrderDataList.add(deliveredOrdelList);
                                                        }
                                                } catch (Exception e) {
                                                        logger.error("Unable to add delivered order details for updation regarding snapdeal oneship delivered orders", e);
                                                        throw new Exception("Unable to add delivered order details for updation regarding snapdeal oneship delivered orders");
                                                }
                                        }
                                }


                                /*logger.info("Getting Information for Cancelled DropShip Snapdeal Orders");
                                String dropshipCancelUrl = "http://shipping.snapdeal.com/vendor/DROPSHIP/product-shipment/shippedData/fetch/?statusCode=CLD&dispatchCategoryId=0&startDate="+startDate+"&endDate="+endDate+"&statusColumn=cancelledOn";
                                logger.info("Drop Ship Cancel Url "+dropshipCancelUrl);

                                get = new HttpGet(dropshipCancelUrl);

                                try {
                                        response = client.execute(get);
                                } catch (Exception e) {
                                        logger.error("Unable to get Http Response for snapdeal dropship cancelled orders", e);
                                } 

                                try {
                                        rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                                } catch (Exception e) {
                                        logger.error("Unable to read Http Response for snapdeal dropship cancelled orders", e);
                                }

                                try {
                                        String resP = rd.readLine();
                                        jsonDataObj = new JSONArray("["+resP+"]");
                                        JSONObject j1 = (JSONObject)jsonDataObj.get(0);
                                        jsonDataShip = new JSONArray(j1.get("jsonDataString").toString());
                                } catch (Exception e) {
                                        logger.error("Unable to extract Http Response for snapdeal dropship cancelled orders", e);
                                } 

                                if(jsonDataShip!=null && jsonDataShip.length()>0){
                                        for(i=0; i< jsonDataShip.length(); i++){
                                                JSONObject jsonObj = null;
                                                try {
                                                        jsonObj = jsonDataShip.getJSONObject(i);

                                                        if(jsonObj!=null){
                                                                String subOrderCode =(String) jsonObj.get("suborderCode");
                                                                String referenceNumber =(String) jsonObj.get("referenceCode");
                                                                logger.info("Snapdeal Dropship Order Details...suborderCode... "+subOrderCode+" ...referenceNumber... "+ referenceNumber);
                                                                List<String> cancelledOrdelList = new ArrayList<String>();
                                                                cancelledOrdelList.add(referenceNumber);
                                                                cancelledOrdelList.add(subOrderCode);
                                                                cancelledOrderDataList.add(cancelledOrdelList);
                                                        }
                                                } catch (Exception e) {
                                                        logger.error("Unable to add cancelled order details for updation regarding snapdeal dropship orders", e);
                                                }
                                        }
                                }*/

                                logger.info("Getting Information for OneShip Snapdeal Cancelled Orders");
                                String oneShipCancelUrl = "http://shipping.snapdeal.com/vendor/ONESHIP/product-shipment/shippedData/fetch/?statusCode=CLD&dispatchCategoryId=0&startDate="+startDate+"&endDate="+endDate+"&statusColumn=cancelledOn";
                                logger.info("One Ship Cancel Url "+oneShipCancelUrl);

                                post = new HttpPost("http://shipping.snapdeal.com/vendor/ONESHIP/product-shipment/shippedData/fetch");
                                nameValuePairs = new ArrayList<NameValuePair>();
                                nameValuePairs.add(new BasicNameValuePair("startDate",startDate));
                                nameValuePairs.add(new BasicNameValuePair("endDate",endDate));
                                nameValuePairs.add(new BasicNameValuePair("statusColumn","cancelledOn"));
                                nameValuePairs.add(new BasicNameValuePair("queryType","CREATED"));
                                nameValuePairs.add(new BasicNameValuePair("statusCode","CLD"));
                                post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));

                                try {
                                        response = client.execute(post);
                                } catch (Exception e) {
                                        logger.error("Unable to get Http Response for snapdeal oneship cancelled orders", e);
                                        throw new Exception("Unable to get Http Response for snapdeal oneship cancelled orders");
                                } 

                                try {
                                        rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                                } catch (Exception e) {
                                        logger.error("Unable to read Http Response for snapdeal oneship cancelled orders", e);
                                        throw new Exception("Unable to read Http Response for snapdeal oneship cancelled orders");
                                }

                                try {
                                        String resP;
                                        while((resP=rd.readLine())!=null){
                                                if(resP!=null && !resP.isEmpty()){
                                                        jsonDataObj = new JSONArray("["+resP+"]");
                                                        JSONObject j1 = (JSONObject)jsonDataObj.get(0);
                                                        jsonDataShip = new JSONArray(j1.get("shippedDataDTOs").toString());
                                                }
                                        }
                                } catch (Exception e) {
                                        logger.error("Unable to extract Http Response for snapdeal oneship cancelled orders", e);
                                        throw new Exception("Unable to extract Http Response for snapdeal oneship cancelled orders");
                                } 

                                if(jsonDataShip!=null && jsonDataShip.length()>0){
                                        for(i=0; i< jsonDataShip.length(); i++){
                                                JSONObject jsonObj = null;
                                                try {
                                                        jsonObj = jsonDataShip.getJSONObject(i);

                                                        if(jsonObj!=null){
                                                                String subOrderCode =(String) jsonObj.get("suborderCode");
                                                                String referenceNumber =(String) jsonObj.get("referenceCode");
                                                                logger.info("Snapdeal OneShip Order Details...suborderCode... "+subOrderCode+" ...referenceNumber... "+ referenceNumber);
                                                                List<String> cancelledOrdelList = new ArrayList<String>();
                                                                cancelledOrdelList.add(referenceNumber);
                                                                cancelledOrdelList.add(subOrderCode);
                                                                cancelledOrderDataList.add(cancelledOrdelList);
                                                        }
                                                } catch (Exception e) {
                                                        logger.error("Unable to add cancelled order details for updation regarding snapdeal oneship orders", e);
                                                        throw new Exception("Unable to add cancelled order details for updation regarding snapdeal oneship orders");
                                                }
                                        }
                                }


                                start = end + 86400000l;
                        }

                        if(deliveredOrderDataList!=null && deliveredOrderDataList.size()>0){
                                logger.info("Delivered Orders Size .. "+deliveredOrderDataList.size());
                                orderDataMap.put("Delivered", deliveredOrderDataList);
                        }

                        if(cancelledOrderDataList!=null && cancelledOrderDataList.size()>0){
                                logger.info("Cancelled Orders Size .. "+cancelledOrderDataList.size());
                                orderDataMap.put("Cancelled", cancelledOrderDataList);
                        }

                        if(orderDataMap!=null && orderDataMap.size()>0){
                                try{
                                        new TransactionClient().getClient().updateSnapdealOrdersStatus(orderDataMap);
                                } catch(Exception e){
                                        logger.error("Unable to update delivery information for snapdeal orders", e);
                                        throw new Exception("Unable to update delivery information for snapdeal orders");
                                }
                        }

                }
                catch(Exception e){
                        e.printStackTrace();
                        mailer.sendSSLMessage(sendTo, "Error in Snapdeal Order Status Recon", emailFromAddress, password, "<html><body><p>Please check log</p></body></html>");
                }
        }
}